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
@@ -44,6 +44,9 @@ class NameConverter {
44
44
  virtual const char* NameOfAddress(byte* addr) const;
45
45
  virtual const char* NameOfConstant(byte* addr) const;
46
46
  virtual const char* NameInCode(byte* addr) const;
47
+
48
+ protected:
49
+ v8::internal::EmbeddedVector<char, 128> tmp_buffer_;
47
50
  };
48
51
 
49
52
 
@@ -65,24 +65,24 @@ class V8NameConverter: public disasm::NameConverter {
65
65
  Code* code() const { return code_; }
66
66
  private:
67
67
  Code* code_;
68
+
69
+ EmbeddedVector<char, 128> v8_buffer_;
68
70
  };
69
71
 
70
72
 
71
73
  const char* V8NameConverter::NameOfAddress(byte* pc) const {
72
- static v8::internal::EmbeddedVector<char, 128> buffer;
73
-
74
- const char* name = Builtins::Lookup(pc);
74
+ const char* name = Isolate::Current()->builtins()->Lookup(pc);
75
75
  if (name != NULL) {
76
- OS::SNPrintF(buffer, "%s (%p)", name, pc);
77
- return buffer.start();
76
+ OS::SNPrintF(v8_buffer_, "%s (%p)", name, pc);
77
+ return v8_buffer_.start();
78
78
  }
79
79
 
80
80
  if (code_ != NULL) {
81
81
  int offs = static_cast<int>(pc - code_->instruction_start());
82
82
  // print as code offset, if it seems reasonable
83
83
  if (0 <= offs && offs < code_->instruction_size()) {
84
- OS::SNPrintF(buffer, "%d (%p)", offs, pc);
85
- return buffer.start();
84
+ OS::SNPrintF(v8_buffer_, "%d (%p)", offs, pc);
85
+ return v8_buffer_.start();
86
86
  }
87
87
  }
88
88
 
@@ -115,6 +115,7 @@ static int DecodeIt(FILE* f,
115
115
  NoHandleAllocation ha;
116
116
  AssertNoAllocation no_alloc;
117
117
  ExternalReferenceEncoder ref_encoder;
118
+ Heap* heap = HEAP;
118
119
 
119
120
  v8::internal::EmbeddedVector<char, 128> decode_buffer;
120
121
  v8::internal::EmbeddedVector<char, kOutBufferSize> out_buffer;
@@ -256,8 +257,8 @@ static int DecodeIt(FILE* f,
256
257
  } else if (kind == Code::STUB) {
257
258
  // Reverse lookup required as the minor key cannot be retrieved
258
259
  // from the code object.
259
- Object* obj = Heap::code_stubs()->SlowReverseLookup(code);
260
- if (obj != Heap::undefined_value()) {
260
+ Object* obj = heap->code_stubs()->SlowReverseLookup(code);
261
+ if (obj != heap->undefined_value()) {
261
262
  ASSERT(obj->IsSmi());
262
263
  // Get the STUB key and extract major and minor key.
263
264
  uint32_t key = Smi::cast(obj)->value();
@@ -1,4 +1,4 @@
1
- // Copyright 2006-2008 the V8 project authors. All rights reserved.
1
+ // Copyright 2011 the V8 project authors. All rights reserved.
2
2
  // Redistribution and use in source and binary forms, with or without
3
3
  // modification, are permitted provided that the following conditions are
4
4
  // met:
@@ -42,14 +42,39 @@ namespace v8 {
42
42
  namespace internal {
43
43
 
44
44
 
45
+ StackGuard::StackGuard()
46
+ : isolate_(NULL) {
47
+ }
48
+
49
+
50
+ void StackGuard::set_interrupt_limits(const ExecutionAccess& lock) {
51
+ ASSERT(isolate_ != NULL);
52
+ // Ignore attempts to interrupt when interrupts are postponed.
53
+ if (should_postpone_interrupts(lock)) return;
54
+ thread_local_.jslimit_ = kInterruptLimit;
55
+ thread_local_.climit_ = kInterruptLimit;
56
+ isolate_->heap()->SetStackLimits();
57
+ }
58
+
59
+
60
+ void StackGuard::reset_limits(const ExecutionAccess& lock) {
61
+ ASSERT(isolate_ != NULL);
62
+ thread_local_.jslimit_ = thread_local_.real_jslimit_;
63
+ thread_local_.climit_ = thread_local_.real_climit_;
64
+ isolate_->heap()->SetStackLimits();
65
+ }
66
+
67
+
45
68
  static Handle<Object> Invoke(bool construct,
46
69
  Handle<JSFunction> func,
47
70
  Handle<Object> receiver,
48
71
  int argc,
49
72
  Object*** args,
50
73
  bool* has_pending_exception) {
74
+ Isolate* isolate = func->GetIsolate();
75
+
51
76
  // Entering JavaScript.
52
- VMState state(JS);
77
+ VMState state(isolate, JS);
53
78
 
54
79
  // Placeholder for return value.
55
80
  MaybeObject* value = reinterpret_cast<Object*>(kZapValue);
@@ -85,7 +110,7 @@ static Handle<Object> Invoke(bool construct,
85
110
  {
86
111
  // Save and restore context around invocation and block the
87
112
  // allocation of handles without explicit handle scopes.
88
- SaveContext save;
113
+ SaveContext save(isolate);
89
114
  NoHandleAllocation na;
90
115
  JSEntryFunction entry = FUNCTION_CAST<JSEntryFunction>(code->entry());
91
116
 
@@ -103,20 +128,20 @@ static Handle<Object> Invoke(bool construct,
103
128
 
104
129
  // Update the pending exception flag and return the value.
105
130
  *has_pending_exception = value->IsException();
106
- ASSERT(*has_pending_exception == Top::has_pending_exception());
131
+ ASSERT(*has_pending_exception == Isolate::Current()->has_pending_exception());
107
132
  if (*has_pending_exception) {
108
- Top::ReportPendingMessages();
109
- if (Top::pending_exception() == Failure::OutOfMemoryException()) {
110
- if (!HandleScopeImplementer::instance()->ignore_out_of_memory()) {
133
+ isolate->ReportPendingMessages();
134
+ if (isolate->pending_exception() == Failure::OutOfMemoryException()) {
135
+ if (!isolate->handle_scope_implementer()->ignore_out_of_memory()) {
111
136
  V8::FatalProcessOutOfMemory("JS", true);
112
137
  }
113
138
  }
114
139
  return Handle<Object>();
115
140
  } else {
116
- Top::clear_pending_message();
141
+ isolate->clear_pending_message();
117
142
  }
118
143
 
119
- return Handle<Object>(value->ToObjectUnchecked());
144
+ return Handle<Object>(value->ToObjectUnchecked(), isolate);
120
145
  }
121
146
 
122
147
 
@@ -131,7 +156,8 @@ Handle<Object> Execution::Call(Handle<JSFunction> func,
131
156
 
132
157
  Handle<Object> Execution::New(Handle<JSFunction> func, int argc,
133
158
  Object*** args, bool* pending_exception) {
134
- return Invoke(true, func, Top::global(), argc, args, pending_exception);
159
+ return Invoke(true, func, Isolate::Current()->global(), argc, args,
160
+ pending_exception);
135
161
  }
136
162
 
137
163
 
@@ -153,24 +179,28 @@ Handle<Object> Execution::TryCall(Handle<JSFunction> func,
153
179
 
154
180
  if (*caught_exception) {
155
181
  ASSERT(catcher.HasCaught());
156
- ASSERT(Top::has_pending_exception());
157
- ASSERT(Top::external_caught_exception());
158
- if (Top::pending_exception() == Heap::termination_exception()) {
159
- result = Factory::termination_exception();
182
+ Isolate* isolate = Isolate::Current();
183
+ ASSERT(isolate->has_pending_exception());
184
+ ASSERT(isolate->external_caught_exception());
185
+ if (isolate->pending_exception() ==
186
+ isolate->heap()->termination_exception()) {
187
+ result = isolate->factory()->termination_exception();
160
188
  } else {
161
189
  result = v8::Utils::OpenHandle(*catcher.Exception());
162
190
  }
163
- Top::OptionalRescheduleException(true);
191
+ isolate->OptionalRescheduleException(true);
164
192
  }
165
193
 
166
- ASSERT(!Top::has_pending_exception());
167
- ASSERT(!Top::external_caught_exception());
194
+ ASSERT(!Isolate::Current()->has_pending_exception());
195
+ ASSERT(!Isolate::Current()->external_caught_exception());
168
196
  return result;
169
197
  }
170
198
 
171
199
 
172
200
  Handle<Object> Execution::GetFunctionDelegate(Handle<Object> object) {
173
201
  ASSERT(!object->IsJSFunction());
202
+ Isolate* isolate = Isolate::Current();
203
+ Factory* factory = isolate->factory();
174
204
 
175
205
  // If you return a function from here, it will be called when an
176
206
  // attempt is made to call the given object as a function.
@@ -178,7 +208,7 @@ Handle<Object> Execution::GetFunctionDelegate(Handle<Object> object) {
178
208
  // Regular expressions can be called as functions in both Firefox
179
209
  // and Safari so we allow it too.
180
210
  if (object->IsJSRegExp()) {
181
- Handle<String> exec = Factory::exec_symbol();
211
+ Handle<String> exec = factory->exec_symbol();
182
212
  // TODO(lrn): Bug 617. We should use the default function here, not the
183
213
  // one on the RegExp object.
184
214
  Object* exec_function;
@@ -186,7 +216,7 @@ Handle<Object> Execution::GetFunctionDelegate(Handle<Object> object) {
186
216
  // This can lose an exception, but the alternative is to put a failure
187
217
  // object in a handle, which is not GC safe.
188
218
  if (!maybe_exec_function->ToObject(&exec_function)) {
189
- return Factory::undefined_value();
219
+ return factory->undefined_value();
190
220
  }
191
221
  }
192
222
  return Handle<Object>(exec_function);
@@ -197,15 +227,16 @@ Handle<Object> Execution::GetFunctionDelegate(Handle<Object> object) {
197
227
  if (object->IsHeapObject() &&
198
228
  HeapObject::cast(*object)->map()->has_instance_call_handler()) {
199
229
  return Handle<JSFunction>(
200
- Top::global_context()->call_as_function_delegate());
230
+ isolate->global_context()->call_as_function_delegate());
201
231
  }
202
232
 
203
- return Factory::undefined_value();
233
+ return factory->undefined_value();
204
234
  }
205
235
 
206
236
 
207
237
  Handle<Object> Execution::GetConstructorDelegate(Handle<Object> object) {
208
238
  ASSERT(!object->IsJSFunction());
239
+ Isolate* isolate = Isolate::Current();
209
240
 
210
241
  // If you return a function from here, it will be called when an
211
242
  // attempt is made to call the given object as a constructor.
@@ -215,26 +246,22 @@ Handle<Object> Execution::GetConstructorDelegate(Handle<Object> object) {
215
246
  if (object->IsHeapObject() &&
216
247
  HeapObject::cast(*object)->map()->has_instance_call_handler()) {
217
248
  return Handle<JSFunction>(
218
- Top::global_context()->call_as_constructor_delegate());
249
+ isolate->global_context()->call_as_constructor_delegate());
219
250
  }
220
251
 
221
- return Factory::undefined_value();
252
+ return isolate->factory()->undefined_value();
222
253
  }
223
254
 
224
255
 
225
- // Static state for stack guards.
226
- StackGuard::ThreadLocal StackGuard::thread_local_;
227
-
228
-
229
256
  bool StackGuard::IsStackOverflow() {
230
- ExecutionAccess access;
257
+ ExecutionAccess access(isolate_);
231
258
  return (thread_local_.jslimit_ != kInterruptLimit &&
232
259
  thread_local_.climit_ != kInterruptLimit);
233
260
  }
234
261
 
235
262
 
236
263
  void StackGuard::EnableInterrupts() {
237
- ExecutionAccess access;
264
+ ExecutionAccess access(isolate_);
238
265
  if (has_pending_interrupts(access)) {
239
266
  set_interrupt_limits(access);
240
267
  }
@@ -242,7 +269,7 @@ void StackGuard::EnableInterrupts() {
242
269
 
243
270
 
244
271
  void StackGuard::SetStackLimit(uintptr_t limit) {
245
- ExecutionAccess access;
272
+ ExecutionAccess access(isolate_);
246
273
  // If the current limits are special (eg due to a pending interrupt) then
247
274
  // leave them alone.
248
275
  uintptr_t jslimit = SimulatorStack::JsLimitFromCLimit(limit);
@@ -258,92 +285,92 @@ void StackGuard::SetStackLimit(uintptr_t limit) {
258
285
 
259
286
 
260
287
  void StackGuard::DisableInterrupts() {
261
- ExecutionAccess access;
288
+ ExecutionAccess access(isolate_);
262
289
  reset_limits(access);
263
290
  }
264
291
 
265
292
 
266
293
  bool StackGuard::IsInterrupted() {
267
- ExecutionAccess access;
294
+ ExecutionAccess access(isolate_);
268
295
  return thread_local_.interrupt_flags_ & INTERRUPT;
269
296
  }
270
297
 
271
298
 
272
299
  void StackGuard::Interrupt() {
273
- ExecutionAccess access;
300
+ ExecutionAccess access(isolate_);
274
301
  thread_local_.interrupt_flags_ |= INTERRUPT;
275
302
  set_interrupt_limits(access);
276
303
  }
277
304
 
278
305
 
279
306
  bool StackGuard::IsPreempted() {
280
- ExecutionAccess access;
307
+ ExecutionAccess access(isolate_);
281
308
  return thread_local_.interrupt_flags_ & PREEMPT;
282
309
  }
283
310
 
284
311
 
285
312
  void StackGuard::Preempt() {
286
- ExecutionAccess access;
313
+ ExecutionAccess access(isolate_);
287
314
  thread_local_.interrupt_flags_ |= PREEMPT;
288
315
  set_interrupt_limits(access);
289
316
  }
290
317
 
291
318
 
292
319
  bool StackGuard::IsTerminateExecution() {
293
- ExecutionAccess access;
320
+ ExecutionAccess access(isolate_);
294
321
  return thread_local_.interrupt_flags_ & TERMINATE;
295
322
  }
296
323
 
297
324
 
298
325
  void StackGuard::TerminateExecution() {
299
- ExecutionAccess access;
326
+ ExecutionAccess access(isolate_);
300
327
  thread_local_.interrupt_flags_ |= TERMINATE;
301
328
  set_interrupt_limits(access);
302
329
  }
303
330
 
304
331
 
305
332
  bool StackGuard::IsRuntimeProfilerTick() {
306
- ExecutionAccess access;
333
+ ExecutionAccess access(isolate_);
307
334
  return thread_local_.interrupt_flags_ & RUNTIME_PROFILER_TICK;
308
335
  }
309
336
 
310
337
 
311
338
  void StackGuard::RequestRuntimeProfilerTick() {
312
339
  // Ignore calls if we're not optimizing or if we can't get the lock.
313
- if (FLAG_opt && ExecutionAccess::TryLock()) {
340
+ if (FLAG_opt && ExecutionAccess::TryLock(isolate_)) {
314
341
  thread_local_.interrupt_flags_ |= RUNTIME_PROFILER_TICK;
315
342
  if (thread_local_.postpone_interrupts_nesting_ == 0) {
316
343
  thread_local_.jslimit_ = thread_local_.climit_ = kInterruptLimit;
317
- Heap::SetStackLimits();
344
+ isolate_->heap()->SetStackLimits();
318
345
  }
319
- ExecutionAccess::Unlock();
346
+ ExecutionAccess::Unlock(isolate_);
320
347
  }
321
348
  }
322
349
 
323
350
 
324
351
  #ifdef ENABLE_DEBUGGER_SUPPORT
325
352
  bool StackGuard::IsDebugBreak() {
326
- ExecutionAccess access;
353
+ ExecutionAccess access(isolate_);
327
354
  return thread_local_.interrupt_flags_ & DEBUGBREAK;
328
355
  }
329
356
 
330
357
 
331
358
  void StackGuard::DebugBreak() {
332
- ExecutionAccess access;
359
+ ExecutionAccess access(isolate_);
333
360
  thread_local_.interrupt_flags_ |= DEBUGBREAK;
334
361
  set_interrupt_limits(access);
335
362
  }
336
363
 
337
364
 
338
365
  bool StackGuard::IsDebugCommand() {
339
- ExecutionAccess access;
366
+ ExecutionAccess access(isolate_);
340
367
  return thread_local_.interrupt_flags_ & DEBUGCOMMAND;
341
368
  }
342
369
 
343
370
 
344
371
  void StackGuard::DebugCommand() {
345
372
  if (FLAG_debugger_auto_break) {
346
- ExecutionAccess access;
373
+ ExecutionAccess access(isolate_);
347
374
  thread_local_.interrupt_flags_ |= DEBUGCOMMAND;
348
375
  set_interrupt_limits(access);
349
376
  }
@@ -351,7 +378,7 @@ void StackGuard::DebugCommand() {
351
378
  #endif
352
379
 
353
380
  void StackGuard::Continue(InterruptFlag after_what) {
354
- ExecutionAccess access;
381
+ ExecutionAccess access(isolate_);
355
382
  thread_local_.interrupt_flags_ &= ~static_cast<int>(after_what);
356
383
  if (!should_postpone_interrupts(access) && !has_pending_interrupts(access)) {
357
384
  reset_limits(access);
@@ -359,36 +386,34 @@ void StackGuard::Continue(InterruptFlag after_what) {
359
386
  }
360
387
 
361
388
 
362
- int StackGuard::ArchiveSpacePerThread() {
363
- return sizeof(ThreadLocal);
364
- }
365
-
366
-
367
389
  char* StackGuard::ArchiveStackGuard(char* to) {
368
- ExecutionAccess access;
390
+ ExecutionAccess access(isolate_);
369
391
  memcpy(to, reinterpret_cast<char*>(&thread_local_), sizeof(ThreadLocal));
370
392
  ThreadLocal blank;
393
+
394
+ // Set the stack limits using the old thread_local_.
395
+ // TODO(isolates): This was the old semantics of constructing a ThreadLocal
396
+ // (as the ctor called SetStackLimits, which looked at the
397
+ // current thread_local_ from StackGuard)-- but is this
398
+ // really what was intended?
399
+ isolate_->heap()->SetStackLimits();
371
400
  thread_local_ = blank;
401
+
372
402
  return to + sizeof(ThreadLocal);
373
403
  }
374
404
 
375
405
 
376
406
  char* StackGuard::RestoreStackGuard(char* from) {
377
- ExecutionAccess access;
407
+ ExecutionAccess access(isolate_);
378
408
  memcpy(reinterpret_cast<char*>(&thread_local_), from, sizeof(ThreadLocal));
379
- Heap::SetStackLimits();
409
+ isolate_->heap()->SetStackLimits();
380
410
  return from + sizeof(ThreadLocal);
381
411
  }
382
412
 
383
413
 
384
- static internal::Thread::LocalStorageKey stack_limit_key =
385
- internal::Thread::CreateThreadLocalKey();
386
-
387
-
388
414
  void StackGuard::FreeThreadResources() {
389
- Thread::SetThreadLocal(
390
- stack_limit_key,
391
- reinterpret_cast<void*>(thread_local_.real_climit_));
415
+ Isolate::CurrentPerIsolateThreadData()->set_stack_limit(
416
+ thread_local_.real_climit_);
392
417
  }
393
418
 
394
419
 
@@ -400,11 +425,11 @@ void StackGuard::ThreadLocal::Clear() {
400
425
  nesting_ = 0;
401
426
  postpone_interrupts_nesting_ = 0;
402
427
  interrupt_flags_ = 0;
403
- Heap::SetStackLimits();
404
428
  }
405
429
 
406
430
 
407
- void StackGuard::ThreadLocal::Initialize() {
431
+ bool StackGuard::ThreadLocal::Initialize() {
432
+ bool should_set_stack_limits = false;
408
433
  if (real_climit_ == kIllegalLimit) {
409
434
  // Takes the address of the limit variable in order to find out where
410
435
  // the top of stack is right now.
@@ -415,37 +440,42 @@ void StackGuard::ThreadLocal::Initialize() {
415
440
  jslimit_ = SimulatorStack::JsLimitFromCLimit(limit);
416
441
  real_climit_ = limit;
417
442
  climit_ = limit;
418
- Heap::SetStackLimits();
443
+ should_set_stack_limits = true;
419
444
  }
420
445
  nesting_ = 0;
421
446
  postpone_interrupts_nesting_ = 0;
422
447
  interrupt_flags_ = 0;
448
+ return should_set_stack_limits;
423
449
  }
424
450
 
425
451
 
426
452
  void StackGuard::ClearThread(const ExecutionAccess& lock) {
427
453
  thread_local_.Clear();
454
+ isolate_->heap()->SetStackLimits();
428
455
  }
429
456
 
430
457
 
431
458
  void StackGuard::InitThread(const ExecutionAccess& lock) {
432
- thread_local_.Initialize();
433
- void* stored_limit = Thread::GetThreadLocal(stack_limit_key);
459
+ if (thread_local_.Initialize()) isolate_->heap()->SetStackLimits();
460
+ uintptr_t stored_limit =
461
+ Isolate::CurrentPerIsolateThreadData()->stack_limit();
434
462
  // You should hold the ExecutionAccess lock when you call this.
435
- if (stored_limit != NULL) {
436
- StackGuard::SetStackLimit(reinterpret_cast<intptr_t>(stored_limit));
463
+ if (stored_limit != 0) {
464
+ StackGuard::SetStackLimit(stored_limit);
437
465
  }
438
466
  }
439
467
 
440
468
 
441
469
  // --- C a l l s t o n a t i v e s ---
442
470
 
443
- #define RETURN_NATIVE_CALL(name, argc, argv, has_pending_exception) \
444
- do { \
445
- Object** args[argc] = argv; \
446
- ASSERT(has_pending_exception != NULL); \
447
- return Call(Top::name##_fun(), Top::builtins(), argc, args, \
448
- has_pending_exception); \
471
+ #define RETURN_NATIVE_CALL(name, argc, argv, has_pending_exception) \
472
+ do { \
473
+ Isolate* isolate = Isolate::Current(); \
474
+ Object** args[argc] = argv; \
475
+ ASSERT(has_pending_exception != NULL); \
476
+ return Call(isolate->name##_fun(), \
477
+ isolate->js_builtins_object(), argc, args, \
478
+ has_pending_exception); \
449
479
  } while (false)
450
480
 
451
481
 
@@ -461,7 +491,7 @@ Handle<Object> Execution::ToBoolean(Handle<Object> obj) {
461
491
  double value = obj->Number();
462
492
  result = !((value == 0) || isnan(value));
463
493
  }
464
- return Handle<Object>(Heap::ToBoolean(result));
494
+ return Handle<Object>(HEAP->ToBoolean(result));
465
495
  }
466
496
 
467
497
 
@@ -502,7 +532,7 @@ Handle<Object> Execution::ToInt32(Handle<Object> obj, bool* exc) {
502
532
 
503
533
 
504
534
  Handle<Object> Execution::NewDate(double time, bool* exc) {
505
- Handle<Object> time_obj = Factory::NewNumber(time);
535
+ Handle<Object> time_obj = FACTORY->NewNumber(time);
506
536
  RETURN_NATIVE_CALL(create_date, 1, { time_obj.location() }, exc);
507
537
  }
508
538
 
@@ -513,30 +543,33 @@ Handle<Object> Execution::NewDate(double time, bool* exc) {
513
543
  Handle<JSRegExp> Execution::NewJSRegExp(Handle<String> pattern,
514
544
  Handle<String> flags,
515
545
  bool* exc) {
546
+ Handle<JSFunction> function = Handle<JSFunction>(
547
+ pattern->GetIsolate()->global_context()->regexp_function());
516
548
  Handle<Object> re_obj = RegExpImpl::CreateRegExpLiteral(
517
- Handle<JSFunction>(Top::global_context()->regexp_function()),
518
- pattern,
519
- flags,
520
- exc);
549
+ function, pattern, flags, exc);
521
550
  if (*exc) return Handle<JSRegExp>();
522
551
  return Handle<JSRegExp>::cast(re_obj);
523
552
  }
524
553
 
525
554
 
526
555
  Handle<Object> Execution::CharAt(Handle<String> string, uint32_t index) {
556
+ Isolate* isolate = string->GetIsolate();
557
+ Factory* factory = isolate->factory();
558
+
527
559
  int int_index = static_cast<int>(index);
528
560
  if (int_index < 0 || int_index >= string->length()) {
529
- return Factory::undefined_value();
561
+ return factory->undefined_value();
530
562
  }
531
563
 
532
564
  Handle<Object> char_at =
533
- GetProperty(Top::builtins(), Factory::char_at_symbol());
565
+ GetProperty(isolate->js_builtins_object(),
566
+ factory->char_at_symbol());
534
567
  if (!char_at->IsJSFunction()) {
535
- return Factory::undefined_value();
568
+ return factory->undefined_value();
536
569
  }
537
570
 
538
571
  bool caught_exception;
539
- Handle<Object> index_object = Factory::NewNumberFromInt(int_index);
572
+ Handle<Object> index_object = factory->NewNumberFromInt(int_index);
540
573
  Object** index_arg[] = { index_object.location() };
541
574
  Handle<Object> result = TryCall(Handle<JSFunction>::cast(char_at),
542
575
  string,
@@ -544,7 +577,7 @@ Handle<Object> Execution::CharAt(Handle<String> string, uint32_t index) {
544
577
  index_arg,
545
578
  &caught_exception);
546
579
  if (caught_exception) {
547
- return Factory::undefined_value();
580
+ return factory->undefined_value();
548
581
  }
549
582
  return result;
550
583
  }
@@ -552,15 +585,18 @@ Handle<Object> Execution::CharAt(Handle<String> string, uint32_t index) {
552
585
 
553
586
  Handle<JSFunction> Execution::InstantiateFunction(
554
587
  Handle<FunctionTemplateInfo> data, bool* exc) {
588
+ Isolate* isolate = data->GetIsolate();
555
589
  // Fast case: see if the function has already been instantiated
556
590
  int serial_number = Smi::cast(data->serial_number())->value();
557
- Object* elm = Top::global_context()->function_cache()->
558
- GetElementNoExceptionThrown(serial_number);
591
+ Object* elm =
592
+ isolate->global_context()->function_cache()->
593
+ GetElementNoExceptionThrown(serial_number);
559
594
  if (elm->IsJSFunction()) return Handle<JSFunction>(JSFunction::cast(elm));
560
595
  // The function has not yet been instantiated in this context; do it.
561
596
  Object** args[1] = { Handle<Object>::cast(data).location() };
562
597
  Handle<Object> result =
563
- Call(Top::instantiate_fun(), Top::builtins(), 1, args, exc);
598
+ Call(isolate->instantiate_fun(),
599
+ isolate->js_builtins_object(), 1, args, exc);
564
600
  if (*exc) return Handle<JSFunction>::null();
565
601
  return Handle<JSFunction>::cast(result);
566
602
  }
@@ -568,12 +604,13 @@ Handle<JSFunction> Execution::InstantiateFunction(
568
604
 
569
605
  Handle<JSObject> Execution::InstantiateObject(Handle<ObjectTemplateInfo> data,
570
606
  bool* exc) {
607
+ Isolate* isolate = data->GetIsolate();
571
608
  if (data->property_list()->IsUndefined() &&
572
609
  !data->constructor()->IsUndefined()) {
573
610
  // Initialization to make gcc happy.
574
611
  Object* result = NULL;
575
612
  {
576
- HandleScope scope;
613
+ HandleScope scope(isolate);
577
614
  Handle<FunctionTemplateInfo> cons_template =
578
615
  Handle<FunctionTemplateInfo>(
579
616
  FunctionTemplateInfo::cast(data->constructor()));
@@ -588,7 +625,8 @@ Handle<JSObject> Execution::InstantiateObject(Handle<ObjectTemplateInfo> data,
588
625
  } else {
589
626
  Object** args[1] = { Handle<Object>::cast(data).location() };
590
627
  Handle<Object> result =
591
- Call(Top::instantiate_fun(), Top::builtins(), 1, args, exc);
628
+ Call(isolate->instantiate_fun(),
629
+ isolate->js_builtins_object(), 1, args, exc);
592
630
  if (*exc) return Handle<JSObject>::null();
593
631
  return Handle<JSObject>::cast(result);
594
632
  }
@@ -598,8 +636,10 @@ Handle<JSObject> Execution::InstantiateObject(Handle<ObjectTemplateInfo> data,
598
636
  void Execution::ConfigureInstance(Handle<Object> instance,
599
637
  Handle<Object> instance_template,
600
638
  bool* exc) {
639
+ Isolate* isolate = Isolate::Current();
601
640
  Object** args[2] = { instance.location(), instance_template.location() };
602
- Execution::Call(Top::configure_instance_fun(), Top::builtins(), 2, args, exc);
641
+ Execution::Call(isolate->configure_instance_fun(),
642
+ isolate->js_builtins_object(), 2, args, exc);
603
643
  }
604
644
 
605
645
 
@@ -607,56 +647,67 @@ Handle<String> Execution::GetStackTraceLine(Handle<Object> recv,
607
647
  Handle<JSFunction> fun,
608
648
  Handle<Object> pos,
609
649
  Handle<Object> is_global) {
650
+ Isolate* isolate = fun->GetIsolate();
610
651
  const int argc = 4;
611
652
  Object** args[argc] = { recv.location(),
612
653
  Handle<Object>::cast(fun).location(),
613
654
  pos.location(),
614
655
  is_global.location() };
615
656
  bool caught_exception = false;
616
- Handle<Object> result = TryCall(Top::get_stack_trace_line_fun(),
617
- Top::builtins(), argc, args,
618
- &caught_exception);
619
- if (caught_exception || !result->IsString()) return Factory::empty_symbol();
657
+ Handle<Object> result =
658
+ TryCall(isolate->get_stack_trace_line_fun(),
659
+ isolate->js_builtins_object(), argc, args,
660
+ &caught_exception);
661
+ if (caught_exception || !result->IsString()) {
662
+ return isolate->factory()->empty_symbol();
663
+ }
664
+
620
665
  return Handle<String>::cast(result);
621
666
  }
622
667
 
623
668
 
624
669
  static Object* RuntimePreempt() {
670
+ Isolate* isolate = Isolate::Current();
671
+
625
672
  // Clear the preempt request flag.
626
- StackGuard::Continue(PREEMPT);
673
+ isolate->stack_guard()->Continue(PREEMPT);
627
674
 
628
675
  ContextSwitcher::PreemptionReceived();
629
676
 
630
677
  #ifdef ENABLE_DEBUGGER_SUPPORT
631
- if (Debug::InDebugger()) {
678
+ if (isolate->debug()->InDebugger()) {
632
679
  // If currently in the debugger don't do any actual preemption but record
633
680
  // that preemption occoured while in the debugger.
634
- Debug::PreemptionWhileInDebugger();
681
+ isolate->debug()->PreemptionWhileInDebugger();
635
682
  } else {
636
683
  // Perform preemption.
637
684
  v8::Unlocker unlocker;
638
685
  Thread::YieldCPU();
639
686
  }
640
687
  #else
641
- // Perform preemption.
642
- v8::Unlocker unlocker;
643
- Thread::YieldCPU();
688
+ { // NOLINT
689
+ // Perform preemption.
690
+ v8::Unlocker unlocker;
691
+ Thread::YieldCPU();
692
+ }
644
693
  #endif
645
694
 
646
- return Heap::undefined_value();
695
+ return isolate->heap()->undefined_value();
647
696
  }
648
697
 
649
698
 
650
699
  #ifdef ENABLE_DEBUGGER_SUPPORT
651
700
  Object* Execution::DebugBreakHelper() {
701
+ Isolate* isolate = Isolate::Current();
702
+
652
703
  // Just continue if breaks are disabled.
653
- if (Debug::disable_break()) {
654
- return Heap::undefined_value();
704
+ if (isolate->debug()->disable_break()) {
705
+ return isolate->heap()->undefined_value();
655
706
  }
656
707
 
657
708
  // Ignore debug break during bootstrapping.
658
- if (Bootstrapper::IsActive()) {
659
- return Heap::undefined_value();
709
+ if (isolate->bootstrapper()->IsActive()) {
710
+ return isolate->heap()->undefined_value();
660
711
  }
661
712
 
662
713
  {
@@ -666,34 +717,36 @@ Object* Execution::DebugBreakHelper() {
666
717
  if (fun && fun->IsJSFunction()) {
667
718
  // Don't stop in builtin functions.
668
719
  if (JSFunction::cast(fun)->IsBuiltin()) {
669
- return Heap::undefined_value();
720
+ return isolate->heap()->undefined_value();
670
721
  }
671
722
  GlobalObject* global = JSFunction::cast(fun)->context()->global();
672
723
  // Don't stop in debugger functions.
673
- if (Debug::IsDebugGlobal(global)) {
674
- return Heap::undefined_value();
724
+ if (isolate->debug()->IsDebugGlobal(global)) {
725
+ return isolate->heap()->undefined_value();
675
726
  }
676
727
  }
677
728
  }
678
729
 
679
730
  // Collect the break state before clearing the flags.
680
731
  bool debug_command_only =
681
- StackGuard::IsDebugCommand() && !StackGuard::IsDebugBreak();
732
+ isolate->stack_guard()->IsDebugCommand() &&
733
+ !isolate->stack_guard()->IsDebugBreak();
682
734
 
683
735
  // Clear the debug break request flag.
684
- StackGuard::Continue(DEBUGBREAK);
736
+ isolate->stack_guard()->Continue(DEBUGBREAK);
685
737
 
686
738
  ProcessDebugMesssages(debug_command_only);
687
739
 
688
740
  // Return to continue execution.
689
- return Heap::undefined_value();
741
+ return isolate->heap()->undefined_value();
690
742
  }
691
743
 
692
744
  void Execution::ProcessDebugMesssages(bool debug_command_only) {
745
+ Isolate* isolate = Isolate::Current();
693
746
  // Clear the debug command request flag.
694
- StackGuard::Continue(DEBUGCOMMAND);
747
+ isolate->stack_guard()->Continue(DEBUGCOMMAND);
695
748
 
696
- HandleScope scope;
749
+ HandleScope scope(isolate);
697
750
  // Enter the debugger. Just continue if we fail to enter the debugger.
698
751
  EnterDebugger debugger;
699
752
  if (debugger.FailedToEnter()) {
@@ -702,34 +755,37 @@ void Execution::ProcessDebugMesssages(bool debug_command_only) {
702
755
 
703
756
  // Notify the debug event listeners. Indicate auto continue if the break was
704
757
  // a debug command break.
705
- Debugger::OnDebugBreak(Factory::undefined_value(), debug_command_only);
758
+ isolate->debugger()->OnDebugBreak(isolate->factory()->undefined_value(),
759
+ debug_command_only);
706
760
  }
707
761
 
708
762
 
709
763
  #endif
710
764
 
711
765
  MaybeObject* Execution::HandleStackGuardInterrupt() {
712
- Counters::stack_interrupts.Increment();
713
- if (StackGuard::IsRuntimeProfilerTick()) {
714
- Counters::runtime_profiler_ticks.Increment();
715
- StackGuard::Continue(RUNTIME_PROFILER_TICK);
716
- RuntimeProfiler::OptimizeNow();
766
+ Isolate* isolate = Isolate::Current();
767
+ StackGuard* stack_guard = isolate->stack_guard();
768
+ isolate->counters()->stack_interrupts()->Increment();
769
+ if (stack_guard->IsRuntimeProfilerTick()) {
770
+ isolate->counters()->runtime_profiler_ticks()->Increment();
771
+ stack_guard->Continue(RUNTIME_PROFILER_TICK);
772
+ isolate->runtime_profiler()->OptimizeNow();
717
773
  }
718
774
  #ifdef ENABLE_DEBUGGER_SUPPORT
719
- if (StackGuard::IsDebugBreak() || StackGuard::IsDebugCommand()) {
775
+ if (stack_guard->IsDebugBreak() || stack_guard->IsDebugCommand()) {
720
776
  DebugBreakHelper();
721
777
  }
722
778
  #endif
723
- if (StackGuard::IsPreempted()) RuntimePreempt();
724
- if (StackGuard::IsTerminateExecution()) {
725
- StackGuard::Continue(TERMINATE);
726
- return Top::TerminateExecution();
779
+ if (stack_guard->IsPreempted()) RuntimePreempt();
780
+ if (stack_guard->IsTerminateExecution()) {
781
+ stack_guard->Continue(TERMINATE);
782
+ return isolate->TerminateExecution();
727
783
  }
728
- if (StackGuard::IsInterrupted()) {
729
- StackGuard::Continue(INTERRUPT);
730
- return Top::StackOverflow();
784
+ if (stack_guard->IsInterrupted()) {
785
+ stack_guard->Continue(INTERRUPT);
786
+ return isolate->StackOverflow();
731
787
  }
732
- return Heap::undefined_value();
788
+ return isolate->heap()->undefined_value();
733
789
  }
734
790
 
735
791
  } } // namespace v8::internal