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
@@ -1424,7 +1424,7 @@ class RegExpEngine: public AllStatic {
1424
1424
  struct CompilationResult {
1425
1425
  explicit CompilationResult(const char* error_message)
1426
1426
  : error_message(error_message),
1427
- code(Heap::the_hole_value()),
1427
+ code(HEAP->the_hole_value()),
1428
1428
  num_registers(0) {}
1429
1429
  CompilationResult(Object* code, int registers)
1430
1430
  : error_message(NULL),
@@ -1449,14 +1449,14 @@ class OffsetsVector {
1449
1449
  public:
1450
1450
  inline OffsetsVector(int num_registers)
1451
1451
  : offsets_vector_length_(num_registers) {
1452
- if (offsets_vector_length_ > kStaticOffsetsVectorSize) {
1452
+ if (offsets_vector_length_ > Isolate::kJSRegexpStaticOffsetsVectorSize) {
1453
1453
  vector_ = NewArray<int>(offsets_vector_length_);
1454
1454
  } else {
1455
- vector_ = static_offsets_vector_;
1455
+ vector_ = Isolate::Current()->jsregexp_static_offsets_vector();
1456
1456
  }
1457
1457
  }
1458
1458
  inline ~OffsetsVector() {
1459
- if (offsets_vector_length_ > kStaticOffsetsVectorSize) {
1459
+ if (offsets_vector_length_ > Isolate::kJSRegexpStaticOffsetsVectorSize) {
1460
1460
  DeleteArray(vector_);
1461
1461
  vector_ = NULL;
1462
1462
  }
@@ -1467,13 +1467,12 @@ class OffsetsVector {
1467
1467
  static const int kStaticOffsetsVectorSize = 50;
1468
1468
 
1469
1469
  private:
1470
- static Address static_offsets_vector_address() {
1471
- return reinterpret_cast<Address>(&static_offsets_vector_);
1470
+ static Address static_offsets_vector_address(Isolate* isolate) {
1471
+ return reinterpret_cast<Address>(isolate->jsregexp_static_offsets_vector());
1472
1472
  }
1473
1473
 
1474
1474
  int* vector_;
1475
1475
  int offsets_vector_length_;
1476
- static int static_offsets_vector_[kStaticOffsetsVectorSize];
1477
1476
 
1478
1477
  friend class ExternalReference;
1479
1478
  };
@@ -35,9 +35,6 @@ namespace v8 {
35
35
  namespace internal {
36
36
 
37
37
 
38
- bool JumpTarget::compiling_deferred_code_ = false;
39
-
40
-
41
38
  void JumpTarget::Jump(Result* arg) {
42
39
  ASSERT(cgen()->has_valid_frame());
43
40
 
@@ -143,9 +140,9 @@ void JumpTarget::ComputeEntryFrame() {
143
140
  // the directionality of the block. Compute: an entry frame for the
144
141
  // block.
145
142
 
146
- Counters::compute_entry_frame.Increment();
143
+ Isolate::Current()->counters()->compute_entry_frame()->Increment();
147
144
  #ifdef DEBUG
148
- if (compiling_deferred_code_) {
145
+ if (Isolate::Current()->jump_target_compiling_deferred_code()) {
149
146
  ASSERT(reaching_frames_.length() > 1);
150
147
  VirtualFrame* frame = reaching_frames_[0];
151
148
  bool all_identical = true;
@@ -413,15 +410,15 @@ void BreakTarget::Branch(Condition cc, Hint hint) {
413
410
 
414
411
 
415
412
  DeferredCode::DeferredCode()
416
- : masm_(CodeGeneratorScope::Current()->masm()),
413
+ : masm_(CodeGeneratorScope::Current(Isolate::Current())->masm()),
417
414
  statement_position_(masm_->positions_recorder()->
418
415
  current_statement_position()),
419
416
  position_(masm_->positions_recorder()->current_position()),
420
- frame_state_(CodeGeneratorScope::Current()->frame()) {
417
+ frame_state_(CodeGeneratorScope::Current(Isolate::Current())->frame()) {
421
418
  ASSERT(statement_position_ != RelocInfo::kNoPosition);
422
419
  ASSERT(position_ != RelocInfo::kNoPosition);
423
420
 
424
- CodeGeneratorScope::Current()->AddDeferred(this);
421
+ CodeGeneratorScope::Current(Isolate::Current())->AddDeferred(this);
425
422
  #ifdef DEBUG
426
423
  comment_ = "";
427
424
  #endif
@@ -135,10 +135,6 @@ class JumpTarget : public ZoneObject { // Shadows are dynamically allocated.
135
135
  // after the call is the same as the frame before the call.
136
136
  void Call();
137
137
 
138
- static void set_compiling_deferred_code(bool flag) {
139
- compiling_deferred_code_ = flag;
140
- }
141
-
142
138
  protected:
143
139
  // Directionality flag set at initialization time.
144
140
  Directionality direction_;
@@ -164,8 +160,6 @@ class JumpTarget : public ZoneObject { // Shadows are dynamically allocated.
164
160
  void DoBind();
165
161
 
166
162
  private:
167
- static bool compiling_deferred_code_;
168
-
169
163
  // Add a virtual frame reaching this labeled block via a forward jump,
170
164
  // and a corresponding merge code label.
171
165
  void AddReachingFrame(VirtualFrame* frame);
@@ -40,7 +40,7 @@ namespace v8 {
40
40
  namespace internal {
41
41
 
42
42
  CodeGenerator* JumpTarget::cgen() {
43
- return CodeGeneratorScope::Current();
43
+ return CodeGeneratorScope::Current(Isolate::Current());
44
44
  }
45
45
 
46
46
  } } // namespace v8::internal
@@ -35,15 +35,15 @@ namespace internal {
35
35
 
36
36
 
37
37
  DeferredCode::DeferredCode()
38
- : masm_(CodeGeneratorScope::Current()->masm()),
38
+ : masm_(CodeGeneratorScope::Current(Isolate::Current())->masm()),
39
39
  statement_position_(masm_->positions_recorder()->
40
40
  current_statement_position()),
41
41
  position_(masm_->positions_recorder()->current_position()),
42
- frame_state_(*CodeGeneratorScope::Current()->frame()) {
42
+ frame_state_(*CodeGeneratorScope::Current(Isolate::Current())->frame()) {
43
43
  ASSERT(statement_position_ != RelocInfo::kNoPosition);
44
44
  ASSERT(position_ != RelocInfo::kNoPosition);
45
45
 
46
- CodeGeneratorScope::Current()->AddDeferred(this);
46
+ CodeGeneratorScope::Current(Isolate::Current())->AddDeferred(this);
47
47
 
48
48
  #ifdef DEBUG
49
49
  comment_ = "";
@@ -36,6 +36,8 @@
36
36
  #include "x64/lithium-x64.h"
37
37
  #elif V8_TARGET_ARCH_ARM
38
38
  #include "arm/lithium-arm.h"
39
+ #elif V8_TARGET_ARCH_MIPS
40
+ #include "mips/lithium-mips.h"
39
41
  #else
40
42
  #error "Unknown architecture."
41
43
  #endif
@@ -25,6 +25,7 @@
25
25
  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
26
  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
27
 
28
+ #include "v8.h"
28
29
  #include "lithium-allocator-inl.h"
29
30
 
30
31
  #include "hydrogen.h"
@@ -36,6 +37,8 @@
36
37
  #include "x64/lithium-x64.h"
37
38
  #elif V8_TARGET_ARCH_ARM
38
39
  #include "arm/lithium-arm.h"
40
+ #elif V8_TARGET_ARCH_MIPS
41
+ #include "mips/lithium-mips.h"
39
42
  #else
40
43
  #error "Unknown architecture."
41
44
  #endif
@@ -44,13 +47,18 @@ namespace v8 {
44
47
  namespace internal {
45
48
 
46
49
 
47
- #define DEFINE_OPERAND_CACHE(name, type) \
48
- name name::cache[name::kNumCachedOperands]; \
49
- void name::SetupCache() { \
50
- for (int i = 0; i < kNumCachedOperands; i++) { \
51
- cache[i].ConvertTo(type, i); \
52
- } \
53
- }
50
+ #define DEFINE_OPERAND_CACHE(name, type) \
51
+ name name::cache[name::kNumCachedOperands]; \
52
+ void name::SetupCache() { \
53
+ for (int i = 0; i < kNumCachedOperands; i++) { \
54
+ cache[i].ConvertTo(type, i); \
55
+ } \
56
+ } \
57
+ static bool name##_initialize() { \
58
+ name::SetupCache(); \
59
+ return true; \
60
+ } \
61
+ static bool name##_cache_initialized = name##_initialize();
54
62
 
55
63
  DEFINE_OPERAND_CACHE(LConstantOperand, CONSTANT_OPERAND)
56
64
  DEFINE_OPERAND_CACHE(LStackSlot, STACK_SLOT)
@@ -525,6 +533,24 @@ LifetimePosition LiveRange::FirstIntersection(LiveRange* other) {
525
533
  }
526
534
 
527
535
 
536
+ LAllocator::LAllocator(int num_values, HGraph* graph)
537
+ : chunk_(NULL),
538
+ live_in_sets_(graph->blocks()->length()),
539
+ live_ranges_(num_values * 2),
540
+ fixed_live_ranges_(NULL),
541
+ fixed_double_live_ranges_(NULL),
542
+ unhandled_live_ranges_(num_values * 2),
543
+ active_live_ranges_(8),
544
+ inactive_live_ranges_(8),
545
+ reusable_slots_(8),
546
+ next_virtual_register_(num_values),
547
+ first_artificial_register_(num_values),
548
+ mode_(NONE),
549
+ num_registers_(-1),
550
+ graph_(graph),
551
+ has_osr_entry_(false) {}
552
+
553
+
528
554
  void LAllocator::InitializeLivenessAnalysis() {
529
555
  // Initialize the live_in sets for each block to NULL.
530
556
  int block_count = graph_->blocks()->length();
@@ -618,11 +644,7 @@ LOperand* LAllocator::AllocateFixed(LUnallocated* operand,
618
644
 
619
645
 
620
646
  LiveRange* LAllocator::FixedLiveRangeFor(int index) {
621
- if (index >= fixed_live_ranges_.length()) {
622
- fixed_live_ranges_.AddBlock(NULL,
623
- index - fixed_live_ranges_.length() + 1);
624
- }
625
-
647
+ ASSERT(index < Register::kNumAllocatableRegisters);
626
648
  LiveRange* result = fixed_live_ranges_[index];
627
649
  if (result == NULL) {
628
650
  result = new LiveRange(FixedLiveRangeID(index));
@@ -635,11 +657,7 @@ LiveRange* LAllocator::FixedLiveRangeFor(int index) {
635
657
 
636
658
 
637
659
  LiveRange* LAllocator::FixedDoubleLiveRangeFor(int index) {
638
- if (index >= fixed_double_live_ranges_.length()) {
639
- fixed_double_live_ranges_.AddBlock(NULL,
640
- index - fixed_double_live_ranges_.length() + 1);
641
- }
642
-
660
+ ASSERT(index < DoubleRegister::kNumAllocatableRegisters);
643
661
  LiveRange* result = fixed_double_live_ranges_[index];
644
662
  if (result == NULL) {
645
663
  result = new LiveRange(FixedDoubleLiveRangeID(index));
@@ -650,6 +668,7 @@ LiveRange* LAllocator::FixedDoubleLiveRangeFor(int index) {
650
668
  return result;
651
669
  }
652
670
 
671
+
653
672
  LiveRange* LAllocator::LiveRangeFor(int index) {
654
673
  if (index >= live_ranges_.length()) {
655
674
  live_ranges_.AddBlock(NULL, index - live_ranges_.length() + 1);
@@ -1274,7 +1293,7 @@ void LAllocator::BuildLiveRanges() {
1274
1293
  found = true;
1275
1294
  int operand_index = iterator.Current();
1276
1295
  PrintF("Function: %s\n",
1277
- *graph_->info()->function()->debug_name()->ToCString());
1296
+ *chunk_->info()->function()->debug_name()->ToCString());
1278
1297
  PrintF("Value %d used before first definition!\n", operand_index);
1279
1298
  LiveRange* range = LiveRangeFor(operand_index);
1280
1299
  PrintF("First use is at %d\n", range->first_pos()->pos().Value());
@@ -1436,7 +1455,7 @@ void LAllocator::AllocateDoubleRegisters() {
1436
1455
 
1437
1456
  void LAllocator::AllocateRegisters() {
1438
1457
  ASSERT(mode_ != NONE);
1439
- reusable_slots_.Clear();
1458
+ ASSERT(unhandled_live_ranges_.is_empty());
1440
1459
 
1441
1460
  for (int i = 0; i < live_ranges_.length(); ++i) {
1442
1461
  if (live_ranges_[i] != NULL) {
@@ -1448,6 +1467,7 @@ void LAllocator::AllocateRegisters() {
1448
1467
  SortUnhandled();
1449
1468
  ASSERT(UnhandledIsSorted());
1450
1469
 
1470
+ ASSERT(reusable_slots_.is_empty());
1451
1471
  ASSERT(active_live_ranges_.is_empty());
1452
1472
  ASSERT(inactive_live_ranges_.is_empty());
1453
1473
 
@@ -1532,17 +1552,9 @@ void LAllocator::AllocateRegisters() {
1532
1552
  }
1533
1553
  }
1534
1554
 
1535
- active_live_ranges_.Clear();
1536
- inactive_live_ranges_.Clear();
1537
- }
1538
-
1539
-
1540
- void LAllocator::Setup() {
1541
- LConstantOperand::SetupCache();
1542
- LStackSlot::SetupCache();
1543
- LDoubleStackSlot::SetupCache();
1544
- LRegister::SetupCache();
1545
- LDoubleRegister::SetupCache();
1555
+ reusable_slots_.Rewind(0);
1556
+ active_live_ranges_.Rewind(0);
1557
+ inactive_live_ranges_.Rewind(0);
1546
1558
  }
1547
1559
 
1548
1560
 
@@ -428,24 +428,8 @@ class GrowableBitVector BASE_EMBEDDED {
428
428
 
429
429
  class LAllocator BASE_EMBEDDED {
430
430
  public:
431
- explicit LAllocator(int first_virtual_register, HGraph* graph)
432
- : chunk_(NULL),
433
- live_in_sets_(0),
434
- live_ranges_(16),
435
- fixed_live_ranges_(8),
436
- fixed_double_live_ranges_(8),
437
- unhandled_live_ranges_(8),
438
- active_live_ranges_(8),
439
- inactive_live_ranges_(8),
440
- reusable_slots_(8),
441
- next_virtual_register_(first_virtual_register),
442
- first_artificial_register_(first_virtual_register),
443
- mode_(NONE),
444
- num_registers_(-1),
445
- graph_(graph),
446
- has_osr_entry_(false) {}
447
-
448
- static void Setup();
431
+ LAllocator(int first_virtual_register, HGraph* graph);
432
+
449
433
  static void TraceAlloc(const char* msg, ...);
450
434
 
451
435
  // Lithium translation support.
@@ -468,10 +452,10 @@ class LAllocator BASE_EMBEDDED {
468
452
  void Allocate(LChunk* chunk);
469
453
 
470
454
  const ZoneList<LiveRange*>* live_ranges() const { return &live_ranges_; }
471
- const ZoneList<LiveRange*>* fixed_live_ranges() const {
455
+ const Vector<LiveRange*>* fixed_live_ranges() const {
472
456
  return &fixed_live_ranges_;
473
457
  }
474
- const ZoneList<LiveRange*>* fixed_double_live_ranges() const {
458
+ const Vector<LiveRange*>* fixed_double_live_ranges() const {
475
459
  return &fixed_double_live_ranges_;
476
460
  }
477
461
 
@@ -616,8 +600,10 @@ class LAllocator BASE_EMBEDDED {
616
600
  ZoneList<LiveRange*> live_ranges_;
617
601
 
618
602
  // Lists of live ranges
619
- ZoneList<LiveRange*> fixed_live_ranges_;
620
- ZoneList<LiveRange*> fixed_double_live_ranges_;
603
+ EmbeddedVector<LiveRange*, Register::kNumAllocatableRegisters>
604
+ fixed_live_ranges_;
605
+ EmbeddedVector<LiveRange*, DoubleRegister::kNumAllocatableRegisters>
606
+ fixed_double_live_ranges_;
621
607
  ZoneList<LiveRange*> unhandled_live_ranges_;
622
608
  ZoneList<LiveRange*> active_live_ranges_;
623
609
  ZoneList<LiveRange*> inactive_live_ranges_;
@@ -25,6 +25,7 @@
25
25
  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
26
  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
27
 
28
+ #include "v8.h"
28
29
  #include "lithium.h"
29
30
 
30
31
  namespace v8 {
@@ -35,10 +35,10 @@
35
35
  #include "debug.h"
36
36
  #include "deoptimizer.h"
37
37
  #include "global-handles.h"
38
- #include "memory.h"
39
38
  #include "parser.h"
40
39
  #include "scopeinfo.h"
41
40
  #include "scopes.h"
41
+ #include "v8memory.h"
42
42
 
43
43
  namespace v8 {
44
44
  namespace internal {
@@ -47,6 +47,18 @@ namespace internal {
47
47
  #ifdef ENABLE_DEBUGGER_SUPPORT
48
48
 
49
49
 
50
+ void SetElementNonStrict(Handle<JSObject> object,
51
+ uint32_t index,
52
+ Handle<Object> value) {
53
+ // Ignore return value from SetElement. It can only be a failure if there
54
+ // are element setters causing exceptions and the debugger context has none
55
+ // of these.
56
+ Handle<Object> no_failure;
57
+ no_failure = SetElement(object, index, value, kNonStrictMode);
58
+ ASSERT(!no_failure.is_null());
59
+ USE(no_failure);
60
+ }
61
+
50
62
  // A simple implementation of dynamic programming algorithm. It solves
51
63
  // the problem of finding the difference of 2 arrays. It uses a table of results
52
64
  // of subproblems. Each cell contains a number together with 2-bit flag
@@ -256,10 +268,10 @@ void Comparator::CalculateDifference(Comparator::Input* input,
256
268
  }
257
269
 
258
270
 
259
- static bool CompareSubstrings(Handle<String> s1, int pos1,
271
+ static bool CompareSubstrings(Isolate* isolate, Handle<String> s1, int pos1,
260
272
  Handle<String> s2, int pos2, int len) {
261
- static StringInputBuffer buf1;
262
- static StringInputBuffer buf2;
273
+ StringInputBuffer& buf1 = *isolate->liveedit_compare_substrings_buf1();
274
+ StringInputBuffer& buf2 = *isolate->liveedit_compare_substrings_buf2();
263
275
  buf1.Reset(*s1);
264
276
  buf1.Seek(pos1);
265
277
  buf2.Reset(*s2);
@@ -279,18 +291,22 @@ static bool CompareSubstrings(Handle<String> s1, int pos1,
279
291
  class CompareOutputArrayWriter {
280
292
  public:
281
293
  CompareOutputArrayWriter()
282
- : array_(Factory::NewJSArray(10)), current_size_(0) {}
294
+ : array_(FACTORY->NewJSArray(10)), current_size_(0) {}
283
295
 
284
296
  Handle<JSArray> GetResult() {
285
297
  return array_;
286
298
  }
287
299
 
288
300
  void WriteChunk(int char_pos1, int char_pos2, int char_len1, int char_len2) {
289
- SetElement(array_, current_size_, Handle<Object>(Smi::FromInt(char_pos1)));
290
- SetElement(array_, current_size_ + 1,
291
- Handle<Object>(Smi::FromInt(char_pos1 + char_len1)));
292
- SetElement(array_, current_size_ + 2,
293
- Handle<Object>(Smi::FromInt(char_pos2 + char_len2)));
301
+ SetElementNonStrict(array_,
302
+ current_size_,
303
+ Handle<Object>(Smi::FromInt(char_pos1)));
304
+ SetElementNonStrict(array_,
305
+ current_size_ + 1,
306
+ Handle<Object>(Smi::FromInt(char_pos1 + char_len1)));
307
+ SetElementNonStrict(array_,
308
+ current_size_ + 2,
309
+ Handle<Object>(Smi::FromInt(char_pos2 + char_len2)));
294
310
  current_size_ += 3;
295
311
  }
296
312
 
@@ -394,9 +410,10 @@ class LineEndsWrapper {
394
410
  // Represents 2 strings as 2 arrays of lines.
395
411
  class LineArrayCompareInput : public Comparator::Input {
396
412
  public:
397
- LineArrayCompareInput(Handle<String> s1, Handle<String> s2,
413
+ LineArrayCompareInput(Isolate* isolate, Handle<String> s1, Handle<String> s2,
398
414
  LineEndsWrapper line_ends1, LineEndsWrapper line_ends2)
399
- : s1_(s1), s2_(s2), line_ends1_(line_ends1), line_ends2_(line_ends2) {
415
+ : isolate_(isolate), s1_(s1), s2_(s2), line_ends1_(line_ends1),
416
+ line_ends2_(line_ends2) {
400
417
  }
401
418
  int getLength1() {
402
419
  return line_ends1_.length();
@@ -414,10 +431,12 @@ class LineArrayCompareInput : public Comparator::Input {
414
431
  if (len1 != len2) {
415
432
  return false;
416
433
  }
417
- return CompareSubstrings(s1_, line_start1, s2_, line_start2, len1);
434
+ return CompareSubstrings(isolate_, s1_, line_start1, s2_, line_start2,
435
+ len1);
418
436
  }
419
437
 
420
438
  private:
439
+ Isolate* isolate_;
421
440
  Handle<String> s1_;
422
441
  Handle<String> s2_;
423
442
  LineEndsWrapper line_ends1_;
@@ -476,7 +495,8 @@ Handle<JSArray> LiveEdit::CompareStrings(Handle<String> s1,
476
495
  LineEndsWrapper line_ends1(s1);
477
496
  LineEndsWrapper line_ends2(s2);
478
497
 
479
- LineArrayCompareInput input(s1, s2, line_ends1, line_ends2);
498
+ LineArrayCompareInput
499
+ input(Isolate::Current(), s1, s2, line_ends1, line_ends2);
480
500
  TokenizingLineArrayCompareOutput output(line_ends1, line_ends2, s1, s2);
481
501
 
482
502
  Comparator::CalculateDifference(&input, &output);
@@ -485,21 +505,21 @@ Handle<JSArray> LiveEdit::CompareStrings(Handle<String> s1,
485
505
  }
486
506
 
487
507
 
488
- static void CompileScriptForTracker(Handle<Script> script) {
508
+ static void CompileScriptForTracker(Isolate* isolate, Handle<Script> script) {
489
509
  // TODO(635): support extensions.
490
- PostponeInterruptsScope postpone;
510
+ PostponeInterruptsScope postpone(isolate);
491
511
 
492
512
  // Build AST.
493
513
  CompilationInfo info(script);
494
514
  info.MarkAsGlobal();
495
515
  if (ParserApi::Parse(&info)) {
496
516
  // Compile the code.
497
- LiveEditFunctionTracker tracker(info.function());
517
+ LiveEditFunctionTracker tracker(info.isolate(), info.function());
498
518
  if (Compiler::MakeCodeForLiveEdit(&info)) {
499
519
  ASSERT(!info.code().is_null());
500
520
  tracker.RecordRootFunctionInfo(info.code());
501
521
  } else {
502
- Top::StackOverflow();
522
+ info.isolate()->StackOverflow();
503
523
  }
504
524
  }
505
525
  }
@@ -514,9 +534,10 @@ static Handle<Object> UnwrapJSValue(Handle<JSValue> jsValue) {
514
534
  // Wraps any object into a OpaqueReference, that will hide the object
515
535
  // from JavaScript.
516
536
  static Handle<JSValue> WrapInJSValue(Object* object) {
517
- Handle<JSFunction> constructor = Top::opaque_reference_function();
537
+ Handle<JSFunction> constructor =
538
+ Isolate::Current()->opaque_reference_function();
518
539
  Handle<JSValue> result =
519
- Handle<JSValue>::cast(Factory::NewJSObject(constructor));
540
+ Handle<JSValue>::cast(FACTORY->NewJSObject(constructor));
520
541
  result->set_value(object);
521
542
  return result;
522
543
  }
@@ -529,7 +550,7 @@ template<typename S>
529
550
  class JSArrayBasedStruct {
530
551
  public:
531
552
  static S Create() {
532
- Handle<JSArray> array = Factory::NewJSArray(S::kSize_);
553
+ Handle<JSArray> array = FACTORY->NewJSArray(S::kSize_);
533
554
  return S(array);
534
555
  }
535
556
  static S cast(Object* object) {
@@ -545,10 +566,12 @@ class JSArrayBasedStruct {
545
566
 
546
567
  protected:
547
568
  void SetField(int field_position, Handle<Object> value) {
548
- SetElement(array_, field_position, value);
569
+ SetElementNonStrict(array_, field_position, value);
549
570
  }
550
571
  void SetSmiValueField(int field_position, int value) {
551
- SetElement(array_, field_position, Handle<Smi>(Smi::FromInt(value)));
572
+ SetElementNonStrict(array_,
573
+ field_position,
574
+ Handle<Smi>(Smi::FromInt(value)));
552
575
  }
553
576
  Object* GetField(int field_position) {
554
577
  return array_->GetElementNoExceptionThrown(field_position);
@@ -677,7 +700,7 @@ class FunctionInfoListener {
677
700
  FunctionInfoListener() {
678
701
  current_parent_index_ = -1;
679
702
  len_ = 0;
680
- result_ = Factory::NewJSArray(10);
703
+ result_ = FACTORY->NewJSArray(10);
681
704
  }
682
705
 
683
706
  void FunctionStarted(FunctionLiteral* fun) {
@@ -687,7 +710,7 @@ class FunctionInfoListener {
687
710
  fun->end_position(), fun->num_parameters(),
688
711
  current_parent_index_);
689
712
  current_parent_index_ = len_;
690
- SetElement(result_, len_, info.GetJSArray());
713
+ SetElementNonStrict(result_, len_, info.GetJSArray());
691
714
  len_++;
692
715
  }
693
716
 
@@ -705,7 +728,7 @@ class FunctionInfoListener {
705
728
  FunctionInfoWrapper info =
706
729
  FunctionInfoWrapper::cast(
707
730
  result_->GetElementNoExceptionThrown(current_parent_index_));
708
- info.SetFunctionCode(function_code, Handle<Object>(Heap::null_value()));
731
+ info.SetFunctionCode(function_code, Handle<Object>(HEAP->null_value()));
709
732
  }
710
733
 
711
734
  // Saves full information about a function: its code, its scope info
@@ -731,7 +754,7 @@ class FunctionInfoListener {
731
754
  Object* SerializeFunctionScope(Scope* scope) {
732
755
  HandleScope handle_scope;
733
756
 
734
- Handle<JSArray> scope_info_list = Factory::NewJSArray(10);
757
+ Handle<JSArray> scope_info_list = FACTORY->NewJSArray(10);
735
758
  int scope_info_length = 0;
736
759
 
737
760
  // Saves some description of scope. It stores name and indexes of
@@ -739,7 +762,7 @@ class FunctionInfoListener {
739
762
  // scopes of this chain.
740
763
  Scope* outer_scope = scope->outer_scope();
741
764
  if (outer_scope == NULL) {
742
- return Heap::undefined_value();
765
+ return HEAP->undefined_value();
743
766
  }
744
767
  do {
745
768
  ZoneList<Variable*> list(10);
@@ -767,14 +790,19 @@ class FunctionInfoListener {
767
790
  list[k] = list[l];
768
791
  }
769
792
  for (int i = 0; i < j; i++) {
770
- SetElement(scope_info_list, scope_info_length, list[i]->name());
793
+ SetElementNonStrict(scope_info_list,
794
+ scope_info_length,
795
+ list[i]->name());
771
796
  scope_info_length++;
772
- SetElement(scope_info_list, scope_info_length,
773
- Handle<Smi>(Smi::FromInt(list[i]->AsSlot()->index())));
797
+ SetElementNonStrict(
798
+ scope_info_list,
799
+ scope_info_length,
800
+ Handle<Smi>(Smi::FromInt(list[i]->AsSlot()->index())));
774
801
  scope_info_length++;
775
802
  }
776
- SetElement(scope_info_list, scope_info_length,
777
- Handle<Object>(Heap::null_value()));
803
+ SetElementNonStrict(scope_info_list,
804
+ scope_info_length,
805
+ Handle<Object>(HEAP->null_value()));
778
806
  scope_info_length++;
779
807
 
780
808
  outer_scope = outer_scope->outer_scope();
@@ -789,18 +817,17 @@ class FunctionInfoListener {
789
817
  };
790
818
 
791
819
 
792
- static FunctionInfoListener* active_function_info_listener = NULL;
793
-
794
820
  JSArray* LiveEdit::GatherCompileInfo(Handle<Script> script,
795
821
  Handle<String> source) {
822
+ Isolate* isolate = Isolate::Current();
796
823
  CompilationZoneScope zone_scope(DELETE_ON_EXIT);
797
824
 
798
825
  FunctionInfoListener listener;
799
826
  Handle<Object> original_source = Handle<Object>(script->source());
800
827
  script->set_source(*source);
801
- active_function_info_listener = &listener;
802
- CompileScriptForTracker(script);
803
- active_function_info_listener = NULL;
828
+ isolate->set_active_function_info_listener(&listener);
829
+ CompileScriptForTracker(isolate, script);
830
+ isolate->set_active_function_info_listener(NULL);
804
831
  script->set_source(*original_source);
805
832
 
806
833
  return *(listener.GetResult());
@@ -817,7 +844,7 @@ void LiveEdit::WrapSharedFunctionInfos(Handle<JSArray> array) {
817
844
  Handle<String> name_handle(String::cast(info->name()));
818
845
  info_wrapper.SetProperties(name_handle, info->start_position(),
819
846
  info->end_position(), info);
820
- SetElement(array, i, info_wrapper.GetJSArray());
847
+ SetElementNonStrict(array, i, info_wrapper.GetJSArray());
821
848
  }
822
849
  }
823
850
 
@@ -882,7 +909,7 @@ class ReferenceCollectorVisitor : public ObjectVisitor {
882
909
 
883
910
  // Finds all references to original and replaces them with substitution.
884
911
  static void ReplaceCodeObject(Code* original, Code* substitution) {
885
- ASSERT(!Heap::InNewSpace(substitution));
912
+ ASSERT(!HEAP->InNewSpace(substitution));
886
913
 
887
914
  AssertNoAllocation no_allocations_please;
888
915
 
@@ -895,7 +922,7 @@ static void ReplaceCodeObject(Code* original, Code* substitution) {
895
922
  // so temporary replace the pointers with offset numbers
896
923
  // in prologue/epilogue.
897
924
  {
898
- Heap::IterateStrongRoots(&visitor, VISIT_ALL);
925
+ HEAP->IterateStrongRoots(&visitor, VISIT_ALL);
899
926
  }
900
927
 
901
928
  // Now iterate over all pointers of all objects, including code_target
@@ -925,7 +952,7 @@ static bool IsInlined(JSFunction* function, SharedFunctionInfo* candidate) {
925
952
  DeoptimizationInputData* data =
926
953
  DeoptimizationInputData::cast(function->code()->deoptimization_data());
927
954
 
928
- if (data == Heap::empty_fixed_array()) return false;
955
+ if (data == HEAP->empty_fixed_array()) return false;
929
956
 
930
957
  FixedArray* literals = data->LiteralArray();
931
958
 
@@ -977,7 +1004,7 @@ MaybeObject* LiveEdit::ReplaceFunctionCode(
977
1004
  HandleScope scope;
978
1005
 
979
1006
  if (!SharedInfoWrapper::IsInstance(shared_info_array)) {
980
- return Top::ThrowIllegalOperation();
1007
+ return Isolate::Current()->ThrowIllegalOperation();
981
1008
  }
982
1009
 
983
1010
  FunctionInfoWrapper compile_info_wrapper(new_compile_info_array);
@@ -986,8 +1013,8 @@ MaybeObject* LiveEdit::ReplaceFunctionCode(
986
1013
  Handle<SharedFunctionInfo> shared_info = shared_info_wrapper.GetInfo();
987
1014
 
988
1015
  if (IsJSFunctionCode(shared_info->code())) {
989
- ReplaceCodeObject(shared_info->code(),
990
- *(compile_info_wrapper.GetFunctionCode()));
1016
+ Handle<Code> code = compile_info_wrapper.GetFunctionCode();
1017
+ ReplaceCodeObject(shared_info->code(), *code);
991
1018
  Handle<Object> code_scope_info = compile_info_wrapper.GetCodeScopeInfo();
992
1019
  if (code_scope_info->IsFixedArray()) {
993
1020
  shared_info->set_scope_info(SerializedScopeInfo::cast(*code_scope_info));
@@ -997,20 +1024,23 @@ MaybeObject* LiveEdit::ReplaceFunctionCode(
997
1024
  if (shared_info->debug_info()->IsDebugInfo()) {
998
1025
  Handle<DebugInfo> debug_info(DebugInfo::cast(shared_info->debug_info()));
999
1026
  Handle<Code> new_original_code =
1000
- Factory::CopyCode(compile_info_wrapper.GetFunctionCode());
1027
+ FACTORY->CopyCode(compile_info_wrapper.GetFunctionCode());
1001
1028
  debug_info->set_original_code(*new_original_code);
1002
1029
  }
1003
1030
 
1004
- shared_info->set_start_position(compile_info_wrapper.GetStartPosition());
1005
- shared_info->set_end_position(compile_info_wrapper.GetEndPosition());
1031
+ int start_position = compile_info_wrapper.GetStartPosition();
1032
+ int end_position = compile_info_wrapper.GetEndPosition();
1033
+ shared_info->set_start_position(start_position);
1034
+ shared_info->set_end_position(end_position);
1006
1035
 
1007
1036
  shared_info->set_construct_stub(
1008
- Builtins::builtin(Builtins::JSConstructStubGeneric));
1037
+ Isolate::Current()->builtins()->builtin(
1038
+ Builtins::kJSConstructStubGeneric));
1009
1039
 
1010
1040
  DeoptimizeDependentFunctions(*shared_info);
1011
- CompilationCache::Remove(shared_info);
1041
+ Isolate::Current()->compilation_cache()->Remove(shared_info);
1012
1042
 
1013
- return Heap::undefined_value();
1043
+ return HEAP->undefined_value();
1014
1044
  }
1015
1045
 
1016
1046
 
@@ -1019,16 +1049,16 @@ MaybeObject* LiveEdit::FunctionSourceUpdated(
1019
1049
  HandleScope scope;
1020
1050
 
1021
1051
  if (!SharedInfoWrapper::IsInstance(shared_info_array)) {
1022
- return Top::ThrowIllegalOperation();
1052
+ return Isolate::Current()->ThrowIllegalOperation();
1023
1053
  }
1024
1054
 
1025
1055
  SharedInfoWrapper shared_info_wrapper(shared_info_array);
1026
1056
  Handle<SharedFunctionInfo> shared_info = shared_info_wrapper.GetInfo();
1027
1057
 
1028
1058
  DeoptimizeDependentFunctions(*shared_info);
1029
- CompilationCache::Remove(shared_info);
1059
+ Isolate::Current()->compilation_cache()->Remove(shared_info);
1030
1060
 
1031
- return Heap::undefined_value();
1061
+ return HEAP->undefined_value();
1032
1062
  }
1033
1063
 
1034
1064
 
@@ -1038,7 +1068,7 @@ void LiveEdit::SetFunctionScript(Handle<JSValue> function_wrapper,
1038
1068
  Handle<SharedFunctionInfo>::cast(UnwrapJSValue(function_wrapper));
1039
1069
  shared_info->set_script(*script_handle);
1040
1070
 
1041
- CompilationCache::Remove(shared_info);
1071
+ Isolate::Current()->compilation_cache()->Remove(shared_info);
1042
1072
  }
1043
1073
 
1044
1074
 
@@ -1186,7 +1216,7 @@ static Handle<Code> PatchPositionsInCode(Handle<Code> code,
1186
1216
  // Relocation info section now has different size. We cannot simply
1187
1217
  // rewrite it inside code object. Instead we have to create a new
1188
1218
  // code object.
1189
- Handle<Code> result(Factory::CopyCode(code, buffer));
1219
+ Handle<Code> result(FACTORY->CopyCode(code, buffer));
1190
1220
  return result;
1191
1221
  }
1192
1222
  }
@@ -1196,7 +1226,7 @@ MaybeObject* LiveEdit::PatchFunctionPositions(
1196
1226
  Handle<JSArray> shared_info_array, Handle<JSArray> position_change_array) {
1197
1227
 
1198
1228
  if (!SharedInfoWrapper::IsInstance(shared_info_array)) {
1199
- return Top::ThrowIllegalOperation();
1229
+ return Isolate::Current()->ThrowIllegalOperation();
1200
1230
  }
1201
1231
 
1202
1232
  SharedInfoWrapper shared_info_wrapper(shared_info_array);
@@ -1205,13 +1235,14 @@ MaybeObject* LiveEdit::PatchFunctionPositions(
1205
1235
  int old_function_start = info->start_position();
1206
1236
  int new_function_start = TranslatePosition(old_function_start,
1207
1237
  position_change_array);
1208
- info->set_start_position(new_function_start);
1209
- info->set_end_position(TranslatePosition(info->end_position(),
1210
- position_change_array));
1238
+ int new_function_end = TranslatePosition(info->end_position(),
1239
+ position_change_array);
1240
+ int new_function_token_pos =
1241
+ TranslatePosition(info->function_token_position(), position_change_array);
1211
1242
 
1212
- info->set_function_token_position(
1213
- TranslatePosition(info->function_token_position(),
1214
- position_change_array));
1243
+ info->set_start_position(new_function_start);
1244
+ info->set_end_position(new_function_end);
1245
+ info->set_function_token_position(new_function_token_pos);
1215
1246
 
1216
1247
  if (IsJSFunctionCode(info->code())) {
1217
1248
  // Patch relocation info section of the code.
@@ -1227,14 +1258,14 @@ MaybeObject* LiveEdit::PatchFunctionPositions(
1227
1258
  }
1228
1259
  }
1229
1260
 
1230
- return Heap::undefined_value();
1261
+ return HEAP->undefined_value();
1231
1262
  }
1232
1263
 
1233
1264
 
1234
1265
  static Handle<Script> CreateScriptCopy(Handle<Script> original) {
1235
1266
  Handle<String> original_source(String::cast(original->source()));
1236
1267
 
1237
- Handle<Script> copy = Factory::NewScript(original_source);
1268
+ Handle<Script> copy = FACTORY->NewScript(original_source);
1238
1269
 
1239
1270
  copy->set_name(original->name());
1240
1271
  copy->set_line_offset(original->line_offset());
@@ -1259,15 +1290,16 @@ Object* LiveEdit::ChangeScriptSource(Handle<Script> original_script,
1259
1290
  Handle<Script> old_script = CreateScriptCopy(original_script);
1260
1291
  old_script->set_name(String::cast(*old_script_name));
1261
1292
  old_script_object = old_script;
1262
- Debugger::OnAfterCompile(old_script, Debugger::SEND_WHEN_DEBUGGING);
1293
+ Isolate::Current()->debugger()->OnAfterCompile(
1294
+ old_script, Debugger::SEND_WHEN_DEBUGGING);
1263
1295
  } else {
1264
- old_script_object = Handle<Object>(Heap::null_value());
1296
+ old_script_object = Handle<Object>(HEAP->null_value());
1265
1297
  }
1266
1298
 
1267
1299
  original_script->set_source(*new_source);
1268
1300
 
1269
1301
  // Drop line ends so that they will be recalculated.
1270
- original_script->set_line_ends(Heap::undefined_value());
1302
+ original_script->set_line_ends(HEAP->undefined_value());
1271
1303
 
1272
1304
  return *old_script_object;
1273
1305
  }
@@ -1315,7 +1347,7 @@ static bool CheckActivation(Handle<JSArray> shared_info_array,
1315
1347
  SharedFunctionInfo::cast(wrapper->value()));
1316
1348
 
1317
1349
  if (function->shared() == *shared || IsInlined(*function, *shared)) {
1318
- SetElement(result, i, Handle<Smi>(Smi::FromInt(status)));
1350
+ SetElementNonStrict(result, i, Handle<Smi>(Smi::FromInt(status)));
1319
1351
  return true;
1320
1352
  }
1321
1353
  }
@@ -1328,7 +1360,8 @@ static bool CheckActivation(Handle<JSArray> shared_info_array,
1328
1360
  static bool FixTryCatchHandler(StackFrame* top_frame,
1329
1361
  StackFrame* bottom_frame) {
1330
1362
  Address* pointer_address =
1331
- &Memory::Address_at(Top::get_address_from_id(Top::k_handler_address));
1363
+ &Memory::Address_at(Isolate::Current()->get_address_from_id(
1364
+ Isolate::k_handler_address));
1332
1365
 
1333
1366
  while (*pointer_address < top_frame->sp()) {
1334
1367
  pointer_address = &Memory::Address_at(*pointer_address);
@@ -1363,19 +1396,22 @@ static const char* DropFrames(Vector<StackFrame*> frames,
1363
1396
  ASSERT(bottom_js_frame->is_java_script());
1364
1397
 
1365
1398
  // Check the nature of the top frame.
1366
- if (pre_top_frame->code()->is_inline_cache_stub() &&
1367
- pre_top_frame->code()->ic_state() == DEBUG_BREAK) {
1399
+ Code* pre_top_frame_code = pre_top_frame->LookupCode(Isolate::Current());
1400
+ if (pre_top_frame_code->is_inline_cache_stub() &&
1401
+ pre_top_frame_code->ic_state() == DEBUG_BREAK) {
1368
1402
  // OK, we can drop inline cache calls.
1369
1403
  *mode = Debug::FRAME_DROPPED_IN_IC_CALL;
1370
- } else if (pre_top_frame->code() == Debug::debug_break_slot()) {
1404
+ } else if (pre_top_frame_code ==
1405
+ Isolate::Current()->debug()->debug_break_slot()) {
1371
1406
  // OK, we can drop debug break slot.
1372
1407
  *mode = Debug::FRAME_DROPPED_IN_DEBUG_SLOT_CALL;
1373
- } else if (pre_top_frame->code() ==
1374
- Builtins::builtin(Builtins::FrameDropper_LiveEdit)) {
1408
+ } else if (pre_top_frame_code ==
1409
+ Isolate::Current()->builtins()->builtin(
1410
+ Builtins::kFrameDropper_LiveEdit)) {
1375
1411
  // OK, we can drop our own code.
1376
1412
  *mode = Debug::FRAME_DROPPED_IN_DIRECT_CALL;
1377
- } else if (pre_top_frame->code()->kind() == Code::STUB &&
1378
- pre_top_frame->code()->major_key()) {
1413
+ } else if (pre_top_frame_code->kind() == Code::STUB &&
1414
+ pre_top_frame_code->major_key()) {
1379
1415
  // Entry from our unit tests, it's fine, we support this case.
1380
1416
  *mode = Debug::FRAME_DROPPED_IN_DIRECT_CALL;
1381
1417
  } else {
@@ -1397,7 +1433,7 @@ static const char* DropFrames(Vector<StackFrame*> frames,
1397
1433
  // Make sure FixTryCatchHandler is idempotent.
1398
1434
  ASSERT(!FixTryCatchHandler(pre_top_frame, bottom_js_frame));
1399
1435
 
1400
- Handle<Code> code(Builtins::builtin(Builtins::FrameDropper_LiveEdit));
1436
+ Handle<Code> code = Isolate::Current()->builtins()->FrameDropper_LiveEdit();
1401
1437
  top_frame->set_pc(code->entry());
1402
1438
  pre_top_frame->SetCallerFp(bottom_js_frame->fp());
1403
1439
 
@@ -1424,7 +1460,7 @@ static bool IsDropableFrame(StackFrame* frame) {
1424
1460
  // removing all listed function if possible and if do_drop is true.
1425
1461
  static const char* DropActivationsInActiveThread(
1426
1462
  Handle<JSArray> shared_info_array, Handle<JSArray> result, bool do_drop) {
1427
-
1463
+ Debug* debug = Isolate::Current()->debug();
1428
1464
  ZoneScope scope(DELETE_ON_EXIT);
1429
1465
  Vector<StackFrame*> frames = CreateStackMap();
1430
1466
 
@@ -1434,7 +1470,7 @@ static const char* DropActivationsInActiveThread(
1434
1470
  int frame_index = 0;
1435
1471
  for (; frame_index < frames.length(); frame_index++) {
1436
1472
  StackFrame* frame = frames[frame_index];
1437
- if (frame->id() == Debug::break_frame_id()) {
1473
+ if (frame->id() == debug->break_frame_id()) {
1438
1474
  top_frame_index = frame_index;
1439
1475
  break;
1440
1476
  }
@@ -1511,7 +1547,7 @@ static const char* DropActivationsInActiveThread(
1511
1547
  break;
1512
1548
  }
1513
1549
  }
1514
- Debug::FramesHaveBeenDropped(new_id, drop_mode,
1550
+ debug->FramesHaveBeenDropped(new_id, drop_mode,
1515
1551
  restarter_frame_function_pointer);
1516
1552
 
1517
1553
  // Replace "blocked on active" with "replaced on active" status.
@@ -1520,7 +1556,7 @@ static const char* DropActivationsInActiveThread(
1520
1556
  Smi::FromInt(LiveEdit::FUNCTION_BLOCKED_ON_ACTIVE_STACK)) {
1521
1557
  Handle<Object> replaced(
1522
1558
  Smi::FromInt(LiveEdit::FUNCTION_REPLACED_ON_ACTIVE_STACK));
1523
- SetElement(result, i, replaced);
1559
+ SetElementNonStrict(result, i, replaced);
1524
1560
  }
1525
1561
  }
1526
1562
  return NULL;
@@ -1556,19 +1592,22 @@ Handle<JSArray> LiveEdit::CheckAndDropActivations(
1556
1592
  Handle<JSArray> shared_info_array, bool do_drop) {
1557
1593
  int len = Smi::cast(shared_info_array->length())->value();
1558
1594
 
1559
- Handle<JSArray> result = Factory::NewJSArray(len);
1595
+ Handle<JSArray> result = FACTORY->NewJSArray(len);
1560
1596
 
1561
1597
  // Fill the default values.
1562
1598
  for (int i = 0; i < len; i++) {
1563
- SetElement(result, i,
1564
- Handle<Smi>(Smi::FromInt(FUNCTION_AVAILABLE_FOR_PATCH)));
1599
+ SetElementNonStrict(
1600
+ result,
1601
+ i,
1602
+ Handle<Smi>(Smi::FromInt(FUNCTION_AVAILABLE_FOR_PATCH)));
1565
1603
  }
1566
1604
 
1567
1605
 
1568
1606
  // First check inactive threads. Fail if some functions are blocked there.
1569
1607
  InactiveThreadActivationsChecker inactive_threads_checker(shared_info_array,
1570
1608
  result);
1571
- ThreadManager::IterateArchivedThreads(&inactive_threads_checker);
1609
+ Isolate::Current()->thread_manager()->IterateArchivedThreads(
1610
+ &inactive_threads_checker);
1572
1611
  if (inactive_threads_checker.HasBlockedFunctions()) {
1573
1612
  return result;
1574
1613
  }
@@ -1579,42 +1618,44 @@ Handle<JSArray> LiveEdit::CheckAndDropActivations(
1579
1618
  if (error_message != NULL) {
1580
1619
  // Add error message as an array extra element.
1581
1620
  Vector<const char> vector_message(error_message, StrLength(error_message));
1582
- Handle<String> str = Factory::NewStringFromAscii(vector_message);
1583
- SetElement(result, len, str);
1621
+ Handle<String> str = FACTORY->NewStringFromAscii(vector_message);
1622
+ SetElementNonStrict(result, len, str);
1584
1623
  }
1585
1624
  return result;
1586
1625
  }
1587
1626
 
1588
1627
 
1589
- LiveEditFunctionTracker::LiveEditFunctionTracker(FunctionLiteral* fun) {
1590
- if (active_function_info_listener != NULL) {
1591
- active_function_info_listener->FunctionStarted(fun);
1628
+ LiveEditFunctionTracker::LiveEditFunctionTracker(Isolate* isolate,
1629
+ FunctionLiteral* fun)
1630
+ : isolate_(isolate) {
1631
+ if (isolate_->active_function_info_listener() != NULL) {
1632
+ isolate_->active_function_info_listener()->FunctionStarted(fun);
1592
1633
  }
1593
1634
  }
1594
1635
 
1595
1636
 
1596
1637
  LiveEditFunctionTracker::~LiveEditFunctionTracker() {
1597
- if (active_function_info_listener != NULL) {
1598
- active_function_info_listener->FunctionDone();
1638
+ if (isolate_->active_function_info_listener() != NULL) {
1639
+ isolate_->active_function_info_listener()->FunctionDone();
1599
1640
  }
1600
1641
  }
1601
1642
 
1602
1643
 
1603
1644
  void LiveEditFunctionTracker::RecordFunctionInfo(
1604
1645
  Handle<SharedFunctionInfo> info, FunctionLiteral* lit) {
1605
- if (active_function_info_listener != NULL) {
1606
- active_function_info_listener->FunctionInfo(info, lit->scope());
1646
+ if (isolate_->active_function_info_listener() != NULL) {
1647
+ isolate_->active_function_info_listener()->FunctionInfo(info, lit->scope());
1607
1648
  }
1608
1649
  }
1609
1650
 
1610
1651
 
1611
1652
  void LiveEditFunctionTracker::RecordRootFunctionInfo(Handle<Code> code) {
1612
- active_function_info_listener->FunctionCode(code);
1653
+ isolate_->active_function_info_listener()->FunctionCode(code);
1613
1654
  }
1614
1655
 
1615
1656
 
1616
- bool LiveEditFunctionTracker::IsActive() {
1617
- return active_function_info_listener != NULL;
1657
+ bool LiveEditFunctionTracker::IsActive(Isolate* isolate) {
1658
+ return isolate->active_function_info_listener() != NULL;
1618
1659
  }
1619
1660
 
1620
1661
 
@@ -1622,7 +1663,8 @@ bool LiveEditFunctionTracker::IsActive() {
1622
1663
 
1623
1664
  // This ifdef-else-endif section provides working or stub implementation of
1624
1665
  // LiveEditFunctionTracker.
1625
- LiveEditFunctionTracker::LiveEditFunctionTracker(FunctionLiteral* fun) {
1666
+ LiveEditFunctionTracker::LiveEditFunctionTracker(Isolate* isolate,
1667
+ FunctionLiteral* fun) {
1626
1668
  }
1627
1669
 
1628
1670