mustang 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -72,14 +72,14 @@ JSObjectsCluster Clusterizer::Clusterize(HeapObject* obj, bool fine_grain) {
72
72
  String* constructor = GetConstructorNameForHeapProfile(
73
73
  JSObject::cast(js_obj));
74
74
  // Differentiate Object and Array instances.
75
- if (fine_grain && (constructor == Heap::Object_symbol() ||
76
- constructor == Heap::Array_symbol())) {
75
+ if (fine_grain && (constructor == HEAP->Object_symbol() ||
76
+ constructor == HEAP->Array_symbol())) {
77
77
  return JSObjectsCluster(constructor, obj);
78
78
  } else {
79
79
  return JSObjectsCluster(constructor);
80
80
  }
81
81
  } else if (obj->IsString()) {
82
- return JSObjectsCluster(Heap::String_symbol());
82
+ return JSObjectsCluster(HEAP->String_symbol());
83
83
  } else if (obj->IsJSGlobalPropertyCell()) {
84
84
  return JSObjectsCluster(JSObjectsCluster::GLOBAL_PROPERTY);
85
85
  } else if (obj->IsCode() || obj->IsSharedFunctionInfo() || obj->IsScript()) {
@@ -112,10 +112,10 @@ int Clusterizer::CalculateNetworkSize(JSObject* obj) {
112
112
  int size = obj->Size();
113
113
  // If 'properties' and 'elements' are non-empty (thus, non-shared),
114
114
  // take their size into account.
115
- if (obj->properties() != Heap::empty_fixed_array()) {
115
+ if (obj->properties() != HEAP->empty_fixed_array()) {
116
116
  size += obj->properties()->Size();
117
117
  }
118
- if (obj->elements() != Heap::empty_fixed_array()) {
118
+ if (obj->elements() != HEAP->empty_fixed_array()) {
119
119
  size += obj->elements()->Size();
120
120
  }
121
121
  // For functions, also account non-empty context and literals sizes.
@@ -174,7 +174,8 @@ class RetainersPrinter : public RetainerHeapProfile::Printer {
174
174
  HeapStringAllocator allocator;
175
175
  StringStream stream(&allocator);
176
176
  cluster.Print(&stream);
177
- LOG(HeapSampleJSRetainersEvent(
177
+ LOG(ISOLATE,
178
+ HeapSampleJSRetainersEvent(
178
179
  *(stream.ToCString()), *(retainers.ToCString())));
179
180
  }
180
181
  };
@@ -315,8 +316,6 @@ void RetainerTreeAggregator::Call(const JSObjectsCluster& cluster,
315
316
  }
316
317
 
317
318
 
318
- HeapProfiler* HeapProfiler::singleton_ = NULL;
319
-
320
319
  HeapProfiler::HeapProfiler()
321
320
  : snapshots_(new HeapSnapshotsCollection()),
322
321
  next_snapshot_uid_(1) {
@@ -327,12 +326,20 @@ HeapProfiler::~HeapProfiler() {
327
326
  delete snapshots_;
328
327
  }
329
328
 
329
+
330
+ void HeapProfiler::ResetSnapshots() {
331
+ delete snapshots_;
332
+ snapshots_ = new HeapSnapshotsCollection();
333
+ }
334
+
335
+
330
336
  #endif // ENABLE_LOGGING_AND_PROFILING
331
337
 
332
338
  void HeapProfiler::Setup() {
333
339
  #ifdef ENABLE_LOGGING_AND_PROFILING
334
- if (singleton_ == NULL) {
335
- singleton_ = new HeapProfiler();
340
+ Isolate* isolate = Isolate::Current();
341
+ if (isolate->heap_profiler() == NULL) {
342
+ isolate->set_heap_profiler(new HeapProfiler());
336
343
  }
337
344
  #endif
338
345
  }
@@ -340,8 +347,9 @@ void HeapProfiler::Setup() {
340
347
 
341
348
  void HeapProfiler::TearDown() {
342
349
  #ifdef ENABLE_LOGGING_AND_PROFILING
343
- delete singleton_;
344
- singleton_ = NULL;
350
+ Isolate* isolate = Isolate::Current();
351
+ delete isolate->heap_profiler();
352
+ isolate->set_heap_profiler(NULL);
345
353
  #endif
346
354
  }
347
355
 
@@ -351,16 +359,39 @@ void HeapProfiler::TearDown() {
351
359
  HeapSnapshot* HeapProfiler::TakeSnapshot(const char* name,
352
360
  int type,
353
361
  v8::ActivityControl* control) {
354
- ASSERT(singleton_ != NULL);
355
- return singleton_->TakeSnapshotImpl(name, type, control);
362
+ ASSERT(Isolate::Current()->heap_profiler() != NULL);
363
+ return Isolate::Current()->heap_profiler()->TakeSnapshotImpl(name,
364
+ type,
365
+ control);
356
366
  }
357
367
 
358
368
 
359
369
  HeapSnapshot* HeapProfiler::TakeSnapshot(String* name,
360
370
  int type,
361
371
  v8::ActivityControl* control) {
362
- ASSERT(singleton_ != NULL);
363
- return singleton_->TakeSnapshotImpl(name, type, control);
372
+ ASSERT(Isolate::Current()->heap_profiler() != NULL);
373
+ return Isolate::Current()->heap_profiler()->TakeSnapshotImpl(name,
374
+ type,
375
+ control);
376
+ }
377
+
378
+
379
+ void HeapProfiler::DefineWrapperClass(
380
+ uint16_t class_id, v8::HeapProfiler::WrapperInfoCallback callback) {
381
+ ASSERT(class_id != v8::HeapProfiler::kPersistentHandleNoClassId);
382
+ if (wrapper_callbacks_.length() <= class_id) {
383
+ wrapper_callbacks_.AddBlock(
384
+ NULL, class_id - wrapper_callbacks_.length() + 1);
385
+ }
386
+ wrapper_callbacks_[class_id] = callback;
387
+ }
388
+
389
+
390
+ v8::RetainedObjectInfo* HeapProfiler::ExecuteWrapperClassCallback(
391
+ uint16_t class_id, Object** wrapper) {
392
+ if (wrapper_callbacks_.length() <= class_id) return NULL;
393
+ return wrapper_callbacks_[class_id](
394
+ class_id, Utils::ToLocal(Handle<Object>(wrapper)));
364
395
  }
365
396
 
366
397
 
@@ -373,13 +404,13 @@ HeapSnapshot* HeapProfiler::TakeSnapshotImpl(const char* name,
373
404
  bool generation_completed = true;
374
405
  switch (s_type) {
375
406
  case HeapSnapshot::kFull: {
376
- Heap::CollectAllGarbage(true);
407
+ HEAP->CollectAllGarbage(true);
377
408
  HeapSnapshotGenerator generator(result, control);
378
409
  generation_completed = generator.GenerateSnapshot();
379
410
  break;
380
411
  }
381
412
  case HeapSnapshot::kAggregated: {
382
- Heap::CollectAllGarbage(true);
413
+ HEAP->CollectAllGarbage(true);
383
414
  AggregatedHeapSnapshot agg_snapshot;
384
415
  AggregatedHeapSnapshotGenerator generator(&agg_snapshot);
385
416
  generator.GenerateSnapshot();
@@ -401,31 +432,40 @@ HeapSnapshot* HeapProfiler::TakeSnapshotImpl(const char* name,
401
432
  HeapSnapshot* HeapProfiler::TakeSnapshotImpl(String* name,
402
433
  int type,
403
434
  v8::ActivityControl* control) {
404
- return TakeSnapshotImpl(snapshots_->GetName(name), type, control);
435
+ return TakeSnapshotImpl(snapshots_->names()->GetName(name), type, control);
405
436
  }
406
437
 
407
438
 
408
439
  int HeapProfiler::GetSnapshotsCount() {
409
- ASSERT(singleton_ != NULL);
410
- return singleton_->snapshots_->snapshots()->length();
440
+ HeapProfiler* profiler = Isolate::Current()->heap_profiler();
441
+ ASSERT(profiler != NULL);
442
+ return profiler->snapshots_->snapshots()->length();
411
443
  }
412
444
 
413
445
 
414
446
  HeapSnapshot* HeapProfiler::GetSnapshot(int index) {
415
- ASSERT(singleton_ != NULL);
416
- return singleton_->snapshots_->snapshots()->at(index);
447
+ HeapProfiler* profiler = Isolate::Current()->heap_profiler();
448
+ ASSERT(profiler != NULL);
449
+ return profiler->snapshots_->snapshots()->at(index);
417
450
  }
418
451
 
419
452
 
420
453
  HeapSnapshot* HeapProfiler::FindSnapshot(unsigned uid) {
421
- ASSERT(singleton_ != NULL);
422
- return singleton_->snapshots_->GetSnapshot(uid);
454
+ HeapProfiler* profiler = Isolate::Current()->heap_profiler();
455
+ ASSERT(profiler != NULL);
456
+ return profiler->snapshots_->GetSnapshot(uid);
457
+ }
458
+
459
+
460
+ void HeapProfiler::DeleteAllSnapshots() {
461
+ HeapProfiler* profiler = Isolate::Current()->heap_profiler();
462
+ ASSERT(profiler != NULL);
463
+ profiler->ResetSnapshots();
423
464
  }
424
465
 
425
466
 
426
467
  void HeapProfiler::ObjectMoveEvent(Address from, Address to) {
427
- ASSERT(singleton_ != NULL);
428
- singleton_->snapshots_->ObjectMoveEvent(from, to);
468
+ snapshots_->ObjectMoveEvent(from, to);
429
469
  }
430
470
 
431
471
 
@@ -443,7 +483,8 @@ void ConstructorHeapProfile::Call(const JSObjectsCluster& cluster,
443
483
  HeapStringAllocator allocator;
444
484
  StringStream stream(&allocator);
445
485
  cluster.Print(&stream);
446
- LOG(HeapSampleJSConstructorEvent(*(stream.ToCString()),
486
+ LOG(ISOLATE,
487
+ HeapSampleJSConstructorEvent(*(stream.ToCString()),
447
488
  number_and_size.number(),
448
489
  number_and_size.bytes()));
449
490
  }
@@ -662,7 +703,7 @@ RetainerHeapProfile::RetainerHeapProfile()
662
703
  aggregator_(NULL) {
663
704
  JSObjectsCluster roots(JSObjectsCluster::ROOTS);
664
705
  ReferencesExtractor extractor(roots, this);
665
- Heap::IterateRoots(&extractor, VISIT_ONLY_STRONG);
706
+ HEAP->IterateRoots(&extractor, VISIT_ONLY_STRONG);
666
707
  }
667
708
 
668
709
 
@@ -732,15 +773,18 @@ static void PrintProducerStackTrace(Object* obj, void* trace) {
732
773
  String* constructor = GetConstructorNameForHeapProfile(JSObject::cast(obj));
733
774
  SmartPointer<char> s_name(
734
775
  constructor->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL));
735
- LOG(HeapSampleJSProducerEvent(GetConstructorName(*s_name),
776
+ LOG(ISOLATE,
777
+ HeapSampleJSProducerEvent(GetConstructorName(*s_name),
736
778
  reinterpret_cast<Address*>(trace)));
737
779
  }
738
780
 
739
781
 
740
782
  void HeapProfiler::WriteSample() {
741
- LOG(HeapSampleBeginEvent("Heap", "allocated"));
742
- LOG(HeapSampleStats(
743
- "Heap", "allocated", Heap::CommittedMemory(), Heap::SizeOfObjects()));
783
+ Isolate* isolate = Isolate::Current();
784
+ LOG(isolate, HeapSampleBeginEvent("Heap", "allocated"));
785
+ LOG(isolate,
786
+ HeapSampleStats(
787
+ "Heap", "allocated", HEAP->CommittedMemory(), HEAP->SizeOfObjects()));
744
788
 
745
789
  AggregatedHeapSnapshot snapshot;
746
790
  AggregatedHeapSnapshotGenerator generator(&snapshot);
@@ -751,7 +795,8 @@ void HeapProfiler::WriteSample() {
751
795
  i <= AggregatedHeapSnapshotGenerator::kAllStringsType;
752
796
  ++i) {
753
797
  if (info[i].bytes() > 0) {
754
- LOG(HeapSampleItemEvent(info[i].name(), info[i].number(),
798
+ LOG(isolate,
799
+ HeapSampleItemEvent(info[i].name(), info[i].number(),
755
800
  info[i].bytes()));
756
801
  }
757
802
  }
@@ -759,10 +804,10 @@ void HeapProfiler::WriteSample() {
759
804
  snapshot.js_cons_profile()->PrintStats();
760
805
  snapshot.js_retainer_profile()->PrintStats();
761
806
 
762
- GlobalHandles::IterateWeakRoots(PrintProducerStackTrace,
763
- StackWeakReferenceCallback);
807
+ isolate->global_handles()->IterateWeakRoots(PrintProducerStackTrace,
808
+ StackWeakReferenceCallback);
764
809
 
765
- LOG(HeapSampleEndEvent("Heap", "allocated"));
810
+ LOG(isolate, HeapSampleEndEvent("Heap", "allocated"));
766
811
  }
767
812
 
768
813
 
@@ -872,7 +917,8 @@ class AllocatingConstructorHeapProfileIterator {
872
917
  const NumberAndSizeInfo& number_and_size) {
873
918
  const char* name = cluster.GetSpecialCaseName();
874
919
  if (name == NULL) {
875
- name = snapshot_->collection()->GetFunctionName(cluster.constructor());
920
+ name = snapshot_->collection()->names()->GetFunctionName(
921
+ cluster.constructor());
876
922
  }
877
923
  AddEntryFromAggregatedSnapshot(snapshot_,
878
924
  root_child_index_,
@@ -911,22 +957,27 @@ static JSObjectsCluster HeapObjectAsCluster(HeapObject* object) {
911
957
  class CountingRetainersIterator {
912
958
  public:
913
959
  CountingRetainersIterator(const JSObjectsCluster& child_cluster,
960
+ HeapEntriesAllocator* allocator,
914
961
  HeapEntriesMap* map)
915
- : child_(ClusterAsHeapObject(child_cluster)), map_(map) {
962
+ : child_(ClusterAsHeapObject(child_cluster)),
963
+ allocator_(allocator),
964
+ map_(map) {
916
965
  if (map_->Map(child_) == NULL)
917
- map_->Pair(child_, HeapEntriesMap::kHeapEntryPlaceholder);
966
+ map_->Pair(child_, allocator_, HeapEntriesMap::kHeapEntryPlaceholder);
918
967
  }
919
968
 
920
969
  void Call(const JSObjectsCluster& cluster,
921
970
  const NumberAndSizeInfo& number_and_size) {
922
971
  if (map_->Map(ClusterAsHeapObject(cluster)) == NULL)
923
972
  map_->Pair(ClusterAsHeapObject(cluster),
973
+ allocator_,
924
974
  HeapEntriesMap::kHeapEntryPlaceholder);
925
975
  map_->CountReference(ClusterAsHeapObject(cluster), child_);
926
976
  }
927
977
 
928
978
  private:
929
979
  HeapObject* child_;
980
+ HeapEntriesAllocator* allocator_;
930
981
  HeapEntriesMap* map_;
931
982
  };
932
983
 
@@ -934,6 +985,7 @@ class CountingRetainersIterator {
934
985
  class AllocatingRetainersIterator {
935
986
  public:
936
987
  AllocatingRetainersIterator(const JSObjectsCluster& child_cluster,
988
+ HeapEntriesAllocator*,
937
989
  HeapEntriesMap* map)
938
990
  : child_(ClusterAsHeapObject(child_cluster)), map_(map) {
939
991
  child_entry_ = map_->Map(child_);
@@ -966,8 +1018,9 @@ template<class RetainersIterator>
966
1018
  class AggregatingRetainerTreeIterator {
967
1019
  public:
968
1020
  explicit AggregatingRetainerTreeIterator(ClustersCoarser* coarser,
1021
+ HeapEntriesAllocator* allocator,
969
1022
  HeapEntriesMap* map)
970
- : coarser_(coarser), map_(map) {
1023
+ : coarser_(coarser), allocator_(allocator), map_(map) {
971
1024
  }
972
1025
 
973
1026
  void Call(const JSObjectsCluster& cluster, JSObjectsClusterTree* tree) {
@@ -981,29 +1034,33 @@ class AggregatingRetainerTreeIterator {
981
1034
  tree->ForEach(&retainers_aggregator);
982
1035
  tree_to_iterate = &dest_tree_;
983
1036
  }
984
- RetainersIterator iterator(cluster, map_);
1037
+ RetainersIterator iterator(cluster, allocator_, map_);
985
1038
  tree_to_iterate->ForEach(&iterator);
986
1039
  }
987
1040
 
988
1041
  private:
989
1042
  ClustersCoarser* coarser_;
1043
+ HeapEntriesAllocator* allocator_;
990
1044
  HeapEntriesMap* map_;
991
1045
  };
992
1046
 
993
1047
 
994
- class AggregatedRetainerTreeAllocator {
1048
+ class AggregatedRetainerTreeAllocator : public HeapEntriesAllocator {
995
1049
  public:
996
1050
  AggregatedRetainerTreeAllocator(HeapSnapshot* snapshot,
997
1051
  int* root_child_index)
998
1052
  : snapshot_(snapshot), root_child_index_(root_child_index) {
999
1053
  }
1054
+ ~AggregatedRetainerTreeAllocator() { }
1000
1055
 
1001
- HeapEntry* GetEntry(
1002
- HeapObject* obj, int children_count, int retainers_count) {
1056
+ HeapEntry* AllocateEntry(
1057
+ HeapThing ptr, int children_count, int retainers_count) {
1058
+ HeapObject* obj = reinterpret_cast<HeapObject*>(ptr);
1003
1059
  JSObjectsCluster cluster = HeapObjectAsCluster(obj);
1004
1060
  const char* name = cluster.GetSpecialCaseName();
1005
1061
  if (name == NULL) {
1006
- name = snapshot_->collection()->GetFunctionName(cluster.constructor());
1062
+ name = snapshot_->collection()->names()->GetFunctionName(
1063
+ cluster.constructor());
1007
1064
  }
1008
1065
  return AddEntryFromAggregatedSnapshot(
1009
1066
  snapshot_, root_child_index_, HeapEntry::kObject, name,
@@ -1018,12 +1075,13 @@ class AggregatedRetainerTreeAllocator {
1018
1075
 
1019
1076
  template<class Iterator>
1020
1077
  void AggregatedHeapSnapshotGenerator::IterateRetainers(
1021
- HeapEntriesMap* entries_map) {
1078
+ HeapEntriesAllocator* allocator, HeapEntriesMap* entries_map) {
1022
1079
  RetainerHeapProfile* p = agg_snapshot_->js_retainer_profile();
1023
1080
  AggregatingRetainerTreeIterator<Iterator> agg_ret_iter_1(
1024
- p->coarser(), entries_map);
1081
+ p->coarser(), allocator, entries_map);
1025
1082
  p->retainers_tree()->ForEach(&agg_ret_iter_1);
1026
- AggregatingRetainerTreeIterator<Iterator> agg_ret_iter_2(NULL, entries_map);
1083
+ AggregatingRetainerTreeIterator<Iterator> agg_ret_iter_2(
1084
+ NULL, allocator, entries_map);
1027
1085
  p->aggregator()->output_tree().ForEach(&agg_ret_iter_2);
1028
1086
  }
1029
1087
 
@@ -1042,7 +1100,9 @@ void AggregatedHeapSnapshotGenerator::FillHeapSnapshot(HeapSnapshot* snapshot) {
1042
1100
  agg_snapshot_->js_cons_profile()->ForEach(&counting_cons_iter);
1043
1101
  histogram_entities_count += counting_cons_iter.entities_count();
1044
1102
  HeapEntriesMap entries_map;
1045
- IterateRetainers<CountingRetainersIterator>(&entries_map);
1103
+ int root_child_index = 0;
1104
+ AggregatedRetainerTreeAllocator allocator(snapshot, &root_child_index);
1105
+ IterateRetainers<CountingRetainersIterator>(&allocator, &entries_map);
1046
1106
  histogram_entities_count += entries_map.entries_count();
1047
1107
  histogram_children_count += entries_map.total_children_count();
1048
1108
  histogram_retainers_count += entries_map.total_retainers_count();
@@ -1056,10 +1116,7 @@ void AggregatedHeapSnapshotGenerator::FillHeapSnapshot(HeapSnapshot* snapshot) {
1056
1116
  snapshot->AllocateEntries(histogram_entities_count,
1057
1117
  histogram_children_count,
1058
1118
  histogram_retainers_count);
1059
- snapshot->AddEntry(HeapSnapshot::kInternalRootObject,
1060
- root_children_count,
1061
- 0);
1062
- int root_child_index = 0;
1119
+ snapshot->AddRootEntry(root_children_count);
1063
1120
  for (int i = FIRST_NONSTRING_TYPE; i <= kAllStringsType; ++i) {
1064
1121
  if (agg_snapshot_->info()[i].bytes() > 0) {
1065
1122
  AddEntryFromAggregatedSnapshot(snapshot,
@@ -1075,18 +1132,15 @@ void AggregatedHeapSnapshotGenerator::FillHeapSnapshot(HeapSnapshot* snapshot) {
1075
1132
  AllocatingConstructorHeapProfileIterator alloc_cons_iter(
1076
1133
  snapshot, &root_child_index);
1077
1134
  agg_snapshot_->js_cons_profile()->ForEach(&alloc_cons_iter);
1078
- AggregatedRetainerTreeAllocator allocator(snapshot, &root_child_index);
1079
- entries_map.UpdateEntries(&allocator);
1135
+ entries_map.AllocateEntries();
1080
1136
 
1081
1137
  // Fill up references.
1082
- IterateRetainers<AllocatingRetainersIterator>(&entries_map);
1138
+ IterateRetainers<AllocatingRetainersIterator>(&allocator, &entries_map);
1083
1139
 
1084
1140
  snapshot->SetDominatorsToSelf();
1085
1141
  }
1086
1142
 
1087
1143
 
1088
- bool ProducerHeapProfile::can_log_ = false;
1089
-
1090
1144
  void ProducerHeapProfile::Setup() {
1091
1145
  can_log_ = true;
1092
1146
  }
@@ -1106,10 +1160,10 @@ void ProducerHeapProfile::DoRecordJSObjectAllocation(Object* obj) {
1106
1160
  stack[i++] = it.frame()->pc();
1107
1161
  }
1108
1162
  stack[i] = NULL;
1109
- Handle<Object> handle = GlobalHandles::Create(obj);
1110
- GlobalHandles::MakeWeak(handle.location(),
1111
- static_cast<void*>(stack.start()),
1112
- StackWeakReferenceCallback);
1163
+ Handle<Object> handle = isolate_->global_handles()->Create(obj);
1164
+ isolate_->global_handles()->MakeWeak(handle.location(),
1165
+ static_cast<void*>(stack.start()),
1166
+ StackWeakReferenceCallback);
1113
1167
  }
1114
1168
 
1115
1169
 
@@ -28,6 +28,7 @@
28
28
  #ifndef V8_HEAP_PROFILER_H_
29
29
  #define V8_HEAP_PROFILER_H_
30
30
 
31
+ #include "isolate.h"
31
32
  #include "zone-inl.h"
32
33
 
33
34
  namespace v8 {
@@ -38,14 +39,15 @@ namespace internal {
38
39
  class HeapSnapshot;
39
40
  class HeapSnapshotsCollection;
40
41
 
41
- #define HEAP_PROFILE(Call) \
42
- do { \
43
- if (v8::internal::HeapProfiler::is_profiling()) { \
44
- v8::internal::HeapProfiler::Call; \
45
- } \
42
+ #define HEAP_PROFILE(heap, call) \
43
+ do { \
44
+ v8::internal::HeapProfiler* profiler = heap->isolate()->heap_profiler(); \
45
+ if (profiler != NULL && profiler->is_profiling()) { \
46
+ profiler->call; \
47
+ } \
46
48
  } while (false)
47
49
  #else
48
- #define HEAP_PROFILE(Call) ((void) 0)
50
+ #define HEAP_PROFILE(heap, call) ((void) 0)
49
51
  #endif // ENABLE_LOGGING_AND_PROFILING
50
52
 
51
53
  // The HeapProfiler writes data to the log files, which can be postprocessed
@@ -65,11 +67,17 @@ class HeapProfiler {
65
67
  static int GetSnapshotsCount();
66
68
  static HeapSnapshot* GetSnapshot(int index);
67
69
  static HeapSnapshot* FindSnapshot(unsigned uid);
70
+ static void DeleteAllSnapshots();
68
71
 
69
- static void ObjectMoveEvent(Address from, Address to);
72
+ void ObjectMoveEvent(Address from, Address to);
70
73
 
71
- static INLINE(bool is_profiling()) {
72
- return singleton_ != NULL && singleton_->snapshots_->is_tracking_objects();
74
+ void DefineWrapperClass(
75
+ uint16_t class_id, v8::HeapProfiler::WrapperInfoCallback callback);
76
+
77
+ v8::RetainedObjectInfo* ExecuteWrapperClassCallback(uint16_t class_id,
78
+ Object** wrapper);
79
+ INLINE(bool is_profiling()) {
80
+ return snapshots_->is_tracking_objects();
73
81
  }
74
82
 
75
83
  // Obsolete interface.
@@ -85,11 +93,12 @@ class HeapProfiler {
85
93
  HeapSnapshot* TakeSnapshotImpl(String* name,
86
94
  int type,
87
95
  v8::ActivityControl* control);
96
+ void ResetSnapshots();
88
97
 
89
98
  HeapSnapshotsCollection* snapshots_;
90
99
  unsigned next_snapshot_uid_;
100
+ List<v8::HeapProfiler::WrapperInfoCallback> wrapper_callbacks_;
91
101
 
92
- static HeapProfiler* singleton_;
93
102
  #endif // ENABLE_LOGGING_AND_PROFILING
94
103
  };
95
104
 
@@ -148,10 +157,10 @@ class JSObjectsCluster BASE_EMBEDDED {
148
157
  // We use symbols that are illegal JS identifiers to identify special cases.
149
158
  // Their actual value is irrelevant for us.
150
159
  switch (special) {
151
- case ROOTS: return Heap::result_symbol();
152
- case GLOBAL_PROPERTY: return Heap::code_symbol();
153
- case CODE: return Heap::arguments_shadow_symbol();
154
- case SELF: return Heap::catch_var_symbol();
160
+ case ROOTS: return HEAP->result_symbol();
161
+ case GLOBAL_PROPERTY: return HEAP->code_symbol();
162
+ case CODE: return HEAP->arguments_shadow_symbol();
163
+ case SELF: return HEAP->catch_var_symbol();
155
164
  default:
156
165
  UNREACHABLE();
157
166
  return NULL;
@@ -340,7 +349,7 @@ class AggregatedHeapSnapshot {
340
349
 
341
350
 
342
351
  class HeapEntriesMap;
343
- class HeapSnapshot;
352
+ class HeapEntriesAllocator;
344
353
 
345
354
  class AggregatedHeapSnapshotGenerator {
346
355
  public:
@@ -354,22 +363,30 @@ class AggregatedHeapSnapshotGenerator {
354
363
  void CalculateStringsStats();
355
364
  void CollectStats(HeapObject* obj);
356
365
  template<class Iterator>
357
- void IterateRetainers(HeapEntriesMap* entries_map);
366
+ void IterateRetainers(
367
+ HeapEntriesAllocator* allocator, HeapEntriesMap* entries_map);
358
368
 
359
369
  AggregatedHeapSnapshot* agg_snapshot_;
360
370
  };
361
371
 
362
372
 
363
- class ProducerHeapProfile : public AllStatic {
373
+ class ProducerHeapProfile {
364
374
  public:
365
- static void Setup();
366
- static void RecordJSObjectAllocation(Object* obj) {
375
+ void Setup();
376
+ void RecordJSObjectAllocation(Object* obj) {
367
377
  if (FLAG_log_producers) DoRecordJSObjectAllocation(obj);
368
378
  }
369
379
 
370
380
  private:
371
- static void DoRecordJSObjectAllocation(Object* obj);
372
- static bool can_log_;
381
+ ProducerHeapProfile() : can_log_(false) { }
382
+
383
+ void DoRecordJSObjectAllocation(Object* obj);
384
+ Isolate* isolate_;
385
+ bool can_log_;
386
+
387
+ friend class Isolate;
388
+
389
+ DISALLOW_COPY_AND_ASSIGN(ProducerHeapProfile);
373
390
  };
374
391
 
375
392
  #endif // ENABLE_LOGGING_AND_PROFILING