mustang 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.rspec +1 -0
- data/Isolate +9 -0
- data/README.md +6 -12
- data/Rakefile +30 -4
- data/TODO.md +9 -0
- data/ext/v8/extconf.rb +56 -0
- data/ext/v8/v8.cpp +37 -0
- data/ext/v8/v8_array.cpp +161 -0
- data/ext/v8/v8_array.h +17 -0
- data/ext/v8/v8_base.cpp +147 -0
- data/ext/v8/v8_base.h +23 -0
- data/ext/v8/v8_cast.cpp +151 -0
- data/ext/v8/v8_cast.h +64 -0
- data/ext/v8/v8_context.cpp +174 -0
- data/ext/v8/v8_context.h +12 -0
- data/ext/v8/v8_date.cpp +61 -0
- data/ext/v8/v8_date.h +16 -0
- data/ext/v8/v8_errors.cpp +147 -0
- data/ext/v8/v8_errors.h +19 -0
- data/ext/v8/v8_external.cpp +66 -0
- data/ext/v8/v8_external.h +16 -0
- data/ext/v8/v8_function.cpp +182 -0
- data/ext/v8/v8_function.h +14 -0
- data/ext/v8/v8_integer.cpp +70 -0
- data/ext/v8/v8_integer.h +16 -0
- data/ext/v8/v8_macros.h +30 -0
- data/ext/v8/v8_main.cpp +53 -0
- data/ext/v8/v8_main.h +13 -0
- data/ext/v8/v8_number.cpp +62 -0
- data/ext/v8/v8_number.h +16 -0
- data/ext/v8/v8_object.cpp +172 -0
- data/ext/v8/v8_object.h +17 -0
- data/ext/v8/v8_ref.cpp +72 -0
- data/ext/v8/v8_ref.h +43 -0
- data/ext/v8/v8_regexp.cpp +148 -0
- data/ext/v8/v8_regexp.h +16 -0
- data/ext/v8/v8_string.cpp +78 -0
- data/ext/v8/v8_string.h +16 -0
- data/ext/v8/v8_value.cpp +370 -0
- data/ext/v8/v8_value.h +19 -0
- data/gemspec.yml +2 -1
- data/lib/core_ext/class.rb +14 -0
- data/lib/core_ext/object.rb +12 -0
- data/lib/core_ext/symbol.rb +23 -0
- data/lib/mustang.rb +44 -0
- data/lib/mustang/context.rb +69 -0
- data/lib/mustang/errors.rb +36 -0
- data/lib/support/delegated.rb +25 -0
- data/lib/v8/array.rb +21 -0
- data/lib/v8/context.rb +13 -0
- data/lib/v8/date.rb +20 -0
- data/lib/v8/error.rb +15 -0
- data/lib/v8/external.rb +16 -0
- data/lib/v8/function.rb +11 -0
- data/lib/v8/integer.rb +16 -0
- data/lib/v8/number.rb +16 -0
- data/lib/v8/object.rb +66 -0
- data/lib/v8/regexp.rb +23 -0
- data/lib/v8/string.rb +27 -0
- data/mustang.gemspec +3 -0
- data/spec/core_ext/class_spec.rb +19 -0
- data/spec/core_ext/object_spec.rb +19 -0
- data/spec/core_ext/symbol_spec.rb +27 -0
- data/spec/fixtures/test1.js +2 -0
- data/spec/fixtures/test2.js +2 -0
- data/spec/spec_helper.rb +20 -0
- data/spec/v8/array_spec.rb +88 -0
- data/spec/v8/cast_spec.rb +151 -0
- data/spec/v8/context_spec.rb +78 -0
- data/spec/v8/data_spec.rb +39 -0
- data/spec/v8/date_spec.rb +45 -0
- data/spec/v8/empty_spec.rb +27 -0
- data/spec/v8/errors_spec.rb +142 -0
- data/spec/v8/external_spec.rb +44 -0
- data/spec/v8/function_spec.rb +170 -0
- data/spec/v8/integer_spec.rb +41 -0
- data/spec/v8/main_spec.rb +18 -0
- data/spec/v8/null_spec.rb +27 -0
- data/spec/v8/number_spec.rb +40 -0
- data/spec/v8/object_spec.rb +79 -0
- data/spec/v8/primitive_spec.rb +9 -0
- data/spec/v8/regexp_spec.rb +65 -0
- data/spec/v8/string_spec.rb +48 -0
- data/spec/v8/undefined_spec.rb +27 -0
- data/spec/v8/value_spec.rb +215 -0
- data/vendor/v8/.gitignore +2 -0
- data/vendor/v8/AUTHORS +3 -1
- data/vendor/v8/ChangeLog +117 -0
- data/vendor/v8/SConstruct +334 -53
- data/vendor/v8/include/v8-debug.h +21 -11
- data/vendor/v8/include/v8-preparser.h +1 -1
- data/vendor/v8/include/v8-profiler.h +122 -43
- data/vendor/v8/include/v8-testing.h +5 -0
- data/vendor/v8/include/v8.h +171 -17
- data/vendor/v8/preparser/SConscript +38 -0
- data/vendor/v8/preparser/preparser-process.cc +77 -114
- data/vendor/v8/samples/shell.cc +232 -46
- data/vendor/v8/src/SConscript +29 -5
- data/vendor/v8/src/accessors.cc +70 -211
- data/vendor/v8/{test/cctest/test-mips.cc → src/allocation-inl.h} +15 -18
- data/vendor/v8/src/allocation.cc +0 -82
- data/vendor/v8/src/allocation.h +9 -42
- data/vendor/v8/src/api.cc +1645 -1156
- data/vendor/v8/src/api.h +76 -12
- data/vendor/v8/src/apiutils.h +0 -7
- data/vendor/v8/src/arguments.h +15 -4
- data/vendor/v8/src/arm/assembler-arm-inl.h +10 -9
- data/vendor/v8/src/arm/assembler-arm.cc +62 -23
- data/vendor/v8/src/arm/assembler-arm.h +76 -11
- data/vendor/v8/src/arm/builtins-arm.cc +39 -33
- data/vendor/v8/src/arm/code-stubs-arm.cc +1182 -402
- data/vendor/v8/src/arm/code-stubs-arm.h +20 -54
- data/vendor/v8/src/arm/codegen-arm.cc +159 -106
- data/vendor/v8/src/arm/codegen-arm.h +6 -6
- data/vendor/v8/src/arm/constants-arm.h +16 -1
- data/vendor/v8/src/arm/cpu-arm.cc +7 -5
- data/vendor/v8/src/arm/debug-arm.cc +6 -4
- data/vendor/v8/src/arm/deoptimizer-arm.cc +51 -14
- data/vendor/v8/src/arm/disasm-arm.cc +47 -15
- data/vendor/v8/src/arm/frames-arm.h +1 -1
- data/vendor/v8/src/arm/full-codegen-arm.cc +724 -408
- data/vendor/v8/src/arm/ic-arm.cc +90 -85
- data/vendor/v8/src/arm/lithium-arm.cc +140 -69
- data/vendor/v8/src/arm/lithium-arm.h +161 -46
- data/vendor/v8/src/arm/lithium-codegen-arm.cc +567 -297
- data/vendor/v8/src/arm/lithium-codegen-arm.h +21 -9
- data/vendor/v8/src/arm/lithium-gap-resolver-arm.cc +2 -0
- data/vendor/v8/src/arm/macro-assembler-arm.cc +457 -96
- data/vendor/v8/src/arm/macro-assembler-arm.h +115 -18
- data/vendor/v8/src/arm/regexp-macro-assembler-arm.cc +20 -13
- data/vendor/v8/src/arm/regexp-macro-assembler-arm.h +1 -0
- data/vendor/v8/src/arm/simulator-arm.cc +184 -101
- data/vendor/v8/src/arm/simulator-arm.h +26 -21
- data/vendor/v8/src/arm/stub-cache-arm.cc +450 -467
- data/vendor/v8/src/arm/virtual-frame-arm.cc +14 -12
- data/vendor/v8/src/arm/virtual-frame-arm.h +11 -8
- data/vendor/v8/src/array.js +35 -18
- data/vendor/v8/src/assembler.cc +186 -92
- data/vendor/v8/src/assembler.h +106 -69
- data/vendor/v8/src/ast-inl.h +5 -0
- data/vendor/v8/src/ast.cc +46 -35
- data/vendor/v8/src/ast.h +107 -50
- data/vendor/v8/src/atomicops.h +2 -0
- data/vendor/v8/src/atomicops_internals_mips_gcc.h +169 -0
- data/vendor/v8/src/bootstrapper.cc +649 -399
- data/vendor/v8/src/bootstrapper.h +94 -27
- data/vendor/v8/src/builtins.cc +359 -227
- data/vendor/v8/src/builtins.h +157 -123
- data/vendor/v8/src/checks.cc +2 -2
- data/vendor/v8/src/checks.h +4 -0
- data/vendor/v8/src/code-stubs.cc +27 -17
- data/vendor/v8/src/code-stubs.h +38 -17
- data/vendor/v8/src/codegen-inl.h +5 -1
- data/vendor/v8/src/codegen.cc +27 -17
- data/vendor/v8/src/codegen.h +9 -9
- data/vendor/v8/src/compilation-cache.cc +92 -206
- data/vendor/v8/src/compilation-cache.h +205 -30
- data/vendor/v8/src/compiler.cc +107 -120
- data/vendor/v8/src/compiler.h +17 -2
- data/vendor/v8/src/contexts.cc +22 -15
- data/vendor/v8/src/contexts.h +14 -8
- data/vendor/v8/src/conversions.cc +86 -30
- data/vendor/v8/src/counters.cc +19 -4
- data/vendor/v8/src/counters.h +28 -16
- data/vendor/v8/src/cpu-profiler-inl.h +4 -3
- data/vendor/v8/src/cpu-profiler.cc +123 -72
- data/vendor/v8/src/cpu-profiler.h +33 -19
- data/vendor/v8/src/cpu.h +2 -0
- data/vendor/v8/src/d8-debug.cc +3 -3
- data/vendor/v8/src/d8-debug.h +7 -6
- data/vendor/v8/src/d8-posix.cc +2 -0
- data/vendor/v8/src/d8.cc +22 -12
- data/vendor/v8/src/d8.gyp +3 -0
- data/vendor/v8/src/d8.js +618 -0
- data/vendor/v8/src/data-flow.h +3 -3
- data/vendor/v8/src/dateparser.h +4 -2
- data/vendor/v8/src/debug-agent.cc +10 -9
- data/vendor/v8/src/debug-agent.h +9 -11
- data/vendor/v8/src/debug-debugger.js +121 -0
- data/vendor/v8/src/debug.cc +331 -227
- data/vendor/v8/src/debug.h +248 -219
- data/vendor/v8/src/deoptimizer.cc +173 -62
- data/vendor/v8/src/deoptimizer.h +119 -19
- data/vendor/v8/src/disasm.h +3 -0
- data/vendor/v8/src/disassembler.cc +10 -9
- data/vendor/v8/src/execution.cc +185 -129
- data/vendor/v8/src/execution.h +47 -78
- data/vendor/v8/src/extensions/experimental/break-iterator.cc +250 -0
- data/vendor/v8/src/extensions/experimental/break-iterator.h +89 -0
- data/vendor/v8/src/extensions/experimental/experimental.gyp +2 -0
- data/vendor/v8/src/extensions/experimental/i18n-extension.cc +22 -2
- data/vendor/v8/src/extensions/externalize-string-extension.cc +2 -2
- data/vendor/v8/src/extensions/gc-extension.cc +1 -1
- data/vendor/v8/src/factory.cc +261 -154
- data/vendor/v8/src/factory.h +162 -158
- data/vendor/v8/src/flag-definitions.h +17 -11
- data/vendor/v8/src/frame-element.cc +0 -5
- data/vendor/v8/src/frame-element.h +9 -13
- data/vendor/v8/src/frames-inl.h +7 -0
- data/vendor/v8/src/frames.cc +56 -46
- data/vendor/v8/src/frames.h +36 -25
- data/vendor/v8/src/full-codegen.cc +15 -24
- data/vendor/v8/src/full-codegen.h +13 -41
- data/vendor/v8/src/func-name-inferrer.cc +7 -6
- data/vendor/v8/src/func-name-inferrer.h +1 -1
- data/vendor/v8/src/gdb-jit.cc +1 -0
- data/vendor/v8/src/global-handles.cc +118 -56
- data/vendor/v8/src/global-handles.h +98 -40
- data/vendor/v8/src/globals.h +2 -2
- data/vendor/v8/src/handles-inl.h +106 -9
- data/vendor/v8/src/handles.cc +220 -157
- data/vendor/v8/src/handles.h +38 -59
- data/vendor/v8/src/hashmap.h +3 -3
- data/vendor/v8/src/heap-inl.h +141 -25
- data/vendor/v8/src/heap-profiler.cc +117 -63
- data/vendor/v8/src/heap-profiler.h +38 -21
- data/vendor/v8/src/heap.cc +805 -564
- data/vendor/v8/src/heap.h +640 -594
- data/vendor/v8/src/hydrogen-instructions.cc +216 -73
- data/vendor/v8/src/hydrogen-instructions.h +259 -124
- data/vendor/v8/src/hydrogen.cc +996 -1171
- data/vendor/v8/src/hydrogen.h +163 -144
- data/vendor/v8/src/ia32/assembler-ia32-inl.h +12 -11
- data/vendor/v8/src/ia32/assembler-ia32.cc +85 -39
- data/vendor/v8/src/ia32/assembler-ia32.h +82 -16
- data/vendor/v8/src/ia32/builtins-ia32.cc +64 -58
- data/vendor/v8/src/ia32/code-stubs-ia32.cc +248 -324
- data/vendor/v8/src/ia32/code-stubs-ia32.h +3 -44
- data/vendor/v8/src/ia32/codegen-ia32.cc +217 -165
- data/vendor/v8/src/ia32/codegen-ia32.h +3 -0
- data/vendor/v8/src/ia32/cpu-ia32.cc +6 -5
- data/vendor/v8/src/ia32/debug-ia32.cc +8 -5
- data/vendor/v8/src/ia32/deoptimizer-ia32.cc +124 -14
- data/vendor/v8/src/ia32/disasm-ia32.cc +85 -62
- data/vendor/v8/src/ia32/frames-ia32.h +1 -1
- data/vendor/v8/src/ia32/full-codegen-ia32.cc +348 -435
- data/vendor/v8/src/ia32/ic-ia32.cc +91 -91
- data/vendor/v8/src/ia32/lithium-codegen-ia32.cc +500 -255
- data/vendor/v8/src/ia32/lithium-codegen-ia32.h +13 -4
- data/vendor/v8/src/ia32/lithium-gap-resolver-ia32.cc +6 -0
- data/vendor/v8/src/ia32/lithium-ia32.cc +122 -45
- data/vendor/v8/src/ia32/lithium-ia32.h +128 -41
- data/vendor/v8/src/ia32/macro-assembler-ia32.cc +109 -84
- data/vendor/v8/src/ia32/macro-assembler-ia32.h +18 -9
- data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.cc +26 -15
- data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.h +1 -0
- data/vendor/v8/src/ia32/register-allocator-ia32.cc +30 -30
- data/vendor/v8/src/ia32/simulator-ia32.h +4 -4
- data/vendor/v8/src/ia32/stub-cache-ia32.cc +383 -400
- data/vendor/v8/src/ia32/virtual-frame-ia32.cc +36 -13
- data/vendor/v8/src/ia32/virtual-frame-ia32.h +11 -5
- data/vendor/v8/src/ic-inl.h +12 -2
- data/vendor/v8/src/ic.cc +304 -221
- data/vendor/v8/src/ic.h +115 -58
- data/vendor/v8/src/interpreter-irregexp.cc +25 -21
- data/vendor/v8/src/interpreter-irregexp.h +2 -1
- data/vendor/v8/src/isolate.cc +883 -0
- data/vendor/v8/src/isolate.h +1304 -0
- data/vendor/v8/src/json.js +10 -10
- data/vendor/v8/src/jsregexp.cc +111 -80
- data/vendor/v8/src/jsregexp.h +6 -7
- data/vendor/v8/src/jump-target-heavy.cc +5 -8
- data/vendor/v8/src/jump-target-heavy.h +0 -6
- data/vendor/v8/src/jump-target-inl.h +1 -1
- data/vendor/v8/src/jump-target-light.cc +3 -3
- data/vendor/v8/src/lithium-allocator-inl.h +2 -0
- data/vendor/v8/src/lithium-allocator.cc +42 -30
- data/vendor/v8/src/lithium-allocator.h +8 -22
- data/vendor/v8/src/lithium.cc +1 -0
- data/vendor/v8/src/liveedit.cc +141 -99
- data/vendor/v8/src/liveedit.h +7 -2
- data/vendor/v8/src/liveobjectlist-inl.h +90 -0
- data/vendor/v8/src/liveobjectlist.cc +2537 -1
- data/vendor/v8/src/liveobjectlist.h +245 -35
- data/vendor/v8/src/log-utils.cc +122 -35
- data/vendor/v8/src/log-utils.h +33 -36
- data/vendor/v8/src/log.cc +299 -241
- data/vendor/v8/src/log.h +177 -110
- data/vendor/v8/src/mark-compact.cc +612 -470
- data/vendor/v8/src/mark-compact.h +153 -80
- data/vendor/v8/src/messages.cc +16 -14
- data/vendor/v8/src/messages.js +30 -7
- data/vendor/v8/src/mips/assembler-mips-inl.h +155 -35
- data/vendor/v8/src/mips/assembler-mips.cc +1093 -219
- data/vendor/v8/src/mips/assembler-mips.h +552 -153
- data/vendor/v8/src/mips/builtins-mips.cc +43 -100
- data/vendor/v8/src/mips/code-stubs-mips.cc +752 -0
- data/vendor/v8/src/mips/code-stubs-mips.h +511 -0
- data/vendor/v8/src/mips/codegen-mips-inl.h +8 -14
- data/vendor/v8/src/mips/codegen-mips.cc +672 -896
- data/vendor/v8/src/mips/codegen-mips.h +271 -69
- data/vendor/v8/src/mips/constants-mips.cc +44 -20
- data/vendor/v8/src/mips/constants-mips.h +238 -40
- data/vendor/v8/src/mips/cpu-mips.cc +20 -3
- data/vendor/v8/src/mips/debug-mips.cc +35 -7
- data/vendor/v8/src/mips/deoptimizer-mips.cc +91 -0
- data/vendor/v8/src/mips/disasm-mips.cc +329 -93
- data/vendor/v8/src/mips/frames-mips.cc +2 -50
- data/vendor/v8/src/mips/frames-mips.h +24 -9
- data/vendor/v8/src/mips/full-codegen-mips.cc +473 -23
- data/vendor/v8/src/mips/ic-mips.cc +81 -45
- data/vendor/v8/src/mips/jump-target-mips.cc +11 -106
- data/vendor/v8/src/mips/lithium-codegen-mips.h +65 -0
- data/vendor/v8/src/mips/lithium-mips.h +304 -0
- data/vendor/v8/src/mips/macro-assembler-mips.cc +2391 -390
- data/vendor/v8/src/mips/macro-assembler-mips.h +718 -121
- data/vendor/v8/src/mips/regexp-macro-assembler-mips.cc +478 -0
- data/vendor/v8/src/mips/regexp-macro-assembler-mips.h +250 -0
- data/vendor/v8/src/mips/register-allocator-mips-inl.h +0 -3
- data/vendor/v8/src/mips/register-allocator-mips.h +3 -2
- data/vendor/v8/src/mips/simulator-mips.cc +1009 -221
- data/vendor/v8/src/mips/simulator-mips.h +119 -36
- data/vendor/v8/src/mips/stub-cache-mips.cc +331 -148
- data/vendor/v8/src/mips/{fast-codegen-mips.cc → virtual-frame-mips-inl.h} +11 -30
- data/vendor/v8/src/mips/virtual-frame-mips.cc +137 -149
- data/vendor/v8/src/mips/virtual-frame-mips.h +294 -312
- data/vendor/v8/src/mirror-debugger.js +9 -8
- data/vendor/v8/src/mksnapshot.cc +2 -2
- data/vendor/v8/src/objects-debug.cc +16 -16
- data/vendor/v8/src/objects-inl.h +421 -195
- data/vendor/v8/src/objects-printer.cc +7 -7
- data/vendor/v8/src/objects-visiting.cc +1 -1
- data/vendor/v8/src/objects-visiting.h +33 -12
- data/vendor/v8/src/objects.cc +935 -658
- data/vendor/v8/src/objects.h +234 -139
- data/vendor/v8/src/parser.cc +484 -439
- data/vendor/v8/src/parser.h +35 -14
- data/vendor/v8/src/platform-cygwin.cc +173 -107
- data/vendor/v8/src/platform-freebsd.cc +224 -72
- data/vendor/v8/src/platform-linux.cc +234 -95
- data/vendor/v8/src/platform-macos.cc +215 -82
- data/vendor/v8/src/platform-nullos.cc +9 -3
- data/vendor/v8/src/platform-openbsd.cc +22 -7
- data/vendor/v8/src/platform-posix.cc +30 -5
- data/vendor/v8/src/platform-solaris.cc +120 -38
- data/vendor/v8/src/platform-tls-mac.h +62 -0
- data/vendor/v8/src/platform-tls-win32.h +62 -0
- data/vendor/v8/src/platform-tls.h +50 -0
- data/vendor/v8/src/platform-win32.cc +195 -97
- data/vendor/v8/src/platform.h +72 -15
- data/vendor/v8/src/preparse-data.cc +2 -0
- data/vendor/v8/src/preparser-api.cc +8 -2
- data/vendor/v8/src/preparser.cc +1 -1
- data/vendor/v8/src/prettyprinter.cc +43 -52
- data/vendor/v8/src/prettyprinter.h +1 -1
- data/vendor/v8/src/profile-generator-inl.h +0 -28
- data/vendor/v8/src/profile-generator.cc +942 -685
- data/vendor/v8/src/profile-generator.h +210 -176
- data/vendor/v8/src/property.cc +6 -0
- data/vendor/v8/src/property.h +14 -3
- data/vendor/v8/src/regexp-macro-assembler-irregexp.cc +1 -1
- data/vendor/v8/src/regexp-macro-assembler.cc +28 -19
- data/vendor/v8/src/regexp-macro-assembler.h +11 -6
- data/vendor/v8/src/regexp-stack.cc +18 -10
- data/vendor/v8/src/regexp-stack.h +45 -21
- data/vendor/v8/src/regexp.js +3 -3
- data/vendor/v8/src/register-allocator-inl.h +3 -3
- data/vendor/v8/src/register-allocator.cc +1 -7
- data/vendor/v8/src/register-allocator.h +5 -15
- data/vendor/v8/src/rewriter.cc +2 -1
- data/vendor/v8/src/runtime-profiler.cc +158 -128
- data/vendor/v8/src/runtime-profiler.h +131 -15
- data/vendor/v8/src/runtime.cc +2409 -1692
- data/vendor/v8/src/runtime.h +93 -17
- data/vendor/v8/src/safepoint-table.cc +3 -0
- data/vendor/v8/src/safepoint-table.h +9 -3
- data/vendor/v8/src/scanner-base.cc +21 -28
- data/vendor/v8/src/scanner-base.h +22 -11
- data/vendor/v8/src/scanner.cc +3 -5
- data/vendor/v8/src/scanner.h +4 -2
- data/vendor/v8/src/scopeinfo.cc +11 -16
- data/vendor/v8/src/scopeinfo.h +26 -15
- data/vendor/v8/src/scopes.cc +67 -37
- data/vendor/v8/src/scopes.h +26 -12
- data/vendor/v8/src/serialize.cc +193 -154
- data/vendor/v8/src/serialize.h +41 -36
- data/vendor/v8/src/small-pointer-list.h +163 -0
- data/vendor/v8/src/snapshot-common.cc +1 -1
- data/vendor/v8/src/snapshot.h +3 -1
- data/vendor/v8/src/spaces-inl.h +30 -25
- data/vendor/v8/src/spaces.cc +263 -370
- data/vendor/v8/src/spaces.h +178 -166
- data/vendor/v8/src/string-search.cc +4 -3
- data/vendor/v8/src/string-search.h +21 -20
- data/vendor/v8/src/string-stream.cc +32 -24
- data/vendor/v8/src/string.js +7 -7
- data/vendor/v8/src/stub-cache.cc +324 -248
- data/vendor/v8/src/stub-cache.h +181 -155
- data/vendor/v8/src/token.cc +3 -3
- data/vendor/v8/src/token.h +3 -3
- data/vendor/v8/src/top.cc +218 -390
- data/vendor/v8/src/type-info.cc +98 -32
- data/vendor/v8/src/type-info.h +10 -3
- data/vendor/v8/src/unicode.cc +1 -1
- data/vendor/v8/src/unicode.h +1 -1
- data/vendor/v8/src/utils.h +3 -0
- data/vendor/v8/src/v8-counters.cc +18 -11
- data/vendor/v8/src/v8-counters.h +34 -13
- data/vendor/v8/src/v8.cc +66 -121
- data/vendor/v8/src/v8.h +7 -4
- data/vendor/v8/src/v8globals.h +18 -12
- data/vendor/v8/src/{memory.h → v8memory.h} +0 -0
- data/vendor/v8/src/v8natives.js +59 -18
- data/vendor/v8/src/v8threads.cc +127 -114
- data/vendor/v8/src/v8threads.h +42 -35
- data/vendor/v8/src/v8utils.h +2 -39
- data/vendor/v8/src/variables.h +1 -1
- data/vendor/v8/src/version.cc +26 -5
- data/vendor/v8/src/version.h +4 -0
- data/vendor/v8/src/virtual-frame-heavy-inl.h +2 -4
- data/vendor/v8/src/virtual-frame-light-inl.h +5 -4
- data/vendor/v8/src/vm-state-inl.h +21 -17
- data/vendor/v8/src/vm-state.h +7 -5
- data/vendor/v8/src/win32-headers.h +1 -0
- data/vendor/v8/src/x64/assembler-x64-inl.h +12 -11
- data/vendor/v8/src/x64/assembler-x64.cc +80 -40
- data/vendor/v8/src/x64/assembler-x64.h +67 -17
- data/vendor/v8/src/x64/builtins-x64.cc +34 -33
- data/vendor/v8/src/x64/code-stubs-x64.cc +636 -377
- data/vendor/v8/src/x64/code-stubs-x64.h +14 -48
- data/vendor/v8/src/x64/codegen-x64-inl.h +1 -1
- data/vendor/v8/src/x64/codegen-x64.cc +158 -136
- data/vendor/v8/src/x64/codegen-x64.h +4 -1
- data/vendor/v8/src/x64/cpu-x64.cc +7 -5
- data/vendor/v8/src/x64/debug-x64.cc +8 -6
- data/vendor/v8/src/x64/deoptimizer-x64.cc +195 -20
- data/vendor/v8/src/x64/disasm-x64.cc +42 -23
- data/vendor/v8/src/x64/frames-x64.cc +1 -1
- data/vendor/v8/src/x64/frames-x64.h +2 -2
- data/vendor/v8/src/x64/full-codegen-x64.cc +780 -218
- data/vendor/v8/src/x64/ic-x64.cc +77 -79
- data/vendor/v8/src/x64/jump-target-x64.cc +1 -1
- data/vendor/v8/src/x64/lithium-codegen-x64.cc +698 -181
- data/vendor/v8/src/x64/lithium-codegen-x64.h +31 -6
- data/vendor/v8/src/x64/lithium-x64.cc +136 -54
- data/vendor/v8/src/x64/lithium-x64.h +142 -51
- data/vendor/v8/src/x64/macro-assembler-x64.cc +456 -187
- data/vendor/v8/src/x64/macro-assembler-x64.h +166 -34
- data/vendor/v8/src/x64/regexp-macro-assembler-x64.cc +44 -28
- data/vendor/v8/src/x64/regexp-macro-assembler-x64.h +8 -4
- data/vendor/v8/src/x64/register-allocator-x64-inl.h +3 -3
- data/vendor/v8/src/x64/register-allocator-x64.cc +12 -8
- data/vendor/v8/src/x64/simulator-x64.h +5 -5
- data/vendor/v8/src/x64/stub-cache-x64.cc +299 -344
- data/vendor/v8/src/x64/virtual-frame-x64.cc +37 -13
- data/vendor/v8/src/x64/virtual-frame-x64.h +13 -7
- data/vendor/v8/src/zone-inl.h +49 -3
- data/vendor/v8/src/zone.cc +42 -41
- data/vendor/v8/src/zone.h +37 -34
- data/vendor/v8/test/benchmarks/testcfg.py +100 -0
- data/vendor/v8/test/cctest/SConscript +5 -4
- data/vendor/v8/test/cctest/cctest.h +3 -2
- data/vendor/v8/test/cctest/cctest.status +6 -11
- data/vendor/v8/test/cctest/test-accessors.cc +3 -3
- data/vendor/v8/test/cctest/test-alloc.cc +39 -33
- data/vendor/v8/test/cctest/test-api.cc +1092 -205
- data/vendor/v8/test/cctest/test-assembler-arm.cc +39 -25
- data/vendor/v8/test/cctest/test-assembler-ia32.cc +36 -37
- data/vendor/v8/test/cctest/test-assembler-mips.cc +1098 -40
- data/vendor/v8/test/cctest/test-assembler-x64.cc +32 -25
- data/vendor/v8/test/cctest/test-ast.cc +1 -0
- data/vendor/v8/test/cctest/test-circular-queue.cc +8 -5
- data/vendor/v8/test/cctest/test-compiler.cc +24 -24
- data/vendor/v8/test/cctest/test-cpu-profiler.cc +140 -5
- data/vendor/v8/test/cctest/test-dataflow.cc +1 -0
- data/vendor/v8/test/cctest/test-debug.cc +136 -77
- data/vendor/v8/test/cctest/test-decls.cc +1 -1
- data/vendor/v8/test/cctest/test-deoptimization.cc +25 -24
- data/vendor/v8/test/cctest/test-disasm-arm.cc +9 -4
- data/vendor/v8/test/cctest/test-disasm-ia32.cc +10 -8
- data/vendor/v8/test/cctest/test-func-name-inference.cc +10 -4
- data/vendor/v8/test/cctest/test-heap-profiler.cc +226 -164
- data/vendor/v8/test/cctest/test-heap.cc +240 -217
- data/vendor/v8/test/cctest/test-liveedit.cc +1 -0
- data/vendor/v8/test/cctest/test-log-stack-tracer.cc +18 -20
- data/vendor/v8/test/cctest/test-log.cc +114 -108
- data/vendor/v8/test/cctest/test-macro-assembler-x64.cc +247 -177
- data/vendor/v8/test/cctest/test-mark-compact.cc +129 -90
- data/vendor/v8/test/cctest/test-parsing.cc +15 -14
- data/vendor/v8/test/cctest/test-platform-linux.cc +1 -0
- data/vendor/v8/test/cctest/test-platform-tls.cc +66 -0
- data/vendor/v8/test/cctest/test-platform-win32.cc +1 -0
- data/vendor/v8/test/cctest/test-profile-generator.cc +1 -1
- data/vendor/v8/test/cctest/test-regexp.cc +53 -41
- data/vendor/v8/test/cctest/test-reloc-info.cc +18 -11
- data/vendor/v8/test/cctest/test-serialize.cc +44 -43
- data/vendor/v8/test/cctest/test-sockets.cc +8 -3
- data/vendor/v8/test/cctest/test-spaces.cc +47 -29
- data/vendor/v8/test/cctest/test-strings.cc +20 -20
- data/vendor/v8/test/cctest/test-thread-termination.cc +8 -3
- data/vendor/v8/test/cctest/test-threads.cc +5 -3
- data/vendor/v8/test/cctest/test-utils.cc +5 -4
- data/vendor/v8/test/cctest/testcfg.py +7 -3
- data/vendor/v8/test/es5conform/es5conform.status +2 -77
- data/vendor/v8/test/es5conform/testcfg.py +1 -1
- data/vendor/v8/test/message/testcfg.py +1 -1
- data/vendor/v8/test/mjsunit/accessors-on-global-object.js +3 -3
- data/vendor/v8/test/mjsunit/array-concat.js +43 -1
- data/vendor/v8/test/mjsunit/array-join.js +25 -0
- data/vendor/v8/test/mjsunit/bitops-info.js +7 -1
- data/vendor/v8/test/mjsunit/compiler/array-length.js +2 -2
- data/vendor/v8/test/mjsunit/compiler/global-accessors.js +47 -0
- data/vendor/v8/test/mjsunit/compiler/pic.js +1 -1
- data/vendor/v8/test/mjsunit/compiler/regress-loadfield.js +65 -0
- data/vendor/v8/test/mjsunit/math-sqrt.js +5 -1
- data/vendor/v8/test/mjsunit/mjsunit.js +59 -8
- data/vendor/v8/test/mjsunit/mjsunit.status +0 -12
- data/vendor/v8/test/mjsunit/mul-exhaustive.js +129 -11
- data/vendor/v8/test/mjsunit/negate-zero.js +1 -1
- data/vendor/v8/test/mjsunit/object-freeze.js +5 -13
- data/vendor/v8/test/mjsunit/object-prevent-extensions.js +9 -50
- data/vendor/v8/test/mjsunit/object-seal.js +4 -13
- data/vendor/v8/test/mjsunit/override-eval-with-non-function.js +36 -0
- data/vendor/v8/test/mjsunit/regress/regress-1145.js +54 -0
- data/vendor/v8/test/mjsunit/regress/regress-1172-bis.js +37 -0
- data/vendor/v8/test/mjsunit/regress/regress-1181.js +54 -0
- data/vendor/v8/test/mjsunit/regress/regress-1207.js +35 -0
- data/vendor/v8/test/mjsunit/regress/regress-1209.js +34 -0
- data/vendor/v8/test/mjsunit/regress/regress-1210.js +48 -0
- data/vendor/v8/test/mjsunit/regress/regress-1213.js +43 -0
- data/vendor/v8/test/mjsunit/regress/regress-1218.js +29 -0
- data/vendor/v8/test/mjsunit/regress/regress-1229.js +79 -0
- data/vendor/v8/test/mjsunit/regress/regress-1233.js +47 -0
- data/vendor/v8/test/mjsunit/regress/regress-1236.js +34 -0
- data/vendor/v8/test/mjsunit/regress/regress-1237.js +36 -0
- data/vendor/v8/test/mjsunit/regress/regress-1240.js +39 -0
- data/vendor/v8/test/mjsunit/regress/regress-1257.js +58 -0
- data/vendor/v8/test/mjsunit/regress/regress-1278.js +69 -0
- data/vendor/v8/test/mjsunit/regress/regress-create-exception.js +1 -0
- data/vendor/v8/test/mjsunit/regress/regress-lazy-deopt-reloc.js +52 -0
- data/vendor/v8/test/mjsunit/sin-cos.js +15 -10
- data/vendor/v8/test/mjsunit/smi-negative-zero.js +2 -2
- data/vendor/v8/test/mjsunit/str-to-num.js +1 -1
- data/vendor/v8/test/mjsunit/strict-mode.js +435 -0
- data/vendor/v8/test/mjsunit/testcfg.py +23 -6
- data/vendor/v8/test/mozilla/mozilla.status +0 -2
- data/vendor/v8/test/mozilla/testcfg.py +1 -1
- data/vendor/v8/test/preparser/empty.js +28 -0
- data/vendor/v8/test/preparser/functions-only.js +38 -0
- data/vendor/v8/test/preparser/non-alphanum.js +34 -0
- data/vendor/v8/test/preparser/symbols-only.js +49 -0
- data/vendor/v8/test/preparser/testcfg.py +90 -0
- data/vendor/v8/test/sputnik/testcfg.py +1 -1
- data/vendor/v8/test/test262/README +16 -0
- data/vendor/v8/test/test262/harness-adapt.js +80 -0
- data/vendor/v8/test/test262/test262.status +1506 -0
- data/vendor/v8/test/test262/testcfg.py +123 -0
- data/vendor/v8/tools/freebsd-tick-processor +10 -0
- data/vendor/v8/tools/gyp/v8.gyp +8 -33
- data/vendor/v8/tools/linux-tick-processor +5 -3
- data/vendor/v8/tools/test.py +37 -14
- data/vendor/v8/tools/tickprocessor.js +22 -8
- data/vendor/v8/tools/visual_studio/v8_base.vcproj +13 -1
- data/vendor/v8/tools/visual_studio/v8_base_arm.vcproj +5 -1
- data/vendor/v8/tools/visual_studio/v8_base_x64.vcproj +5 -1
- data/vendor/v8/tools/visual_studio/x64.vsprops +1 -0
- metadata +1495 -1341
- data/ext/extconf.rb +0 -22
- data/ext/mustang.cpp +0 -58
- 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,
|
51
|
-
V(CODE_MOVE,
|
52
|
-
V(CODE_DELETE,
|
53
|
-
V(
|
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
|
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
|
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(
|
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
|
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
|
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
|
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
|
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
|
-
|
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
|
|
data/vendor/v8/src/d8-debug.cc
CHANGED
@@ -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
|
|
data/vendor/v8/src/d8-debug.h
CHANGED
@@ -53,11 +53,11 @@ class ReceiverThread;
|
|
53
53
|
// Remote debugging class.
|
54
54
|
class RemoteDebugger {
|
55
55
|
public:
|
56
|
-
|
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
|
-
|
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
|
|
data/vendor/v8/src/d8-posix.cc
CHANGED
@@ -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 !=
|
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
|
-
|
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
|
-
|
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
|
-
|
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::
|
452
|
-
|
453
|
-
|
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(
|
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
|
-
|
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(
|
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
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() + '\'' +
|