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
@@ -0,0 +1,89 @@
1
+ // Copyright 2011 the V8 project authors. All rights reserved.
2
+ // Redistribution and use in source and binary forms, with or without
3
+ // modification, are permitted provided that the following conditions are
4
+ // met:
5
+ //
6
+ // * Redistributions of source code must retain the above copyright
7
+ // notice, this list of conditions and the following disclaimer.
8
+ // * Redistributions in binary form must reproduce the above
9
+ // copyright notice, this list of conditions and the following
10
+ // disclaimer in the documentation and/or other materials provided
11
+ // with the distribution.
12
+ // * Neither the name of Google Inc. nor the names of its
13
+ // contributors may be used to endorse or promote products derived
14
+ // from this software without specific prior written permission.
15
+ //
16
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+
28
+ #ifndef V8_EXTENSIONS_EXPERIMENTAL_BREAK_ITERATOR_H_
29
+ #define V8_EXTENSIONS_EXPERIMENTAL_BREAK_ITERATOR_H_
30
+
31
+ #include <v8.h>
32
+
33
+ #include "unicode/uversion.h"
34
+
35
+ namespace U_ICU_NAMESPACE {
36
+ class BreakIterator;
37
+ class UnicodeString;
38
+ }
39
+
40
+ namespace v8 {
41
+ namespace internal {
42
+
43
+ class BreakIterator {
44
+ public:
45
+ static v8::Handle<v8::Value> JSBreakIterator(const v8::Arguments& args);
46
+
47
+ // Helper methods for various bindings.
48
+
49
+ // Unpacks break iterator object from corresponding JavaScript object.
50
+ static icu::BreakIterator* UnpackBreakIterator(v8::Handle<v8::Object> obj);
51
+
52
+ // Deletes the old value and sets the adopted text in
53
+ // corresponding JavaScript object.
54
+ static icu::UnicodeString* ResetAdoptedText(v8::Handle<v8::Object> obj,
55
+ v8::Handle<v8::Value> text_value);
56
+
57
+ // Release memory we allocated for the BreakIterator once the JS object that
58
+ // holds the pointer gets garbage collected.
59
+ static void DeleteBreakIterator(v8::Persistent<v8::Value> object,
60
+ void* param);
61
+
62
+ // Assigns new text to the iterator.
63
+ static v8::Handle<v8::Value> BreakIteratorAdoptText(
64
+ const v8::Arguments& args);
65
+
66
+ // Moves iterator to the beginning of the string and returns new position.
67
+ static v8::Handle<v8::Value> BreakIteratorFirst(const v8::Arguments& args);
68
+
69
+ // Moves iterator to the next position and returns it.
70
+ static v8::Handle<v8::Value> BreakIteratorNext(const v8::Arguments& args);
71
+
72
+ // Returns current iterator's current position.
73
+ static v8::Handle<v8::Value> BreakIteratorCurrent(
74
+ const v8::Arguments& args);
75
+
76
+ // Returns type of the item from current position.
77
+ // This call is only valid for word break iterators. Others just return 0.
78
+ static v8::Handle<v8::Value> BreakIteratorBreakType(
79
+ const v8::Arguments& args);
80
+
81
+ private:
82
+ BreakIterator() {}
83
+
84
+ static v8::Persistent<v8::FunctionTemplate> break_iterator_template_;
85
+ };
86
+
87
+ } } // namespace v8::internal
88
+
89
+ #endif // V8_EXTENSIONS_EXPERIMENTAL_BREAK_ITERATOR_H_
@@ -37,6 +37,8 @@
37
37
  'target_name': 'i18n_api',
38
38
  'type': 'static_library',
39
39
  'sources': [
40
+ 'break-iterator.cc',
41
+ 'break-iterator.h',
40
42
  'i18n-extension.cc',
41
43
  'i18n-extension.h',
42
44
  ],
@@ -30,6 +30,7 @@
30
30
  #include <algorithm>
31
31
  #include <string>
32
32
 
33
+ #include "break-iterator.h"
33
34
  #include "unicode/locid.h"
34
35
  #include "unicode/uloc.h"
35
36
 
@@ -87,6 +88,23 @@ const char* const I18NExtension::kSource =
87
88
  " var displayLocale = this.displayLocale_(optDisplayLocale);"
88
89
  " native function NativeJSDisplayName();"
89
90
  " return NativeJSDisplayName(this.locale, displayLocale);"
91
+ "};"
92
+ "v8Locale.v8BreakIterator = function(locale, type) {"
93
+ " native function NativeJSBreakIterator();"
94
+ " var iterator = NativeJSBreakIterator(locale, type);"
95
+ " iterator.type = type;"
96
+ " return iterator;"
97
+ "};"
98
+ "v8Locale.v8BreakIterator.BreakType = {"
99
+ " 'unknown': -1,"
100
+ " 'none': 0,"
101
+ " 'number': 100,"
102
+ " 'word': 200,"
103
+ " 'kana': 300,"
104
+ " 'ideo': 400"
105
+ "};"
106
+ "v8Locale.prototype.v8CreateBreakIterator = function(type) {"
107
+ " return new v8Locale.v8BreakIterator(this.locale, type);"
90
108
  "};";
91
109
 
92
110
  v8::Handle<v8::FunctionTemplate> I18NExtension::GetNativeFunction(
@@ -107,6 +125,8 @@ v8::Handle<v8::FunctionTemplate> I18NExtension::GetNativeFunction(
107
125
  return v8::FunctionTemplate::New(JSDisplayRegion);
108
126
  } else if (name->Equals(v8::String::New("NativeJSDisplayName"))) {
109
127
  return v8::FunctionTemplate::New(JSDisplayName);
128
+ } else if (name->Equals(v8::String::New("NativeJSBreakIterator"))) {
129
+ return v8::FunctionTemplate::New(BreakIterator::JSBreakIterator);
110
130
  }
111
131
 
112
132
  return v8::Handle<v8::FunctionTemplate>();
@@ -147,7 +167,7 @@ v8::Handle<v8::Value> I18NExtension::JSAvailableLocales(
147
167
  v8::Local<v8::Array> all_locales = v8::Array::New();
148
168
 
149
169
  int count = 0;
150
- const Locale* icu_locales = icu::Locale::getAvailableLocales(count);
170
+ const icu::Locale* icu_locales = icu::Locale::getAvailableLocales(count);
151
171
  for (int i = 0; i < count; ++i) {
152
172
  all_locales->Set(i, v8::String::New(icu_locales[i].getName()));
153
173
  }
@@ -210,7 +230,7 @@ static v8::Handle<v8::Value> GetDisplayItem(const v8::Arguments& args,
210
230
  icu::Locale icu_locale(base_locale.c_str());
211
231
  icu::Locale display_locale =
212
232
  icu::Locale(*v8::String::Utf8Value(args[1]->ToString()));
213
- UnicodeString result;
233
+ icu::UnicodeString result;
214
234
  if (item == "language") {
215
235
  icu_locale.getDisplayLanguage(display_locale, result);
216
236
  } else if (item == "script") {
@@ -100,7 +100,7 @@ v8::Handle<v8::Value> ExternalizeStringExtension::Externalize(
100
100
  data, string->length());
101
101
  result = string->MakeExternal(resource);
102
102
  if (result && !string->IsSymbol()) {
103
- i::ExternalStringTable::AddString(*string);
103
+ HEAP->external_string_table()->AddString(*string);
104
104
  }
105
105
  if (!result) delete resource;
106
106
  } else {
@@ -110,7 +110,7 @@ v8::Handle<v8::Value> ExternalizeStringExtension::Externalize(
110
110
  data, string->length());
111
111
  result = string->MakeExternal(resource);
112
112
  if (result && !string->IsSymbol()) {
113
- i::ExternalStringTable::AddString(*string);
113
+ HEAP->external_string_table()->AddString(*string);
114
114
  }
115
115
  if (!result) delete resource;
116
116
  }
@@ -45,7 +45,7 @@ v8::Handle<v8::Value> GCExtension::GC(const v8::Arguments& args) {
45
45
  if (args.Length() >= 1 && args[0]->IsBoolean()) {
46
46
  compact = args[0]->BooleanValue();
47
47
  }
48
- Heap::CollectAllGarbage(compact);
48
+ HEAP->CollectAllGarbage(compact);
49
49
  return v8::Undefined();
50
50
  }
51
51
 
@@ -41,35 +41,43 @@ namespace internal {
41
41
 
42
42
  Handle<FixedArray> Factory::NewFixedArray(int size, PretenureFlag pretenure) {
43
43
  ASSERT(0 <= size);
44
- CALL_HEAP_FUNCTION(Heap::AllocateFixedArray(size, pretenure), FixedArray);
44
+ CALL_HEAP_FUNCTION(
45
+ isolate(),
46
+ isolate()->heap()->AllocateFixedArray(size, pretenure),
47
+ FixedArray);
45
48
  }
46
49
 
47
50
 
48
51
  Handle<FixedArray> Factory::NewFixedArrayWithHoles(int size,
49
52
  PretenureFlag pretenure) {
50
53
  ASSERT(0 <= size);
51
- CALL_HEAP_FUNCTION(Heap::AllocateFixedArrayWithHoles(size, pretenure),
52
- FixedArray);
54
+ CALL_HEAP_FUNCTION(
55
+ isolate(),
56
+ isolate()->heap()->AllocateFixedArrayWithHoles(size, pretenure),
57
+ FixedArray);
53
58
  }
54
59
 
55
60
 
56
61
  Handle<StringDictionary> Factory::NewStringDictionary(int at_least_space_for) {
57
62
  ASSERT(0 <= at_least_space_for);
58
- CALL_HEAP_FUNCTION(StringDictionary::Allocate(at_least_space_for),
63
+ CALL_HEAP_FUNCTION(isolate(),
64
+ StringDictionary::Allocate(at_least_space_for),
59
65
  StringDictionary);
60
66
  }
61
67
 
62
68
 
63
69
  Handle<NumberDictionary> Factory::NewNumberDictionary(int at_least_space_for) {
64
70
  ASSERT(0 <= at_least_space_for);
65
- CALL_HEAP_FUNCTION(NumberDictionary::Allocate(at_least_space_for),
71
+ CALL_HEAP_FUNCTION(isolate(),
72
+ NumberDictionary::Allocate(at_least_space_for),
66
73
  NumberDictionary);
67
74
  }
68
75
 
69
76
 
70
77
  Handle<DescriptorArray> Factory::NewDescriptorArray(int number_of_descriptors) {
71
78
  ASSERT(0 <= number_of_descriptors);
72
- CALL_HEAP_FUNCTION(DescriptorArray::Allocate(number_of_descriptors),
79
+ CALL_HEAP_FUNCTION(isolate(),
80
+ DescriptorArray::Allocate(number_of_descriptors),
73
81
  DescriptorArray);
74
82
  }
75
83
 
@@ -78,7 +86,8 @@ Handle<DeoptimizationInputData> Factory::NewDeoptimizationInputData(
78
86
  int deopt_entry_count,
79
87
  PretenureFlag pretenure) {
80
88
  ASSERT(deopt_entry_count > 0);
81
- CALL_HEAP_FUNCTION(DeoptimizationInputData::Allocate(deopt_entry_count,
89
+ CALL_HEAP_FUNCTION(isolate(),
90
+ DeoptimizationInputData::Allocate(deopt_entry_count,
82
91
  pretenure),
83
92
  DeoptimizationInputData);
84
93
  }
@@ -88,7 +97,8 @@ Handle<DeoptimizationOutputData> Factory::NewDeoptimizationOutputData(
88
97
  int deopt_entry_count,
89
98
  PretenureFlag pretenure) {
90
99
  ASSERT(deopt_entry_count > 0);
91
- CALL_HEAP_FUNCTION(DeoptimizationOutputData::Allocate(deopt_entry_count,
100
+ CALL_HEAP_FUNCTION(isolate(),
101
+ DeoptimizationOutputData::Allocate(deopt_entry_count,
92
102
  pretenure),
93
103
  DeoptimizationOutputData);
94
104
  }
@@ -96,96 +106,137 @@ Handle<DeoptimizationOutputData> Factory::NewDeoptimizationOutputData(
96
106
 
97
107
  // Symbols are created in the old generation (data space).
98
108
  Handle<String> Factory::LookupSymbol(Vector<const char> string) {
99
- CALL_HEAP_FUNCTION(Heap::LookupSymbol(string), String);
109
+ CALL_HEAP_FUNCTION(isolate(),
110
+ isolate()->heap()->LookupSymbol(string),
111
+ String);
100
112
  }
101
113
 
102
114
  Handle<String> Factory::LookupAsciiSymbol(Vector<const char> string) {
103
- CALL_HEAP_FUNCTION(Heap::LookupAsciiSymbol(string), String);
115
+ CALL_HEAP_FUNCTION(isolate(),
116
+ isolate()->heap()->LookupAsciiSymbol(string),
117
+ String);
104
118
  }
105
119
 
106
120
  Handle<String> Factory::LookupTwoByteSymbol(Vector<const uc16> string) {
107
- CALL_HEAP_FUNCTION(Heap::LookupTwoByteSymbol(string), String);
121
+ CALL_HEAP_FUNCTION(isolate(),
122
+ isolate()->heap()->LookupTwoByteSymbol(string),
123
+ String);
108
124
  }
109
125
 
110
126
 
111
127
  Handle<String> Factory::NewStringFromAscii(Vector<const char> string,
112
128
  PretenureFlag pretenure) {
113
- CALL_HEAP_FUNCTION(Heap::AllocateStringFromAscii(string, pretenure), String);
129
+ CALL_HEAP_FUNCTION(
130
+ isolate(),
131
+ isolate()->heap()->AllocateStringFromAscii(string, pretenure),
132
+ String);
114
133
  }
115
134
 
116
135
  Handle<String> Factory::NewStringFromUtf8(Vector<const char> string,
117
136
  PretenureFlag pretenure) {
118
- CALL_HEAP_FUNCTION(Heap::AllocateStringFromUtf8(string, pretenure), String);
137
+ CALL_HEAP_FUNCTION(
138
+ isolate(),
139
+ isolate()->heap()->AllocateStringFromUtf8(string, pretenure),
140
+ String);
119
141
  }
120
142
 
121
143
 
122
144
  Handle<String> Factory::NewStringFromTwoByte(Vector<const uc16> string,
123
145
  PretenureFlag pretenure) {
124
- CALL_HEAP_FUNCTION(Heap::AllocateStringFromTwoByte(string, pretenure),
125
- String);
146
+ CALL_HEAP_FUNCTION(
147
+ isolate(),
148
+ isolate()->heap()->AllocateStringFromTwoByte(string, pretenure),
149
+ String);
126
150
  }
127
151
 
128
152
 
129
153
  Handle<String> Factory::NewRawAsciiString(int length,
130
154
  PretenureFlag pretenure) {
131
- CALL_HEAP_FUNCTION(Heap::AllocateRawAsciiString(length, pretenure), String);
155
+ CALL_HEAP_FUNCTION(
156
+ isolate(),
157
+ isolate()->heap()->AllocateRawAsciiString(length, pretenure),
158
+ String);
132
159
  }
133
160
 
134
161
 
135
162
  Handle<String> Factory::NewRawTwoByteString(int length,
136
163
  PretenureFlag pretenure) {
137
- CALL_HEAP_FUNCTION(Heap::AllocateRawTwoByteString(length, pretenure), String);
164
+ CALL_HEAP_FUNCTION(
165
+ isolate(),
166
+ isolate()->heap()->AllocateRawTwoByteString(length, pretenure),
167
+ String);
138
168
  }
139
169
 
140
170
 
141
171
  Handle<String> Factory::NewConsString(Handle<String> first,
142
172
  Handle<String> second) {
143
- CALL_HEAP_FUNCTION(Heap::AllocateConsString(*first, *second), String);
173
+ CALL_HEAP_FUNCTION(isolate(),
174
+ isolate()->heap()->AllocateConsString(*first, *second),
175
+ String);
144
176
  }
145
177
 
146
178
 
147
179
  Handle<String> Factory::NewSubString(Handle<String> str,
148
180
  int begin,
149
181
  int end) {
150
- CALL_HEAP_FUNCTION(str->SubString(begin, end), String);
182
+ CALL_HEAP_FUNCTION(isolate(),
183
+ str->SubString(begin, end),
184
+ String);
151
185
  }
152
186
 
153
187
 
154
188
  Handle<String> Factory::NewExternalStringFromAscii(
155
189
  ExternalAsciiString::Resource* resource) {
156
- CALL_HEAP_FUNCTION(Heap::AllocateExternalStringFromAscii(resource), String);
190
+ CALL_HEAP_FUNCTION(
191
+ isolate(),
192
+ isolate()->heap()->AllocateExternalStringFromAscii(resource),
193
+ String);
157
194
  }
158
195
 
159
196
 
160
197
  Handle<String> Factory::NewExternalStringFromTwoByte(
161
198
  ExternalTwoByteString::Resource* resource) {
162
- CALL_HEAP_FUNCTION(Heap::AllocateExternalStringFromTwoByte(resource), String);
199
+ CALL_HEAP_FUNCTION(
200
+ isolate(),
201
+ isolate()->heap()->AllocateExternalStringFromTwoByte(resource),
202
+ String);
163
203
  }
164
204
 
165
205
 
166
206
  Handle<Context> Factory::NewGlobalContext() {
167
- CALL_HEAP_FUNCTION(Heap::AllocateGlobalContext(), Context);
207
+ CALL_HEAP_FUNCTION(
208
+ isolate(),
209
+ isolate()->heap()->AllocateGlobalContext(),
210
+ Context);
168
211
  }
169
212
 
170
213
 
171
214
  Handle<Context> Factory::NewFunctionContext(int length,
172
215
  Handle<JSFunction> closure) {
173
- CALL_HEAP_FUNCTION(Heap::AllocateFunctionContext(length, *closure), Context);
216
+ CALL_HEAP_FUNCTION(
217
+ isolate(),
218
+ isolate()->heap()->AllocateFunctionContext(length, *closure),
219
+ Context);
174
220
  }
175
221
 
176
222
 
177
223
  Handle<Context> Factory::NewWithContext(Handle<Context> previous,
178
224
  Handle<JSObject> extension,
179
225
  bool is_catch_context) {
180
- CALL_HEAP_FUNCTION(Heap::AllocateWithContext(*previous,
181
- *extension,
182
- is_catch_context),
183
- Context);
226
+ CALL_HEAP_FUNCTION(
227
+ isolate(),
228
+ isolate()->heap()->AllocateWithContext(*previous,
229
+ *extension,
230
+ is_catch_context),
231
+ Context);
184
232
  }
185
233
 
186
234
 
187
235
  Handle<Struct> Factory::NewStruct(InstanceType type) {
188
- CALL_HEAP_FUNCTION(Heap::AllocateStruct(type), Struct);
236
+ CALL_HEAP_FUNCTION(
237
+ isolate(),
238
+ isolate()->heap()->AllocateStruct(type),
239
+ Struct);
189
240
  }
190
241
 
191
242
 
@@ -200,34 +251,35 @@ Handle<AccessorInfo> Factory::NewAccessorInfo() {
200
251
  Handle<Script> Factory::NewScript(Handle<String> source) {
201
252
  // Generate id for this script.
202
253
  int id;
203
- if (Heap::last_script_id()->IsUndefined()) {
254
+ Heap* heap = isolate()->heap();
255
+ if (heap->last_script_id()->IsUndefined()) {
204
256
  // Script ids start from one.
205
257
  id = 1;
206
258
  } else {
207
259
  // Increment id, wrap when positive smi is exhausted.
208
- id = Smi::cast(Heap::last_script_id())->value();
260
+ id = Smi::cast(heap->last_script_id())->value();
209
261
  id++;
210
262
  if (!Smi::IsValid(id)) {
211
263
  id = 0;
212
264
  }
213
265
  }
214
- Heap::SetLastScriptId(Smi::FromInt(id));
266
+ heap->SetLastScriptId(Smi::FromInt(id));
215
267
 
216
268
  // Create and initialize script object.
217
- Handle<Proxy> wrapper = Factory::NewProxy(0, TENURED);
269
+ Handle<Proxy> wrapper = NewProxy(0, TENURED);
218
270
  Handle<Script> script = Handle<Script>::cast(NewStruct(SCRIPT_TYPE));
219
271
  script->set_source(*source);
220
- script->set_name(Heap::undefined_value());
221
- script->set_id(Heap::last_script_id());
272
+ script->set_name(heap->undefined_value());
273
+ script->set_id(heap->last_script_id());
222
274
  script->set_line_offset(Smi::FromInt(0));
223
275
  script->set_column_offset(Smi::FromInt(0));
224
- script->set_data(Heap::undefined_value());
225
- script->set_context_data(Heap::undefined_value());
276
+ script->set_data(heap->undefined_value());
277
+ script->set_context_data(heap->undefined_value());
226
278
  script->set_type(Smi::FromInt(Script::TYPE_NORMAL));
227
279
  script->set_compilation_type(Smi::FromInt(Script::COMPILATION_TYPE_HOST));
228
280
  script->set_wrapper(*wrapper);
229
- script->set_line_ends(Heap::undefined_value());
230
- script->set_eval_from_shared(Heap::undefined_value());
281
+ script->set_line_ends(heap->undefined_value());
282
+ script->set_eval_from_shared(heap->undefined_value());
231
283
  script->set_eval_from_instructions_offset(Smi::FromInt(0));
232
284
 
233
285
  return script;
@@ -235,7 +287,9 @@ Handle<Script> Factory::NewScript(Handle<String> source) {
235
287
 
236
288
 
237
289
  Handle<Proxy> Factory::NewProxy(Address addr, PretenureFlag pretenure) {
238
- CALL_HEAP_FUNCTION(Heap::AllocateProxy(addr, pretenure), Proxy);
290
+ CALL_HEAP_FUNCTION(isolate(),
291
+ isolate()->heap()->AllocateProxy(addr, pretenure),
292
+ Proxy);
239
293
  }
240
294
 
241
295
 
@@ -246,17 +300,10 @@ Handle<Proxy> Factory::NewProxy(const AccessorDescriptor* desc) {
246
300
 
247
301
  Handle<ByteArray> Factory::NewByteArray(int length, PretenureFlag pretenure) {
248
302
  ASSERT(0 <= length);
249
- CALL_HEAP_FUNCTION(Heap::AllocateByteArray(length, pretenure), ByteArray);
250
- }
251
-
252
-
253
- Handle<PixelArray> Factory::NewPixelArray(int length,
254
- uint8_t* external_pointer,
255
- PretenureFlag pretenure) {
256
- ASSERT(0 <= length);
257
- CALL_HEAP_FUNCTION(Heap::AllocatePixelArray(length,
258
- external_pointer,
259
- pretenure), PixelArray);
303
+ CALL_HEAP_FUNCTION(
304
+ isolate(),
305
+ isolate()->heap()->AllocateByteArray(length, pretenure),
306
+ ByteArray);
260
307
  }
261
308
 
262
309
 
@@ -265,32 +312,43 @@ Handle<ExternalArray> Factory::NewExternalArray(int length,
265
312
  void* external_pointer,
266
313
  PretenureFlag pretenure) {
267
314
  ASSERT(0 <= length);
268
- CALL_HEAP_FUNCTION(Heap::AllocateExternalArray(length,
269
- array_type,
270
- external_pointer,
271
- pretenure), ExternalArray);
315
+ CALL_HEAP_FUNCTION(
316
+ isolate(),
317
+ isolate()->heap()->AllocateExternalArray(length,
318
+ array_type,
319
+ external_pointer,
320
+ pretenure),
321
+ ExternalArray);
272
322
  }
273
323
 
274
324
 
275
325
  Handle<JSGlobalPropertyCell> Factory::NewJSGlobalPropertyCell(
276
326
  Handle<Object> value) {
277
- CALL_HEAP_FUNCTION(Heap::AllocateJSGlobalPropertyCell(*value),
278
- JSGlobalPropertyCell);
327
+ CALL_HEAP_FUNCTION(
328
+ isolate(),
329
+ isolate()->heap()->AllocateJSGlobalPropertyCell(*value),
330
+ JSGlobalPropertyCell);
279
331
  }
280
332
 
281
333
 
282
334
  Handle<Map> Factory::NewMap(InstanceType type, int instance_size) {
283
- CALL_HEAP_FUNCTION(Heap::AllocateMap(type, instance_size), Map);
335
+ CALL_HEAP_FUNCTION(
336
+ isolate(),
337
+ isolate()->heap()->AllocateMap(type, instance_size),
338
+ Map);
284
339
  }
285
340
 
286
341
 
287
342
  Handle<JSObject> Factory::NewFunctionPrototype(Handle<JSFunction> function) {
288
- CALL_HEAP_FUNCTION(Heap::AllocateFunctionPrototype(*function), JSObject);
343
+ CALL_HEAP_FUNCTION(
344
+ isolate(),
345
+ isolate()->heap()->AllocateFunctionPrototype(*function),
346
+ JSObject);
289
347
  }
290
348
 
291
349
 
292
350
  Handle<Map> Factory::CopyMapDropDescriptors(Handle<Map> src) {
293
- CALL_HEAP_FUNCTION(src->CopyDropDescriptors(), Map);
351
+ CALL_HEAP_FUNCTION(isolate(), src->CopyDropDescriptors(), Map);
294
352
  }
295
353
 
296
354
 
@@ -320,27 +378,33 @@ Handle<Map> Factory::CopyMap(Handle<Map> src,
320
378
 
321
379
 
322
380
  Handle<Map> Factory::CopyMapDropTransitions(Handle<Map> src) {
323
- CALL_HEAP_FUNCTION(src->CopyDropTransitions(), Map);
381
+ CALL_HEAP_FUNCTION(isolate(), src->CopyDropTransitions(), Map);
324
382
  }
325
383
 
326
384
 
327
385
  Handle<Map> Factory::GetFastElementsMap(Handle<Map> src) {
328
- CALL_HEAP_FUNCTION(src->GetFastElementsMap(), Map);
386
+ CALL_HEAP_FUNCTION(isolate(), src->GetFastElementsMap(), Map);
329
387
  }
330
388
 
331
389
 
332
390
  Handle<Map> Factory::GetSlowElementsMap(Handle<Map> src) {
333
- CALL_HEAP_FUNCTION(src->GetSlowElementsMap(), Map);
391
+ CALL_HEAP_FUNCTION(isolate(), src->GetSlowElementsMap(), Map);
334
392
  }
335
393
 
336
394
 
337
- Handle<Map> Factory::GetPixelArrayElementsMap(Handle<Map> src) {
338
- CALL_HEAP_FUNCTION(src->GetPixelArrayElementsMap(), Map);
395
+ Handle<Map> Factory::GetExternalArrayElementsMap(
396
+ Handle<Map> src,
397
+ ExternalArrayType array_type,
398
+ bool safe_to_add_transition) {
399
+ CALL_HEAP_FUNCTION(isolate(),
400
+ src->GetExternalArrayElementsMap(array_type,
401
+ safe_to_add_transition),
402
+ Map);
339
403
  }
340
404
 
341
405
 
342
406
  Handle<FixedArray> Factory::CopyFixedArray(Handle<FixedArray> array) {
343
- CALL_HEAP_FUNCTION(array->Copy(), FixedArray);
407
+ CALL_HEAP_FUNCTION(isolate(), array->Copy(), FixedArray);
344
408
  }
345
409
 
346
410
 
@@ -348,10 +412,12 @@ Handle<JSFunction> Factory::BaseNewFunctionFromSharedFunctionInfo(
348
412
  Handle<SharedFunctionInfo> function_info,
349
413
  Handle<Map> function_map,
350
414
  PretenureFlag pretenure) {
351
- CALL_HEAP_FUNCTION(Heap::AllocateFunction(*function_map,
352
- *function_info,
353
- Heap::the_hole_value(),
354
- pretenure),
415
+ CALL_HEAP_FUNCTION(
416
+ isolate(),
417
+ isolate()->heap()->AllocateFunction(*function_map,
418
+ *function_info,
419
+ isolate()->heap()->the_hole_value(),
420
+ pretenure),
355
421
  JSFunction);
356
422
  }
357
423
 
@@ -361,11 +427,15 @@ Handle<JSFunction> Factory::NewFunctionFromSharedFunctionInfo(
361
427
  Handle<Context> context,
362
428
  PretenureFlag pretenure) {
363
429
  Handle<JSFunction> result = BaseNewFunctionFromSharedFunctionInfo(
364
- function_info, Top::function_map(), pretenure);
430
+ function_info,
431
+ function_info->strict_mode()
432
+ ? isolate()->strict_mode_function_map()
433
+ : isolate()->function_map(),
434
+ pretenure);
435
+
365
436
  result->set_context(*context);
366
437
  int number_of_literals = function_info->num_literals();
367
- Handle<FixedArray> literals =
368
- Factory::NewFixedArray(number_of_literals, pretenure);
438
+ Handle<FixedArray> literals = NewFixedArray(number_of_literals, pretenure);
369
439
  if (number_of_literals > 0) {
370
440
  // Store the object, regexp and array functions in the literals
371
441
  // array prefix. These functions will be used when creating
@@ -374,7 +444,7 @@ Handle<JSFunction> Factory::NewFunctionFromSharedFunctionInfo(
374
444
  context->global_context());
375
445
  }
376
446
  result->set_literals(*literals);
377
- result->set_next_function_link(Heap::undefined_value());
447
+ result->set_next_function_link(isolate()->heap()->undefined_value());
378
448
 
379
449
  if (V8::UseCrankshaft() &&
380
450
  FLAG_always_opt &&
@@ -389,23 +459,32 @@ Handle<JSFunction> Factory::NewFunctionFromSharedFunctionInfo(
389
459
 
390
460
  Handle<Object> Factory::NewNumber(double value,
391
461
  PretenureFlag pretenure) {
392
- CALL_HEAP_FUNCTION(Heap::NumberFromDouble(value, pretenure), Object);
462
+ CALL_HEAP_FUNCTION(
463
+ isolate(),
464
+ isolate()->heap()->NumberFromDouble(value, pretenure), Object);
393
465
  }
394
466
 
395
467
 
396
468
  Handle<Object> Factory::NewNumberFromInt(int value) {
397
- CALL_HEAP_FUNCTION(Heap::NumberFromInt32(value), Object);
469
+ CALL_HEAP_FUNCTION(
470
+ isolate(),
471
+ isolate()->heap()->NumberFromInt32(value), Object);
398
472
  }
399
473
 
400
474
 
401
475
  Handle<Object> Factory::NewNumberFromUint(uint32_t value) {
402
- CALL_HEAP_FUNCTION(Heap::NumberFromUint32(value), Object);
476
+ CALL_HEAP_FUNCTION(
477
+ isolate(),
478
+ isolate()->heap()->NumberFromUint32(value), Object);
403
479
  }
404
480
 
405
481
 
406
482
  Handle<JSObject> Factory::NewNeanderObject() {
407
- CALL_HEAP_FUNCTION(Heap::AllocateJSObjectFromMap(Heap::neander_map()),
408
- JSObject);
483
+ CALL_HEAP_FUNCTION(
484
+ isolate(),
485
+ isolate()->heap()->AllocateJSObjectFromMap(
486
+ isolate()->heap()->neander_map()),
487
+ JSObject);
409
488
  }
410
489
 
411
490
 
@@ -455,11 +534,11 @@ Handle<Object> Factory::NewReferenceError(Handle<String> message) {
455
534
  Handle<Object> Factory::NewError(const char* maker, const char* type,
456
535
  Vector< Handle<Object> > args) {
457
536
  v8::HandleScope scope; // Instantiate a closeable HandleScope for EscapeFrom.
458
- Handle<FixedArray> array = Factory::NewFixedArray(args.length());
537
+ Handle<FixedArray> array = NewFixedArray(args.length());
459
538
  for (int i = 0; i < args.length(); i++) {
460
539
  array->set(i, *args[i]);
461
540
  }
462
- Handle<JSArray> object = Factory::NewJSArrayWithElements(array);
541
+ Handle<JSArray> object = NewJSArrayWithElements(array);
463
542
  Handle<Object> result = NewError(maker, type, object);
464
543
  return result.EscapeFrom(&scope);
465
544
  }
@@ -480,15 +559,15 @@ Handle<Object> Factory::NewError(const char* type,
480
559
  Handle<Object> Factory::NewError(const char* maker,
481
560
  const char* type,
482
561
  Handle<JSArray> args) {
483
- Handle<String> make_str = Factory::LookupAsciiSymbol(maker);
484
- Handle<Object> fun_obj(Top::builtins()->GetPropertyNoExceptionThrown(
485
- *make_str));
562
+ Handle<String> make_str = LookupAsciiSymbol(maker);
563
+ Handle<Object> fun_obj(
564
+ isolate()->js_builtins_object()->GetPropertyNoExceptionThrown(*make_str));
486
565
  // If the builtins haven't been properly configured yet this error
487
566
  // constructor may not have been defined. Bail out.
488
567
  if (!fun_obj->IsJSFunction())
489
- return Factory::undefined_value();
568
+ return undefined_value();
490
569
  Handle<JSFunction> fun = Handle<JSFunction>::cast(fun_obj);
491
- Handle<Object> type_obj = Factory::LookupAsciiSymbol(type);
570
+ Handle<Object> type_obj = LookupAsciiSymbol(type);
492
571
  Object** argv[2] = { type_obj.location(),
493
572
  Handle<Object>::cast(args).location() };
494
573
 
@@ -496,10 +575,7 @@ Handle<Object> Factory::NewError(const char* maker,
496
575
  // running the factory method, use the exception as the result.
497
576
  bool caught_exception;
498
577
  Handle<Object> result = Execution::TryCall(fun,
499
- Top::builtins(),
500
- 2,
501
- argv,
502
- &caught_exception);
578
+ isolate()->js_builtins_object(), 2, argv, &caught_exception);
503
579
  return result;
504
580
  }
505
581
 
@@ -511,21 +587,17 @@ Handle<Object> Factory::NewError(Handle<String> message) {
511
587
 
512
588
  Handle<Object> Factory::NewError(const char* constructor,
513
589
  Handle<String> message) {
514
- Handle<String> constr = Factory::LookupAsciiSymbol(constructor);
515
- Handle<JSFunction> fun =
516
- Handle<JSFunction>(
517
- JSFunction::cast(
518
- Top::builtins()->GetPropertyNoExceptionThrown(*constr)));
590
+ Handle<String> constr = LookupAsciiSymbol(constructor);
591
+ Handle<JSFunction> fun = Handle<JSFunction>(
592
+ JSFunction::cast(isolate()->js_builtins_object()->
593
+ GetPropertyNoExceptionThrown(*constr)));
519
594
  Object** argv[1] = { Handle<Object>::cast(message).location() };
520
595
 
521
596
  // Invoke the JavaScript factory method. If an exception is thrown while
522
597
  // running the factory method, use the exception as the result.
523
598
  bool caught_exception;
524
599
  Handle<Object> result = Execution::TryCall(fun,
525
- Top::builtins(),
526
- 1,
527
- argv,
528
- &caught_exception);
600
+ isolate()->js_builtins_object(), 1, argv, &caught_exception);
529
601
  return result;
530
602
  }
531
603
 
@@ -586,15 +658,15 @@ Handle<JSFunction> Factory::NewFunctionWithPrototype(Handle<String> name,
586
658
  // property that refers to the function.
587
659
  SetPrototypeProperty(function, prototype);
588
660
  // Currently safe because it is only invoked from Genesis.
589
- SetLocalPropertyNoThrow(
590
- prototype, Factory::constructor_symbol(), function, DONT_ENUM);
661
+ SetLocalPropertyNoThrow(prototype, constructor_symbol(), function, DONT_ENUM);
591
662
  return function;
592
663
  }
593
664
 
594
665
 
595
666
  Handle<JSFunction> Factory::NewFunctionWithoutPrototype(Handle<String> name,
596
667
  Handle<Code> code) {
597
- Handle<JSFunction> function = NewFunctionWithoutPrototype(name);
668
+ Handle<JSFunction> function = NewFunctionWithoutPrototype(name,
669
+ kNonStrictMode);
598
670
  function->shared()->set_code(*code);
599
671
  function->set_code(*code);
600
672
  ASSERT(!function->has_initial_map());
@@ -605,18 +677,26 @@ Handle<JSFunction> Factory::NewFunctionWithoutPrototype(Handle<String> name,
605
677
 
606
678
  Handle<Code> Factory::NewCode(const CodeDesc& desc,
607
679
  Code::Flags flags,
608
- Handle<Object> self_ref) {
609
- CALL_HEAP_FUNCTION(Heap::CreateCode(desc, flags, self_ref), Code);
680
+ Handle<Object> self_ref,
681
+ bool immovable) {
682
+ CALL_HEAP_FUNCTION(isolate(),
683
+ isolate()->heap()->CreateCode(
684
+ desc, flags, self_ref, immovable),
685
+ Code);
610
686
  }
611
687
 
612
688
 
613
689
  Handle<Code> Factory::CopyCode(Handle<Code> code) {
614
- CALL_HEAP_FUNCTION(Heap::CopyCode(*code), Code);
690
+ CALL_HEAP_FUNCTION(isolate(),
691
+ isolate()->heap()->CopyCode(*code),
692
+ Code);
615
693
  }
616
694
 
617
695
 
618
696
  Handle<Code> Factory::CopyCode(Handle<Code> code, Vector<byte> reloc_info) {
619
- CALL_HEAP_FUNCTION(Heap::CopyCode(*code, reloc_info), Code);
697
+ CALL_HEAP_FUNCTION(isolate(),
698
+ isolate()->heap()->CopyCode(*code, reloc_info),
699
+ Code);
620
700
  }
621
701
 
622
702
 
@@ -637,13 +717,15 @@ Handle<DescriptorArray> Factory::CopyAppendProxyDescriptor(
637
717
  Handle<String> key,
638
718
  Handle<Object> value,
639
719
  PropertyAttributes attributes) {
640
- CALL_HEAP_FUNCTION(DoCopyInsert(*array, *key, *value, attributes),
720
+ CALL_HEAP_FUNCTION(isolate(),
721
+ DoCopyInsert(*array, *key, *value, attributes),
641
722
  DescriptorArray);
642
723
  }
643
724
 
644
725
 
645
726
  Handle<String> Factory::SymbolFromString(Handle<String> value) {
646
- CALL_HEAP_FUNCTION(Heap::LookupSymbol(*value), String);
727
+ CALL_HEAP_FUNCTION(isolate(),
728
+ isolate()->heap()->LookupSymbol(*value), String);
647
729
  }
648
730
 
649
731
 
@@ -708,35 +790,43 @@ Handle<DescriptorArray> Factory::CopyAppendCallbackDescriptors(
708
790
 
709
791
  Handle<JSObject> Factory::NewJSObject(Handle<JSFunction> constructor,
710
792
  PretenureFlag pretenure) {
711
- CALL_HEAP_FUNCTION(Heap::AllocateJSObject(*constructor, pretenure), JSObject);
793
+ CALL_HEAP_FUNCTION(
794
+ isolate(),
795
+ isolate()->heap()->AllocateJSObject(*constructor, pretenure), JSObject);
712
796
  }
713
797
 
714
798
 
715
799
  Handle<GlobalObject> Factory::NewGlobalObject(
716
800
  Handle<JSFunction> constructor) {
717
- CALL_HEAP_FUNCTION(Heap::AllocateGlobalObject(*constructor),
801
+ CALL_HEAP_FUNCTION(isolate(),
802
+ isolate()->heap()->AllocateGlobalObject(*constructor),
718
803
  GlobalObject);
719
804
  }
720
805
 
721
806
 
722
807
 
723
808
  Handle<JSObject> Factory::NewJSObjectFromMap(Handle<Map> map) {
724
- CALL_HEAP_FUNCTION(Heap::AllocateJSObjectFromMap(*map, NOT_TENURED),
725
- JSObject);
809
+ CALL_HEAP_FUNCTION(
810
+ isolate(),
811
+ isolate()->heap()->AllocateJSObjectFromMap(*map, NOT_TENURED),
812
+ JSObject);
726
813
  }
727
814
 
728
815
 
729
- Handle<JSArray> Factory::NewJSArray(int length,
816
+ Handle<JSArray> Factory::NewJSArray(int capacity,
730
817
  PretenureFlag pretenure) {
731
- Handle<JSObject> obj = NewJSObject(Top::array_function(), pretenure);
732
- CALL_HEAP_FUNCTION(Handle<JSArray>::cast(obj)->Initialize(length), JSArray);
818
+ Handle<JSObject> obj = NewJSObject(isolate()->array_function(), pretenure);
819
+ CALL_HEAP_FUNCTION(isolate(),
820
+ Handle<JSArray>::cast(obj)->Initialize(capacity),
821
+ JSArray);
733
822
  }
734
823
 
735
824
 
736
825
  Handle<JSArray> Factory::NewJSArrayWithElements(Handle<FixedArray> elements,
737
826
  PretenureFlag pretenure) {
738
827
  Handle<JSArray> result =
739
- Handle<JSArray>::cast(NewJSObject(Top::array_function(), pretenure));
828
+ Handle<JSArray>::cast(NewJSObject(isolate()->array_function(),
829
+ pretenure));
740
830
  result->SetContent(*elements);
741
831
  return result;
742
832
  }
@@ -770,24 +860,27 @@ Handle<JSMessageObject> Factory::NewJSMessageObject(
770
860
  Handle<Object> script,
771
861
  Handle<Object> stack_trace,
772
862
  Handle<Object> stack_frames) {
773
- CALL_HEAP_FUNCTION(Heap::AllocateJSMessageObject(*type,
774
- *arguments,
775
- start_position,
776
- end_position,
777
- *script,
778
- *stack_trace,
779
- *stack_frames),
863
+ CALL_HEAP_FUNCTION(isolate(),
864
+ isolate()->heap()->AllocateJSMessageObject(*type,
865
+ *arguments,
866
+ start_position,
867
+ end_position,
868
+ *script,
869
+ *stack_trace,
870
+ *stack_frames),
780
871
  JSMessageObject);
781
872
  }
782
873
 
783
874
  Handle<SharedFunctionInfo> Factory::NewSharedFunctionInfo(Handle<String> name) {
784
- CALL_HEAP_FUNCTION(Heap::AllocateSharedFunctionInfo(*name),
875
+ CALL_HEAP_FUNCTION(isolate(),
876
+ isolate()->heap()->AllocateSharedFunctionInfo(*name),
785
877
  SharedFunctionInfo);
786
878
  }
787
879
 
788
880
 
789
881
  Handle<String> Factory::NumberToString(Handle<Object> number) {
790
- CALL_HEAP_FUNCTION(Heap::NumberToString(*number), String);
882
+ CALL_HEAP_FUNCTION(isolate(),
883
+ isolate()->heap()->NumberToString(*number), String);
791
884
  }
792
885
 
793
886
 
@@ -795,54 +888,65 @@ Handle<NumberDictionary> Factory::DictionaryAtNumberPut(
795
888
  Handle<NumberDictionary> dictionary,
796
889
  uint32_t key,
797
890
  Handle<Object> value) {
798
- CALL_HEAP_FUNCTION(dictionary->AtNumberPut(key, *value), NumberDictionary);
891
+ CALL_HEAP_FUNCTION(isolate(),
892
+ dictionary->AtNumberPut(key, *value),
893
+ NumberDictionary);
799
894
  }
800
895
 
801
896
 
802
897
  Handle<JSFunction> Factory::NewFunctionHelper(Handle<String> name,
803
898
  Handle<Object> prototype) {
804
899
  Handle<SharedFunctionInfo> function_share = NewSharedFunctionInfo(name);
805
- CALL_HEAP_FUNCTION(Heap::AllocateFunction(*Top::function_map(),
806
- *function_share,
807
- *prototype),
808
- JSFunction);
900
+ CALL_HEAP_FUNCTION(
901
+ isolate(),
902
+ isolate()->heap()->AllocateFunction(*isolate()->function_map(),
903
+ *function_share,
904
+ *prototype),
905
+ JSFunction);
809
906
  }
810
907
 
811
908
 
812
909
  Handle<JSFunction> Factory::NewFunction(Handle<String> name,
813
910
  Handle<Object> prototype) {
814
911
  Handle<JSFunction> fun = NewFunctionHelper(name, prototype);
815
- fun->set_context(Top::context()->global_context());
912
+ fun->set_context(isolate()->context()->global_context());
816
913
  return fun;
817
914
  }
818
915
 
819
916
 
820
917
  Handle<JSFunction> Factory::NewFunctionWithoutPrototypeHelper(
821
- Handle<String> name) {
918
+ Handle<String> name,
919
+ StrictModeFlag strict_mode) {
822
920
  Handle<SharedFunctionInfo> function_share = NewSharedFunctionInfo(name);
823
- CALL_HEAP_FUNCTION(Heap::AllocateFunction(
824
- *Top::function_without_prototype_map(),
921
+ Handle<Map> map = strict_mode == kStrictMode
922
+ ? isolate()->strict_mode_function_without_prototype_map()
923
+ : isolate()->function_without_prototype_map();
924
+ CALL_HEAP_FUNCTION(isolate(),
925
+ isolate()->heap()->AllocateFunction(
926
+ *map,
825
927
  *function_share,
826
928
  *the_hole_value()),
827
929
  JSFunction);
828
930
  }
829
931
 
830
932
 
831
- Handle<JSFunction> Factory::NewFunctionWithoutPrototype(Handle<String> name) {
832
- Handle<JSFunction> fun = NewFunctionWithoutPrototypeHelper(name);
833
- fun->set_context(Top::context()->global_context());
933
+ Handle<JSFunction> Factory::NewFunctionWithoutPrototype(
934
+ Handle<String> name,
935
+ StrictModeFlag strict_mode) {
936
+ Handle<JSFunction> fun = NewFunctionWithoutPrototypeHelper(name, strict_mode);
937
+ fun->set_context(isolate()->context()->global_context());
834
938
  return fun;
835
939
  }
836
940
 
837
941
 
838
942
  Handle<Object> Factory::ToObject(Handle<Object> object) {
839
- CALL_HEAP_FUNCTION(object->ToObject(), Object);
943
+ CALL_HEAP_FUNCTION(isolate(), object->ToObject(), Object);
840
944
  }
841
945
 
842
946
 
843
947
  Handle<Object> Factory::ToObject(Handle<Object> object,
844
948
  Handle<Context> global_context) {
845
- CALL_HEAP_FUNCTION(object->ToObject(*global_context), Object);
949
+ CALL_HEAP_FUNCTION(isolate(), object->ToObject(*global_context), Object);
846
950
  }
847
951
 
848
952
 
@@ -859,13 +963,13 @@ Handle<DebugInfo> Factory::NewDebugInfo(Handle<SharedFunctionInfo> shared) {
859
963
  // debug info object to avoid allocation while setting up the debug info
860
964
  // object.
861
965
  Handle<FixedArray> break_points(
862
- Factory::NewFixedArray(Debug::kEstimatedNofBreakPointsInFunction));
966
+ NewFixedArray(Debug::kEstimatedNofBreakPointsInFunction));
863
967
 
864
968
  // Create and set up the debug info object. Debug info contains function, a
865
969
  // copy of the original code, the executing code and initial fixed array for
866
970
  // active break points.
867
971
  Handle<DebugInfo> debug_info =
868
- Handle<DebugInfo>::cast(Factory::NewStruct(DEBUG_INFO_TYPE));
972
+ Handle<DebugInfo>::cast(NewStruct(DEBUG_INFO_TYPE));
869
973
  debug_info->set_shared(*shared);
870
974
  debug_info->set_original_code(*original_code);
871
975
  debug_info->set_code(*code);
@@ -881,15 +985,16 @@ Handle<DebugInfo> Factory::NewDebugInfo(Handle<SharedFunctionInfo> shared) {
881
985
 
882
986
  Handle<JSObject> Factory::NewArgumentsObject(Handle<Object> callee,
883
987
  int length) {
884
- CALL_HEAP_FUNCTION(Heap::AllocateArgumentsObject(*callee, length), JSObject);
988
+ CALL_HEAP_FUNCTION(
989
+ isolate(),
990
+ isolate()->heap()->AllocateArgumentsObject(*callee, length), JSObject);
885
991
  }
886
992
 
887
993
 
888
994
  Handle<JSFunction> Factory::CreateApiFunction(
889
995
  Handle<FunctionTemplateInfo> obj, ApiInstanceType instance_type) {
890
- Handle<Code> code = Handle<Code>(Builtins::builtin(Builtins::HandleApiCall));
891
- Handle<Code> construct_stub =
892
- Handle<Code>(Builtins::builtin(Builtins::JSConstructStubApi));
996
+ Handle<Code> code = isolate()->builtins()->HandleApiCall();
997
+ Handle<Code> construct_stub = isolate()->builtins()->JSConstructStubApi();
893
998
 
894
999
  int internal_field_count = 0;
895
1000
  if (!obj->instance_template()->IsUndefined()) {
@@ -921,11 +1026,11 @@ Handle<JSFunction> Factory::CreateApiFunction(
921
1026
  ASSERT(type != INVALID_TYPE);
922
1027
 
923
1028
  Handle<JSFunction> result =
924
- Factory::NewFunction(Factory::empty_symbol(),
925
- type,
926
- instance_size,
927
- code,
928
- true);
1029
+ NewFunction(Factory::empty_symbol(),
1030
+ type,
1031
+ instance_size,
1032
+ code,
1033
+ true);
929
1034
  // Set class name.
930
1035
  Handle<Object> class_name = Handle<Object>(obj->class_name());
931
1036
  if (class_name->IsString()) {
@@ -973,7 +1078,7 @@ Handle<JSFunction> Factory::CreateApiFunction(
973
1078
  while (true) {
974
1079
  Handle<Object> props = Handle<Object>(obj->property_accessors());
975
1080
  if (!props->IsUndefined()) {
976
- array = Factory::CopyAppendCallbackDescriptors(array, props);
1081
+ array = CopyAppendCallbackDescriptors(array, props);
977
1082
  }
978
1083
  Handle<Object> parent = Handle<Object>(obj->parent_template());
979
1084
  if (parent->IsUndefined()) break;
@@ -989,7 +1094,8 @@ Handle<JSFunction> Factory::CreateApiFunction(
989
1094
 
990
1095
 
991
1096
  Handle<MapCache> Factory::NewMapCache(int at_least_space_for) {
992
- CALL_HEAP_FUNCTION(MapCache::Allocate(at_least_space_for), MapCache);
1097
+ CALL_HEAP_FUNCTION(isolate(),
1098
+ MapCache::Allocate(at_least_space_for), MapCache);
993
1099
  }
994
1100
 
995
1101
 
@@ -1009,7 +1115,8 @@ MUST_USE_RESULT static MaybeObject* UpdateMapCacheWith(Context* context,
1009
1115
  Handle<MapCache> Factory::AddToMapCache(Handle<Context> context,
1010
1116
  Handle<FixedArray> keys,
1011
1117
  Handle<Map> map) {
1012
- CALL_HEAP_FUNCTION(UpdateMapCacheWith(*context, *keys, *map), MapCache);
1118
+ CALL_HEAP_FUNCTION(isolate(),
1119
+ UpdateMapCacheWith(*context, *keys, *map), MapCache);
1013
1120
  }
1014
1121
 
1015
1122
 
@@ -1058,8 +1165,8 @@ void Factory::SetRegExpIrregexpData(Handle<JSRegExp> regexp,
1058
1165
  store->set(JSRegExp::kTagIndex, Smi::FromInt(type));
1059
1166
  store->set(JSRegExp::kSourceIndex, *source);
1060
1167
  store->set(JSRegExp::kFlagsIndex, Smi::FromInt(flags.value()));
1061
- store->set(JSRegExp::kIrregexpASCIICodeIndex, Heap::the_hole_value());
1062
- store->set(JSRegExp::kIrregexpUC16CodeIndex, Heap::the_hole_value());
1168
+ store->set(JSRegExp::kIrregexpASCIICodeIndex, HEAP->the_hole_value());
1169
+ store->set(JSRegExp::kIrregexpUC16CodeIndex, HEAP->the_hole_value());
1063
1170
  store->set(JSRegExp::kIrregexpMaxRegisterCountIndex, Smi::FromInt(0));
1064
1171
  store->set(JSRegExp::kIrregexpCaptureCountIndex,
1065
1172
  Smi::FromInt(capture_count));