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
@@ -46,11 +46,11 @@ class HashMap;
46
46
  class ProfileGenerator;
47
47
  class TokenEnumerator;
48
48
 
49
- #define CODE_EVENTS_TYPE_LIST(V) \
50
- V(CODE_CREATION, CodeCreateEventRecord) \
51
- V(CODE_MOVE, CodeMoveEventRecord) \
52
- V(CODE_DELETE, CodeDeleteEventRecord) \
53
- V(SFI_MOVE, SFIMoveEventRecord)
49
+ #define CODE_EVENTS_TYPE_LIST(V) \
50
+ V(CODE_CREATION, CodeCreateEventRecord) \
51
+ V(CODE_MOVE, CodeMoveEventRecord) \
52
+ V(CODE_DELETE, CodeDeleteEventRecord) \
53
+ V(SHARED_FUNC_MOVE, SharedFunctionInfoMoveEventRecord)
54
54
 
55
55
 
56
56
  class CodeEventRecord {
@@ -73,7 +73,7 @@ class CodeCreateEventRecord : public CodeEventRecord {
73
73
  Address start;
74
74
  CodeEntry* entry;
75
75
  unsigned size;
76
- Address sfi_address;
76
+ Address shared;
77
77
 
78
78
  INLINE(void UpdateCodeMap(CodeMap* code_map));
79
79
  };
@@ -96,7 +96,7 @@ class CodeDeleteEventRecord : public CodeEventRecord {
96
96
  };
97
97
 
98
98
 
99
- class SFIMoveEventRecord : public CodeEventRecord {
99
+ class SharedFunctionInfoMoveEventRecord : public CodeEventRecord {
100
100
  public:
101
101
  Address from;
102
102
  Address to;
@@ -133,7 +133,8 @@ class TickSampleEventRecord BASE_EMBEDDED {
133
133
  // methods called by event producers: VM and stack sampler threads.
134
134
  class ProfilerEventsProcessor : public Thread {
135
135
  public:
136
- explicit ProfilerEventsProcessor(ProfileGenerator* generator);
136
+ explicit ProfilerEventsProcessor(Isolate* isolate,
137
+ ProfileGenerator* generator);
137
138
  virtual ~ProfilerEventsProcessor() {}
138
139
 
139
140
  // Thread control.
@@ -149,7 +150,7 @@ class ProfilerEventsProcessor : public Thread {
149
150
  String* name,
150
151
  String* resource_name, int line_number,
151
152
  Address start, unsigned size,
152
- Address sfi_address);
153
+ Address shared);
153
154
  void CodeCreateEvent(Logger::LogEventsAndTags tag,
154
155
  const char* name,
155
156
  Address start, unsigned size);
@@ -158,7 +159,7 @@ class ProfilerEventsProcessor : public Thread {
158
159
  Address start, unsigned size);
159
160
  void CodeMoveEvent(Address from, Address to);
160
161
  void CodeDeleteEvent(Address from);
161
- void SFIMoveEvent(Address from, Address to);
162
+ void SharedFunctionInfoMoveEvent(Address from, Address to);
162
163
  void RegExpCodeCreateEvent(Logger::LogEventsAndTags tag,
163
164
  const char* prefix, String* name,
164
165
  Address start, unsigned size);
@@ -196,21 +197,23 @@ class ProfilerEventsProcessor : public Thread {
196
197
  } } // namespace v8::internal
197
198
 
198
199
 
199
- #define PROFILE(Call) \
200
- LOG(Call); \
200
+ #define PROFILE(isolate, Call) \
201
+ LOG(isolate, Call); \
201
202
  do { \
202
203
  if (v8::internal::CpuProfiler::is_profiling()) { \
203
204
  v8::internal::CpuProfiler::Call; \
204
205
  } \
205
206
  } while (false)
206
207
  #else
207
- #define PROFILE(Call) LOG(Call)
208
+ #define PROFILE(isolate, Call) LOG(isolate, Call)
208
209
  #endif // ENABLE_LOGGING_AND_PROFILING
209
210
 
210
211
 
211
212
  namespace v8 {
212
213
  namespace internal {
213
214
 
215
+
216
+ // TODO(isolates): isolatify this class.
214
217
  class CpuProfiler {
215
218
  public:
216
219
  static void Setup();
@@ -224,9 +227,12 @@ class CpuProfiler {
224
227
  static int GetProfilesCount();
225
228
  static CpuProfile* GetProfile(Object* security_token, int index);
226
229
  static CpuProfile* FindProfile(Object* security_token, unsigned uid);
230
+ static void DeleteAllProfiles();
231
+ static void DeleteProfile(CpuProfile* profile);
232
+ static bool HasDetachedProfiles();
227
233
 
228
234
  // Invoked from stack sampler (thread or signal handler.)
229
- static TickSample* TickSampleEvent();
235
+ static TickSample* TickSampleEvent(Isolate* isolate);
230
236
 
231
237
  // Must be called via PROFILE macro, otherwise will crash when
232
238
  // profiling is not enabled.
@@ -251,10 +257,17 @@ class CpuProfiler {
251
257
  static void GetterCallbackEvent(String* name, Address entry_point);
252
258
  static void RegExpCodeCreateEvent(Code* code, String* source);
253
259
  static void SetterCallbackEvent(String* name, Address entry_point);
254
- static void SFIMoveEvent(Address from, Address to);
260
+ static void SharedFunctionInfoMoveEvent(Address from, Address to);
261
+
262
+ // TODO(isolates): this doesn't have to use atomics anymore.
255
263
 
256
264
  static INLINE(bool is_profiling()) {
257
- return NoBarrier_Load(&is_profiling_);
265
+ return is_profiling(Isolate::Current());
266
+ }
267
+
268
+ static INLINE(bool is_profiling(Isolate* isolate)) {
269
+ CpuProfiler* profiler = isolate->cpu_profiler();
270
+ return profiler != NULL && NoBarrier_Load(&profiler->is_profiling_);
258
271
  }
259
272
 
260
273
  private:
@@ -266,6 +279,8 @@ class CpuProfiler {
266
279
  CpuProfile* StopCollectingProfile(const char* title);
267
280
  CpuProfile* StopCollectingProfile(Object* security_token, String* title);
268
281
  void StopProcessorIfLastProfile(const char* title);
282
+ void StopProcessor();
283
+ void ResetProfiles();
269
284
 
270
285
  CpuProfilesCollection* profiles_;
271
286
  unsigned next_profile_uid_;
@@ -273,9 +288,8 @@ class CpuProfiler {
273
288
  ProfileGenerator* generator_;
274
289
  ProfilerEventsProcessor* processor_;
275
290
  int saved_logging_nesting_;
276
-
277
- static CpuProfiler* singleton_;
278
- static Atomic32 is_profiling_;
291
+ bool need_to_stop_sampler_;
292
+ Atomic32 is_profiling_;
279
293
 
280
294
  #else
281
295
  static INLINE(bool is_profiling()) { return false; }
data/vendor/v8/src/cpu.h CHANGED
@@ -53,6 +53,8 @@ class CPU : public AllStatic {
53
53
  // Initializes the cpu architecture support. Called once at VM startup.
54
54
  static void Setup();
55
55
 
56
+ static bool SupportsCrankshaft();
57
+
56
58
  // Flush instruction cache.
57
59
  static void FlushICache(void* start, size_t size);
58
60
 
@@ -159,7 +159,7 @@ void HandleDebugEvent(DebugEvent event,
159
159
 
160
160
 
161
161
  void RunRemoteDebugger(int port) {
162
- RemoteDebugger debugger(port);
162
+ RemoteDebugger debugger(i::Isolate::Current(), port);
163
163
  debugger.Run();
164
164
  }
165
165
 
@@ -186,11 +186,11 @@ void RemoteDebugger::Run() {
186
186
  }
187
187
 
188
188
  // Start the receiver thread.
189
- ReceiverThread receiver(this);
189
+ ReceiverThread receiver(isolate_, this);
190
190
  receiver.Start();
191
191
 
192
192
  // Start the keyboard thread.
193
- KeyboardThread keyboard(this);
193
+ KeyboardThread keyboard(isolate_, this);
194
194
  keyboard.Start();
195
195
  PrintPrompt();
196
196
 
@@ -53,11 +53,11 @@ class ReceiverThread;
53
53
  // Remote debugging class.
54
54
  class RemoteDebugger {
55
55
  public:
56
- explicit RemoteDebugger(int port)
56
+ RemoteDebugger(i::Isolate* isolate, int port)
57
57
  : port_(port),
58
58
  event_access_(i::OS::CreateMutex()),
59
59
  event_available_(i::OS::CreateSemaphore(0)),
60
- head_(NULL), tail_(NULL) {}
60
+ head_(NULL), tail_(NULL), isolate_(isolate) {}
61
61
  void Run();
62
62
 
63
63
  // Handle events from the subordinate threads.
@@ -89,6 +89,7 @@ class RemoteDebugger {
89
89
  i::Semaphore* event_available_;
90
90
  RemoteDebuggerEvent* head_;
91
91
  RemoteDebuggerEvent* tail_;
92
+ i::Isolate* isolate_;
92
93
 
93
94
  friend class ReceiverThread;
94
95
  };
@@ -97,8 +98,8 @@ class RemoteDebugger {
97
98
  // Thread reading from debugged V8 instance.
98
99
  class ReceiverThread: public i::Thread {
99
100
  public:
100
- explicit ReceiverThread(RemoteDebugger* remote_debugger)
101
- : Thread("d8:ReceiverThrd"),
101
+ ReceiverThread(i::Isolate* isolate, RemoteDebugger* remote_debugger)
102
+ : Thread(isolate, "d8:ReceiverThrd"),
102
103
  remote_debugger_(remote_debugger) {}
103
104
  ~ReceiverThread() {}
104
105
 
@@ -112,8 +113,8 @@ class ReceiverThread: public i::Thread {
112
113
  // Thread reading keyboard input.
113
114
  class KeyboardThread: public i::Thread {
114
115
  public:
115
- explicit KeyboardThread(RemoteDebugger* remote_debugger)
116
- : Thread("d8:KeyboardThrd"),
116
+ explicit KeyboardThread(i::Isolate* isolate, RemoteDebugger* remote_debugger)
117
+ : Thread(isolate, "d8:KeyboardThrd"),
117
118
  remote_debugger_(remote_debugger) {}
118
119
  ~KeyboardThread() {}
119
120
 
@@ -375,8 +375,10 @@ static Handle<Value> GetStdout(int child_fd,
375
375
  // a parent process hangs on waiting while a child process is already a zombie.
376
376
  // See http://code.google.com/p/v8/issues/detail?id=401.
377
377
  #if defined(WNOWAIT) && !defined(ANDROID) && !defined(__APPLE__)
378
+ #if !defined(__FreeBSD__)
378
379
  #define HAS_WAITID 1
379
380
  #endif
381
+ #endif
380
382
 
381
383
 
382
384
  // Get exit status of child.
data/vendor/v8/src/d8.cc CHANGED
@@ -29,6 +29,8 @@
29
29
  #include <stdlib.h>
30
30
  #include <errno.h>
31
31
 
32
+ #include "v8.h"
33
+
32
34
  #include "d8.h"
33
35
  #include "d8-debug.h"
34
36
  #include "debug.h"
@@ -405,7 +407,7 @@ void Shell::AddHistogramSample(void* histogram, int sample) {
405
407
  void Shell::Initialize() {
406
408
  Shell::counter_map_ = new CounterMap();
407
409
  // Set up counters
408
- if (i::FLAG_map_counters != NULL)
410
+ if (i::StrLength(i::FLAG_map_counters) != 0)
409
411
  MapCounters(i::FLAG_map_counters);
410
412
  if (i::FLAG_dump_counters) {
411
413
  V8::SetCounterFunction(LookupCounter);
@@ -425,6 +427,12 @@ void Shell::Initialize() {
425
427
  global_template->Set(String::New("quit"), FunctionTemplate::New(Quit));
426
428
  global_template->Set(String::New("version"), FunctionTemplate::New(Version));
427
429
 
430
+ #ifdef LIVE_OBJECT_LIST
431
+ global_template->Set(String::New("lol_is_enabled"), Boolean::New(true));
432
+ #else
433
+ global_template->Set(String::New("lol_is_enabled"), Boolean::New(false));
434
+ #endif
435
+
428
436
  Handle<ObjectTemplate> os_templ = ObjectTemplate::New();
429
437
  AddOSMethods(os_templ);
430
438
  global_template->Set(String::New("os"), os_templ);
@@ -435,24 +443,25 @@ void Shell::Initialize() {
435
443
 
436
444
  i::JSArguments js_args = i::FLAG_js_arguments;
437
445
  i::Handle<i::FixedArray> arguments_array =
438
- i::Factory::NewFixedArray(js_args.argc());
446
+ FACTORY->NewFixedArray(js_args.argc());
439
447
  for (int j = 0; j < js_args.argc(); j++) {
440
448
  i::Handle<i::String> arg =
441
- i::Factory::NewStringFromUtf8(i::CStrVector(js_args[j]));
449
+ FACTORY->NewStringFromUtf8(i::CStrVector(js_args[j]));
442
450
  arguments_array->set(j, *arg);
443
451
  }
444
452
  i::Handle<i::JSArray> arguments_jsarray =
445
- i::Factory::NewJSArrayWithElements(arguments_array);
453
+ FACTORY->NewJSArrayWithElements(arguments_array);
446
454
  global_template->Set(String::New("arguments"),
447
455
  Utils::ToLocal(arguments_jsarray));
448
456
 
449
457
  #ifdef ENABLE_DEBUGGER_SUPPORT
450
458
  // Install the debugger object in the utility scope
451
- i::Debug::Load();
452
- i::Handle<i::JSObject> debug
453
- = i::Handle<i::JSObject>(i::Debug::debug_context()->global());
459
+ i::Debug* debug = i::Isolate::Current()->debug();
460
+ debug->Load();
461
+ i::Handle<i::JSObject> js_debug
462
+ = i::Handle<i::JSObject>(debug->debug_context()->global());
454
463
  utility_context_->Global()->Set(String::New("$debug"),
455
- Utils::ToLocal(debug));
464
+ Utils::ToLocal(js_debug));
456
465
  #endif
457
466
 
458
467
  // Run the d8 shell utility script in the utility context
@@ -484,7 +493,7 @@ void Shell::Initialize() {
484
493
 
485
494
  #ifdef ENABLE_DEBUGGER_SUPPORT
486
495
  // Set the security token of the debug context to allow access.
487
- i::Debug::debug_context()->set_security_token(i::Heap::undefined_value());
496
+ debug->debug_context()->set_security_token(HEAP->undefined_value());
488
497
 
489
498
  // Start the debugger agent if requested.
490
499
  if (i::FLAG_debugger_agent) {
@@ -600,8 +609,8 @@ void Shell::RunShell() {
600
609
 
601
610
  class ShellThread : public i::Thread {
602
611
  public:
603
- ShellThread(int no, i::Vector<const char> files)
604
- : Thread("d8:ShellThread"),
612
+ ShellThread(i::Isolate* isolate, int no, i::Vector<const char> files)
613
+ : Thread(isolate, "d8:ShellThread"),
605
614
  no_(no), files_(files) { }
606
615
  virtual void Run();
607
616
  private:
@@ -733,7 +742,8 @@ int Shell::Main(int argc, char* argv[]) {
733
742
  const char* files = ReadChars(argv[++i], &size);
734
743
  if (files == NULL) return 1;
735
744
  ShellThread* thread =
736
- new ShellThread(threads.length(),
745
+ new ShellThread(i::Isolate::Current(),
746
+ threads.length(),
737
747
  i::Vector<const char>(files, size));
738
748
  thread->Start();
739
749
  threads.Add(thread);
data/vendor/v8/src/d8.gyp CHANGED
@@ -38,7 +38,10 @@
38
38
  '../src',
39
39
  ],
40
40
  'defines': [
41
+ 'ENABLE_LOGGING_AND_PROFILING',
41
42
  'ENABLE_DEBUGGER_SUPPORT',
43
+ 'ENABLE_VMSTATE_TRACKING',
44
+ 'V8_FAST_TLS',
42
45
  ],
43
46
  'sources': [
44
47
  'd8.cc',
data/vendor/v8/src/d8.js CHANGED
@@ -117,6 +117,10 @@ Debug.State = {
117
117
  var trace_compile = false; // Tracing all compile events?
118
118
  var trace_debug_json = false; // Tracing all debug json packets?
119
119
  var last_cmd_line = '';
120
+ //var lol_is_enabled; // Set to true in d8.cc if LIVE_OBJECT_LIST is defined.
121
+ var lol_next_dump_index = 0;
122
+ const kDefaultLolLinesToPrintAtATime = 10;
123
+ const kMaxLolLinesToPrintAtATime = 1000;
120
124
  var repeat_cmd_line = '';
121
125
  var is_running = true;
122
126
 
@@ -495,6 +499,13 @@ function DebugRequest(cmd_line) {
495
499
  this.request_ = void 0;
496
500
  break;
497
501
 
502
+ case 'liveobjectlist':
503
+ case 'lol':
504
+ if (lol_is_enabled) {
505
+ this.request_ = this.lolToJSONRequest_(args, is_repeating);
506
+ break;
507
+ }
508
+
498
509
  default:
499
510
  throw new Error('Unknown command "' + cmd + '"');
500
511
  }
@@ -539,10 +550,54 @@ DebugRequest.prototype.createRequest = function(command) {
539
550
  };
540
551
 
541
552
 
553
+ // Note: we use detected command repetition as a signal for continuation here.
554
+ DebugRequest.prototype.createLOLRequest = function(command,
555
+ start_index,
556
+ lines_to_dump,
557
+ is_continuation) {
558
+ if (is_continuation) {
559
+ start_index = lol_next_dump_index;
560
+ }
561
+
562
+ if (lines_to_dump) {
563
+ lines_to_dump = parseInt(lines_to_dump);
564
+ } else {
565
+ lines_to_dump = kDefaultLolLinesToPrintAtATime;
566
+ }
567
+ if (lines_to_dump > kMaxLolLinesToPrintAtATime) {
568
+ lines_to_dump = kMaxLolLinesToPrintAtATime;
569
+ }
570
+
571
+ // Save the next start_index to dump from:
572
+ lol_next_dump_index = start_index + lines_to_dump;
573
+
574
+ var request = this.createRequest(command);
575
+ request.arguments = {};
576
+ request.arguments.start = start_index;
577
+ request.arguments.count = lines_to_dump;
578
+
579
+ return request;
580
+ };
581
+
582
+
542
583
  // Create a JSON request for the evaluation command.
543
584
  DebugRequest.prototype.makeEvaluateJSONRequest_ = function(expression) {
544
585
  // Global varaible used to store whether a handle was requested.
545
586
  lookup_handle = null;
587
+
588
+ if (lol_is_enabled) {
589
+ // Check if the expression is a obj id in the form @<obj id>.
590
+ var obj_id_match = expression.match(/^@([0-9]+)$/);
591
+ if (obj_id_match) {
592
+ var obj_id = parseInt(obj_id_match[1]);
593
+ // Build a dump request.
594
+ var request = this.createRequest('getobj');
595
+ request.arguments = {};
596
+ request.arguments.obj_id = obj_id;
597
+ return request.toJSONProtocol();
598
+ }
599
+ }
600
+
546
601
  // Check if the expression is a handle id in the form #<handle>#.
547
602
  var handle_match = expression.match(/^#([0-9]*)#$/);
548
603
  if (handle_match) {
@@ -1103,6 +1158,10 @@ DebugRequest.prototype.infoCommandToJSONRequest_ = function(args) {
1103
1158
  // Build a evaluate request from the text command.
1104
1159
  request = this.createRequest('frame');
1105
1160
  last_cmd = 'info args';
1161
+ } else if (lol_is_enabled &&
1162
+ args && (args == 'liveobjectlist' || args == 'lol')) {
1163
+ // Build a evaluate request from the text command.
1164
+ return this.liveObjectListToJSONRequest_(null);
1106
1165
  } else {
1107
1166
  throw new Error('Invalid info arguments.');
1108
1167
  }
@@ -1153,6 +1212,262 @@ DebugRequest.prototype.gcToJSONRequest_ = function(args) {
1153
1212
  };
1154
1213
 
1155
1214
 
1215
+ // Args: [v[erbose]] [<N>] [i[ndex] <i>] [t[ype] <type>] [sp[ace] <space>]
1216
+ DebugRequest.prototype.lolMakeListRequest =
1217
+ function(cmd, args, first_arg_index, is_repeating) {
1218
+
1219
+ var request;
1220
+ var start_index = 0;
1221
+ var dump_limit = void 0;
1222
+ var type_filter = void 0;
1223
+ var space_filter = void 0;
1224
+ var prop_filter = void 0;
1225
+ var is_verbose = false;
1226
+ var i;
1227
+
1228
+ for (i = first_arg_index; i < args.length; i++) {
1229
+ var arg = args[i];
1230
+ // Check for [v[erbose]]:
1231
+ if (arg === 'verbose' || arg === 'v') {
1232
+ // Nothing to do. This is already implied by args.length > 3.
1233
+ is_verbose = true;
1234
+
1235
+ // Check for [<N>]:
1236
+ } else if (arg.match(/^[0-9]+$/)) {
1237
+ dump_limit = arg;
1238
+ is_verbose = true;
1239
+
1240
+ // Check for i[ndex] <i>:
1241
+ } else if (arg === 'index' || arg === 'i') {
1242
+ i++;
1243
+ if (args.length < i) {
1244
+ throw new Error('Missing index after ' + arg + '.');
1245
+ }
1246
+ start_index = parseInt(args[i]);
1247
+ // The user input start index starts at 1:
1248
+ if (start_index <= 0) {
1249
+ throw new Error('Invalid index ' + args[i] + '.');
1250
+ }
1251
+ start_index -= 1;
1252
+ is_verbose = true;
1253
+
1254
+ // Check for t[ype] <type>:
1255
+ } else if (arg === 'type' || arg === 't') {
1256
+ i++;
1257
+ if (args.length < i) {
1258
+ throw new Error('Missing type after ' + arg + '.');
1259
+ }
1260
+ type_filter = args[i];
1261
+
1262
+ // Check for space <heap space name>:
1263
+ } else if (arg === 'space' || arg === 'sp') {
1264
+ i++;
1265
+ if (args.length < i) {
1266
+ throw new Error('Missing space name after ' + arg + '.');
1267
+ }
1268
+ space_filter = args[i];
1269
+
1270
+ // Check for property <prop name>:
1271
+ } else if (arg === 'property' || arg === 'prop') {
1272
+ i++;
1273
+ if (args.length < i) {
1274
+ throw new Error('Missing property name after ' + arg + '.');
1275
+ }
1276
+ prop_filter = args[i];
1277
+
1278
+ } else {
1279
+ throw new Error('Unknown args at ' + arg + '.');
1280
+ }
1281
+ }
1282
+
1283
+ // Build the verbose request:
1284
+ if (is_verbose) {
1285
+ request = this.createLOLRequest('lol-'+cmd,
1286
+ start_index,
1287
+ dump_limit,
1288
+ is_repeating);
1289
+ request.arguments.verbose = true;
1290
+ } else {
1291
+ request = this.createRequest('lol-'+cmd);
1292
+ request.arguments = {};
1293
+ }
1294
+
1295
+ request.arguments.filter = {};
1296
+ if (type_filter) {
1297
+ request.arguments.filter.type = type_filter;
1298
+ }
1299
+ if (space_filter) {
1300
+ request.arguments.filter.space = space_filter;
1301
+ }
1302
+ if (prop_filter) {
1303
+ request.arguments.filter.prop = prop_filter;
1304
+ }
1305
+
1306
+ return request;
1307
+ }
1308
+
1309
+
1310
+ function extractObjId(args) {
1311
+ var id = args;
1312
+ id = id.match(/^@([0-9]+)$/);
1313
+ if (id) {
1314
+ id = id[1];
1315
+ } else {
1316
+ throw new Error('Invalid obj id ' + args + '.');
1317
+ }
1318
+ return parseInt(id);
1319
+ }
1320
+
1321
+
1322
+ DebugRequest.prototype.lolToJSONRequest_ = function(args, is_repeating) {
1323
+ var request;
1324
+ // Use default command if one is not specified:
1325
+ if (!args) {
1326
+ args = 'info';
1327
+ }
1328
+
1329
+ var orig_args = args;
1330
+ var first_arg_index;
1331
+
1332
+ var arg, i;
1333
+ var args = args.split(/\s+/g);
1334
+ var cmd = args[0];
1335
+ var id;
1336
+
1337
+ // Command: <id> [v[erbose]] ...
1338
+ if (cmd.match(/^[0-9]+$/)) {
1339
+ // Convert to the padded list command:
1340
+ // Command: l[ist] <dummy> <id> [v[erbose]] ...
1341
+
1342
+ // Insert the implicit 'list' in front and process as normal:
1343
+ cmd = 'list';
1344
+ args.unshift(cmd);
1345
+ }
1346
+
1347
+ switch(cmd) {
1348
+ // Command: c[apture]
1349
+ case 'capture':
1350
+ case 'c':
1351
+ request = this.createRequest('lol-capture');
1352
+ break;
1353
+
1354
+ // Command: clear|d[elete] <id>|all
1355
+ case 'clear':
1356
+ case 'delete':
1357
+ case 'del': {
1358
+ if (args.length < 2) {
1359
+ throw new Error('Missing argument after ' + cmd + '.');
1360
+ } else if (args.length > 2) {
1361
+ throw new Error('Too many arguments after ' + cmd + '.');
1362
+ }
1363
+ id = args[1];
1364
+ if (id.match(/^[0-9]+$/)) {
1365
+ // Delete a specific lol record:
1366
+ request = this.createRequest('lol-delete');
1367
+ request.arguments = {};
1368
+ request.arguments.id = parseInt(id);
1369
+ } else if (id === 'all') {
1370
+ // Delete all:
1371
+ request = this.createRequest('lol-reset');
1372
+ } else {
1373
+ throw new Error('Invalid argument after ' + cmd + '.');
1374
+ }
1375
+ break;
1376
+ }
1377
+
1378
+ // Command: diff <id1> <id2> [<dump options>]
1379
+ case 'diff':
1380
+ first_arg_index = 3;
1381
+
1382
+ // Command: list <dummy> <id> [<dump options>]
1383
+ case 'list':
1384
+
1385
+ // Command: ret[ainers] <obj id> [<dump options>]
1386
+ case 'retainers':
1387
+ case 'ret':
1388
+ case 'retaining-paths':
1389
+ case 'rp': {
1390
+ if (cmd === 'ret') cmd = 'retainers';
1391
+ else if (cmd === 'rp') cmd = 'retaining-paths';
1392
+
1393
+ if (!first_arg_index) first_arg_index = 2;
1394
+
1395
+ if (args.length < first_arg_index) {
1396
+ throw new Error('Too few arguments after ' + cmd + '.');
1397
+ }
1398
+
1399
+ var request_cmd = (cmd === 'list') ? 'diff':cmd;
1400
+ request = this.lolMakeListRequest(request_cmd,
1401
+ args,
1402
+ first_arg_index,
1403
+ is_repeating);
1404
+
1405
+ if (cmd === 'diff') {
1406
+ request.arguments.id1 = parseInt(args[1]);
1407
+ request.arguments.id2 = parseInt(args[2]);
1408
+ } else if (cmd == 'list') {
1409
+ request.arguments.id1 = 0;
1410
+ request.arguments.id2 = parseInt(args[1]);
1411
+ } else {
1412
+ request.arguments.id = extractObjId(args[1]);
1413
+ }
1414
+ break;
1415
+ }
1416
+
1417
+ // Command: getid
1418
+ case 'getid': {
1419
+ request = this.createRequest('lol-getid');
1420
+ request.arguments = {};
1421
+ request.arguments.address = args[1];
1422
+ break;
1423
+ }
1424
+
1425
+ // Command: inf[o] [<N>]
1426
+ case 'info':
1427
+ case 'inf': {
1428
+ if (args.length > 2) {
1429
+ throw new Error('Too many arguments after ' + cmd + '.');
1430
+ }
1431
+ // Built the info request:
1432
+ request = this.createLOLRequest('lol-info', 0, args[1], is_repeating);
1433
+ break;
1434
+ }
1435
+
1436
+ // Command: path <obj id 1> <obj id 2>
1437
+ case 'path': {
1438
+ request = this.createRequest('lol-path');
1439
+ request.arguments = {};
1440
+ if (args.length > 2) {
1441
+ request.arguments.id1 = extractObjId(args[1]);
1442
+ request.arguments.id2 = extractObjId(args[2]);
1443
+ } else {
1444
+ request.arguments.id1 = 0;
1445
+ request.arguments.id2 = extractObjId(args[1]);
1446
+ }
1447
+ break;
1448
+ }
1449
+
1450
+ // Command: print
1451
+ case 'print': {
1452
+ request = this.createRequest('lol-print');
1453
+ request.arguments = {};
1454
+ request.arguments.id = extractObjId(args[1]);
1455
+ break;
1456
+ }
1457
+
1458
+ // Command: reset
1459
+ case 'reset': {
1460
+ request = this.createRequest('lol-reset');
1461
+ break;
1462
+ }
1463
+
1464
+ default:
1465
+ throw new Error('Invalid arguments.');
1466
+ }
1467
+ return request.toJSONProtocol();
1468
+ };
1469
+
1470
+
1156
1471
  // Create a JSON request for the threads command.
1157
1472
  DebugRequest.prototype.threadsCommandToJSONRequest_ = function(args) {
1158
1473
  // Build a threads request from the text command.
@@ -1239,6 +1554,49 @@ DebugRequest.prototype.helpCommand_ = function(args) {
1239
1554
  print('');
1240
1555
  print('gc - runs the garbage collector');
1241
1556
  print('');
1557
+
1558
+ if (lol_is_enabled) {
1559
+ print('liveobjectlist|lol <command> - live object list tracking.');
1560
+ print(' where <command> can be:');
1561
+ print(' c[apture] - captures a LOL list.');
1562
+ print(' clear|del[ete] <id>|all - clears LOL of id <id>.');
1563
+ print(' If \'all\' is unspecified instead, will clear all.');
1564
+ print(' diff <id1> <id2> [<dump options>]');
1565
+ print(' - prints the diff between LOLs id1 and id2.');
1566
+ print(' - also see <dump options> below.');
1567
+ print(' getid <address> - gets the obj id for the specified address if available.');
1568
+ print(' The address must be in hex form prefixed with 0x.');
1569
+ print(' inf[o] [<N>] - lists summary info of all LOL lists.');
1570
+ print(' If N is specified, will print N items at a time.');
1571
+ print(' [l[ist]] <id> [<dump options>]');
1572
+ print(' - prints the listing of objects in LOL id.');
1573
+ print(' - also see <dump options> below.');
1574
+ print(' reset - clears all LOL lists.');
1575
+ print(' ret[ainers] <id> [<dump options>]');
1576
+ print(' - prints the list of retainers of obj id.');
1577
+ print(' - also see <dump options> below.');
1578
+ print(' path <id1> <id2> - prints the retaining path from obj id1 to id2.');
1579
+ print(' If only one id is specified, will print the path from');
1580
+ print(' roots to the specified object if available.');
1581
+ print(' print <id> - prints the obj for the specified obj id if available.');
1582
+ print('');
1583
+ print(' <dump options> includes:');
1584
+ print(' [v[erbose]] - do verbose dump.');
1585
+ print(' [<N>] - dump N items at a time. Implies verbose dump.');
1586
+ print(' If unspecified, N will default to '+
1587
+ kDefaultLolLinesToPrintAtATime+'. Max N is '+
1588
+ kMaxLolLinesToPrintAtATime+'.');
1589
+ print(' [i[ndex] <i>] - start dump from index i. Implies verbose dump.');
1590
+ print(' [t[ype] <type>] - filter by type.');
1591
+ print(' [sp[ace] <space name>] - filter by heap space where <space name> is one of');
1592
+ print(' { cell, code, lo, map, new, old-data, old-pointer }.');
1593
+ print('');
1594
+ print(' If the verbose option, or an option that implies a verbose dump');
1595
+ print(' is specified, then a verbose dump will requested. Else, a summary dump');
1596
+ print(' will be requested.');
1597
+ print('');
1598
+ }
1599
+
1242
1600
  print('trace compile');
1243
1601
  // hidden command: trace debug json - toggles tracing of debug json packets
1244
1602
  print('');
@@ -1339,6 +1697,237 @@ function refObjectToString_(protocolPackage, handle) {
1339
1697
  }
1340
1698
 
1341
1699
 
1700
+ function decodeLolCaptureResponse(body) {
1701
+ var result;
1702
+ result = 'Captured live object list '+ body.id +
1703
+ ': count '+ body.count + ' size ' + body.size;
1704
+ return result;
1705
+ }
1706
+
1707
+
1708
+ function decodeLolDeleteResponse(body) {
1709
+ var result;
1710
+ result = 'Deleted live object list '+ body.id;
1711
+ return result;
1712
+ }
1713
+
1714
+
1715
+ function digitsIn(value) {
1716
+ var digits = 0;
1717
+ if (value === 0) value = 1;
1718
+ while (value >= 1) {
1719
+ digits++;
1720
+ value /= 10;
1721
+ }
1722
+ return digits;
1723
+ }
1724
+
1725
+
1726
+ function padding(value, max_digits) {
1727
+ var padding_digits = max_digits - digitsIn(value);
1728
+ var padding = '';
1729
+ while (padding_digits > 0) {
1730
+ padding += ' ';
1731
+ padding_digits--;
1732
+ }
1733
+ return padding;
1734
+ }
1735
+
1736
+
1737
+ function decodeLolInfoResponse(body) {
1738
+ var result;
1739
+ var lists = body.lists;
1740
+ var length = lists.length;
1741
+ var first_index = body.first_index + 1;
1742
+ var has_more = ((first_index + length) <= body.count);
1743
+ result = 'captured live object lists';
1744
+ if (has_more || (first_index != 1)) {
1745
+ result += ' ['+ length +' of '+ body.count +
1746
+ ': starting from '+ first_index +']';
1747
+ }
1748
+ result += ':\n';
1749
+ var max_digits = digitsIn(body.count);
1750
+ var last_count = 0;
1751
+ var last_size = 0;
1752
+ for (var i = 0; i < length; i++) {
1753
+ var entry = lists[i];
1754
+ var count = entry.count;
1755
+ var size = entry.size;
1756
+ var index = first_index + i;
1757
+ result += ' [' + padding(index, max_digits) + index + '] id '+ entry.id +
1758
+ ': count '+ count;
1759
+ if (last_count > 0) {
1760
+ result += '(+' + (count - last_count) + ')';
1761
+ }
1762
+ result += ' size '+ size;
1763
+ if (last_size > 0) {
1764
+ result += '(+' + (size - last_size) + ')';
1765
+ }
1766
+ result += '\n';
1767
+ last_count = count;
1768
+ last_size = size;
1769
+ }
1770
+ result += ' total: '+length+' lists\n';
1771
+ if (has_more) {
1772
+ result += ' -- press <enter> for more --\n';
1773
+ } else {
1774
+ repeat_cmd_line = '';
1775
+ }
1776
+ if (length === 0) result += ' none\n';
1777
+
1778
+ return result;
1779
+ }
1780
+
1781
+
1782
+ function decodeLolListResponse(body, title) {
1783
+
1784
+ var result;
1785
+ var total_count = body.count;
1786
+ var total_size = body.size;
1787
+ var length;
1788
+ var max_digits;
1789
+ var i;
1790
+ var entry;
1791
+ var index;
1792
+
1793
+ var max_count_digits = digitsIn(total_count);
1794
+ var max_size_digits;
1795
+
1796
+ var summary = body.summary;
1797
+ if (summary) {
1798
+
1799
+ var roots_count = 0;
1800
+ var found_root = body.found_root || 0;
1801
+ var found_weak_root = body.found_weak_root || 0;
1802
+
1803
+ // Print the summary result:
1804
+ result = 'summary of objects:\n';
1805
+ length = summary.length;
1806
+ if (found_root !== 0) {
1807
+ roots_count++;
1808
+ }
1809
+ if (found_weak_root !== 0) {
1810
+ roots_count++;
1811
+ }
1812
+ max_digits = digitsIn(length + roots_count);
1813
+ max_size_digits = digitsIn(total_size);
1814
+
1815
+ index = 1;
1816
+ if (found_root !== 0) {
1817
+ result += ' [' + padding(index, max_digits) + index + '] ' +
1818
+ ' count '+ 1 + padding(0, max_count_digits) +
1819
+ ' '+ padding(0, max_size_digits+1) +
1820
+ ' : <root>\n';
1821
+ index++;
1822
+ }
1823
+ if (found_weak_root !== 0) {
1824
+ result += ' [' + padding(index, max_digits) + index + '] ' +
1825
+ ' count '+ 1 + padding(0, max_count_digits) +
1826
+ ' '+ padding(0, max_size_digits+1) +
1827
+ ' : <weak root>\n';
1828
+ index++;
1829
+ }
1830
+
1831
+ for (i = 0; i < length; i++) {
1832
+ entry = summary[i];
1833
+ var count = entry.count;
1834
+ var size = entry.size;
1835
+ result += ' [' + padding(index, max_digits) + index + '] ' +
1836
+ ' count '+ count + padding(count, max_count_digits) +
1837
+ ' size '+ size + padding(size, max_size_digits) +
1838
+ ' : <' + entry.desc + '>\n';
1839
+ index++;
1840
+ }
1841
+ result += '\n total count: '+(total_count+roots_count)+'\n';
1842
+ if (body.size) {
1843
+ result += ' total size: '+body.size+'\n';
1844
+ }
1845
+
1846
+ } else {
1847
+ // Print the full dump result:
1848
+ var first_index = body.first_index + 1;
1849
+ var elements = body.elements;
1850
+ length = elements.length;
1851
+ var has_more = ((first_index + length) <= total_count);
1852
+ result = title;
1853
+ if (has_more || (first_index != 1)) {
1854
+ result += ' ['+ length +' of '+ total_count +
1855
+ ': starting from '+ first_index +']';
1856
+ }
1857
+ result += ':\n';
1858
+ if (length === 0) result += ' none\n';
1859
+ max_digits = digitsIn(length);
1860
+
1861
+ var max_id = 0;
1862
+ var max_size = 0;
1863
+ for (i = 0; i < length; i++) {
1864
+ entry = elements[i];
1865
+ if (entry.id > max_id) max_id = entry.id;
1866
+ if (entry.size > max_size) max_size = entry.size;
1867
+ }
1868
+ var max_id_digits = digitsIn(max_id);
1869
+ max_size_digits = digitsIn(max_size);
1870
+
1871
+ for (i = 0; i < length; i++) {
1872
+ entry = elements[i];
1873
+ index = first_index + i;
1874
+ result += ' ['+ padding(index, max_digits) + index +']';
1875
+ if (entry.id !== 0) {
1876
+ result += ' @' + entry.id + padding(entry.id, max_id_digits) +
1877
+ ': size ' + entry.size + ', ' +
1878
+ padding(entry.size, max_size_digits) + entry.desc + '\n';
1879
+ } else {
1880
+ // Must be a root or weak root:
1881
+ result += ' ' + entry.desc + '\n';
1882
+ }
1883
+ }
1884
+ if (has_more) {
1885
+ result += ' -- press <enter> for more --\n';
1886
+ } else {
1887
+ repeat_cmd_line = '';
1888
+ }
1889
+ if (length === 0) result += ' none\n';
1890
+ }
1891
+
1892
+ return result;
1893
+ }
1894
+
1895
+
1896
+ function decodeLolDiffResponse(body) {
1897
+ var title = 'objects';
1898
+ return decodeLolListResponse(body, title);
1899
+ }
1900
+
1901
+
1902
+ function decodeLolRetainersResponse(body) {
1903
+ var title = 'retainers for @' + body.id;
1904
+ return decodeLolListResponse(body, title);
1905
+ }
1906
+
1907
+
1908
+ function decodeLolPathResponse(body) {
1909
+ return body.path;
1910
+ }
1911
+
1912
+
1913
+ function decodeLolResetResponse(body) {
1914
+ return 'Reset all live object lists.';
1915
+ }
1916
+
1917
+
1918
+ function decodeLolGetIdResponse(body) {
1919
+ if (body.id == 0) {
1920
+ return 'Address is invalid, or object has been moved or collected';
1921
+ }
1922
+ return 'obj id is @' + body.id;
1923
+ }
1924
+
1925
+
1926
+ function decodeLolPrintResponse(body) {
1927
+ return body.dump;
1928
+ }
1929
+
1930
+
1342
1931
  // Rounds number 'num' to 'length' decimal places.
1343
1932
  function roundNumber(num, length) {
1344
1933
  var factor = Math.pow(10, length);
@@ -1510,6 +2099,7 @@ function DebugResponseDetails(response) {
1510
2099
 
1511
2100
  case 'evaluate':
1512
2101
  case 'lookup':
2102
+ case 'getobj':
1513
2103
  if (last_cmd == 'p' || last_cmd == 'print') {
1514
2104
  result = body.text;
1515
2105
  } else {
@@ -1671,6 +2261,34 @@ function DebugResponseDetails(response) {
1671
2261
  }
1672
2262
  break;
1673
2263
 
2264
+ case 'lol-capture':
2265
+ details.text = decodeLolCaptureResponse(body);
2266
+ break;
2267
+ case 'lol-delete':
2268
+ details.text = decodeLolDeleteResponse(body);
2269
+ break;
2270
+ case 'lol-diff':
2271
+ details.text = decodeLolDiffResponse(body);
2272
+ break;
2273
+ case 'lol-getid':
2274
+ details.text = decodeLolGetIdResponse(body);
2275
+ break;
2276
+ case 'lol-info':
2277
+ details.text = decodeLolInfoResponse(body);
2278
+ break;
2279
+ case 'lol-print':
2280
+ details.text = decodeLolPrintResponse(body);
2281
+ break;
2282
+ case 'lol-reset':
2283
+ details.text = decodeLolResetResponse(body);
2284
+ break;
2285
+ case 'lol-retainers':
2286
+ details.text = decodeLolRetainersResponse(body);
2287
+ break;
2288
+ case 'lol-path':
2289
+ details.text = decodeLolPathResponse(body);
2290
+ break;
2291
+
1674
2292
  default:
1675
2293
  details.text =
1676
2294
  'Response for unknown command \'' + response.command() + '\'' +