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
@@ -130,7 +130,7 @@ void DeclarationContext::Check(const char* source,
130
130
  InitializeIfNeeded();
131
131
  // A retry after a GC may pollute the counts, so perform gc now
132
132
  // to avoid that.
133
- v8::internal::Heap::CollectGarbage(v8::internal::NEW_SPACE);
133
+ HEAP->CollectGarbage(v8::internal::NEW_SPACE);
134
134
  HandleScope scope;
135
135
  TryCatch catcher;
136
136
  catcher.SetVerbose(true);
@@ -30,20 +30,21 @@
30
30
  #include "v8.h"
31
31
 
32
32
  #include "api.h"
33
+ #include "cctest.h"
33
34
  #include "compilation-cache.h"
34
35
  #include "debug.h"
35
36
  #include "deoptimizer.h"
37
+ #include "isolate.h"
36
38
  #include "platform.h"
37
39
  #include "stub-cache.h"
38
- #include "cctest.h"
39
-
40
40
 
41
- using ::v8::internal::Handle;
42
- using ::v8::internal::Object;
43
- using ::v8::internal::JSFunction;
44
41
  using ::v8::internal::Deoptimizer;
45
42
  using ::v8::internal::EmbeddedVector;
43
+ using ::v8::internal::Handle;
44
+ using ::v8::internal::Isolate;
45
+ using ::v8::internal::JSFunction;
46
46
  using ::v8::internal::OS;
47
+ using ::v8::internal::Object;
47
48
 
48
49
  // Size of temp buffer for formatting small strings.
49
50
  #define SMALL_STRING_BUFFER_SIZE 80
@@ -124,7 +125,7 @@ TEST(DeoptimizeSimple) {
124
125
 
125
126
  CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
126
127
  CHECK(!GetJSFunction(env->Global(), "f")->IsOptimized());
127
- CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
128
+ CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
128
129
 
129
130
  // Test lazy deoptimization of a simple function. Call the function after the
130
131
  // deoptimization while it is still activated further down the stack.
@@ -140,7 +141,7 @@ TEST(DeoptimizeSimple) {
140
141
 
141
142
  CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
142
143
  CHECK(!GetJSFunction(env->Global(), "f")->IsOptimized());
143
- CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
144
+ CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
144
145
  }
145
146
 
146
147
 
@@ -164,7 +165,7 @@ TEST(DeoptimizeSimpleWithArguments) {
164
165
 
165
166
  CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
166
167
  CHECK(!GetJSFunction(env->Global(), "f")->IsOptimized());
167
- CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
168
+ CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
168
169
 
169
170
  // Test lazy deoptimization of a simple function with some arguments. Call the
170
171
  // function after the deoptimization while it is still activated further down
@@ -181,7 +182,7 @@ TEST(DeoptimizeSimpleWithArguments) {
181
182
 
182
183
  CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
183
184
  CHECK(!GetJSFunction(env->Global(), "f")->IsOptimized());
184
- CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
185
+ CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
185
186
  }
186
187
 
187
188
 
@@ -207,7 +208,7 @@ TEST(DeoptimizeSimpleNested) {
207
208
  CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
208
209
  CHECK_EQ(6, env->Global()->Get(v8_str("result"))->Int32Value());
209
210
  CHECK(!GetJSFunction(env->Global(), "f")->IsOptimized());
210
- CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
211
+ CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
211
212
  }
212
213
  }
213
214
 
@@ -232,7 +233,7 @@ TEST(DeoptimizeRecursive) {
232
233
 
233
234
  CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
234
235
  CHECK_EQ(11, env->Global()->Get(v8_str("calls"))->Int32Value());
235
- CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
236
+ CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
236
237
 
237
238
  v8::Local<v8::Function> fun =
238
239
  v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f")));
@@ -266,7 +267,7 @@ TEST(DeoptimizeMultiple) {
266
267
 
267
268
  CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
268
269
  CHECK_EQ(14, env->Global()->Get(v8_str("result"))->Int32Value());
269
- CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
270
+ CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
270
271
  }
271
272
 
272
273
 
@@ -289,7 +290,7 @@ TEST(DeoptimizeConstructor) {
289
290
 
290
291
  CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
291
292
  CHECK(env->Global()->Get(v8_str("result"))->IsTrue());
292
- CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
293
+ CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
293
294
 
294
295
  {
295
296
  AlwaysOptimizeAllowNativesSyntaxNoInlining options;
@@ -306,7 +307,7 @@ TEST(DeoptimizeConstructor) {
306
307
 
307
308
  CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
308
309
  CHECK_EQ(3, env->Global()->Get(v8_str("result"))->Int32Value());
309
- CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
310
+ CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
310
311
  }
311
312
 
312
313
 
@@ -337,7 +338,7 @@ TEST(DeoptimizeConstructorMultiple) {
337
338
 
338
339
  CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
339
340
  CHECK_EQ(14, env->Global()->Get(v8_str("result"))->Int32Value());
340
- CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
341
+ CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
341
342
  }
342
343
 
343
344
 
@@ -385,7 +386,7 @@ TEST(DeoptimizeBinaryOperationADDString) {
385
386
  CHECK(result->IsString());
386
387
  v8::String::AsciiValue ascii(result);
387
388
  CHECK_EQ("a+an X", *ascii);
388
- CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
389
+ CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
389
390
  }
390
391
 
391
392
 
@@ -444,7 +445,7 @@ TEST(DeoptimizeBinaryOperationADD) {
444
445
 
445
446
  CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
446
447
  CHECK_EQ(15, env->Global()->Get(v8_str("result"))->Int32Value());
447
- CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
448
+ CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
448
449
  }
449
450
 
450
451
 
@@ -458,7 +459,7 @@ TEST(DeoptimizeBinaryOperationSUB) {
458
459
 
459
460
  CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
460
461
  CHECK_EQ(-1, env->Global()->Get(v8_str("result"))->Int32Value());
461
- CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
462
+ CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
462
463
  }
463
464
 
464
465
 
@@ -472,7 +473,7 @@ TEST(DeoptimizeBinaryOperationMUL) {
472
473
 
473
474
  CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
474
475
  CHECK_EQ(56, env->Global()->Get(v8_str("result"))->Int32Value());
475
- CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
476
+ CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
476
477
  }
477
478
 
478
479
 
@@ -486,7 +487,7 @@ TEST(DeoptimizeBinaryOperationDIV) {
486
487
 
487
488
  CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
488
489
  CHECK_EQ(0, env->Global()->Get(v8_str("result"))->Int32Value());
489
- CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
490
+ CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
490
491
  }
491
492
 
492
493
 
@@ -500,7 +501,7 @@ TEST(DeoptimizeBinaryOperationMOD) {
500
501
 
501
502
  CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
502
503
  CHECK_EQ(7, env->Global()->Get(v8_str("result"))->Int32Value());
503
- CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
504
+ CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
504
505
  }
505
506
 
506
507
 
@@ -545,7 +546,7 @@ TEST(DeoptimizeCompare) {
545
546
  CHECK(!GetJSFunction(env->Global(), "f")->IsOptimized());
546
547
  CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
547
548
  CHECK_EQ(true, env->Global()->Get(v8_str("result"))->BooleanValue());
548
- CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
549
+ CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
549
550
  }
550
551
 
551
552
 
@@ -627,7 +628,7 @@ TEST(DeoptimizeLoadICStoreIC) {
627
628
  CHECK(!GetJSFunction(env->Global(), "g2")->IsOptimized());
628
629
  CHECK_EQ(4, env->Global()->Get(v8_str("count"))->Int32Value());
629
630
  CHECK_EQ(13, env->Global()->Get(v8_str("result"))->Int32Value());
630
- CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
631
+ CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
631
632
  }
632
633
 
633
634
 
@@ -710,5 +711,5 @@ TEST(DeoptimizeLoadICStoreICNested) {
710
711
  CHECK(!GetJSFunction(env->Global(), "g2")->IsOptimized());
711
712
  CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
712
713
  CHECK_EQ(13, env->Global()->Get(v8_str("result"))->Int32Value());
713
- CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
714
+ CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
714
715
  }
@@ -72,11 +72,11 @@ bool DisassembleAndCompare(byte* pc, const char* compare_string) {
72
72
  // Setup V8 to a state where we can at least run the assembler and
73
73
  // disassembler. Declare the variables and allocate the data structures used
74
74
  // in the rest of the macros.
75
- #define SETUP() \
76
- InitializeVM(); \
77
- v8::HandleScope scope; \
75
+ #define SETUP() \
76
+ InitializeVM(); \
77
+ v8::HandleScope scope; \
78
78
  byte *buffer = reinterpret_cast<byte*>(malloc(4*1024)); \
79
- Assembler assm(buffer, 4*1024); \
79
+ Assembler assm(Isolate::Current(), buffer, 4*1024); \
80
80
  bool failure = false;
81
81
 
82
82
 
@@ -440,6 +440,11 @@ TEST(Vfp) {
440
440
  COMPARE(vabs(d3, d4, mi),
441
441
  "4eb03bc4 vabsmi d3, d4");
442
442
 
443
+ COMPARE(vneg(d0, d1),
444
+ "eeb10b41 vneg d0, d1");
445
+ COMPARE(vneg(d3, d4, mi),
446
+ "4eb13b44 vnegmi d3, d4");
447
+
443
448
  COMPARE(vadd(d0, d1, d2),
444
449
  "ee310b02 vadd.f64 d0, d1, d2");
445
450
  COMPARE(vadd(d3, d4, d5, mi),
@@ -58,7 +58,7 @@ TEST(DisasmIa320) {
58
58
  InitializeVM();
59
59
  v8::HandleScope scope;
60
60
  v8::internal::byte buffer[2048];
61
- Assembler assm(buffer, sizeof buffer);
61
+ Assembler assm(Isolate::Current(), buffer, sizeof buffer);
62
62
  DummyStaticFunction(NULL); // just bloody use it (DELETE; debugging)
63
63
 
64
64
  // Short immediate instructions
@@ -68,7 +68,7 @@ TEST(DisasmIa320) {
68
68
  __ sub(Operand(eax), Immediate(12345678));
69
69
  __ xor_(eax, 12345678);
70
70
  __ and_(eax, 12345678);
71
- Handle<FixedArray> foo = Factory::NewFixedArray(10, TENURED);
71
+ Handle<FixedArray> foo = FACTORY->NewFixedArray(10, TENURED);
72
72
  __ cmp(eax, foo);
73
73
 
74
74
  // ---- This one caused crash
@@ -99,7 +99,7 @@ TEST(DisasmIa320) {
99
99
  __ cmp(edx, 3);
100
100
  __ cmp(edx, Operand(esp, 4));
101
101
  __ cmp(Operand(ebp, ecx, times_4, 0), Immediate(1000));
102
- Handle<FixedArray> foo2 = Factory::NewFixedArray(10, TENURED);
102
+ Handle<FixedArray> foo2 = FACTORY->NewFixedArray(10, TENURED);
103
103
  __ cmp(ebx, foo2);
104
104
  __ cmpb(ebx, Operand(ebp, ecx, times_2, 0));
105
105
  __ cmpb(Operand(ebp, ecx, times_2, 0), ebx);
@@ -272,7 +272,8 @@ TEST(DisasmIa320) {
272
272
  __ bind(&L2);
273
273
  __ call(Operand(ebx, ecx, times_4, 10000));
274
274
  __ nop();
275
- Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize));
275
+ Handle<Code> ic(Isolate::Current()->builtins()->builtin(
276
+ Builtins::kLoadIC_Initialize));
276
277
  __ call(ic, RelocInfo::CODE_TARGET);
277
278
  __ nop();
278
279
  __ call(FUNCTION_ADDR(DummyStaticFunction), RelocInfo::RUNTIME_ENTRY);
@@ -282,7 +283,8 @@ TEST(DisasmIa320) {
282
283
  __ jmp(Operand(ebx, ecx, times_4, 10000));
283
284
  #ifdef ENABLE_DEBUGGER_SUPPORT
284
285
  ExternalReference after_break_target =
285
- ExternalReference(Debug_Address::AfterBreakTarget());
286
+ ExternalReference(Debug_Address::AfterBreakTarget(),
287
+ assm.isolate());
286
288
  __ jmp(Operand::StaticVariable(after_break_target));
287
289
  #endif // ENABLE_DEBUGGER_SUPPORT
288
290
  __ jmp(ic, RelocInfo::CODE_TARGET);
@@ -332,7 +334,7 @@ TEST(DisasmIa320) {
332
334
  __ j(zero, &Ljcc, taken);
333
335
  __ j(zero, &Ljcc, not_taken);
334
336
 
335
- // __ mov(Operand::StaticVariable(Top::handler_address()), eax);
337
+ // __ mov(Operand::StaticVariable(Isolate::handler_address()), eax);
336
338
  // 0xD9 instructions
337
339
  __ nop();
338
340
 
@@ -458,10 +460,10 @@ TEST(DisasmIa320) {
458
460
 
459
461
  CodeDesc desc;
460
462
  assm.GetCode(&desc);
461
- Object* code = Heap::CreateCode(
463
+ Object* code = HEAP->CreateCode(
462
464
  desc,
463
465
  Code::ComputeFlags(Code::STUB),
464
- Handle<Object>(Heap::undefined_value()))->ToObjectChecked();
466
+ Handle<Object>(HEAP->undefined_value()))->ToObjectChecked();
465
467
  CHECK(code->IsCode());
466
468
  #ifdef OBJECT_PRINT
467
469
  Code::cast(code)->Print();
@@ -36,6 +36,7 @@ using ::v8::internal::CStrVector;
36
36
  using ::v8::internal::Factory;
37
37
  using ::v8::internal::Handle;
38
38
  using ::v8::internal::Heap;
39
+ using ::v8::internal::Isolate;
39
40
  using ::v8::internal::JSFunction;
40
41
  using ::v8::internal::Object;
41
42
  using ::v8::internal::Runtime;
@@ -77,15 +78,20 @@ static void CheckFunctionName(v8::Handle<v8::Script> script,
77
78
 
78
79
  // Find the position of a given func source substring in the source.
79
80
  Handle<String> func_pos_str =
80
- Factory::NewStringFromAscii(CStrVector(func_pos_src));
81
- int func_pos = Runtime::StringMatch(script_src, func_pos_str, 0);
81
+ FACTORY->NewStringFromAscii(CStrVector(func_pos_src));
82
+ int func_pos = Runtime::StringMatch(Isolate::Current(),
83
+ script_src,
84
+ func_pos_str,
85
+ 0);
82
86
  CHECK_NE(0, func_pos);
83
87
 
84
88
  #ifdef ENABLE_DEBUGGER_SUPPORT
85
89
  // Obtain SharedFunctionInfo for the function.
86
90
  Object* shared_func_info_ptr =
87
- Runtime::FindSharedFunctionInfoInScript(i_script, func_pos);
88
- CHECK(shared_func_info_ptr != Heap::undefined_value());
91
+ Runtime::FindSharedFunctionInfoInScript(Isolate::Current(),
92
+ i_script,
93
+ func_pos);
94
+ CHECK(shared_func_info_ptr != HEAP->undefined_value());
89
95
  Handle<SharedFunctionInfo> shared_func_info(
90
96
  SharedFunctionInfo::cast(shared_func_info_ptr));
91
97
 
@@ -26,7 +26,7 @@ class ConstructorHeapProfileTestHelper : public i::ConstructorHeapProfile {
26
26
  public:
27
27
  ConstructorHeapProfileTestHelper()
28
28
  : i::ConstructorHeapProfile(),
29
- f_name_(i::Factory::NewStringFromAscii(i::CStrVector("F"))),
29
+ f_name_(FACTORY->NewStringFromAscii(i::CStrVector("F"))),
30
30
  f_count_(0) {
31
31
  }
32
32
 
@@ -143,25 +143,25 @@ TEST(ClustersCoarserSimple) {
143
143
  i::ZoneScope zn_scope(i::DELETE_ON_EXIT);
144
144
 
145
145
  JSObjectsRetainerTree tree;
146
- JSObjectsCluster function(i::Heap::function_class_symbol());
147
- JSObjectsCluster a(*i::Factory::NewStringFromAscii(i::CStrVector("A")));
148
- JSObjectsCluster b(*i::Factory::NewStringFromAscii(i::CStrVector("B")));
146
+ JSObjectsCluster function(HEAP->function_class_symbol());
147
+ JSObjectsCluster a(*FACTORY->NewStringFromAscii(i::CStrVector("A")));
148
+ JSObjectsCluster b(*FACTORY->NewStringFromAscii(i::CStrVector("B")));
149
149
 
150
150
  // o1 <- Function
151
151
  JSObjectsCluster o1 =
152
- AddHeapObjectToTree(&tree, i::Heap::Object_symbol(), 0x100, &function);
152
+ AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x100, &function);
153
153
  // o2 <- Function
154
154
  JSObjectsCluster o2 =
155
- AddHeapObjectToTree(&tree, i::Heap::Object_symbol(), 0x200, &function);
155
+ AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x200, &function);
156
156
  // o3 <- A, B
157
157
  JSObjectsCluster o3 =
158
- AddHeapObjectToTree(&tree, i::Heap::Object_symbol(), 0x300, &a, &b);
158
+ AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x300, &a, &b);
159
159
  // o4 <- B, A
160
160
  JSObjectsCluster o4 =
161
- AddHeapObjectToTree(&tree, i::Heap::Object_symbol(), 0x400, &b, &a);
161
+ AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x400, &b, &a);
162
162
  // o5 <- A, B, Function
163
163
  JSObjectsCluster o5 =
164
- AddHeapObjectToTree(&tree, i::Heap::Object_symbol(), 0x500,
164
+ AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x500,
165
165
  &a, &b, &function);
166
166
 
167
167
  ClustersCoarser coarser;
@@ -181,20 +181,20 @@ TEST(ClustersCoarserMultipleConstructors) {
181
181
  i::ZoneScope zn_scope(i::DELETE_ON_EXIT);
182
182
 
183
183
  JSObjectsRetainerTree tree;
184
- JSObjectsCluster function(i::Heap::function_class_symbol());
184
+ JSObjectsCluster function(HEAP->function_class_symbol());
185
185
 
186
186
  // o1 <- Function
187
187
  JSObjectsCluster o1 =
188
- AddHeapObjectToTree(&tree, i::Heap::Object_symbol(), 0x100, &function);
188
+ AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x100, &function);
189
189
  // a1 <- Function
190
190
  JSObjectsCluster a1 =
191
- AddHeapObjectToTree(&tree, i::Heap::Array_symbol(), 0x1000, &function);
191
+ AddHeapObjectToTree(&tree, HEAP->Array_symbol(), 0x1000, &function);
192
192
  // o2 <- Function
193
193
  JSObjectsCluster o2 =
194
- AddHeapObjectToTree(&tree, i::Heap::Object_symbol(), 0x200, &function);
194
+ AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x200, &function);
195
195
  // a2 <- Function
196
196
  JSObjectsCluster a2 =
197
- AddHeapObjectToTree(&tree, i::Heap::Array_symbol(), 0x2000, &function);
197
+ AddHeapObjectToTree(&tree, HEAP->Array_symbol(), 0x2000, &function);
198
198
 
199
199
  ClustersCoarser coarser;
200
200
  coarser.Process(&tree);
@@ -224,21 +224,21 @@ TEST(ClustersCoarserPathsTraversal) {
224
224
  // o21 ~ o22, and o11 ~ o12.
225
225
 
226
226
  JSObjectsCluster o =
227
- AddHeapObjectToTree(&tree, i::Heap::Object_symbol(), 0x100);
227
+ AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x100);
228
228
  JSObjectsCluster o11 =
229
- AddHeapObjectToTree(&tree, i::Heap::Object_symbol(), 0x110, &o);
229
+ AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x110, &o);
230
230
  JSObjectsCluster o12 =
231
- AddHeapObjectToTree(&tree, i::Heap::Object_symbol(), 0x120, &o);
231
+ AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x120, &o);
232
232
  JSObjectsCluster o21 =
233
- AddHeapObjectToTree(&tree, i::Heap::Object_symbol(), 0x210, &o11);
233
+ AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x210, &o11);
234
234
  JSObjectsCluster o22 =
235
- AddHeapObjectToTree(&tree, i::Heap::Object_symbol(), 0x220, &o12);
235
+ AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x220, &o12);
236
236
  JSObjectsCluster p =
237
- AddHeapObjectToTree(&tree, i::Heap::Object_symbol(), 0x300, &o21);
237
+ AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x300, &o21);
238
238
  JSObjectsCluster q =
239
- AddHeapObjectToTree(&tree, i::Heap::Object_symbol(), 0x310, &o21, &o22);
239
+ AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x310, &o21, &o22);
240
240
  JSObjectsCluster r =
241
- AddHeapObjectToTree(&tree, i::Heap::Object_symbol(), 0x320, &o22);
241
+ AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x320, &o22);
242
242
 
243
243
  ClustersCoarser coarser;
244
244
  coarser.Process(&tree);
@@ -275,19 +275,19 @@ TEST(ClustersCoarserSelf) {
275
275
  // we expect that coarser will deduce equivalences: p ~ q ~ r, o1 ~ o2;
276
276
 
277
277
  JSObjectsCluster o =
278
- AddHeapObjectToTree(&tree, i::Heap::Object_symbol(), 0x100);
278
+ AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x100);
279
279
  JSObjectsCluster o1 =
280
- AddHeapObjectToTree(&tree, i::Heap::Object_symbol(), 0x110, &o);
280
+ AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x110, &o);
281
281
  JSObjectsCluster o2 =
282
- AddHeapObjectToTree(&tree, i::Heap::Object_symbol(), 0x120, &o);
282
+ AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x120, &o);
283
283
  JSObjectsCluster p =
284
- AddHeapObjectToTree(&tree, i::Heap::Object_symbol(), 0x300, &o1);
284
+ AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x300, &o1);
285
285
  AddSelfReferenceToTree(&tree, &p);
286
286
  JSObjectsCluster q =
287
- AddHeapObjectToTree(&tree, i::Heap::Object_symbol(), 0x310, &o1, &o2);
287
+ AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x310, &o1, &o2);
288
288
  AddSelfReferenceToTree(&tree, &q);
289
289
  JSObjectsCluster r =
290
- AddHeapObjectToTree(&tree, i::Heap::Object_symbol(), 0x320, &o2);
290
+ AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x320, &o2);
291
291
  AddSelfReferenceToTree(&tree, &r);
292
292
 
293
293
  ClustersCoarser coarser;
@@ -433,19 +433,6 @@ static const v8::HeapGraphNode* GetProperty(const v8::HeapGraphNode* node,
433
433
  }
434
434
 
435
435
 
436
- static bool IsNodeRetainedAs(const v8::HeapGraphNode* node,
437
- v8::HeapGraphEdge::Type type,
438
- const char* name) {
439
- for (int i = 0, count = node->GetRetainersCount(); i < count; ++i) {
440
- const v8::HeapGraphEdge* prop = node->GetRetainer(i);
441
- v8::String::AsciiValue prop_name(prop->GetName());
442
- if (prop->GetType() == type && strcmp(name, *prop_name) == 0)
443
- return true;
444
- }
445
- return false;
446
- }
447
-
448
-
449
436
  static bool HasString(const v8::HeapGraphNode* node, const char* contents) {
450
437
  for (int i = 0, count = node->GetChildrenCount(); i < count; ++i) {
451
438
  const v8::HeapGraphEdge* prop = node->GetChild(i);
@@ -496,56 +483,6 @@ TEST(HeapSnapshot) {
496
483
  CHECK(det.has_A2);
497
484
  CHECK(det.has_B2);
498
485
  CHECK(det.has_C2);
499
-
500
- /*
501
- // Currently disabled. Too many retaining paths emerge, need to
502
- // reduce the amount.
503
-
504
- // Verify 'a2' object retainers. They are:
505
- // - (global object).a2
506
- // - c2.x1, c2.x2, c2[1]
507
- // - b2_1 and b2_2 closures: via 'x' variable
508
- CHECK_EQ(6, a2_node->GetRetainingPathsCount());
509
- bool has_global_obj_a2_ref = false;
510
- bool has_c2_x1_ref = false, has_c2_x2_ref = false, has_c2_1_ref = false;
511
- bool has_b2_1_x_ref = false, has_b2_2_x_ref = false;
512
- for (int i = 0; i < a2_node->GetRetainingPathsCount(); ++i) {
513
- const v8::HeapGraphPath* path = a2_node->GetRetainingPath(i);
514
- const int edges_count = path->GetEdgesCount();
515
- CHECK_GT(edges_count, 0);
516
- const v8::HeapGraphEdge* last_edge = path->GetEdge(edges_count - 1);
517
- v8::String::AsciiValue last_edge_name(last_edge->GetName());
518
- if (strcmp("a2", *last_edge_name) == 0
519
- && last_edge->GetType() == v8::HeapGraphEdge::kProperty) {
520
- has_global_obj_a2_ref = true;
521
- continue;
522
- }
523
- CHECK_GT(edges_count, 1);
524
- const v8::HeapGraphEdge* prev_edge = path->GetEdge(edges_count - 2);
525
- v8::String::AsciiValue prev_edge_name(prev_edge->GetName());
526
- if (strcmp("x1", *last_edge_name) == 0
527
- && last_edge->GetType() == v8::HeapGraphEdge::kProperty
528
- && strcmp("c2", *prev_edge_name) == 0) has_c2_x1_ref = true;
529
- if (strcmp("x2", *last_edge_name) == 0
530
- && last_edge->GetType() == v8::HeapGraphEdge::kProperty
531
- && strcmp("c2", *prev_edge_name) == 0) has_c2_x2_ref = true;
532
- if (strcmp("1", *last_edge_name) == 0
533
- && last_edge->GetType() == v8::HeapGraphEdge::kElement
534
- && strcmp("c2", *prev_edge_name) == 0) has_c2_1_ref = true;
535
- if (strcmp("x", *last_edge_name) == 0
536
- && last_edge->GetType() == v8::HeapGraphEdge::kContextVariable
537
- && strcmp("b2_1", *prev_edge_name) == 0) has_b2_1_x_ref = true;
538
- if (strcmp("x", *last_edge_name) == 0
539
- && last_edge->GetType() == v8::HeapGraphEdge::kContextVariable
540
- && strcmp("b2_2", *prev_edge_name) == 0) has_b2_2_x_ref = true;
541
- }
542
- CHECK(has_global_obj_a2_ref);
543
- CHECK(has_c2_x1_ref);
544
- CHECK(has_c2_x2_ref);
545
- CHECK(has_c2_1_ref);
546
- CHECK(has_b2_1_x_ref);
547
- CHECK(has_b2_2_x_ref);
548
- */
549
486
  }
550
487
 
551
488
 
@@ -637,10 +574,10 @@ TEST(HeapSnapshotCodeObjects) {
637
574
 
638
575
  // Find references to code.
639
576
  const v8::HeapGraphNode* compiled_code =
640
- GetProperty(compiled, v8::HeapGraphEdge::kInternal, "code");
577
+ GetProperty(compiled, v8::HeapGraphEdge::kInternal, "shared");
641
578
  CHECK_NE(NULL, compiled_code);
642
579
  const v8::HeapGraphNode* lazy_code =
643
- GetProperty(lazy, v8::HeapGraphEdge::kInternal, "code");
580
+ GetProperty(lazy, v8::HeapGraphEdge::kInternal, "shared");
644
581
  CHECK_NE(NULL, lazy_code);
645
582
 
646
583
  // Verify that non-compiled code doesn't contain references to "x"
@@ -730,7 +667,7 @@ TEST(HeapEntryIdsAndGC) {
730
667
  const v8::HeapSnapshot* snapshot1 =
731
668
  v8::HeapProfiler::TakeSnapshot(v8::String::New("s1"));
732
669
 
733
- i::Heap::CollectAllGarbage(true); // Enforce compaction.
670
+ HEAP->CollectAllGarbage(true); // Enforce compaction.
734
671
 
735
672
  const v8::HeapSnapshot* snapshot2 =
736
673
  v8::HeapProfiler::TakeSnapshot(v8::String::New("s2"));
@@ -774,76 +711,6 @@ TEST(HeapEntryIdsAndGC) {
774
711
  }
775
712
 
776
713
 
777
- TEST(HeapSnapshotsDiff) {
778
- v8::HandleScope scope;
779
- LocalContext env;
780
-
781
- CompileRun(
782
- "function A() {}\n"
783
- "function B(x) { this.x = x; }\n"
784
- "function A2(a) { for (var i = 0; i < a; ++i) this[i] = i; }\n"
785
- "var a = new A();\n"
786
- "var b = new B(a);");
787
- const v8::HeapSnapshot* snapshot1 =
788
- v8::HeapProfiler::TakeSnapshot(v8::String::New("s1"));
789
-
790
- CompileRun(
791
- "delete a;\n"
792
- "b.x = null;\n"
793
- "var a = new A2(20);\n"
794
- "var b2 = new B(a);");
795
- const v8::HeapSnapshot* snapshot2 =
796
- v8::HeapProfiler::TakeSnapshot(v8::String::New("s2"));
797
-
798
- const v8::HeapSnapshotsDiff* diff = snapshot1->CompareWith(snapshot2);
799
-
800
- // Verify additions: ensure that addition of A and B was detected.
801
- const v8::HeapGraphNode* additions_root = diff->GetAdditionsRoot();
802
- bool found_A = false, found_B = false;
803
- uint64_t s1_A_id = 0;
804
- for (int i = 0, count = additions_root->GetChildrenCount(); i < count; ++i) {
805
- const v8::HeapGraphEdge* prop = additions_root->GetChild(i);
806
- const v8::HeapGraphNode* node = prop->GetToNode();
807
- if (node->GetType() == v8::HeapGraphNode::kObject) {
808
- v8::String::AsciiValue node_name(node->GetName());
809
- if (strcmp(*node_name, "A2") == 0) {
810
- CHECK(IsNodeRetainedAs(node, v8::HeapGraphEdge::kShortcut, "a"));
811
- CHECK(!found_A);
812
- found_A = true;
813
- s1_A_id = node->GetId();
814
- } else if (strcmp(*node_name, "B") == 0) {
815
- CHECK(IsNodeRetainedAs(node, v8::HeapGraphEdge::kShortcut, "b2"));
816
- CHECK(!found_B);
817
- found_B = true;
818
- }
819
- }
820
- }
821
- CHECK(found_A);
822
- CHECK(found_B);
823
-
824
- // Verify deletions: ensure that deletion of A was detected.
825
- const v8::HeapGraphNode* deletions_root = diff->GetDeletionsRoot();
826
- bool found_A_del = false;
827
- uint64_t s2_A_id = 0;
828
- for (int i = 0, count = deletions_root->GetChildrenCount(); i < count; ++i) {
829
- const v8::HeapGraphEdge* prop = deletions_root->GetChild(i);
830
- const v8::HeapGraphNode* node = prop->GetToNode();
831
- if (node->GetType() == v8::HeapGraphNode::kObject) {
832
- v8::String::AsciiValue node_name(node->GetName());
833
- if (strcmp(*node_name, "A") == 0) {
834
- CHECK(IsNodeRetainedAs(node, v8::HeapGraphEdge::kShortcut, "a"));
835
- CHECK(!found_A_del);
836
- found_A_del = true;
837
- s2_A_id = node->GetId();
838
- }
839
- }
840
- }
841
- CHECK(found_A_del);
842
- CHECK_NE_UINT64_T(0, s1_A_id);
843
- CHECK(s1_A_id != s2_A_id);
844
- }
845
-
846
-
847
714
  TEST(HeapSnapshotRootPreservedAfterSorting) {
848
715
  v8::HandleScope scope;
849
716
  LocalContext env;
@@ -1258,4 +1125,199 @@ TEST(TakeHeapSnapshotAborting) {
1258
1125
  CHECK_GT(control.total(), 0);
1259
1126
  }
1260
1127
 
1128
+
1129
+ namespace {
1130
+
1131
+ class TestRetainedObjectInfo : public v8::RetainedObjectInfo {
1132
+ public:
1133
+ TestRetainedObjectInfo(int hash,
1134
+ const char* label,
1135
+ intptr_t element_count = -1,
1136
+ intptr_t size = -1)
1137
+ : disposed_(false),
1138
+ hash_(hash),
1139
+ label_(label),
1140
+ element_count_(element_count),
1141
+ size_(size) {
1142
+ instances.Add(this);
1143
+ }
1144
+ virtual ~TestRetainedObjectInfo() {}
1145
+ virtual void Dispose() {
1146
+ CHECK(!disposed_);
1147
+ disposed_ = true;
1148
+ }
1149
+ virtual bool IsEquivalent(RetainedObjectInfo* other) {
1150
+ return GetHash() == other->GetHash();
1151
+ }
1152
+ virtual intptr_t GetHash() { return hash_; }
1153
+ virtual const char* GetLabel() { return label_; }
1154
+ virtual intptr_t GetElementCount() { return element_count_; }
1155
+ virtual intptr_t GetSizeInBytes() { return size_; }
1156
+ bool disposed() { return disposed_; }
1157
+
1158
+ static v8::RetainedObjectInfo* WrapperInfoCallback(
1159
+ uint16_t class_id, v8::Handle<v8::Value> wrapper) {
1160
+ if (class_id == 1) {
1161
+ if (wrapper->IsString()) {
1162
+ v8::String::AsciiValue ascii(wrapper);
1163
+ if (strcmp(*ascii, "AAA") == 0)
1164
+ return new TestRetainedObjectInfo(1, "aaa", 100);
1165
+ else if (strcmp(*ascii, "BBB") == 0)
1166
+ return new TestRetainedObjectInfo(1, "aaa", 100);
1167
+ }
1168
+ } else if (class_id == 2) {
1169
+ if (wrapper->IsString()) {
1170
+ v8::String::AsciiValue ascii(wrapper);
1171
+ if (strcmp(*ascii, "CCC") == 0)
1172
+ return new TestRetainedObjectInfo(2, "ccc");
1173
+ }
1174
+ }
1175
+ CHECK(false);
1176
+ return NULL;
1177
+ }
1178
+
1179
+ static i::List<TestRetainedObjectInfo*> instances;
1180
+
1181
+ private:
1182
+ bool disposed_;
1183
+ int category_;
1184
+ int hash_;
1185
+ const char* label_;
1186
+ intptr_t element_count_;
1187
+ intptr_t size_;
1188
+ };
1189
+
1190
+
1191
+ i::List<TestRetainedObjectInfo*> TestRetainedObjectInfo::instances;
1192
+ }
1193
+
1194
+
1195
+ static const v8::HeapGraphNode* GetNode(const v8::HeapGraphNode* parent,
1196
+ v8::HeapGraphNode::Type type,
1197
+ const char* name) {
1198
+ for (int i = 0, count = parent->GetChildrenCount(); i < count; ++i) {
1199
+ const v8::HeapGraphNode* node = parent->GetChild(i)->GetToNode();
1200
+ if (node->GetType() == type && strcmp(name,
1201
+ const_cast<i::HeapEntry*>(
1202
+ reinterpret_cast<const i::HeapEntry*>(node))->name()) == 0) {
1203
+ return node;
1204
+ }
1205
+ }
1206
+ return NULL;
1207
+ }
1208
+
1209
+
1210
+ TEST(HeapSnapshotRetainedObjectInfo) {
1211
+ v8::HandleScope scope;
1212
+ LocalContext env;
1213
+
1214
+ v8::HeapProfiler::DefineWrapperClass(
1215
+ 1, TestRetainedObjectInfo::WrapperInfoCallback);
1216
+ v8::HeapProfiler::DefineWrapperClass(
1217
+ 2, TestRetainedObjectInfo::WrapperInfoCallback);
1218
+ v8::Persistent<v8::String> p_AAA =
1219
+ v8::Persistent<v8::String>::New(v8_str("AAA"));
1220
+ p_AAA.SetWrapperClassId(1);
1221
+ v8::Persistent<v8::String> p_BBB =
1222
+ v8::Persistent<v8::String>::New(v8_str("BBB"));
1223
+ p_BBB.SetWrapperClassId(1);
1224
+ v8::Persistent<v8::String> p_CCC =
1225
+ v8::Persistent<v8::String>::New(v8_str("CCC"));
1226
+ p_CCC.SetWrapperClassId(2);
1227
+ CHECK_EQ(0, TestRetainedObjectInfo::instances.length());
1228
+ const v8::HeapSnapshot* snapshot =
1229
+ v8::HeapProfiler::TakeSnapshot(v8::String::New("retained"));
1230
+
1231
+ CHECK_EQ(3, TestRetainedObjectInfo::instances.length());
1232
+ for (int i = 0; i < TestRetainedObjectInfo::instances.length(); ++i) {
1233
+ CHECK(TestRetainedObjectInfo::instances[i]->disposed());
1234
+ delete TestRetainedObjectInfo::instances[i];
1235
+ }
1236
+
1237
+ const v8::HeapGraphNode* natives = GetNode(
1238
+ snapshot->GetRoot(), v8::HeapGraphNode::kObject, "(Native objects)");
1239
+ CHECK_NE(NULL, natives);
1240
+ CHECK_EQ(2, natives->GetChildrenCount());
1241
+ const v8::HeapGraphNode* aaa = GetNode(
1242
+ natives, v8::HeapGraphNode::kNative, "aaa / 100 entries");
1243
+ CHECK_NE(NULL, aaa);
1244
+ const v8::HeapGraphNode* ccc = GetNode(
1245
+ natives, v8::HeapGraphNode::kNative, "ccc");
1246
+ CHECK_NE(NULL, ccc);
1247
+
1248
+ CHECK_EQ(2, aaa->GetChildrenCount());
1249
+ const v8::HeapGraphNode* n_AAA = GetNode(
1250
+ aaa, v8::HeapGraphNode::kString, "AAA");
1251
+ CHECK_NE(NULL, n_AAA);
1252
+ const v8::HeapGraphNode* n_BBB = GetNode(
1253
+ aaa, v8::HeapGraphNode::kString, "BBB");
1254
+ CHECK_NE(NULL, n_BBB);
1255
+ CHECK_EQ(1, ccc->GetChildrenCount());
1256
+ const v8::HeapGraphNode* n_CCC = GetNode(
1257
+ ccc, v8::HeapGraphNode::kString, "CCC");
1258
+ CHECK_NE(NULL, n_CCC);
1259
+
1260
+ CHECK_EQ(aaa, GetProperty(n_AAA, v8::HeapGraphEdge::kInternal, "native"));
1261
+ CHECK_EQ(aaa, GetProperty(n_BBB, v8::HeapGraphEdge::kInternal, "native"));
1262
+ CHECK_EQ(ccc, GetProperty(n_CCC, v8::HeapGraphEdge::kInternal, "native"));
1263
+ }
1264
+
1265
+
1266
+ TEST(DeleteAllHeapSnapshots) {
1267
+ v8::HandleScope scope;
1268
+ LocalContext env;
1269
+
1270
+ CHECK_EQ(0, v8::HeapProfiler::GetSnapshotsCount());
1271
+ v8::HeapProfiler::DeleteAllSnapshots();
1272
+ CHECK_EQ(0, v8::HeapProfiler::GetSnapshotsCount());
1273
+ CHECK_NE(NULL, v8::HeapProfiler::TakeSnapshot(v8::String::New("1")));
1274
+ CHECK_EQ(1, v8::HeapProfiler::GetSnapshotsCount());
1275
+ v8::HeapProfiler::DeleteAllSnapshots();
1276
+ CHECK_EQ(0, v8::HeapProfiler::GetSnapshotsCount());
1277
+ CHECK_NE(NULL, v8::HeapProfiler::TakeSnapshot(v8::String::New("1")));
1278
+ CHECK_NE(NULL, v8::HeapProfiler::TakeSnapshot(v8::String::New("2")));
1279
+ CHECK_EQ(2, v8::HeapProfiler::GetSnapshotsCount());
1280
+ v8::HeapProfiler::DeleteAllSnapshots();
1281
+ CHECK_EQ(0, v8::HeapProfiler::GetSnapshotsCount());
1282
+ }
1283
+
1284
+
1285
+ TEST(DeleteHeapSnapshot) {
1286
+ v8::HandleScope scope;
1287
+ LocalContext env;
1288
+
1289
+ CHECK_EQ(0, v8::HeapProfiler::GetSnapshotsCount());
1290
+ const v8::HeapSnapshot* s1 =
1291
+ v8::HeapProfiler::TakeSnapshot(v8::String::New("1"));
1292
+ CHECK_NE(NULL, s1);
1293
+ CHECK_EQ(1, v8::HeapProfiler::GetSnapshotsCount());
1294
+ unsigned uid1 = s1->GetUid();
1295
+ CHECK_EQ(s1, v8::HeapProfiler::FindSnapshot(uid1));
1296
+ const_cast<v8::HeapSnapshot*>(s1)->Delete();
1297
+ CHECK_EQ(0, v8::HeapProfiler::GetSnapshotsCount());
1298
+ CHECK_EQ(NULL, v8::HeapProfiler::FindSnapshot(uid1));
1299
+
1300
+ const v8::HeapSnapshot* s2 =
1301
+ v8::HeapProfiler::TakeSnapshot(v8::String::New("2"));
1302
+ CHECK_NE(NULL, s2);
1303
+ CHECK_EQ(1, v8::HeapProfiler::GetSnapshotsCount());
1304
+ unsigned uid2 = s2->GetUid();
1305
+ CHECK_NE(static_cast<int>(uid1), static_cast<int>(uid2));
1306
+ CHECK_EQ(s2, v8::HeapProfiler::FindSnapshot(uid2));
1307
+ const v8::HeapSnapshot* s3 =
1308
+ v8::HeapProfiler::TakeSnapshot(v8::String::New("3"));
1309
+ CHECK_NE(NULL, s3);
1310
+ CHECK_EQ(2, v8::HeapProfiler::GetSnapshotsCount());
1311
+ unsigned uid3 = s3->GetUid();
1312
+ CHECK_NE(static_cast<int>(uid1), static_cast<int>(uid3));
1313
+ CHECK_EQ(s3, v8::HeapProfiler::FindSnapshot(uid3));
1314
+ const_cast<v8::HeapSnapshot*>(s2)->Delete();
1315
+ CHECK_EQ(1, v8::HeapProfiler::GetSnapshotsCount());
1316
+ CHECK_EQ(NULL, v8::HeapProfiler::FindSnapshot(uid2));
1317
+ CHECK_EQ(s3, v8::HeapProfiler::FindSnapshot(uid3));
1318
+ const_cast<v8::HeapSnapshot*>(s3)->Delete();
1319
+ CHECK_EQ(0, v8::HeapProfiler::GetSnapshotsCount());
1320
+ CHECK_EQ(NULL, v8::HeapProfiler::FindSnapshot(uid3));
1321
+ }
1322
+
1261
1323
  #endif // ENABLE_LOGGING_AND_PROFILING