mustang 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (560) hide show
  1. data/.rspec +1 -0
  2. data/Isolate +9 -0
  3. data/README.md +6 -12
  4. data/Rakefile +30 -4
  5. data/TODO.md +9 -0
  6. data/ext/v8/extconf.rb +56 -0
  7. data/ext/v8/v8.cpp +37 -0
  8. data/ext/v8/v8_array.cpp +161 -0
  9. data/ext/v8/v8_array.h +17 -0
  10. data/ext/v8/v8_base.cpp +147 -0
  11. data/ext/v8/v8_base.h +23 -0
  12. data/ext/v8/v8_cast.cpp +151 -0
  13. data/ext/v8/v8_cast.h +64 -0
  14. data/ext/v8/v8_context.cpp +174 -0
  15. data/ext/v8/v8_context.h +12 -0
  16. data/ext/v8/v8_date.cpp +61 -0
  17. data/ext/v8/v8_date.h +16 -0
  18. data/ext/v8/v8_errors.cpp +147 -0
  19. data/ext/v8/v8_errors.h +19 -0
  20. data/ext/v8/v8_external.cpp +66 -0
  21. data/ext/v8/v8_external.h +16 -0
  22. data/ext/v8/v8_function.cpp +182 -0
  23. data/ext/v8/v8_function.h +14 -0
  24. data/ext/v8/v8_integer.cpp +70 -0
  25. data/ext/v8/v8_integer.h +16 -0
  26. data/ext/v8/v8_macros.h +30 -0
  27. data/ext/v8/v8_main.cpp +53 -0
  28. data/ext/v8/v8_main.h +13 -0
  29. data/ext/v8/v8_number.cpp +62 -0
  30. data/ext/v8/v8_number.h +16 -0
  31. data/ext/v8/v8_object.cpp +172 -0
  32. data/ext/v8/v8_object.h +17 -0
  33. data/ext/v8/v8_ref.cpp +72 -0
  34. data/ext/v8/v8_ref.h +43 -0
  35. data/ext/v8/v8_regexp.cpp +148 -0
  36. data/ext/v8/v8_regexp.h +16 -0
  37. data/ext/v8/v8_string.cpp +78 -0
  38. data/ext/v8/v8_string.h +16 -0
  39. data/ext/v8/v8_value.cpp +370 -0
  40. data/ext/v8/v8_value.h +19 -0
  41. data/gemspec.yml +2 -1
  42. data/lib/core_ext/class.rb +14 -0
  43. data/lib/core_ext/object.rb +12 -0
  44. data/lib/core_ext/symbol.rb +23 -0
  45. data/lib/mustang.rb +44 -0
  46. data/lib/mustang/context.rb +69 -0
  47. data/lib/mustang/errors.rb +36 -0
  48. data/lib/support/delegated.rb +25 -0
  49. data/lib/v8/array.rb +21 -0
  50. data/lib/v8/context.rb +13 -0
  51. data/lib/v8/date.rb +20 -0
  52. data/lib/v8/error.rb +15 -0
  53. data/lib/v8/external.rb +16 -0
  54. data/lib/v8/function.rb +11 -0
  55. data/lib/v8/integer.rb +16 -0
  56. data/lib/v8/number.rb +16 -0
  57. data/lib/v8/object.rb +66 -0
  58. data/lib/v8/regexp.rb +23 -0
  59. data/lib/v8/string.rb +27 -0
  60. data/mustang.gemspec +3 -0
  61. data/spec/core_ext/class_spec.rb +19 -0
  62. data/spec/core_ext/object_spec.rb +19 -0
  63. data/spec/core_ext/symbol_spec.rb +27 -0
  64. data/spec/fixtures/test1.js +2 -0
  65. data/spec/fixtures/test2.js +2 -0
  66. data/spec/spec_helper.rb +20 -0
  67. data/spec/v8/array_spec.rb +88 -0
  68. data/spec/v8/cast_spec.rb +151 -0
  69. data/spec/v8/context_spec.rb +78 -0
  70. data/spec/v8/data_spec.rb +39 -0
  71. data/spec/v8/date_spec.rb +45 -0
  72. data/spec/v8/empty_spec.rb +27 -0
  73. data/spec/v8/errors_spec.rb +142 -0
  74. data/spec/v8/external_spec.rb +44 -0
  75. data/spec/v8/function_spec.rb +170 -0
  76. data/spec/v8/integer_spec.rb +41 -0
  77. data/spec/v8/main_spec.rb +18 -0
  78. data/spec/v8/null_spec.rb +27 -0
  79. data/spec/v8/number_spec.rb +40 -0
  80. data/spec/v8/object_spec.rb +79 -0
  81. data/spec/v8/primitive_spec.rb +9 -0
  82. data/spec/v8/regexp_spec.rb +65 -0
  83. data/spec/v8/string_spec.rb +48 -0
  84. data/spec/v8/undefined_spec.rb +27 -0
  85. data/spec/v8/value_spec.rb +215 -0
  86. data/vendor/v8/.gitignore +2 -0
  87. data/vendor/v8/AUTHORS +3 -1
  88. data/vendor/v8/ChangeLog +117 -0
  89. data/vendor/v8/SConstruct +334 -53
  90. data/vendor/v8/include/v8-debug.h +21 -11
  91. data/vendor/v8/include/v8-preparser.h +1 -1
  92. data/vendor/v8/include/v8-profiler.h +122 -43
  93. data/vendor/v8/include/v8-testing.h +5 -0
  94. data/vendor/v8/include/v8.h +171 -17
  95. data/vendor/v8/preparser/SConscript +38 -0
  96. data/vendor/v8/preparser/preparser-process.cc +77 -114
  97. data/vendor/v8/samples/shell.cc +232 -46
  98. data/vendor/v8/src/SConscript +29 -5
  99. data/vendor/v8/src/accessors.cc +70 -211
  100. data/vendor/v8/{test/cctest/test-mips.cc → src/allocation-inl.h} +15 -18
  101. data/vendor/v8/src/allocation.cc +0 -82
  102. data/vendor/v8/src/allocation.h +9 -42
  103. data/vendor/v8/src/api.cc +1645 -1156
  104. data/vendor/v8/src/api.h +76 -12
  105. data/vendor/v8/src/apiutils.h +0 -7
  106. data/vendor/v8/src/arguments.h +15 -4
  107. data/vendor/v8/src/arm/assembler-arm-inl.h +10 -9
  108. data/vendor/v8/src/arm/assembler-arm.cc +62 -23
  109. data/vendor/v8/src/arm/assembler-arm.h +76 -11
  110. data/vendor/v8/src/arm/builtins-arm.cc +39 -33
  111. data/vendor/v8/src/arm/code-stubs-arm.cc +1182 -402
  112. data/vendor/v8/src/arm/code-stubs-arm.h +20 -54
  113. data/vendor/v8/src/arm/codegen-arm.cc +159 -106
  114. data/vendor/v8/src/arm/codegen-arm.h +6 -6
  115. data/vendor/v8/src/arm/constants-arm.h +16 -1
  116. data/vendor/v8/src/arm/cpu-arm.cc +7 -5
  117. data/vendor/v8/src/arm/debug-arm.cc +6 -4
  118. data/vendor/v8/src/arm/deoptimizer-arm.cc +51 -14
  119. data/vendor/v8/src/arm/disasm-arm.cc +47 -15
  120. data/vendor/v8/src/arm/frames-arm.h +1 -1
  121. data/vendor/v8/src/arm/full-codegen-arm.cc +724 -408
  122. data/vendor/v8/src/arm/ic-arm.cc +90 -85
  123. data/vendor/v8/src/arm/lithium-arm.cc +140 -69
  124. data/vendor/v8/src/arm/lithium-arm.h +161 -46
  125. data/vendor/v8/src/arm/lithium-codegen-arm.cc +567 -297
  126. data/vendor/v8/src/arm/lithium-codegen-arm.h +21 -9
  127. data/vendor/v8/src/arm/lithium-gap-resolver-arm.cc +2 -0
  128. data/vendor/v8/src/arm/macro-assembler-arm.cc +457 -96
  129. data/vendor/v8/src/arm/macro-assembler-arm.h +115 -18
  130. data/vendor/v8/src/arm/regexp-macro-assembler-arm.cc +20 -13
  131. data/vendor/v8/src/arm/regexp-macro-assembler-arm.h +1 -0
  132. data/vendor/v8/src/arm/simulator-arm.cc +184 -101
  133. data/vendor/v8/src/arm/simulator-arm.h +26 -21
  134. data/vendor/v8/src/arm/stub-cache-arm.cc +450 -467
  135. data/vendor/v8/src/arm/virtual-frame-arm.cc +14 -12
  136. data/vendor/v8/src/arm/virtual-frame-arm.h +11 -8
  137. data/vendor/v8/src/array.js +35 -18
  138. data/vendor/v8/src/assembler.cc +186 -92
  139. data/vendor/v8/src/assembler.h +106 -69
  140. data/vendor/v8/src/ast-inl.h +5 -0
  141. data/vendor/v8/src/ast.cc +46 -35
  142. data/vendor/v8/src/ast.h +107 -50
  143. data/vendor/v8/src/atomicops.h +2 -0
  144. data/vendor/v8/src/atomicops_internals_mips_gcc.h +169 -0
  145. data/vendor/v8/src/bootstrapper.cc +649 -399
  146. data/vendor/v8/src/bootstrapper.h +94 -27
  147. data/vendor/v8/src/builtins.cc +359 -227
  148. data/vendor/v8/src/builtins.h +157 -123
  149. data/vendor/v8/src/checks.cc +2 -2
  150. data/vendor/v8/src/checks.h +4 -0
  151. data/vendor/v8/src/code-stubs.cc +27 -17
  152. data/vendor/v8/src/code-stubs.h +38 -17
  153. data/vendor/v8/src/codegen-inl.h +5 -1
  154. data/vendor/v8/src/codegen.cc +27 -17
  155. data/vendor/v8/src/codegen.h +9 -9
  156. data/vendor/v8/src/compilation-cache.cc +92 -206
  157. data/vendor/v8/src/compilation-cache.h +205 -30
  158. data/vendor/v8/src/compiler.cc +107 -120
  159. data/vendor/v8/src/compiler.h +17 -2
  160. data/vendor/v8/src/contexts.cc +22 -15
  161. data/vendor/v8/src/contexts.h +14 -8
  162. data/vendor/v8/src/conversions.cc +86 -30
  163. data/vendor/v8/src/counters.cc +19 -4
  164. data/vendor/v8/src/counters.h +28 -16
  165. data/vendor/v8/src/cpu-profiler-inl.h +4 -3
  166. data/vendor/v8/src/cpu-profiler.cc +123 -72
  167. data/vendor/v8/src/cpu-profiler.h +33 -19
  168. data/vendor/v8/src/cpu.h +2 -0
  169. data/vendor/v8/src/d8-debug.cc +3 -3
  170. data/vendor/v8/src/d8-debug.h +7 -6
  171. data/vendor/v8/src/d8-posix.cc +2 -0
  172. data/vendor/v8/src/d8.cc +22 -12
  173. data/vendor/v8/src/d8.gyp +3 -0
  174. data/vendor/v8/src/d8.js +618 -0
  175. data/vendor/v8/src/data-flow.h +3 -3
  176. data/vendor/v8/src/dateparser.h +4 -2
  177. data/vendor/v8/src/debug-agent.cc +10 -9
  178. data/vendor/v8/src/debug-agent.h +9 -11
  179. data/vendor/v8/src/debug-debugger.js +121 -0
  180. data/vendor/v8/src/debug.cc +331 -227
  181. data/vendor/v8/src/debug.h +248 -219
  182. data/vendor/v8/src/deoptimizer.cc +173 -62
  183. data/vendor/v8/src/deoptimizer.h +119 -19
  184. data/vendor/v8/src/disasm.h +3 -0
  185. data/vendor/v8/src/disassembler.cc +10 -9
  186. data/vendor/v8/src/execution.cc +185 -129
  187. data/vendor/v8/src/execution.h +47 -78
  188. data/vendor/v8/src/extensions/experimental/break-iterator.cc +250 -0
  189. data/vendor/v8/src/extensions/experimental/break-iterator.h +89 -0
  190. data/vendor/v8/src/extensions/experimental/experimental.gyp +2 -0
  191. data/vendor/v8/src/extensions/experimental/i18n-extension.cc +22 -2
  192. data/vendor/v8/src/extensions/externalize-string-extension.cc +2 -2
  193. data/vendor/v8/src/extensions/gc-extension.cc +1 -1
  194. data/vendor/v8/src/factory.cc +261 -154
  195. data/vendor/v8/src/factory.h +162 -158
  196. data/vendor/v8/src/flag-definitions.h +17 -11
  197. data/vendor/v8/src/frame-element.cc +0 -5
  198. data/vendor/v8/src/frame-element.h +9 -13
  199. data/vendor/v8/src/frames-inl.h +7 -0
  200. data/vendor/v8/src/frames.cc +56 -46
  201. data/vendor/v8/src/frames.h +36 -25
  202. data/vendor/v8/src/full-codegen.cc +15 -24
  203. data/vendor/v8/src/full-codegen.h +13 -41
  204. data/vendor/v8/src/func-name-inferrer.cc +7 -6
  205. data/vendor/v8/src/func-name-inferrer.h +1 -1
  206. data/vendor/v8/src/gdb-jit.cc +1 -0
  207. data/vendor/v8/src/global-handles.cc +118 -56
  208. data/vendor/v8/src/global-handles.h +98 -40
  209. data/vendor/v8/src/globals.h +2 -2
  210. data/vendor/v8/src/handles-inl.h +106 -9
  211. data/vendor/v8/src/handles.cc +220 -157
  212. data/vendor/v8/src/handles.h +38 -59
  213. data/vendor/v8/src/hashmap.h +3 -3
  214. data/vendor/v8/src/heap-inl.h +141 -25
  215. data/vendor/v8/src/heap-profiler.cc +117 -63
  216. data/vendor/v8/src/heap-profiler.h +38 -21
  217. data/vendor/v8/src/heap.cc +805 -564
  218. data/vendor/v8/src/heap.h +640 -594
  219. data/vendor/v8/src/hydrogen-instructions.cc +216 -73
  220. data/vendor/v8/src/hydrogen-instructions.h +259 -124
  221. data/vendor/v8/src/hydrogen.cc +996 -1171
  222. data/vendor/v8/src/hydrogen.h +163 -144
  223. data/vendor/v8/src/ia32/assembler-ia32-inl.h +12 -11
  224. data/vendor/v8/src/ia32/assembler-ia32.cc +85 -39
  225. data/vendor/v8/src/ia32/assembler-ia32.h +82 -16
  226. data/vendor/v8/src/ia32/builtins-ia32.cc +64 -58
  227. data/vendor/v8/src/ia32/code-stubs-ia32.cc +248 -324
  228. data/vendor/v8/src/ia32/code-stubs-ia32.h +3 -44
  229. data/vendor/v8/src/ia32/codegen-ia32.cc +217 -165
  230. data/vendor/v8/src/ia32/codegen-ia32.h +3 -0
  231. data/vendor/v8/src/ia32/cpu-ia32.cc +6 -5
  232. data/vendor/v8/src/ia32/debug-ia32.cc +8 -5
  233. data/vendor/v8/src/ia32/deoptimizer-ia32.cc +124 -14
  234. data/vendor/v8/src/ia32/disasm-ia32.cc +85 -62
  235. data/vendor/v8/src/ia32/frames-ia32.h +1 -1
  236. data/vendor/v8/src/ia32/full-codegen-ia32.cc +348 -435
  237. data/vendor/v8/src/ia32/ic-ia32.cc +91 -91
  238. data/vendor/v8/src/ia32/lithium-codegen-ia32.cc +500 -255
  239. data/vendor/v8/src/ia32/lithium-codegen-ia32.h +13 -4
  240. data/vendor/v8/src/ia32/lithium-gap-resolver-ia32.cc +6 -0
  241. data/vendor/v8/src/ia32/lithium-ia32.cc +122 -45
  242. data/vendor/v8/src/ia32/lithium-ia32.h +128 -41
  243. data/vendor/v8/src/ia32/macro-assembler-ia32.cc +109 -84
  244. data/vendor/v8/src/ia32/macro-assembler-ia32.h +18 -9
  245. data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.cc +26 -15
  246. data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.h +1 -0
  247. data/vendor/v8/src/ia32/register-allocator-ia32.cc +30 -30
  248. data/vendor/v8/src/ia32/simulator-ia32.h +4 -4
  249. data/vendor/v8/src/ia32/stub-cache-ia32.cc +383 -400
  250. data/vendor/v8/src/ia32/virtual-frame-ia32.cc +36 -13
  251. data/vendor/v8/src/ia32/virtual-frame-ia32.h +11 -5
  252. data/vendor/v8/src/ic-inl.h +12 -2
  253. data/vendor/v8/src/ic.cc +304 -221
  254. data/vendor/v8/src/ic.h +115 -58
  255. data/vendor/v8/src/interpreter-irregexp.cc +25 -21
  256. data/vendor/v8/src/interpreter-irregexp.h +2 -1
  257. data/vendor/v8/src/isolate.cc +883 -0
  258. data/vendor/v8/src/isolate.h +1304 -0
  259. data/vendor/v8/src/json.js +10 -10
  260. data/vendor/v8/src/jsregexp.cc +111 -80
  261. data/vendor/v8/src/jsregexp.h +6 -7
  262. data/vendor/v8/src/jump-target-heavy.cc +5 -8
  263. data/vendor/v8/src/jump-target-heavy.h +0 -6
  264. data/vendor/v8/src/jump-target-inl.h +1 -1
  265. data/vendor/v8/src/jump-target-light.cc +3 -3
  266. data/vendor/v8/src/lithium-allocator-inl.h +2 -0
  267. data/vendor/v8/src/lithium-allocator.cc +42 -30
  268. data/vendor/v8/src/lithium-allocator.h +8 -22
  269. data/vendor/v8/src/lithium.cc +1 -0
  270. data/vendor/v8/src/liveedit.cc +141 -99
  271. data/vendor/v8/src/liveedit.h +7 -2
  272. data/vendor/v8/src/liveobjectlist-inl.h +90 -0
  273. data/vendor/v8/src/liveobjectlist.cc +2537 -1
  274. data/vendor/v8/src/liveobjectlist.h +245 -35
  275. data/vendor/v8/src/log-utils.cc +122 -35
  276. data/vendor/v8/src/log-utils.h +33 -36
  277. data/vendor/v8/src/log.cc +299 -241
  278. data/vendor/v8/src/log.h +177 -110
  279. data/vendor/v8/src/mark-compact.cc +612 -470
  280. data/vendor/v8/src/mark-compact.h +153 -80
  281. data/vendor/v8/src/messages.cc +16 -14
  282. data/vendor/v8/src/messages.js +30 -7
  283. data/vendor/v8/src/mips/assembler-mips-inl.h +155 -35
  284. data/vendor/v8/src/mips/assembler-mips.cc +1093 -219
  285. data/vendor/v8/src/mips/assembler-mips.h +552 -153
  286. data/vendor/v8/src/mips/builtins-mips.cc +43 -100
  287. data/vendor/v8/src/mips/code-stubs-mips.cc +752 -0
  288. data/vendor/v8/src/mips/code-stubs-mips.h +511 -0
  289. data/vendor/v8/src/mips/codegen-mips-inl.h +8 -14
  290. data/vendor/v8/src/mips/codegen-mips.cc +672 -896
  291. data/vendor/v8/src/mips/codegen-mips.h +271 -69
  292. data/vendor/v8/src/mips/constants-mips.cc +44 -20
  293. data/vendor/v8/src/mips/constants-mips.h +238 -40
  294. data/vendor/v8/src/mips/cpu-mips.cc +20 -3
  295. data/vendor/v8/src/mips/debug-mips.cc +35 -7
  296. data/vendor/v8/src/mips/deoptimizer-mips.cc +91 -0
  297. data/vendor/v8/src/mips/disasm-mips.cc +329 -93
  298. data/vendor/v8/src/mips/frames-mips.cc +2 -50
  299. data/vendor/v8/src/mips/frames-mips.h +24 -9
  300. data/vendor/v8/src/mips/full-codegen-mips.cc +473 -23
  301. data/vendor/v8/src/mips/ic-mips.cc +81 -45
  302. data/vendor/v8/src/mips/jump-target-mips.cc +11 -106
  303. data/vendor/v8/src/mips/lithium-codegen-mips.h +65 -0
  304. data/vendor/v8/src/mips/lithium-mips.h +304 -0
  305. data/vendor/v8/src/mips/macro-assembler-mips.cc +2391 -390
  306. data/vendor/v8/src/mips/macro-assembler-mips.h +718 -121
  307. data/vendor/v8/src/mips/regexp-macro-assembler-mips.cc +478 -0
  308. data/vendor/v8/src/mips/regexp-macro-assembler-mips.h +250 -0
  309. data/vendor/v8/src/mips/register-allocator-mips-inl.h +0 -3
  310. data/vendor/v8/src/mips/register-allocator-mips.h +3 -2
  311. data/vendor/v8/src/mips/simulator-mips.cc +1009 -221
  312. data/vendor/v8/src/mips/simulator-mips.h +119 -36
  313. data/vendor/v8/src/mips/stub-cache-mips.cc +331 -148
  314. data/vendor/v8/src/mips/{fast-codegen-mips.cc → virtual-frame-mips-inl.h} +11 -30
  315. data/vendor/v8/src/mips/virtual-frame-mips.cc +137 -149
  316. data/vendor/v8/src/mips/virtual-frame-mips.h +294 -312
  317. data/vendor/v8/src/mirror-debugger.js +9 -8
  318. data/vendor/v8/src/mksnapshot.cc +2 -2
  319. data/vendor/v8/src/objects-debug.cc +16 -16
  320. data/vendor/v8/src/objects-inl.h +421 -195
  321. data/vendor/v8/src/objects-printer.cc +7 -7
  322. data/vendor/v8/src/objects-visiting.cc +1 -1
  323. data/vendor/v8/src/objects-visiting.h +33 -12
  324. data/vendor/v8/src/objects.cc +935 -658
  325. data/vendor/v8/src/objects.h +234 -139
  326. data/vendor/v8/src/parser.cc +484 -439
  327. data/vendor/v8/src/parser.h +35 -14
  328. data/vendor/v8/src/platform-cygwin.cc +173 -107
  329. data/vendor/v8/src/platform-freebsd.cc +224 -72
  330. data/vendor/v8/src/platform-linux.cc +234 -95
  331. data/vendor/v8/src/platform-macos.cc +215 -82
  332. data/vendor/v8/src/platform-nullos.cc +9 -3
  333. data/vendor/v8/src/platform-openbsd.cc +22 -7
  334. data/vendor/v8/src/platform-posix.cc +30 -5
  335. data/vendor/v8/src/platform-solaris.cc +120 -38
  336. data/vendor/v8/src/platform-tls-mac.h +62 -0
  337. data/vendor/v8/src/platform-tls-win32.h +62 -0
  338. data/vendor/v8/src/platform-tls.h +50 -0
  339. data/vendor/v8/src/platform-win32.cc +195 -97
  340. data/vendor/v8/src/platform.h +72 -15
  341. data/vendor/v8/src/preparse-data.cc +2 -0
  342. data/vendor/v8/src/preparser-api.cc +8 -2
  343. data/vendor/v8/src/preparser.cc +1 -1
  344. data/vendor/v8/src/prettyprinter.cc +43 -52
  345. data/vendor/v8/src/prettyprinter.h +1 -1
  346. data/vendor/v8/src/profile-generator-inl.h +0 -28
  347. data/vendor/v8/src/profile-generator.cc +942 -685
  348. data/vendor/v8/src/profile-generator.h +210 -176
  349. data/vendor/v8/src/property.cc +6 -0
  350. data/vendor/v8/src/property.h +14 -3
  351. data/vendor/v8/src/regexp-macro-assembler-irregexp.cc +1 -1
  352. data/vendor/v8/src/regexp-macro-assembler.cc +28 -19
  353. data/vendor/v8/src/regexp-macro-assembler.h +11 -6
  354. data/vendor/v8/src/regexp-stack.cc +18 -10
  355. data/vendor/v8/src/regexp-stack.h +45 -21
  356. data/vendor/v8/src/regexp.js +3 -3
  357. data/vendor/v8/src/register-allocator-inl.h +3 -3
  358. data/vendor/v8/src/register-allocator.cc +1 -7
  359. data/vendor/v8/src/register-allocator.h +5 -15
  360. data/vendor/v8/src/rewriter.cc +2 -1
  361. data/vendor/v8/src/runtime-profiler.cc +158 -128
  362. data/vendor/v8/src/runtime-profiler.h +131 -15
  363. data/vendor/v8/src/runtime.cc +2409 -1692
  364. data/vendor/v8/src/runtime.h +93 -17
  365. data/vendor/v8/src/safepoint-table.cc +3 -0
  366. data/vendor/v8/src/safepoint-table.h +9 -3
  367. data/vendor/v8/src/scanner-base.cc +21 -28
  368. data/vendor/v8/src/scanner-base.h +22 -11
  369. data/vendor/v8/src/scanner.cc +3 -5
  370. data/vendor/v8/src/scanner.h +4 -2
  371. data/vendor/v8/src/scopeinfo.cc +11 -16
  372. data/vendor/v8/src/scopeinfo.h +26 -15
  373. data/vendor/v8/src/scopes.cc +67 -37
  374. data/vendor/v8/src/scopes.h +26 -12
  375. data/vendor/v8/src/serialize.cc +193 -154
  376. data/vendor/v8/src/serialize.h +41 -36
  377. data/vendor/v8/src/small-pointer-list.h +163 -0
  378. data/vendor/v8/src/snapshot-common.cc +1 -1
  379. data/vendor/v8/src/snapshot.h +3 -1
  380. data/vendor/v8/src/spaces-inl.h +30 -25
  381. data/vendor/v8/src/spaces.cc +263 -370
  382. data/vendor/v8/src/spaces.h +178 -166
  383. data/vendor/v8/src/string-search.cc +4 -3
  384. data/vendor/v8/src/string-search.h +21 -20
  385. data/vendor/v8/src/string-stream.cc +32 -24
  386. data/vendor/v8/src/string.js +7 -7
  387. data/vendor/v8/src/stub-cache.cc +324 -248
  388. data/vendor/v8/src/stub-cache.h +181 -155
  389. data/vendor/v8/src/token.cc +3 -3
  390. data/vendor/v8/src/token.h +3 -3
  391. data/vendor/v8/src/top.cc +218 -390
  392. data/vendor/v8/src/type-info.cc +98 -32
  393. data/vendor/v8/src/type-info.h +10 -3
  394. data/vendor/v8/src/unicode.cc +1 -1
  395. data/vendor/v8/src/unicode.h +1 -1
  396. data/vendor/v8/src/utils.h +3 -0
  397. data/vendor/v8/src/v8-counters.cc +18 -11
  398. data/vendor/v8/src/v8-counters.h +34 -13
  399. data/vendor/v8/src/v8.cc +66 -121
  400. data/vendor/v8/src/v8.h +7 -4
  401. data/vendor/v8/src/v8globals.h +18 -12
  402. data/vendor/v8/src/{memory.h → v8memory.h} +0 -0
  403. data/vendor/v8/src/v8natives.js +59 -18
  404. data/vendor/v8/src/v8threads.cc +127 -114
  405. data/vendor/v8/src/v8threads.h +42 -35
  406. data/vendor/v8/src/v8utils.h +2 -39
  407. data/vendor/v8/src/variables.h +1 -1
  408. data/vendor/v8/src/version.cc +26 -5
  409. data/vendor/v8/src/version.h +4 -0
  410. data/vendor/v8/src/virtual-frame-heavy-inl.h +2 -4
  411. data/vendor/v8/src/virtual-frame-light-inl.h +5 -4
  412. data/vendor/v8/src/vm-state-inl.h +21 -17
  413. data/vendor/v8/src/vm-state.h +7 -5
  414. data/vendor/v8/src/win32-headers.h +1 -0
  415. data/vendor/v8/src/x64/assembler-x64-inl.h +12 -11
  416. data/vendor/v8/src/x64/assembler-x64.cc +80 -40
  417. data/vendor/v8/src/x64/assembler-x64.h +67 -17
  418. data/vendor/v8/src/x64/builtins-x64.cc +34 -33
  419. data/vendor/v8/src/x64/code-stubs-x64.cc +636 -377
  420. data/vendor/v8/src/x64/code-stubs-x64.h +14 -48
  421. data/vendor/v8/src/x64/codegen-x64-inl.h +1 -1
  422. data/vendor/v8/src/x64/codegen-x64.cc +158 -136
  423. data/vendor/v8/src/x64/codegen-x64.h +4 -1
  424. data/vendor/v8/src/x64/cpu-x64.cc +7 -5
  425. data/vendor/v8/src/x64/debug-x64.cc +8 -6
  426. data/vendor/v8/src/x64/deoptimizer-x64.cc +195 -20
  427. data/vendor/v8/src/x64/disasm-x64.cc +42 -23
  428. data/vendor/v8/src/x64/frames-x64.cc +1 -1
  429. data/vendor/v8/src/x64/frames-x64.h +2 -2
  430. data/vendor/v8/src/x64/full-codegen-x64.cc +780 -218
  431. data/vendor/v8/src/x64/ic-x64.cc +77 -79
  432. data/vendor/v8/src/x64/jump-target-x64.cc +1 -1
  433. data/vendor/v8/src/x64/lithium-codegen-x64.cc +698 -181
  434. data/vendor/v8/src/x64/lithium-codegen-x64.h +31 -6
  435. data/vendor/v8/src/x64/lithium-x64.cc +136 -54
  436. data/vendor/v8/src/x64/lithium-x64.h +142 -51
  437. data/vendor/v8/src/x64/macro-assembler-x64.cc +456 -187
  438. data/vendor/v8/src/x64/macro-assembler-x64.h +166 -34
  439. data/vendor/v8/src/x64/regexp-macro-assembler-x64.cc +44 -28
  440. data/vendor/v8/src/x64/regexp-macro-assembler-x64.h +8 -4
  441. data/vendor/v8/src/x64/register-allocator-x64-inl.h +3 -3
  442. data/vendor/v8/src/x64/register-allocator-x64.cc +12 -8
  443. data/vendor/v8/src/x64/simulator-x64.h +5 -5
  444. data/vendor/v8/src/x64/stub-cache-x64.cc +299 -344
  445. data/vendor/v8/src/x64/virtual-frame-x64.cc +37 -13
  446. data/vendor/v8/src/x64/virtual-frame-x64.h +13 -7
  447. data/vendor/v8/src/zone-inl.h +49 -3
  448. data/vendor/v8/src/zone.cc +42 -41
  449. data/vendor/v8/src/zone.h +37 -34
  450. data/vendor/v8/test/benchmarks/testcfg.py +100 -0
  451. data/vendor/v8/test/cctest/SConscript +5 -4
  452. data/vendor/v8/test/cctest/cctest.h +3 -2
  453. data/vendor/v8/test/cctest/cctest.status +6 -11
  454. data/vendor/v8/test/cctest/test-accessors.cc +3 -3
  455. data/vendor/v8/test/cctest/test-alloc.cc +39 -33
  456. data/vendor/v8/test/cctest/test-api.cc +1092 -205
  457. data/vendor/v8/test/cctest/test-assembler-arm.cc +39 -25
  458. data/vendor/v8/test/cctest/test-assembler-ia32.cc +36 -37
  459. data/vendor/v8/test/cctest/test-assembler-mips.cc +1098 -40
  460. data/vendor/v8/test/cctest/test-assembler-x64.cc +32 -25
  461. data/vendor/v8/test/cctest/test-ast.cc +1 -0
  462. data/vendor/v8/test/cctest/test-circular-queue.cc +8 -5
  463. data/vendor/v8/test/cctest/test-compiler.cc +24 -24
  464. data/vendor/v8/test/cctest/test-cpu-profiler.cc +140 -5
  465. data/vendor/v8/test/cctest/test-dataflow.cc +1 -0
  466. data/vendor/v8/test/cctest/test-debug.cc +136 -77
  467. data/vendor/v8/test/cctest/test-decls.cc +1 -1
  468. data/vendor/v8/test/cctest/test-deoptimization.cc +25 -24
  469. data/vendor/v8/test/cctest/test-disasm-arm.cc +9 -4
  470. data/vendor/v8/test/cctest/test-disasm-ia32.cc +10 -8
  471. data/vendor/v8/test/cctest/test-func-name-inference.cc +10 -4
  472. data/vendor/v8/test/cctest/test-heap-profiler.cc +226 -164
  473. data/vendor/v8/test/cctest/test-heap.cc +240 -217
  474. data/vendor/v8/test/cctest/test-liveedit.cc +1 -0
  475. data/vendor/v8/test/cctest/test-log-stack-tracer.cc +18 -20
  476. data/vendor/v8/test/cctest/test-log.cc +114 -108
  477. data/vendor/v8/test/cctest/test-macro-assembler-x64.cc +247 -177
  478. data/vendor/v8/test/cctest/test-mark-compact.cc +129 -90
  479. data/vendor/v8/test/cctest/test-parsing.cc +15 -14
  480. data/vendor/v8/test/cctest/test-platform-linux.cc +1 -0
  481. data/vendor/v8/test/cctest/test-platform-tls.cc +66 -0
  482. data/vendor/v8/test/cctest/test-platform-win32.cc +1 -0
  483. data/vendor/v8/test/cctest/test-profile-generator.cc +1 -1
  484. data/vendor/v8/test/cctest/test-regexp.cc +53 -41
  485. data/vendor/v8/test/cctest/test-reloc-info.cc +18 -11
  486. data/vendor/v8/test/cctest/test-serialize.cc +44 -43
  487. data/vendor/v8/test/cctest/test-sockets.cc +8 -3
  488. data/vendor/v8/test/cctest/test-spaces.cc +47 -29
  489. data/vendor/v8/test/cctest/test-strings.cc +20 -20
  490. data/vendor/v8/test/cctest/test-thread-termination.cc +8 -3
  491. data/vendor/v8/test/cctest/test-threads.cc +5 -3
  492. data/vendor/v8/test/cctest/test-utils.cc +5 -4
  493. data/vendor/v8/test/cctest/testcfg.py +7 -3
  494. data/vendor/v8/test/es5conform/es5conform.status +2 -77
  495. data/vendor/v8/test/es5conform/testcfg.py +1 -1
  496. data/vendor/v8/test/message/testcfg.py +1 -1
  497. data/vendor/v8/test/mjsunit/accessors-on-global-object.js +3 -3
  498. data/vendor/v8/test/mjsunit/array-concat.js +43 -1
  499. data/vendor/v8/test/mjsunit/array-join.js +25 -0
  500. data/vendor/v8/test/mjsunit/bitops-info.js +7 -1
  501. data/vendor/v8/test/mjsunit/compiler/array-length.js +2 -2
  502. data/vendor/v8/test/mjsunit/compiler/global-accessors.js +47 -0
  503. data/vendor/v8/test/mjsunit/compiler/pic.js +1 -1
  504. data/vendor/v8/test/mjsunit/compiler/regress-loadfield.js +65 -0
  505. data/vendor/v8/test/mjsunit/math-sqrt.js +5 -1
  506. data/vendor/v8/test/mjsunit/mjsunit.js +59 -8
  507. data/vendor/v8/test/mjsunit/mjsunit.status +0 -12
  508. data/vendor/v8/test/mjsunit/mul-exhaustive.js +129 -11
  509. data/vendor/v8/test/mjsunit/negate-zero.js +1 -1
  510. data/vendor/v8/test/mjsunit/object-freeze.js +5 -13
  511. data/vendor/v8/test/mjsunit/object-prevent-extensions.js +9 -50
  512. data/vendor/v8/test/mjsunit/object-seal.js +4 -13
  513. data/vendor/v8/test/mjsunit/override-eval-with-non-function.js +36 -0
  514. data/vendor/v8/test/mjsunit/regress/regress-1145.js +54 -0
  515. data/vendor/v8/test/mjsunit/regress/regress-1172-bis.js +37 -0
  516. data/vendor/v8/test/mjsunit/regress/regress-1181.js +54 -0
  517. data/vendor/v8/test/mjsunit/regress/regress-1207.js +35 -0
  518. data/vendor/v8/test/mjsunit/regress/regress-1209.js +34 -0
  519. data/vendor/v8/test/mjsunit/regress/regress-1210.js +48 -0
  520. data/vendor/v8/test/mjsunit/regress/regress-1213.js +43 -0
  521. data/vendor/v8/test/mjsunit/regress/regress-1218.js +29 -0
  522. data/vendor/v8/test/mjsunit/regress/regress-1229.js +79 -0
  523. data/vendor/v8/test/mjsunit/regress/regress-1233.js +47 -0
  524. data/vendor/v8/test/mjsunit/regress/regress-1236.js +34 -0
  525. data/vendor/v8/test/mjsunit/regress/regress-1237.js +36 -0
  526. data/vendor/v8/test/mjsunit/regress/regress-1240.js +39 -0
  527. data/vendor/v8/test/mjsunit/regress/regress-1257.js +58 -0
  528. data/vendor/v8/test/mjsunit/regress/regress-1278.js +69 -0
  529. data/vendor/v8/test/mjsunit/regress/regress-create-exception.js +1 -0
  530. data/vendor/v8/test/mjsunit/regress/regress-lazy-deopt-reloc.js +52 -0
  531. data/vendor/v8/test/mjsunit/sin-cos.js +15 -10
  532. data/vendor/v8/test/mjsunit/smi-negative-zero.js +2 -2
  533. data/vendor/v8/test/mjsunit/str-to-num.js +1 -1
  534. data/vendor/v8/test/mjsunit/strict-mode.js +435 -0
  535. data/vendor/v8/test/mjsunit/testcfg.py +23 -6
  536. data/vendor/v8/test/mozilla/mozilla.status +0 -2
  537. data/vendor/v8/test/mozilla/testcfg.py +1 -1
  538. data/vendor/v8/test/preparser/empty.js +28 -0
  539. data/vendor/v8/test/preparser/functions-only.js +38 -0
  540. data/vendor/v8/test/preparser/non-alphanum.js +34 -0
  541. data/vendor/v8/test/preparser/symbols-only.js +49 -0
  542. data/vendor/v8/test/preparser/testcfg.py +90 -0
  543. data/vendor/v8/test/sputnik/testcfg.py +1 -1
  544. data/vendor/v8/test/test262/README +16 -0
  545. data/vendor/v8/test/test262/harness-adapt.js +80 -0
  546. data/vendor/v8/test/test262/test262.status +1506 -0
  547. data/vendor/v8/test/test262/testcfg.py +123 -0
  548. data/vendor/v8/tools/freebsd-tick-processor +10 -0
  549. data/vendor/v8/tools/gyp/v8.gyp +8 -33
  550. data/vendor/v8/tools/linux-tick-processor +5 -3
  551. data/vendor/v8/tools/test.py +37 -14
  552. data/vendor/v8/tools/tickprocessor.js +22 -8
  553. data/vendor/v8/tools/visual_studio/v8_base.vcproj +13 -1
  554. data/vendor/v8/tools/visual_studio/v8_base_arm.vcproj +5 -1
  555. data/vendor/v8/tools/visual_studio/v8_base_x64.vcproj +5 -1
  556. data/vendor/v8/tools/visual_studio/x64.vsprops +1 -0
  557. metadata +1495 -1341
  558. data/ext/extconf.rb +0 -22
  559. data/ext/mustang.cpp +0 -58
  560. data/vendor/v8/src/top.h +0 -608
@@ -24,9 +24,9 @@ static void InitializeVM() {
24
24
  static void CheckMap(Map* map, int type, int instance_size) {
25
25
  CHECK(map->IsHeapObject());
26
26
  #ifdef DEBUG
27
- CHECK(Heap::Contains(map));
27
+ CHECK(HEAP->Contains(map));
28
28
  #endif
29
- CHECK_EQ(Heap::meta_map(), map->map());
29
+ CHECK_EQ(HEAP->meta_map(), map->map());
30
30
  CHECK_EQ(type, map->instance_type());
31
31
  CHECK_EQ(instance_size, map->instance_size());
32
32
  }
@@ -34,10 +34,10 @@ static void CheckMap(Map* map, int type, int instance_size) {
34
34
 
35
35
  TEST(HeapMaps) {
36
36
  InitializeVM();
37
- CheckMap(Heap::meta_map(), MAP_TYPE, Map::kSize);
38
- CheckMap(Heap::heap_number_map(), HEAP_NUMBER_TYPE, HeapNumber::kSize);
39
- CheckMap(Heap::fixed_array_map(), FIXED_ARRAY_TYPE, kVariableSizeSentinel);
40
- CheckMap(Heap::string_map(), STRING_TYPE, kVariableSizeSentinel);
37
+ CheckMap(HEAP->meta_map(), MAP_TYPE, Map::kSize);
38
+ CheckMap(HEAP->heap_number_map(), HEAP_NUMBER_TYPE, HeapNumber::kSize);
39
+ CheckMap(HEAP->fixed_array_map(), FIXED_ARRAY_TYPE, kVariableSizeSentinel);
40
+ CheckMap(HEAP->string_map(), STRING_TYPE, kVariableSizeSentinel);
41
41
  }
42
42
 
43
43
 
@@ -58,7 +58,7 @@ static void CheckSmi(int value, const char* string) {
58
58
 
59
59
 
60
60
  static void CheckNumber(double value, const char* string) {
61
- Object* obj = Heap::NumberFromDouble(value)->ToObjectChecked();
61
+ Object* obj = HEAP->NumberFromDouble(value)->ToObjectChecked();
62
62
  CHECK(obj->IsNumber());
63
63
  bool exc;
64
64
  Object* print_string = *Execution::ToString(Handle<Object>(obj), &exc);
@@ -70,33 +70,33 @@ static void CheckFindCodeObject() {
70
70
  // Test FindCodeObject
71
71
  #define __ assm.
72
72
 
73
- Assembler assm(NULL, 0);
73
+ Assembler assm(Isolate::Current(), NULL, 0);
74
74
 
75
75
  __ nop(); // supported on all architectures
76
76
 
77
77
  CodeDesc desc;
78
78
  assm.GetCode(&desc);
79
- Object* code = Heap::CreateCode(
79
+ Object* code = HEAP->CreateCode(
80
80
  desc,
81
81
  Code::ComputeFlags(Code::STUB),
82
- Handle<Object>(Heap::undefined_value()))->ToObjectChecked();
82
+ Handle<Object>(HEAP->undefined_value()))->ToObjectChecked();
83
83
  CHECK(code->IsCode());
84
84
 
85
85
  HeapObject* obj = HeapObject::cast(code);
86
86
  Address obj_addr = obj->address();
87
87
 
88
88
  for (int i = 0; i < obj->Size(); i += kPointerSize) {
89
- Object* found = Heap::FindCodeObject(obj_addr + i);
89
+ Object* found = HEAP->FindCodeObject(obj_addr + i);
90
90
  CHECK_EQ(code, found);
91
91
  }
92
92
 
93
- Object* copy = Heap::CreateCode(
93
+ Object* copy = HEAP->CreateCode(
94
94
  desc,
95
95
  Code::ComputeFlags(Code::STUB),
96
- Handle<Object>(Heap::undefined_value()))->ToObjectChecked();
96
+ Handle<Object>(HEAP->undefined_value()))->ToObjectChecked();
97
97
  CHECK(copy->IsCode());
98
98
  HeapObject* obj_copy = HeapObject::cast(copy);
99
- Object* not_right = Heap::FindCodeObject(obj_copy->address() +
99
+ Object* not_right = HEAP->FindCodeObject(obj_copy->address() +
100
100
  obj_copy->Size() / 2);
101
101
  CHECK(not_right != code);
102
102
  }
@@ -106,41 +106,41 @@ TEST(HeapObjects) {
106
106
  InitializeVM();
107
107
 
108
108
  v8::HandleScope sc;
109
- Object* value = Heap::NumberFromDouble(1.000123)->ToObjectChecked();
109
+ Object* value = HEAP->NumberFromDouble(1.000123)->ToObjectChecked();
110
110
  CHECK(value->IsHeapNumber());
111
111
  CHECK(value->IsNumber());
112
112
  CHECK_EQ(1.000123, value->Number());
113
113
 
114
- value = Heap::NumberFromDouble(1.0)->ToObjectChecked();
114
+ value = HEAP->NumberFromDouble(1.0)->ToObjectChecked();
115
115
  CHECK(value->IsSmi());
116
116
  CHECK(value->IsNumber());
117
117
  CHECK_EQ(1.0, value->Number());
118
118
 
119
- value = Heap::NumberFromInt32(1024)->ToObjectChecked();
119
+ value = HEAP->NumberFromInt32(1024)->ToObjectChecked();
120
120
  CHECK(value->IsSmi());
121
121
  CHECK(value->IsNumber());
122
122
  CHECK_EQ(1024.0, value->Number());
123
123
 
124
- value = Heap::NumberFromInt32(Smi::kMinValue)->ToObjectChecked();
124
+ value = HEAP->NumberFromInt32(Smi::kMinValue)->ToObjectChecked();
125
125
  CHECK(value->IsSmi());
126
126
  CHECK(value->IsNumber());
127
127
  CHECK_EQ(Smi::kMinValue, Smi::cast(value)->value());
128
128
 
129
- value = Heap::NumberFromInt32(Smi::kMaxValue)->ToObjectChecked();
129
+ value = HEAP->NumberFromInt32(Smi::kMaxValue)->ToObjectChecked();
130
130
  CHECK(value->IsSmi());
131
131
  CHECK(value->IsNumber());
132
132
  CHECK_EQ(Smi::kMaxValue, Smi::cast(value)->value());
133
133
 
134
134
  #ifndef V8_TARGET_ARCH_X64
135
135
  // TODO(lrn): We need a NumberFromIntptr function in order to test this.
136
- value = Heap::NumberFromInt32(Smi::kMinValue - 1)->ToObjectChecked();
136
+ value = HEAP->NumberFromInt32(Smi::kMinValue - 1)->ToObjectChecked();
137
137
  CHECK(value->IsHeapNumber());
138
138
  CHECK(value->IsNumber());
139
139
  CHECK_EQ(static_cast<double>(Smi::kMinValue - 1), value->Number());
140
140
  #endif
141
141
 
142
142
  MaybeObject* maybe_value =
143
- Heap::NumberFromUint32(static_cast<uint32_t>(Smi::kMaxValue) + 1);
143
+ HEAP->NumberFromUint32(static_cast<uint32_t>(Smi::kMaxValue) + 1);
144
144
  value = maybe_value->ToObjectChecked();
145
145
  CHECK(value->IsHeapNumber());
146
146
  CHECK(value->IsNumber());
@@ -148,21 +148,22 @@ TEST(HeapObjects) {
148
148
  value->Number());
149
149
 
150
150
  // nan oddball checks
151
- CHECK(Heap::nan_value()->IsNumber());
152
- CHECK(isnan(Heap::nan_value()->Number()));
151
+ CHECK(HEAP->nan_value()->IsNumber());
152
+ CHECK(isnan(HEAP->nan_value()->Number()));
153
153
 
154
- Handle<String> s = Factory::NewStringFromAscii(CStrVector("fisk hest "));
154
+ Handle<String> s = FACTORY->NewStringFromAscii(CStrVector("fisk hest "));
155
155
  CHECK(s->IsString());
156
156
  CHECK_EQ(10, s->length());
157
157
 
158
- String* object_symbol = String::cast(Heap::Object_symbol());
159
- CHECK(Top::context()->global()->HasLocalProperty(object_symbol));
158
+ String* object_symbol = String::cast(HEAP->Object_symbol());
159
+ CHECK(
160
+ Isolate::Current()->context()->global()->HasLocalProperty(object_symbol));
160
161
 
161
162
  // Check ToString for oddballs
162
- CheckOddball(Heap::true_value(), "true");
163
- CheckOddball(Heap::false_value(), "false");
164
- CheckOddball(Heap::null_value(), "null");
165
- CheckOddball(Heap::undefined_value(), "undefined");
163
+ CheckOddball(HEAP->true_value(), "true");
164
+ CheckOddball(HEAP->false_value(), "false");
165
+ CheckOddball(HEAP->null_value(), "null");
166
+ CheckOddball(HEAP->undefined_value(), "undefined");
166
167
 
167
168
  // Check ToString for Smis
168
169
  CheckSmi(0, "0");
@@ -197,61 +198,62 @@ TEST(GarbageCollection) {
197
198
 
198
199
  v8::HandleScope sc;
199
200
  // Check GC.
200
- Heap::CollectGarbage(NEW_SPACE);
201
+ HEAP->CollectGarbage(NEW_SPACE);
201
202
 
202
- Handle<String> name = Factory::LookupAsciiSymbol("theFunction");
203
- Handle<String> prop_name = Factory::LookupAsciiSymbol("theSlot");
204
- Handle<String> prop_namex = Factory::LookupAsciiSymbol("theSlotx");
205
- Handle<String> obj_name = Factory::LookupAsciiSymbol("theObject");
203
+ Handle<String> name = FACTORY->LookupAsciiSymbol("theFunction");
204
+ Handle<String> prop_name = FACTORY->LookupAsciiSymbol("theSlot");
205
+ Handle<String> prop_namex = FACTORY->LookupAsciiSymbol("theSlotx");
206
+ Handle<String> obj_name = FACTORY->LookupAsciiSymbol("theObject");
206
207
 
207
208
  {
208
209
  v8::HandleScope inner_scope;
209
210
  // Allocate a function and keep it in global object's property.
210
211
  Handle<JSFunction> function =
211
- Factory::NewFunction(name, Factory::undefined_value());
212
+ FACTORY->NewFunction(name, FACTORY->undefined_value());
212
213
  Handle<Map> initial_map =
213
- Factory::NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
214
+ FACTORY->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
214
215
  function->set_initial_map(*initial_map);
215
- Top::context()->global()->SetProperty(*name,
216
- *function,
217
- NONE)->ToObjectChecked();
216
+ Isolate::Current()->context()->global()->SetProperty(
217
+ *name, *function, NONE, kNonStrictMode)->ToObjectChecked();
218
218
  // Allocate an object. Unrooted after leaving the scope.
219
- Handle<JSObject> obj = Factory::NewJSObject(function);
220
- obj->SetProperty(*prop_name, Smi::FromInt(23), NONE)->ToObjectChecked();
221
- obj->SetProperty(*prop_namex, Smi::FromInt(24), NONE)->ToObjectChecked();
219
+ Handle<JSObject> obj = FACTORY->NewJSObject(function);
220
+ obj->SetProperty(
221
+ *prop_name, Smi::FromInt(23), NONE, kNonStrictMode)->ToObjectChecked();
222
+ obj->SetProperty(
223
+ *prop_namex, Smi::FromInt(24), NONE, kNonStrictMode)->ToObjectChecked();
222
224
 
223
225
  CHECK_EQ(Smi::FromInt(23), obj->GetProperty(*prop_name));
224
226
  CHECK_EQ(Smi::FromInt(24), obj->GetProperty(*prop_namex));
225
227
  }
226
228
 
227
- Heap::CollectGarbage(NEW_SPACE);
229
+ HEAP->CollectGarbage(NEW_SPACE);
228
230
 
229
231
  // Function should be alive.
230
- CHECK(Top::context()->global()->HasLocalProperty(*name));
232
+ CHECK(Isolate::Current()->context()->global()->HasLocalProperty(*name));
231
233
  // Check function is retained.
232
- Object* func_value =
233
- Top::context()->global()->GetProperty(*name)->ToObjectChecked();
234
+ Object* func_value = Isolate::Current()->context()->global()->
235
+ GetProperty(*name)->ToObjectChecked();
234
236
  CHECK(func_value->IsJSFunction());
235
237
  Handle<JSFunction> function(JSFunction::cast(func_value));
236
238
 
237
239
  {
238
240
  HandleScope inner_scope;
239
241
  // Allocate another object, make it reachable from global.
240
- Handle<JSObject> obj = Factory::NewJSObject(function);
241
- Top::context()->global()->SetProperty(*obj_name,
242
- *obj,
243
- NONE)->ToObjectChecked();
244
- obj->SetProperty(*prop_name, Smi::FromInt(23), NONE)->ToObjectChecked();
242
+ Handle<JSObject> obj = FACTORY->NewJSObject(function);
243
+ Isolate::Current()->context()->global()->SetProperty(
244
+ *obj_name, *obj, NONE, kNonStrictMode)->ToObjectChecked();
245
+ obj->SetProperty(
246
+ *prop_name, Smi::FromInt(23), NONE, kNonStrictMode)->ToObjectChecked();
245
247
  }
246
248
 
247
249
  // After gc, it should survive.
248
- Heap::CollectGarbage(NEW_SPACE);
250
+ HEAP->CollectGarbage(NEW_SPACE);
249
251
 
250
- CHECK(Top::context()->global()->HasLocalProperty(*obj_name));
251
- CHECK(Top::context()->global()->GetProperty(*obj_name)->ToObjectChecked()->
252
- IsJSObject());
253
- Object* obj =
254
- Top::context()->global()->GetProperty(*obj_name)->ToObjectChecked();
252
+ CHECK(Isolate::Current()->context()->global()->HasLocalProperty(*obj_name));
253
+ CHECK(Isolate::Current()->context()->global()->
254
+ GetProperty(*obj_name)->ToObjectChecked()->IsJSObject());
255
+ Object* obj = Isolate::Current()->context()->global()->
256
+ GetProperty(*obj_name)->ToObjectChecked();
255
257
  JSObject* js_obj = JSObject::cast(obj);
256
258
  CHECK_EQ(Smi::FromInt(23), js_obj->GetProperty(*prop_name));
257
259
  }
@@ -259,7 +261,7 @@ TEST(GarbageCollection) {
259
261
 
260
262
  static void VerifyStringAllocation(const char* string) {
261
263
  v8::HandleScope scope;
262
- Handle<String> s = Factory::NewStringFromUtf8(CStrVector(string));
264
+ Handle<String> s = FACTORY->NewStringFromUtf8(CStrVector(string));
263
265
  CHECK_EQ(StrLength(string), s->length());
264
266
  for (int index = 0; index < s->length(); index++) {
265
267
  CHECK_EQ(static_cast<uint16_t>(string[index]), s->Get(index));
@@ -283,12 +285,13 @@ TEST(LocalHandles) {
283
285
 
284
286
  v8::HandleScope scope;
285
287
  const char* name = "Kasper the spunky";
286
- Handle<String> string = Factory::NewStringFromAscii(CStrVector(name));
288
+ Handle<String> string = FACTORY->NewStringFromAscii(CStrVector(name));
287
289
  CHECK_EQ(StrLength(name), string->length());
288
290
  }
289
291
 
290
292
 
291
293
  TEST(GlobalHandles) {
294
+ GlobalHandles* global_handles = Isolate::Current()->global_handles();
292
295
  InitializeVM();
293
296
 
294
297
  Handle<Object> h1;
@@ -299,17 +302,17 @@ TEST(GlobalHandles) {
299
302
  {
300
303
  HandleScope scope;
301
304
 
302
- Handle<Object> i = Factory::NewStringFromAscii(CStrVector("fisk"));
303
- Handle<Object> u = Factory::NewNumber(1.12344);
305
+ Handle<Object> i = FACTORY->NewStringFromAscii(CStrVector("fisk"));
306
+ Handle<Object> u = FACTORY->NewNumber(1.12344);
304
307
 
305
- h1 = GlobalHandles::Create(*i);
306
- h2 = GlobalHandles::Create(*u);
307
- h3 = GlobalHandles::Create(*i);
308
- h4 = GlobalHandles::Create(*u);
308
+ h1 = global_handles->Create(*i);
309
+ h2 = global_handles->Create(*u);
310
+ h3 = global_handles->Create(*i);
311
+ h4 = global_handles->Create(*u);
309
312
  }
310
313
 
311
314
  // after gc, it should survive
312
- Heap::CollectGarbage(NEW_SPACE);
315
+ HEAP->CollectGarbage(NEW_SPACE);
313
316
 
314
317
  CHECK((*h1)->IsString());
315
318
  CHECK((*h2)->IsHeapNumber());
@@ -317,12 +320,12 @@ TEST(GlobalHandles) {
317
320
  CHECK((*h4)->IsHeapNumber());
318
321
 
319
322
  CHECK_EQ(*h3, *h1);
320
- GlobalHandles::Destroy(h1.location());
321
- GlobalHandles::Destroy(h3.location());
323
+ global_handles->Destroy(h1.location());
324
+ global_handles->Destroy(h3.location());
322
325
 
323
326
  CHECK_EQ(*h4, *h2);
324
- GlobalHandles::Destroy(h2.location());
325
- GlobalHandles::Destroy(h4.location());
327
+ global_handles->Destroy(h2.location());
328
+ global_handles->Destroy(h4.location());
326
329
  }
327
330
 
328
331
 
@@ -336,6 +339,7 @@ static void TestWeakGlobalHandleCallback(v8::Persistent<v8::Value> handle,
336
339
 
337
340
 
338
341
  TEST(WeakGlobalHandlesScavenge) {
342
+ GlobalHandles* global_handles = Isolate::Current()->global_handles();
339
343
  InitializeVM();
340
344
 
341
345
  WeakPointerCleared = false;
@@ -346,33 +350,34 @@ TEST(WeakGlobalHandlesScavenge) {
346
350
  {
347
351
  HandleScope scope;
348
352
 
349
- Handle<Object> i = Factory::NewStringFromAscii(CStrVector("fisk"));
350
- Handle<Object> u = Factory::NewNumber(1.12344);
353
+ Handle<Object> i = FACTORY->NewStringFromAscii(CStrVector("fisk"));
354
+ Handle<Object> u = FACTORY->NewNumber(1.12344);
351
355
 
352
- h1 = GlobalHandles::Create(*i);
353
- h2 = GlobalHandles::Create(*u);
356
+ h1 = global_handles->Create(*i);
357
+ h2 = global_handles->Create(*u);
354
358
  }
355
359
 
356
- GlobalHandles::MakeWeak(h2.location(),
357
- reinterpret_cast<void*>(1234),
358
- &TestWeakGlobalHandleCallback);
360
+ global_handles->MakeWeak(h2.location(),
361
+ reinterpret_cast<void*>(1234),
362
+ &TestWeakGlobalHandleCallback);
359
363
 
360
364
  // Scavenge treats weak pointers as normal roots.
361
- Heap::PerformScavenge();
365
+ HEAP->PerformScavenge();
362
366
 
363
367
  CHECK((*h1)->IsString());
364
368
  CHECK((*h2)->IsHeapNumber());
365
369
 
366
370
  CHECK(!WeakPointerCleared);
367
- CHECK(!GlobalHandles::IsNearDeath(h2.location()));
368
- CHECK(!GlobalHandles::IsNearDeath(h1.location()));
371
+ CHECK(!global_handles->IsNearDeath(h2.location()));
372
+ CHECK(!global_handles->IsNearDeath(h1.location()));
369
373
 
370
- GlobalHandles::Destroy(h1.location());
371
- GlobalHandles::Destroy(h2.location());
374
+ global_handles->Destroy(h1.location());
375
+ global_handles->Destroy(h2.location());
372
376
  }
373
377
 
374
378
 
375
379
  TEST(WeakGlobalHandlesMark) {
380
+ GlobalHandles* global_handles = Isolate::Current()->global_handles();
376
381
  InitializeVM();
377
382
 
378
383
  WeakPointerCleared = false;
@@ -383,34 +388,35 @@ TEST(WeakGlobalHandlesMark) {
383
388
  {
384
389
  HandleScope scope;
385
390
 
386
- Handle<Object> i = Factory::NewStringFromAscii(CStrVector("fisk"));
387
- Handle<Object> u = Factory::NewNumber(1.12344);
391
+ Handle<Object> i = FACTORY->NewStringFromAscii(CStrVector("fisk"));
392
+ Handle<Object> u = FACTORY->NewNumber(1.12344);
388
393
 
389
- h1 = GlobalHandles::Create(*i);
390
- h2 = GlobalHandles::Create(*u);
394
+ h1 = global_handles->Create(*i);
395
+ h2 = global_handles->Create(*u);
391
396
  }
392
397
 
393
- Heap::CollectGarbage(OLD_POINTER_SPACE);
394
- Heap::CollectGarbage(NEW_SPACE);
398
+ HEAP->CollectGarbage(OLD_POINTER_SPACE);
399
+ HEAP->CollectGarbage(NEW_SPACE);
395
400
  // Make sure the object is promoted.
396
401
 
397
- GlobalHandles::MakeWeak(h2.location(),
398
- reinterpret_cast<void*>(1234),
399
- &TestWeakGlobalHandleCallback);
402
+ global_handles->MakeWeak(h2.location(),
403
+ reinterpret_cast<void*>(1234),
404
+ &TestWeakGlobalHandleCallback);
400
405
  CHECK(!GlobalHandles::IsNearDeath(h1.location()));
401
406
  CHECK(!GlobalHandles::IsNearDeath(h2.location()));
402
407
 
403
- Heap::CollectGarbage(OLD_POINTER_SPACE);
408
+ HEAP->CollectGarbage(OLD_POINTER_SPACE);
404
409
 
405
410
  CHECK((*h1)->IsString());
406
411
 
407
412
  CHECK(WeakPointerCleared);
408
413
  CHECK(!GlobalHandles::IsNearDeath(h1.location()));
409
414
 
410
- GlobalHandles::Destroy(h1.location());
415
+ global_handles->Destroy(h1.location());
411
416
  }
412
417
 
413
418
  TEST(DeleteWeakGlobalHandle) {
419
+ GlobalHandles* global_handles = Isolate::Current()->global_handles();
414
420
  InitializeVM();
415
421
 
416
422
  WeakPointerCleared = false;
@@ -420,21 +426,21 @@ TEST(DeleteWeakGlobalHandle) {
420
426
  {
421
427
  HandleScope scope;
422
428
 
423
- Handle<Object> i = Factory::NewStringFromAscii(CStrVector("fisk"));
424
- h = GlobalHandles::Create(*i);
429
+ Handle<Object> i = FACTORY->NewStringFromAscii(CStrVector("fisk"));
430
+ h = global_handles->Create(*i);
425
431
  }
426
432
 
427
- GlobalHandles::MakeWeak(h.location(),
428
- reinterpret_cast<void*>(1234),
429
- &TestWeakGlobalHandleCallback);
433
+ global_handles->MakeWeak(h.location(),
434
+ reinterpret_cast<void*>(1234),
435
+ &TestWeakGlobalHandleCallback);
430
436
 
431
437
  // Scanvenge does not recognize weak reference.
432
- Heap::PerformScavenge();
438
+ HEAP->PerformScavenge();
433
439
 
434
440
  CHECK(!WeakPointerCleared);
435
441
 
436
442
  // Mark-compact treats weak reference properly.
437
- Heap::CollectGarbage(OLD_POINTER_SPACE);
443
+ HEAP->CollectGarbage(OLD_POINTER_SPACE);
438
444
 
439
445
  CHECK(WeakPointerCleared);
440
446
  }
@@ -506,12 +512,12 @@ static const char* not_so_random_string_table[] = {
506
512
  static void CheckSymbols(const char** strings) {
507
513
  for (const char* string = *strings; *strings != 0; string = *strings++) {
508
514
  Object* a;
509
- MaybeObject* maybe_a = Heap::LookupAsciiSymbol(string);
515
+ MaybeObject* maybe_a = HEAP->LookupAsciiSymbol(string);
510
516
  // LookupAsciiSymbol may return a failure if a GC is needed.
511
517
  if (!maybe_a->ToObject(&a)) continue;
512
518
  CHECK(a->IsSymbol());
513
519
  Object* b;
514
- MaybeObject *maybe_b = Heap::LookupAsciiSymbol(string);
520
+ MaybeObject* maybe_b = HEAP->LookupAsciiSymbol(string);
515
521
  if (!maybe_b->ToObject(&b)) continue;
516
522
  CHECK_EQ(b, a);
517
523
  CHECK(String::cast(b)->IsEqualTo(CStrVector(string)));
@@ -531,21 +537,21 @@ TEST(FunctionAllocation) {
531
537
  InitializeVM();
532
538
 
533
539
  v8::HandleScope sc;
534
- Handle<String> name = Factory::LookupAsciiSymbol("theFunction");
540
+ Handle<String> name = FACTORY->LookupAsciiSymbol("theFunction");
535
541
  Handle<JSFunction> function =
536
- Factory::NewFunction(name, Factory::undefined_value());
542
+ FACTORY->NewFunction(name, FACTORY->undefined_value());
537
543
  Handle<Map> initial_map =
538
- Factory::NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
544
+ FACTORY->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
539
545
  function->set_initial_map(*initial_map);
540
546
 
541
- Handle<String> prop_name = Factory::LookupAsciiSymbol("theSlot");
542
- Handle<JSObject> obj = Factory::NewJSObject(function);
543
- obj->SetProperty(*prop_name, Smi::FromInt(23), NONE)->ToObjectChecked();
547
+ Handle<String> prop_name = FACTORY->LookupAsciiSymbol("theSlot");
548
+ Handle<JSObject> obj = FACTORY->NewJSObject(function);
549
+ obj->SetProperty(
550
+ *prop_name, Smi::FromInt(23), NONE, kNonStrictMode)->ToObjectChecked();
544
551
  CHECK_EQ(Smi::FromInt(23), obj->GetProperty(*prop_name));
545
552
  // Check that we can add properties to function objects.
546
- function->SetProperty(*prop_name,
547
- Smi::FromInt(24),
548
- NONE)->ToObjectChecked();
553
+ function->SetProperty(
554
+ *prop_name, Smi::FromInt(24), NONE, kNonStrictMode)->ToObjectChecked();
549
555
  CHECK_EQ(Smi::FromInt(24), function->GetProperty(*prop_name));
550
556
  }
551
557
 
@@ -554,20 +560,21 @@ TEST(ObjectProperties) {
554
560
  InitializeVM();
555
561
 
556
562
  v8::HandleScope sc;
557
- String* object_symbol = String::cast(Heap::Object_symbol());
558
- Object* raw_object =
559
- Top::context()->global()->GetProperty(object_symbol)->ToObjectChecked();
563
+ String* object_symbol = String::cast(HEAP->Object_symbol());
564
+ Object* raw_object = Isolate::Current()->context()->global()->
565
+ GetProperty(object_symbol)->ToObjectChecked();
560
566
  JSFunction* object_function = JSFunction::cast(raw_object);
561
567
  Handle<JSFunction> constructor(object_function);
562
- Handle<JSObject> obj = Factory::NewJSObject(constructor);
563
- Handle<String> first = Factory::LookupAsciiSymbol("first");
564
- Handle<String> second = Factory::LookupAsciiSymbol("second");
568
+ Handle<JSObject> obj = FACTORY->NewJSObject(constructor);
569
+ Handle<String> first = FACTORY->LookupAsciiSymbol("first");
570
+ Handle<String> second = FACTORY->LookupAsciiSymbol("second");
565
571
 
566
572
  // check for empty
567
573
  CHECK(!obj->HasLocalProperty(*first));
568
574
 
569
575
  // add first
570
- obj->SetProperty(*first, Smi::FromInt(1), NONE)->ToObjectChecked();
576
+ obj->SetProperty(
577
+ *first, Smi::FromInt(1), NONE, kNonStrictMode)->ToObjectChecked();
571
578
  CHECK(obj->HasLocalProperty(*first));
572
579
 
573
580
  // delete first
@@ -575,8 +582,10 @@ TEST(ObjectProperties) {
575
582
  CHECK(!obj->HasLocalProperty(*first));
576
583
 
577
584
  // add first and then second
578
- obj->SetProperty(*first, Smi::FromInt(1), NONE)->ToObjectChecked();
579
- obj->SetProperty(*second, Smi::FromInt(2), NONE)->ToObjectChecked();
585
+ obj->SetProperty(
586
+ *first, Smi::FromInt(1), NONE, kNonStrictMode)->ToObjectChecked();
587
+ obj->SetProperty(
588
+ *second, Smi::FromInt(2), NONE, kNonStrictMode)->ToObjectChecked();
580
589
  CHECK(obj->HasLocalProperty(*first));
581
590
  CHECK(obj->HasLocalProperty(*second));
582
591
 
@@ -588,8 +597,10 @@ TEST(ObjectProperties) {
588
597
  CHECK(!obj->HasLocalProperty(*second));
589
598
 
590
599
  // add first and then second
591
- obj->SetProperty(*first, Smi::FromInt(1), NONE)->ToObjectChecked();
592
- obj->SetProperty(*second, Smi::FromInt(2), NONE)->ToObjectChecked();
600
+ obj->SetProperty(
601
+ *first, Smi::FromInt(1), NONE, kNonStrictMode)->ToObjectChecked();
602
+ obj->SetProperty(
603
+ *second, Smi::FromInt(2), NONE, kNonStrictMode)->ToObjectChecked();
593
604
  CHECK(obj->HasLocalProperty(*first));
594
605
  CHECK(obj->HasLocalProperty(*second));
595
606
 
@@ -602,16 +613,18 @@ TEST(ObjectProperties) {
602
613
 
603
614
  // check string and symbol match
604
615
  static const char* string1 = "fisk";
605
- Handle<String> s1 = Factory::NewStringFromAscii(CStrVector(string1));
606
- obj->SetProperty(*s1, Smi::FromInt(1), NONE)->ToObjectChecked();
607
- Handle<String> s1_symbol = Factory::LookupAsciiSymbol(string1);
616
+ Handle<String> s1 = FACTORY->NewStringFromAscii(CStrVector(string1));
617
+ obj->SetProperty(
618
+ *s1, Smi::FromInt(1), NONE, kNonStrictMode)->ToObjectChecked();
619
+ Handle<String> s1_symbol = FACTORY->LookupAsciiSymbol(string1);
608
620
  CHECK(obj->HasLocalProperty(*s1_symbol));
609
621
 
610
622
  // check symbol and string match
611
623
  static const char* string2 = "fugl";
612
- Handle<String> s2_symbol = Factory::LookupAsciiSymbol(string2);
613
- obj->SetProperty(*s2_symbol, Smi::FromInt(1), NONE)->ToObjectChecked();
614
- Handle<String> s2 = Factory::NewStringFromAscii(CStrVector(string2));
624
+ Handle<String> s2_symbol = FACTORY->LookupAsciiSymbol(string2);
625
+ obj->SetProperty(
626
+ *s2_symbol, Smi::FromInt(1), NONE, kNonStrictMode)->ToObjectChecked();
627
+ Handle<String> s2 = FACTORY->NewStringFromAscii(CStrVector(string2));
615
628
  CHECK(obj->HasLocalProperty(*s2));
616
629
  }
617
630
 
@@ -620,18 +633,19 @@ TEST(JSObjectMaps) {
620
633
  InitializeVM();
621
634
 
622
635
  v8::HandleScope sc;
623
- Handle<String> name = Factory::LookupAsciiSymbol("theFunction");
636
+ Handle<String> name = FACTORY->LookupAsciiSymbol("theFunction");
624
637
  Handle<JSFunction> function =
625
- Factory::NewFunction(name, Factory::undefined_value());
638
+ FACTORY->NewFunction(name, FACTORY->undefined_value());
626
639
  Handle<Map> initial_map =
627
- Factory::NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
640
+ FACTORY->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
628
641
  function->set_initial_map(*initial_map);
629
642
 
630
- Handle<String> prop_name = Factory::LookupAsciiSymbol("theSlot");
631
- Handle<JSObject> obj = Factory::NewJSObject(function);
643
+ Handle<String> prop_name = FACTORY->LookupAsciiSymbol("theSlot");
644
+ Handle<JSObject> obj = FACTORY->NewJSObject(function);
632
645
 
633
646
  // Set a propery
634
- obj->SetProperty(*prop_name, Smi::FromInt(23), NONE)->ToObjectChecked();
647
+ obj->SetProperty(
648
+ *prop_name, Smi::FromInt(23), NONE, kNonStrictMode)->ToObjectChecked();
635
649
  CHECK_EQ(Smi::FromInt(23), obj->GetProperty(*prop_name));
636
650
 
637
651
  // Check the map has changed
@@ -643,14 +657,14 @@ TEST(JSArray) {
643
657
  InitializeVM();
644
658
 
645
659
  v8::HandleScope sc;
646
- Handle<String> name = Factory::LookupAsciiSymbol("Array");
647
- Object* raw_object =
648
- Top::context()->global()->GetProperty(*name)->ToObjectChecked();
660
+ Handle<String> name = FACTORY->LookupAsciiSymbol("Array");
661
+ Object* raw_object = Isolate::Current()->context()->global()->
662
+ GetProperty(*name)->ToObjectChecked();
649
663
  Handle<JSFunction> function = Handle<JSFunction>(
650
664
  JSFunction::cast(raw_object));
651
665
 
652
666
  // Allocate the object.
653
- Handle<JSObject> object = Factory::NewJSObject(function);
667
+ Handle<JSObject> object = FACTORY->NewJSObject(function);
654
668
  Handle<JSArray> array = Handle<JSArray>::cast(object);
655
669
  // We just initialized the VM, no heap allocation failure yet.
656
670
  Object* ok = array->Initialize(0)->ToObjectChecked();
@@ -661,13 +675,13 @@ TEST(JSArray) {
661
675
  CHECK(array->HasFastElements()); // Must be in fast mode.
662
676
 
663
677
  // array[length] = name.
664
- ok = array->SetElement(0, *name)->ToObjectChecked();
678
+ ok = array->SetElement(0, *name, kNonStrictMode)->ToObjectChecked();
665
679
  CHECK_EQ(Smi::FromInt(1), array->length());
666
680
  CHECK_EQ(array->GetElement(0), *name);
667
681
 
668
682
  // Set array length with larger than smi value.
669
683
  Handle<Object> length =
670
- Factory::NewNumberFromUint(static_cast<uint32_t>(Smi::kMaxValue) + 1);
684
+ FACTORY->NewNumberFromUint(static_cast<uint32_t>(Smi::kMaxValue) + 1);
671
685
  ok = array->SetElementsLength(*length)->ToObjectChecked();
672
686
 
673
687
  uint32_t int_length = 0;
@@ -676,7 +690,7 @@ TEST(JSArray) {
676
690
  CHECK(array->HasDictionaryElements()); // Must be in slow mode.
677
691
 
678
692
  // array[length] = name.
679
- ok = array->SetElement(int_length, *name)->ToObjectChecked();
693
+ ok = array->SetElement(int_length, *name, kNonStrictMode)->ToObjectChecked();
680
694
  uint32_t new_int_length = 0;
681
695
  CHECK(array->length()->ToArrayIndex(&new_int_length));
682
696
  CHECK_EQ(static_cast<double>(int_length), new_int_length - 1);
@@ -689,21 +703,23 @@ TEST(JSObjectCopy) {
689
703
  InitializeVM();
690
704
 
691
705
  v8::HandleScope sc;
692
- String* object_symbol = String::cast(Heap::Object_symbol());
693
- Object* raw_object =
694
- Top::context()->global()->GetProperty(object_symbol)->ToObjectChecked();
706
+ String* object_symbol = String::cast(HEAP->Object_symbol());
707
+ Object* raw_object = Isolate::Current()->context()->global()->
708
+ GetProperty(object_symbol)->ToObjectChecked();
695
709
  JSFunction* object_function = JSFunction::cast(raw_object);
696
710
  Handle<JSFunction> constructor(object_function);
697
- Handle<JSObject> obj = Factory::NewJSObject(constructor);
698
- Handle<String> first = Factory::LookupAsciiSymbol("first");
699
- Handle<String> second = Factory::LookupAsciiSymbol("second");
711
+ Handle<JSObject> obj = FACTORY->NewJSObject(constructor);
712
+ Handle<String> first = FACTORY->LookupAsciiSymbol("first");
713
+ Handle<String> second = FACTORY->LookupAsciiSymbol("second");
700
714
 
701
- obj->SetProperty(*first, Smi::FromInt(1), NONE)->ToObjectChecked();
702
- obj->SetProperty(*second, Smi::FromInt(2), NONE)->ToObjectChecked();
715
+ obj->SetProperty(
716
+ *first, Smi::FromInt(1), NONE, kNonStrictMode)->ToObjectChecked();
717
+ obj->SetProperty(
718
+ *second, Smi::FromInt(2), NONE, kNonStrictMode)->ToObjectChecked();
703
719
 
704
- Object* ok = obj->SetElement(0, *first)->ToObjectChecked();
720
+ Object* ok = obj->SetElement(0, *first, kNonStrictMode)->ToObjectChecked();
705
721
 
706
- ok = obj->SetElement(1, *second)->ToObjectChecked();
722
+ ok = obj->SetElement(1, *second, kNonStrictMode)->ToObjectChecked();
707
723
 
708
724
  // Make the clone.
709
725
  Handle<JSObject> clone = Copy(obj);
@@ -716,11 +732,13 @@ TEST(JSObjectCopy) {
716
732
  CHECK_EQ(obj->GetProperty(*second), clone->GetProperty(*second));
717
733
 
718
734
  // Flip the values.
719
- clone->SetProperty(*first, Smi::FromInt(2), NONE)->ToObjectChecked();
720
- clone->SetProperty(*second, Smi::FromInt(1), NONE)->ToObjectChecked();
735
+ clone->SetProperty(
736
+ *first, Smi::FromInt(2), NONE, kNonStrictMode)->ToObjectChecked();
737
+ clone->SetProperty(
738
+ *second, Smi::FromInt(1), NONE, kNonStrictMode)->ToObjectChecked();
721
739
 
722
- ok = clone->SetElement(0, *second)->ToObjectChecked();
723
- ok = clone->SetElement(1, *first)->ToObjectChecked();
740
+ ok = clone->SetElement(0, *second, kNonStrictMode)->ToObjectChecked();
741
+ ok = clone->SetElement(1, *first, kNonStrictMode)->ToObjectChecked();
724
742
 
725
743
  CHECK_EQ(obj->GetElement(1), clone->GetElement(0));
726
744
  CHECK_EQ(obj->GetElement(0), clone->GetElement(1));
@@ -748,17 +766,17 @@ TEST(StringAllocation) {
748
766
  non_ascii[3 * i + 2] = chars[2];
749
767
  }
750
768
  Handle<String> non_ascii_sym =
751
- Factory::LookupSymbol(Vector<const char>(non_ascii, 3 * length));
769
+ FACTORY->LookupSymbol(Vector<const char>(non_ascii, 3 * length));
752
770
  CHECK_EQ(length, non_ascii_sym->length());
753
771
  Handle<String> ascii_sym =
754
- Factory::LookupSymbol(Vector<const char>(ascii, length));
772
+ FACTORY->LookupSymbol(Vector<const char>(ascii, length));
755
773
  CHECK_EQ(length, ascii_sym->length());
756
774
  Handle<String> non_ascii_str =
757
- Factory::NewStringFromUtf8(Vector<const char>(non_ascii, 3 * length));
775
+ FACTORY->NewStringFromUtf8(Vector<const char>(non_ascii, 3 * length));
758
776
  non_ascii_str->Hash();
759
777
  CHECK_EQ(length, non_ascii_str->length());
760
778
  Handle<String> ascii_str =
761
- Factory::NewStringFromUtf8(Vector<const char>(ascii, length));
779
+ FACTORY->NewStringFromUtf8(Vector<const char>(ascii, length));
762
780
  ascii_str->Hash();
763
781
  CHECK_EQ(length, ascii_str->length());
764
782
  DeleteArray(non_ascii);
@@ -792,22 +810,22 @@ TEST(Iteration) {
792
810
  int next_objs_index = 0;
793
811
 
794
812
  // Allocate a JS array to OLD_POINTER_SPACE and NEW_SPACE
795
- objs[next_objs_index++] = Factory::NewJSArray(10);
796
- objs[next_objs_index++] = Factory::NewJSArray(10, TENURED);
813
+ objs[next_objs_index++] = FACTORY->NewJSArray(10);
814
+ objs[next_objs_index++] = FACTORY->NewJSArray(10, TENURED);
797
815
 
798
816
  // Allocate a small string to OLD_DATA_SPACE and NEW_SPACE
799
817
  objs[next_objs_index++] =
800
- Factory::NewStringFromAscii(CStrVector("abcdefghij"));
818
+ FACTORY->NewStringFromAscii(CStrVector("abcdefghij"));
801
819
  objs[next_objs_index++] =
802
- Factory::NewStringFromAscii(CStrVector("abcdefghij"), TENURED);
820
+ FACTORY->NewStringFromAscii(CStrVector("abcdefghij"), TENURED);
803
821
 
804
822
  // Allocate a large string (for large object space).
805
- int large_size = Heap::MaxObjectSizeInPagedSpace() + 1;
823
+ int large_size = HEAP->MaxObjectSizeInPagedSpace() + 1;
806
824
  char* str = new char[large_size];
807
825
  for (int i = 0; i < large_size - 1; ++i) str[i] = 'a';
808
826
  str[large_size - 1] = '\0';
809
827
  objs[next_objs_index++] =
810
- Factory::NewStringFromAscii(CStrVector(str), TENURED);
828
+ FACTORY->NewStringFromAscii(CStrVector(str), TENURED);
811
829
  delete[] str;
812
830
 
813
831
  // Add a Map object to look for.
@@ -821,9 +839,9 @@ TEST(Iteration) {
821
839
  TEST(LargeObjectSpaceContains) {
822
840
  InitializeVM();
823
841
 
824
- Heap::CollectGarbage(NEW_SPACE);
842
+ HEAP->CollectGarbage(NEW_SPACE);
825
843
 
826
- Address current_top = Heap::new_space()->top();
844
+ Address current_top = HEAP->new_space()->top();
827
845
  Page* page = Page::FromAddress(current_top);
828
846
  Address current_page = page->address();
829
847
  Address next_page = current_page + Page::kPageSize;
@@ -846,7 +864,7 @@ TEST(LargeObjectSpaceContains) {
846
864
  kPointerSize;
847
865
  CHECK_EQ(bytes_to_allocate, FixedArray::SizeFor(n_elements));
848
866
  FixedArray* array = FixedArray::cast(
849
- Heap::AllocateFixedArray(n_elements)->ToObjectChecked());
867
+ HEAP->AllocateFixedArray(n_elements)->ToObjectChecked());
850
868
 
851
869
  int index = n_elements - 1;
852
870
  CHECK_EQ(flags_ptr,
@@ -856,8 +874,8 @@ TEST(LargeObjectSpaceContains) {
856
874
  // CHECK(Page::FromAddress(next_page)->IsLargeObjectPage());
857
875
 
858
876
  HeapObject* addr = HeapObject::FromAddress(next_page + 2 * kPointerSize);
859
- CHECK(Heap::new_space()->Contains(addr));
860
- CHECK(!Heap::lo_space()->Contains(addr));
877
+ CHECK(HEAP->new_space()->Contains(addr));
878
+ CHECK(!HEAP->lo_space()->Contains(addr));
861
879
  }
862
880
 
863
881
 
@@ -888,7 +906,7 @@ TEST(Regression39128) {
888
906
 
889
907
  // Increase the chance of 'bump-the-pointer' allocation in old space.
890
908
  bool force_compaction = true;
891
- Heap::CollectAllGarbage(force_compaction);
909
+ HEAP->CollectAllGarbage(force_compaction);
892
910
 
893
911
  v8::HandleScope scope;
894
912
 
@@ -897,11 +915,12 @@ TEST(Regression39128) {
897
915
  // that region dirty marks are updated correctly.
898
916
 
899
917
  // Step 1: prepare a map for the object. We add 1 inobject property to it.
900
- Handle<JSFunction> object_ctor(Top::global_context()->object_function());
918
+ Handle<JSFunction> object_ctor(
919
+ Isolate::Current()->global_context()->object_function());
901
920
  CHECK(object_ctor->has_initial_map());
902
921
  Handle<Map> object_map(object_ctor->initial_map());
903
922
  // Create a map with single inobject property.
904
- Handle<Map> my_map = Factory::CopyMap(object_map, 1);
923
+ Handle<Map> my_map = FACTORY->CopyMap(object_map, 1);
905
924
  int n_properties = my_map->inobject_properties();
906
925
  CHECK_GT(n_properties, 0);
907
926
 
@@ -911,15 +930,15 @@ TEST(Regression39128) {
911
930
  // just enough room to allocate JSObject and thus fill the newspace.
912
931
 
913
932
  int allocation_amount = Min(FixedArray::kMaxSize,
914
- Heap::MaxObjectSizeInNewSpace());
933
+ HEAP->MaxObjectSizeInNewSpace());
915
934
  int allocation_len = LenFromSize(allocation_amount);
916
- NewSpace* new_space = Heap::new_space();
935
+ NewSpace* new_space = HEAP->new_space();
917
936
  Address* top_addr = new_space->allocation_top_address();
918
937
  Address* limit_addr = new_space->allocation_limit_address();
919
938
  while ((*limit_addr - *top_addr) > allocation_amount) {
920
- CHECK(!Heap::always_allocate());
921
- Object* array =
922
- Heap::AllocateFixedArray(allocation_len)->ToObjectChecked();
939
+ CHECK(!HEAP->always_allocate());
940
+ Object* array = HEAP->AllocateFixedArray(allocation_len)->ToObjectChecked();
941
+ CHECK(!array->IsFailure());
923
942
  CHECK(new_space->Contains(array));
924
943
  }
925
944
 
@@ -928,12 +947,12 @@ TEST(Regression39128) {
928
947
  int fixed_array_len = LenFromSize(to_fill);
929
948
  CHECK(fixed_array_len < FixedArray::kMaxLength);
930
949
 
931
- CHECK(!Heap::always_allocate());
932
- Object* array =
933
- Heap::AllocateFixedArray(fixed_array_len)->ToObjectChecked();
950
+ CHECK(!HEAP->always_allocate());
951
+ Object* array = HEAP->AllocateFixedArray(fixed_array_len)->ToObjectChecked();
952
+ CHECK(!array->IsFailure());
934
953
  CHECK(new_space->Contains(array));
935
954
 
936
- Object* object = Heap::AllocateJSObjectFromMap(*my_map)->ToObjectChecked();
955
+ Object* object = HEAP->AllocateJSObjectFromMap(*my_map)->ToObjectChecked();
937
956
  CHECK(new_space->Contains(object));
938
957
  JSObject* jsobject = JSObject::cast(object);
939
958
  CHECK_EQ(0, FixedArray::cast(jsobject->elements())->length());
@@ -945,15 +964,15 @@ TEST(Regression39128) {
945
964
 
946
965
  // Step 4: clone jsobject, but force always allocate first to create a clone
947
966
  // in old pointer space.
948
- Address old_pointer_space_top = Heap::old_pointer_space()->top();
967
+ Address old_pointer_space_top = HEAP->old_pointer_space()->top();
949
968
  AlwaysAllocateScope aa_scope;
950
- Object* clone_obj = Heap::CopyJSObject(jsobject)->ToObjectChecked();
969
+ Object* clone_obj = HEAP->CopyJSObject(jsobject)->ToObjectChecked();
951
970
  JSObject* clone = JSObject::cast(clone_obj);
952
971
  if (clone->address() != old_pointer_space_top) {
953
972
  // Alas, got allocated from free list, we cannot do checks.
954
973
  return;
955
974
  }
956
- CHECK(Heap::old_pointer_space()->Contains(clone->address()));
975
+ CHECK(HEAP->old_pointer_space()->Contains(clone->address()));
957
976
 
958
977
  // Step 5: verify validity of region dirty marks.
959
978
  Address clone_addr = clone->address();
@@ -975,7 +994,7 @@ TEST(TestCodeFlushing) {
975
994
  " var z = x + y;"
976
995
  "};"
977
996
  "foo()";
978
- Handle<String> foo_name = Factory::LookupAsciiSymbol("foo");
997
+ Handle<String> foo_name = FACTORY->LookupAsciiSymbol("foo");
979
998
 
980
999
  // This compile will add the code to the compilation cache.
981
1000
  { v8::HandleScope scope;
@@ -983,23 +1002,23 @@ TEST(TestCodeFlushing) {
983
1002
  }
984
1003
 
985
1004
  // Check function is compiled.
986
- Object* func_value =
987
- Top::context()->global()->GetProperty(*foo_name)->ToObjectChecked();
1005
+ Object* func_value = Isolate::Current()->context()->global()->
1006
+ GetProperty(*foo_name)->ToObjectChecked();
988
1007
  CHECK(func_value->IsJSFunction());
989
1008
  Handle<JSFunction> function(JSFunction::cast(func_value));
990
1009
  CHECK(function->shared()->is_compiled());
991
1010
 
992
- Heap::CollectAllGarbage(true);
993
- Heap::CollectAllGarbage(true);
1011
+ HEAP->CollectAllGarbage(true);
1012
+ HEAP->CollectAllGarbage(true);
994
1013
 
995
1014
  CHECK(function->shared()->is_compiled());
996
1015
 
997
- Heap::CollectAllGarbage(true);
998
- Heap::CollectAllGarbage(true);
999
- Heap::CollectAllGarbage(true);
1000
- Heap::CollectAllGarbage(true);
1001
- Heap::CollectAllGarbage(true);
1002
- Heap::CollectAllGarbage(true);
1016
+ HEAP->CollectAllGarbage(true);
1017
+ HEAP->CollectAllGarbage(true);
1018
+ HEAP->CollectAllGarbage(true);
1019
+ HEAP->CollectAllGarbage(true);
1020
+ HEAP->CollectAllGarbage(true);
1021
+ HEAP->CollectAllGarbage(true);
1003
1022
 
1004
1023
  // foo should no longer be in the compilation cache
1005
1024
  CHECK(!function->shared()->is_compiled() || function->IsOptimized());
@@ -1014,7 +1033,7 @@ TEST(TestCodeFlushing) {
1014
1033
  // Count the number of global contexts in the weak list of global contexts.
1015
1034
  static int CountGlobalContexts() {
1016
1035
  int count = 0;
1017
- Object* object = Heap::global_contexts_list();
1036
+ Object* object = HEAP->global_contexts_list();
1018
1037
  while (!object->IsUndefined()) {
1019
1038
  count++;
1020
1039
  object = Context::cast(object)->get(Context::NEXT_CONTEXT_LINK);
@@ -1038,6 +1057,8 @@ static int CountOptimizedUserFunctions(v8::Handle<v8::Context> context) {
1038
1057
 
1039
1058
 
1040
1059
  TEST(TestInternalWeakLists) {
1060
+ v8::V8::Initialize();
1061
+
1041
1062
  static const int kNumTestContexts = 10;
1042
1063
 
1043
1064
  v8::HandleScope scope;
@@ -1081,35 +1102,35 @@ TEST(TestInternalWeakLists) {
1081
1102
 
1082
1103
  // Scavenge treats these references as strong.
1083
1104
  for (int j = 0; j < 10; j++) {
1084
- Heap::PerformScavenge();
1105
+ HEAP->PerformScavenge();
1085
1106
  CHECK_EQ(opt ? 5 : 0, CountOptimizedUserFunctions(ctx[i]));
1086
1107
  }
1087
1108
 
1088
1109
  // Mark compact handles the weak references.
1089
- Heap::CollectAllGarbage(true);
1110
+ HEAP->CollectAllGarbage(true);
1090
1111
  CHECK_EQ(opt ? 4 : 0, CountOptimizedUserFunctions(ctx[i]));
1091
1112
 
1092
1113
  // Get rid of f3 and f5 in the same way.
1093
1114
  CompileRun("f3=null");
1094
1115
  for (int j = 0; j < 10; j++) {
1095
- Heap::PerformScavenge();
1116
+ HEAP->PerformScavenge();
1096
1117
  CHECK_EQ(opt ? 4 : 0, CountOptimizedUserFunctions(ctx[i]));
1097
1118
  }
1098
- Heap::CollectAllGarbage(true);
1119
+ HEAP->CollectAllGarbage(true);
1099
1120
  CHECK_EQ(opt ? 3 : 0, CountOptimizedUserFunctions(ctx[i]));
1100
1121
  CompileRun("f5=null");
1101
1122
  for (int j = 0; j < 10; j++) {
1102
- Heap::PerformScavenge();
1123
+ HEAP->PerformScavenge();
1103
1124
  CHECK_EQ(opt ? 3 : 0, CountOptimizedUserFunctions(ctx[i]));
1104
1125
  }
1105
- Heap::CollectAllGarbage(true);
1126
+ HEAP->CollectAllGarbage(true);
1106
1127
  CHECK_EQ(opt ? 2 : 0, CountOptimizedUserFunctions(ctx[i]));
1107
1128
 
1108
1129
  ctx[i]->Exit();
1109
1130
  }
1110
1131
 
1111
1132
  // Force compilation cache cleanup.
1112
- Heap::CollectAllGarbage(true);
1133
+ HEAP->CollectAllGarbage(true);
1113
1134
 
1114
1135
  // Dispose the global contexts one by one.
1115
1136
  for (int i = 0; i < kNumTestContexts; i++) {
@@ -1118,12 +1139,12 @@ TEST(TestInternalWeakLists) {
1118
1139
 
1119
1140
  // Scavenge treats these references as strong.
1120
1141
  for (int j = 0; j < 10; j++) {
1121
- Heap::PerformScavenge();
1142
+ HEAP->PerformScavenge();
1122
1143
  CHECK_EQ(kNumTestContexts - i, CountGlobalContexts());
1123
1144
  }
1124
1145
 
1125
1146
  // Mark compact handles the weak references.
1126
- Heap::CollectAllGarbage(true);
1147
+ HEAP->CollectAllGarbage(true);
1127
1148
  CHECK_EQ(kNumTestContexts - i - 1, CountGlobalContexts());
1128
1149
  }
1129
1150
 
@@ -1135,10 +1156,10 @@ TEST(TestInternalWeakLists) {
1135
1156
  // causing a GC after the specified number of elements.
1136
1157
  static int CountGlobalContextsWithGC(int n) {
1137
1158
  int count = 0;
1138
- Handle<Object> object(Heap::global_contexts_list());
1159
+ Handle<Object> object(HEAP->global_contexts_list());
1139
1160
  while (!object->IsUndefined()) {
1140
1161
  count++;
1141
- if (count == n) Heap::CollectAllGarbage(true);
1162
+ if (count == n) HEAP->CollectAllGarbage(true);
1142
1163
  object =
1143
1164
  Handle<Object>(Context::cast(*object)->get(Context::NEXT_CONTEXT_LINK));
1144
1165
  }
@@ -1157,7 +1178,7 @@ static int CountOptimizedUserFunctionsWithGC(v8::Handle<v8::Context> context,
1157
1178
  while (object->IsJSFunction() &&
1158
1179
  !Handle<JSFunction>::cast(object)->IsBuiltin()) {
1159
1180
  count++;
1160
- if (count == n) Heap::CollectAllGarbage(true);
1181
+ if (count == n) HEAP->CollectAllGarbage(true);
1161
1182
  object = Handle<Object>(
1162
1183
  Object::cast(JSFunction::cast(*object)->next_function_link()));
1163
1184
  }
@@ -1166,6 +1187,8 @@ static int CountOptimizedUserFunctionsWithGC(v8::Handle<v8::Context> context,
1166
1187
 
1167
1188
 
1168
1189
  TEST(TestInternalWeakListsTraverseWithGC) {
1190
+ v8::V8::Initialize();
1191
+
1169
1192
  static const int kNumTestContexts = 10;
1170
1193
 
1171
1194
  v8::HandleScope scope;
@@ -1215,7 +1238,7 @@ TEST(TestInternalWeakListsTraverseWithGC) {
1215
1238
 
1216
1239
  TEST(TestSizeOfObjectsVsHeapIteratorPrecision) {
1217
1240
  InitializeVM();
1218
- intptr_t size_of_objects_1 = Heap::SizeOfObjects();
1241
+ intptr_t size_of_objects_1 = HEAP->SizeOfObjects();
1219
1242
  HeapIterator iterator(HeapIterator::kFilterFreeListNodes);
1220
1243
  intptr_t size_of_objects_2 = 0;
1221
1244
  for (HeapObject* obj = iterator.next();
@@ -1270,10 +1293,10 @@ TEST(HeapIteratorFilterUnreachable) {
1270
1293
  InitializeVM();
1271
1294
  v8::HandleScope scope;
1272
1295
  CompileRun("a = {}; b = {};");
1273
- v8::Handle<Object> a(Top::context()->global()->GetProperty(
1274
- *Factory::LookupAsciiSymbol("a"))->ToObjectChecked());
1275
- v8::Handle<Object> b(Top::context()->global()->GetProperty(
1276
- *Factory::LookupAsciiSymbol("b"))->ToObjectChecked());
1296
+ v8::Handle<Object> a(ISOLATE->context()->global()->GetProperty(
1297
+ *FACTORY->LookupAsciiSymbol("a"))->ToObjectChecked());
1298
+ v8::Handle<Object> b(ISOLATE->context()->global()->GetProperty(
1299
+ *FACTORY->LookupAsciiSymbol("b"))->ToObjectChecked());
1277
1300
  CHECK_NE(*a, *b);
1278
1301
  {
1279
1302
  HeapIteratorTestHelper helper(*a, *b);
@@ -1281,8 +1304,8 @@ TEST(HeapIteratorFilterUnreachable) {
1281
1304
  CHECK(helper.a_found());
1282
1305
  CHECK(helper.b_found());
1283
1306
  }
1284
- CHECK(Top::context()->global()->DeleteProperty(
1285
- *Factory::LookupAsciiSymbol("a"), JSObject::FORCE_DELETION));
1307
+ CHECK(ISOLATE->context()->global()->DeleteProperty(
1308
+ *FACTORY->LookupAsciiSymbol("a"), JSObject::FORCE_DELETION));
1286
1309
  // We ensure that GC will not happen, so our raw pointer stays valid.
1287
1310
  AssertNoAllocation no_alloc;
1288
1311
  Object* a_saved = *a;