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
data/vendor/v8/src/debug.h
CHANGED
@@ -28,6 +28,7 @@
|
|
28
28
|
#ifndef V8_DEBUG_H_
|
29
29
|
#define V8_DEBUG_H_
|
30
30
|
|
31
|
+
#include "arguments.h"
|
31
32
|
#include "assembler.h"
|
32
33
|
#include "debug-agent.h"
|
33
34
|
#include "execution.h"
|
@@ -210,7 +211,6 @@ class DebugInfoListNode {
|
|
210
211
|
DebugInfoListNode* next_;
|
211
212
|
};
|
212
213
|
|
213
|
-
|
214
214
|
// This class contains the debugger support. The main purpose is to handle
|
215
215
|
// setting break points in the code.
|
216
216
|
//
|
@@ -220,33 +220,33 @@ class DebugInfoListNode {
|
|
220
220
|
// DebugInfo.
|
221
221
|
class Debug {
|
222
222
|
public:
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
223
|
+
void Setup(bool create_heap_objects);
|
224
|
+
bool Load();
|
225
|
+
void Unload();
|
226
|
+
bool IsLoaded() { return !debug_context_.is_null(); }
|
227
|
+
bool InDebugger() { return thread_local_.debugger_entry_ != NULL; }
|
228
|
+
void PreemptionWhileInDebugger();
|
229
|
+
void Iterate(ObjectVisitor* v);
|
230
|
+
|
231
|
+
Object* Break(Arguments args);
|
232
|
+
void SetBreakPoint(Handle<SharedFunctionInfo> shared,
|
233
|
+
Handle<Object> break_point_object,
|
234
|
+
int* source_position);
|
235
|
+
void ClearBreakPoint(Handle<Object> break_point_object);
|
236
|
+
void ClearAllBreakPoints();
|
237
|
+
void FloodWithOneShot(Handle<SharedFunctionInfo> shared);
|
238
|
+
void FloodHandlerWithOneShot();
|
239
|
+
void ChangeBreakOnException(ExceptionBreakType type, bool enable);
|
240
|
+
bool IsBreakOnException(ExceptionBreakType type);
|
241
|
+
void PrepareStep(StepAction step_action, int step_count);
|
242
|
+
void ClearStepping();
|
243
|
+
bool StepNextContinue(BreakLocationIterator* break_location_iterator,
|
244
|
+
JavaScriptFrame* frame);
|
245
245
|
static Handle<DebugInfo> GetDebugInfo(Handle<SharedFunctionInfo> shared);
|
246
246
|
static bool HasDebugInfo(Handle<SharedFunctionInfo> shared);
|
247
247
|
|
248
248
|
// Returns whether the operation succeeded.
|
249
|
-
|
249
|
+
bool EnsureDebugInfo(Handle<SharedFunctionInfo> shared);
|
250
250
|
|
251
251
|
// Returns true if the current stub call is patched to call the debugger.
|
252
252
|
static bool IsDebugBreak(Address addr);
|
@@ -266,66 +266,66 @@ class Debug {
|
|
266
266
|
Handle<SharedFunctionInfo> shared);
|
267
267
|
|
268
268
|
// Getter for the debug_context.
|
269
|
-
inline
|
269
|
+
inline Handle<Context> debug_context() { return debug_context_; }
|
270
270
|
|
271
271
|
// Check whether a global object is the debug global object.
|
272
|
-
|
272
|
+
bool IsDebugGlobal(GlobalObject* global);
|
273
273
|
|
274
274
|
// Check whether this frame is just about to return.
|
275
|
-
|
275
|
+
bool IsBreakAtReturn(JavaScriptFrame* frame);
|
276
276
|
|
277
277
|
// Fast check to see if any break points are active.
|
278
|
-
inline
|
278
|
+
inline bool has_break_points() { return has_break_points_; }
|
279
279
|
|
280
|
-
|
281
|
-
|
282
|
-
|
280
|
+
void NewBreak(StackFrame::Id break_frame_id);
|
281
|
+
void SetBreak(StackFrame::Id break_frame_id, int break_id);
|
282
|
+
StackFrame::Id break_frame_id() {
|
283
283
|
return thread_local_.break_frame_id_;
|
284
284
|
}
|
285
|
-
|
285
|
+
int break_id() { return thread_local_.break_id_; }
|
286
286
|
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
287
|
+
bool StepInActive() { return thread_local_.step_into_fp_ != 0; }
|
288
|
+
void HandleStepIn(Handle<JSFunction> function,
|
289
|
+
Handle<Object> holder,
|
290
|
+
Address fp,
|
291
|
+
bool is_constructor);
|
292
|
+
Address step_in_fp() { return thread_local_.step_into_fp_; }
|
293
|
+
Address* step_in_fp_addr() { return &thread_local_.step_into_fp_; }
|
294
294
|
|
295
|
-
|
296
|
-
|
295
|
+
bool StepOutActive() { return thread_local_.step_out_fp_ != 0; }
|
296
|
+
Address step_out_fp() { return thread_local_.step_out_fp_; }
|
297
297
|
|
298
|
-
|
298
|
+
EnterDebugger* debugger_entry() {
|
299
299
|
return thread_local_.debugger_entry_;
|
300
300
|
}
|
301
|
-
|
301
|
+
void set_debugger_entry(EnterDebugger* entry) {
|
302
302
|
thread_local_.debugger_entry_ = entry;
|
303
303
|
}
|
304
304
|
|
305
305
|
// Check whether any of the specified interrupts are pending.
|
306
|
-
|
306
|
+
bool is_interrupt_pending(InterruptFlag what) {
|
307
307
|
return (thread_local_.pending_interrupts_ & what) != 0;
|
308
308
|
}
|
309
309
|
|
310
310
|
// Set specified interrupts as pending.
|
311
|
-
|
311
|
+
void set_interrupts_pending(InterruptFlag what) {
|
312
312
|
thread_local_.pending_interrupts_ |= what;
|
313
313
|
}
|
314
314
|
|
315
315
|
// Clear specified interrupts from pending.
|
316
|
-
|
316
|
+
void clear_interrupt_pending(InterruptFlag what) {
|
317
317
|
thread_local_.pending_interrupts_ &= ~static_cast<int>(what);
|
318
318
|
}
|
319
319
|
|
320
320
|
// Getter and setter for the disable break state.
|
321
|
-
|
322
|
-
|
321
|
+
bool disable_break() { return disable_break_; }
|
322
|
+
void set_disable_break(bool disable_break) {
|
323
323
|
disable_break_ = disable_break;
|
324
324
|
}
|
325
325
|
|
326
326
|
// Getters for the current exception break state.
|
327
|
-
|
328
|
-
|
327
|
+
bool break_on_exception() { return break_on_exception_; }
|
328
|
+
bool break_on_uncaught_exception() {
|
329
329
|
return break_on_uncaught_exception_;
|
330
330
|
}
|
331
331
|
|
@@ -337,34 +337,35 @@ class Debug {
|
|
337
337
|
};
|
338
338
|
|
339
339
|
// Support for setting the address to jump to when returning from break point.
|
340
|
-
|
340
|
+
Address* after_break_target_address() {
|
341
341
|
return reinterpret_cast<Address*>(&thread_local_.after_break_target_);
|
342
342
|
}
|
343
|
-
|
343
|
+
Address* restarter_frame_function_pointer_address() {
|
344
344
|
Object*** address = &thread_local_.restarter_frame_function_pointer_;
|
345
345
|
return reinterpret_cast<Address*>(address);
|
346
346
|
}
|
347
347
|
|
348
348
|
// Support for saving/restoring registers when handling debug break calls.
|
349
|
-
|
349
|
+
Object** register_address(int r) {
|
350
350
|
return ®isters_[r];
|
351
351
|
}
|
352
352
|
|
353
353
|
// Access to the debug break on return code.
|
354
|
-
|
355
|
-
|
354
|
+
Code* debug_break_return() { return debug_break_return_; }
|
355
|
+
Code** debug_break_return_address() {
|
356
356
|
return &debug_break_return_;
|
357
357
|
}
|
358
358
|
|
359
359
|
// Access to the debug break in debug break slot code.
|
360
|
-
|
361
|
-
|
360
|
+
Code* debug_break_slot() { return debug_break_slot_; }
|
361
|
+
Code** debug_break_slot_address() {
|
362
362
|
return &debug_break_slot_;
|
363
363
|
}
|
364
364
|
|
365
365
|
static const int kEstimatedNofDebugInfoEntries = 16;
|
366
366
|
static const int kEstimatedNofBreakPointsInFunction = 16;
|
367
367
|
|
368
|
+
// Passed to MakeWeak.
|
368
369
|
static void HandleWeakDebugInfo(v8::Persistent<v8::Value> obj, void* data);
|
369
370
|
|
370
371
|
friend class Debugger;
|
@@ -372,22 +373,22 @@ class Debug {
|
|
372
373
|
friend void CheckDebuggerUnloaded(bool check_functions); // In test-debug.cc
|
373
374
|
|
374
375
|
// Threading support.
|
375
|
-
|
376
|
-
|
376
|
+
char* ArchiveDebug(char* to);
|
377
|
+
char* RestoreDebug(char* from);
|
377
378
|
static int ArchiveSpacePerThread();
|
378
|
-
|
379
|
+
void FreeThreadResources() { }
|
379
380
|
|
380
381
|
// Mirror cache handling.
|
381
|
-
|
382
|
+
void ClearMirrorCache();
|
382
383
|
|
383
384
|
// Script cache handling.
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
385
|
+
void CreateScriptCache();
|
386
|
+
void DestroyScriptCache();
|
387
|
+
void AddScriptToScriptCache(Handle<Script> script);
|
388
|
+
Handle<FixedArray> GetLoadedScripts();
|
388
389
|
|
389
390
|
// Garbage collection notifications.
|
390
|
-
|
391
|
+
void AfterGarbageCollection();
|
391
392
|
|
392
393
|
// Code generator routines.
|
393
394
|
static void GenerateSlot(MacroAssembler* masm);
|
@@ -424,7 +425,7 @@ class Debug {
|
|
424
425
|
FRAME_DROPPED_IN_DIRECT_CALL
|
425
426
|
};
|
426
427
|
|
427
|
-
|
428
|
+
void FramesHaveBeenDropped(StackFrame::Id new_break_frame_id,
|
428
429
|
FrameDropMode mode,
|
429
430
|
Object** restarter_frame_function_pointer);
|
430
431
|
|
@@ -445,35 +446,38 @@ class Debug {
|
|
445
446
|
static const bool kFrameDropperSupported;
|
446
447
|
|
447
448
|
private:
|
449
|
+
explicit Debug(Isolate* isolate);
|
450
|
+
~Debug();
|
451
|
+
|
448
452
|
static bool CompileDebuggerScript(int index);
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
453
|
+
void ClearOneShot();
|
454
|
+
void ActivateStepIn(StackFrame* frame);
|
455
|
+
void ClearStepIn();
|
456
|
+
void ActivateStepOut(StackFrame* frame);
|
457
|
+
void ClearStepOut();
|
458
|
+
void ClearStepNext();
|
455
459
|
// Returns whether the compile succeeded.
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
+
void RemoveDebugInfo(Handle<DebugInfo> debug_info);
|
461
|
+
void SetAfterBreakTarget(JavaScriptFrame* frame);
|
462
|
+
Handle<Object> CheckBreakPoints(Handle<Object> break_point);
|
463
|
+
bool CheckBreakPoint(Handle<Object> break_point_object);
|
460
464
|
|
461
465
|
// Global handle to debug context where all the debugger JavaScript code is
|
462
466
|
// loaded.
|
463
|
-
|
467
|
+
Handle<Context> debug_context_;
|
464
468
|
|
465
469
|
// Boolean state indicating whether any break points are set.
|
466
|
-
|
470
|
+
bool has_break_points_;
|
467
471
|
|
468
472
|
// Cache of all scripts in the heap.
|
469
|
-
|
473
|
+
ScriptCache* script_cache_;
|
470
474
|
|
471
475
|
// List of active debug info objects.
|
472
|
-
|
476
|
+
DebugInfoListNode* debug_info_list_;
|
473
477
|
|
474
|
-
|
475
|
-
|
476
|
-
|
478
|
+
bool disable_break_;
|
479
|
+
bool break_on_exception_;
|
480
|
+
bool break_on_uncaught_exception_;
|
477
481
|
|
478
482
|
// Per-thread data.
|
479
483
|
class ThreadLocal {
|
@@ -526,20 +530,27 @@ class Debug {
|
|
526
530
|
};
|
527
531
|
|
528
532
|
// Storage location for registers when handling debug break calls
|
529
|
-
|
530
|
-
|
531
|
-
|
533
|
+
JSCallerSavedBuffer registers_;
|
534
|
+
ThreadLocal thread_local_;
|
535
|
+
void ThreadInit();
|
532
536
|
|
533
537
|
// Code to call for handling debug break on return.
|
534
|
-
|
538
|
+
Code* debug_break_return_;
|
535
539
|
|
536
540
|
// Code to call for handling debug break in debug break slots.
|
537
|
-
|
541
|
+
Code* debug_break_slot_;
|
542
|
+
|
543
|
+
Isolate* isolate_;
|
544
|
+
|
545
|
+
friend class Isolate;
|
538
546
|
|
539
547
|
DISALLOW_COPY_AND_ASSIGN(Debug);
|
540
548
|
};
|
541
549
|
|
542
550
|
|
551
|
+
DECLARE_RUNTIME_FUNCTION(Object*, Debug_Break);
|
552
|
+
|
553
|
+
|
543
554
|
// Message delivered to the message handler callback. This is either a debugger
|
544
555
|
// event or the response to a command.
|
545
556
|
class MessageImpl: public v8::Debug::Message {
|
@@ -680,95 +691,97 @@ class LockingCommandMessageQueue BASE_EMBEDDED {
|
|
680
691
|
|
681
692
|
class Debugger {
|
682
693
|
public:
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
|
705
|
-
|
694
|
+
~Debugger();
|
695
|
+
|
696
|
+
void DebugRequest(const uint16_t* json_request, int length);
|
697
|
+
|
698
|
+
Handle<Object> MakeJSObject(Vector<const char> constructor_name,
|
699
|
+
int argc, Object*** argv,
|
700
|
+
bool* caught_exception);
|
701
|
+
Handle<Object> MakeExecutionState(bool* caught_exception);
|
702
|
+
Handle<Object> MakeBreakEvent(Handle<Object> exec_state,
|
703
|
+
Handle<Object> break_points_hit,
|
704
|
+
bool* caught_exception);
|
705
|
+
Handle<Object> MakeExceptionEvent(Handle<Object> exec_state,
|
706
|
+
Handle<Object> exception,
|
707
|
+
bool uncaught,
|
708
|
+
bool* caught_exception);
|
709
|
+
Handle<Object> MakeNewFunctionEvent(Handle<Object> func,
|
710
|
+
bool* caught_exception);
|
711
|
+
Handle<Object> MakeCompileEvent(Handle<Script> script,
|
712
|
+
bool before,
|
713
|
+
bool* caught_exception);
|
714
|
+
Handle<Object> MakeScriptCollectedEvent(int id,
|
715
|
+
bool* caught_exception);
|
716
|
+
void OnDebugBreak(Handle<Object> break_points_hit, bool auto_continue);
|
717
|
+
void OnException(Handle<Object> exception, bool uncaught);
|
718
|
+
void OnBeforeCompile(Handle<Script> script);
|
706
719
|
|
707
720
|
enum AfterCompileFlags {
|
708
721
|
NO_AFTER_COMPILE_FLAGS,
|
709
722
|
SEND_WHEN_DEBUGGING
|
710
723
|
};
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
724
|
+
void OnAfterCompile(Handle<Script> script,
|
725
|
+
AfterCompileFlags after_compile_flags);
|
726
|
+
void OnNewFunction(Handle<JSFunction> fun);
|
727
|
+
void OnScriptCollected(int id);
|
728
|
+
void ProcessDebugEvent(v8::DebugEvent event,
|
729
|
+
Handle<JSObject> event_data,
|
730
|
+
bool auto_continue);
|
731
|
+
void NotifyMessageHandler(v8::DebugEvent event,
|
732
|
+
Handle<JSObject> exec_state,
|
733
|
+
Handle<JSObject> event_data,
|
734
|
+
bool auto_continue);
|
735
|
+
void SetEventListener(Handle<Object> callback, Handle<Object> data);
|
736
|
+
void SetMessageHandler(v8::Debug::MessageHandler2 handler);
|
737
|
+
void SetHostDispatchHandler(v8::Debug::HostDispatchHandler handler,
|
738
|
+
int period);
|
739
|
+
void SetDebugMessageDispatchHandler(
|
727
740
|
v8::Debug::DebugMessageDispatchHandler handler,
|
728
741
|
bool provide_locker);
|
729
742
|
|
730
743
|
// Invoke the message handler function.
|
731
|
-
|
744
|
+
void InvokeMessageHandler(MessageImpl message);
|
732
745
|
|
733
746
|
// Add a debugger command to the command queue.
|
734
|
-
|
735
|
-
|
747
|
+
void ProcessCommand(Vector<const uint16_t> command,
|
748
|
+
v8::Debug::ClientData* client_data = NULL);
|
736
749
|
|
737
750
|
// Check whether there are commands in the command queue.
|
738
|
-
|
751
|
+
bool HasCommands();
|
739
752
|
|
740
753
|
// Enqueue a debugger command to the command queue for event listeners.
|
741
|
-
|
754
|
+
void EnqueueDebugCommand(v8::Debug::ClientData* client_data = NULL);
|
742
755
|
|
743
|
-
|
744
|
-
|
745
|
-
|
756
|
+
Handle<Object> Call(Handle<JSFunction> fun,
|
757
|
+
Handle<Object> data,
|
758
|
+
bool* pending_exception);
|
746
759
|
|
747
760
|
// Start the debugger agent listening on the provided port.
|
748
|
-
|
749
|
-
|
761
|
+
bool StartAgent(const char* name, int port,
|
762
|
+
bool wait_for_connection = false);
|
750
763
|
|
751
764
|
// Stop the debugger agent.
|
752
|
-
|
765
|
+
void StopAgent();
|
753
766
|
|
754
767
|
// Blocks until the agent has started listening for connections
|
755
|
-
|
768
|
+
void WaitForAgent();
|
756
769
|
|
757
|
-
|
770
|
+
void CallMessageDispatchHandler();
|
758
771
|
|
759
|
-
|
772
|
+
Handle<Context> GetDebugContext();
|
760
773
|
|
761
774
|
// Unload the debugger if possible. Only called when no debugger is currently
|
762
775
|
// active.
|
763
|
-
|
776
|
+
void UnloadDebugger();
|
764
777
|
friend void ForceUnloadDebugger(); // In test-debug.cc
|
765
778
|
|
766
|
-
inline
|
779
|
+
inline bool EventActive(v8::DebugEvent event) {
|
767
780
|
ScopedLock with(debugger_access_);
|
768
781
|
|
769
782
|
// Check whether the message handler was been cleared.
|
770
783
|
if (debugger_unload_pending_) {
|
771
|
-
if (
|
784
|
+
if (isolate_->debug()->debugger_entry() == NULL) {
|
772
785
|
UnloadDebugger();
|
773
786
|
}
|
774
787
|
}
|
@@ -786,52 +799,58 @@ class Debugger {
|
|
786
799
|
return !compiling_natives_ && Debugger::IsDebuggerActive();
|
787
800
|
}
|
788
801
|
|
789
|
-
|
802
|
+
void set_compiling_natives(bool compiling_natives) {
|
790
803
|
Debugger::compiling_natives_ = compiling_natives;
|
791
804
|
}
|
792
|
-
|
793
|
-
|
794
|
-
|
805
|
+
bool compiling_natives() const { return compiling_natives_; }
|
806
|
+
void set_loading_debugger(bool v) { is_loading_debugger_ = v; }
|
807
|
+
bool is_loading_debugger() const { return is_loading_debugger_; }
|
795
808
|
|
796
|
-
|
809
|
+
bool IsDebuggerActive();
|
797
810
|
|
798
811
|
private:
|
799
|
-
|
800
|
-
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
807
|
-
|
808
|
-
|
809
|
-
|
810
|
-
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
|
817
|
-
|
818
|
-
|
819
|
-
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
|
812
|
+
Debugger();
|
813
|
+
|
814
|
+
void CallEventCallback(v8::DebugEvent event,
|
815
|
+
Handle<Object> exec_state,
|
816
|
+
Handle<Object> event_data,
|
817
|
+
v8::Debug::ClientData* client_data);
|
818
|
+
void CallCEventCallback(v8::DebugEvent event,
|
819
|
+
Handle<Object> exec_state,
|
820
|
+
Handle<Object> event_data,
|
821
|
+
v8::Debug::ClientData* client_data);
|
822
|
+
void CallJSEventCallback(v8::DebugEvent event,
|
823
|
+
Handle<Object> exec_state,
|
824
|
+
Handle<Object> event_data);
|
825
|
+
void ListenersChanged();
|
826
|
+
|
827
|
+
Mutex* debugger_access_; // Mutex guarding debugger variables.
|
828
|
+
Handle<Object> event_listener_; // Global handle to listener.
|
829
|
+
Handle<Object> event_listener_data_;
|
830
|
+
bool compiling_natives_; // Are we compiling natives?
|
831
|
+
bool is_loading_debugger_; // Are we loading the debugger?
|
832
|
+
bool never_unload_debugger_; // Can we unload the debugger?
|
833
|
+
v8::Debug::MessageHandler2 message_handler_;
|
834
|
+
bool debugger_unload_pending_; // Was message handler cleared?
|
835
|
+
v8::Debug::HostDispatchHandler host_dispatch_handler_;
|
836
|
+
Mutex* dispatch_handler_access_; // Mutex guarding dispatch handler.
|
837
|
+
v8::Debug::DebugMessageDispatchHandler debug_message_dispatch_handler_;
|
838
|
+
MessageDispatchHelperThread* message_dispatch_helper_thread_;
|
839
|
+
int host_dispatch_micros_;
|
840
|
+
|
841
|
+
DebuggerAgent* agent_;
|
827
842
|
|
828
843
|
static const int kQueueInitialSize = 4;
|
829
|
-
|
830
|
-
|
844
|
+
LockingCommandMessageQueue command_queue_;
|
845
|
+
Semaphore* command_received_; // Signaled for each command received.
|
846
|
+
LockingCommandMessageQueue event_command_queue_;
|
831
847
|
|
832
|
-
|
848
|
+
Isolate* isolate_;
|
833
849
|
|
834
850
|
friend class EnterDebugger;
|
851
|
+
friend class Isolate;
|
852
|
+
|
853
|
+
DISALLOW_COPY_AND_ASSIGN(Debugger);
|
835
854
|
};
|
836
855
|
|
837
856
|
|
@@ -842,38 +861,44 @@ class Debugger {
|
|
842
861
|
class EnterDebugger BASE_EMBEDDED {
|
843
862
|
public:
|
844
863
|
EnterDebugger()
|
845
|
-
:
|
846
|
-
|
847
|
-
|
848
|
-
|
864
|
+
: isolate_(Isolate::Current()),
|
865
|
+
prev_(isolate_->debug()->debugger_entry()),
|
866
|
+
has_js_frames_(!it_.done()),
|
867
|
+
save_(isolate_) {
|
868
|
+
Debug* debug = isolate_->debug();
|
869
|
+
ASSERT(prev_ != NULL || !debug->is_interrupt_pending(PREEMPT));
|
870
|
+
ASSERT(prev_ != NULL || !debug->is_interrupt_pending(DEBUGBREAK));
|
849
871
|
|
850
872
|
// Link recursive debugger entry.
|
851
|
-
|
873
|
+
debug->set_debugger_entry(this);
|
852
874
|
|
853
875
|
// Store the previous break id and frame id.
|
854
|
-
break_id_ =
|
855
|
-
break_frame_id_ =
|
876
|
+
break_id_ = debug->break_id();
|
877
|
+
break_frame_id_ = debug->break_frame_id();
|
856
878
|
|
857
879
|
// Create the new break info. If there is no JavaScript frames there is no
|
858
880
|
// break frame id.
|
859
881
|
if (has_js_frames_) {
|
860
|
-
|
882
|
+
debug->NewBreak(it_.frame()->id());
|
861
883
|
} else {
|
862
|
-
|
884
|
+
debug->NewBreak(StackFrame::NO_ID);
|
863
885
|
}
|
864
886
|
|
865
887
|
// Make sure that debugger is loaded and enter the debugger context.
|
866
|
-
load_failed_ = !
|
888
|
+
load_failed_ = !debug->Load();
|
867
889
|
if (!load_failed_) {
|
868
890
|
// NOTE the member variable save which saves the previous context before
|
869
891
|
// this change.
|
870
|
-
|
892
|
+
isolate_->set_context(*debug->debug_context());
|
871
893
|
}
|
872
894
|
}
|
873
895
|
|
874
896
|
~EnterDebugger() {
|
897
|
+
ASSERT(Isolate::Current() == isolate_);
|
898
|
+
Debug* debug = isolate_->debug();
|
899
|
+
|
875
900
|
// Restore to the previous break state.
|
876
|
-
|
901
|
+
debug->SetBreak(break_frame_id_, break_id_);
|
877
902
|
|
878
903
|
// Check for leaving the debugger.
|
879
904
|
if (prev_ == NULL) {
|
@@ -881,43 +906,43 @@ class EnterDebugger BASE_EMBEDDED {
|
|
881
906
|
// pending exception as clearing the mirror cache calls back into
|
882
907
|
// JavaScript. This can happen if the v8::Debug::Call is used in which
|
883
908
|
// case the exception should end up in the calling code.
|
884
|
-
if (!
|
909
|
+
if (!isolate_->has_pending_exception()) {
|
885
910
|
// Try to avoid any pending debug break breaking in the clear mirror
|
886
911
|
// cache JavaScript code.
|
887
|
-
if (
|
888
|
-
|
889
|
-
|
912
|
+
if (isolate_->stack_guard()->IsDebugBreak()) {
|
913
|
+
debug->set_interrupts_pending(DEBUGBREAK);
|
914
|
+
isolate_->stack_guard()->Continue(DEBUGBREAK);
|
890
915
|
}
|
891
|
-
|
916
|
+
debug->ClearMirrorCache();
|
892
917
|
}
|
893
918
|
|
894
919
|
// Request preemption and debug break when leaving the last debugger entry
|
895
920
|
// if any of these where recorded while debugging.
|
896
|
-
if (
|
921
|
+
if (debug->is_interrupt_pending(PREEMPT)) {
|
897
922
|
// This re-scheduling of preemption is to avoid starvation in some
|
898
923
|
// debugging scenarios.
|
899
|
-
|
900
|
-
|
924
|
+
debug->clear_interrupt_pending(PREEMPT);
|
925
|
+
isolate_->stack_guard()->Preempt();
|
901
926
|
}
|
902
|
-
if (
|
903
|
-
|
904
|
-
|
927
|
+
if (debug->is_interrupt_pending(DEBUGBREAK)) {
|
928
|
+
debug->clear_interrupt_pending(DEBUGBREAK);
|
929
|
+
isolate_->stack_guard()->DebugBreak();
|
905
930
|
}
|
906
931
|
|
907
932
|
// If there are commands in the queue when leaving the debugger request
|
908
933
|
// that these commands are processed.
|
909
|
-
if (
|
910
|
-
|
934
|
+
if (isolate_->debugger()->HasCommands()) {
|
935
|
+
isolate_->stack_guard()->DebugCommand();
|
911
936
|
}
|
912
937
|
|
913
938
|
// If leaving the debugger with the debugger no longer active unload it.
|
914
|
-
if (!
|
915
|
-
|
939
|
+
if (!isolate_->debugger()->IsDebuggerActive()) {
|
940
|
+
isolate_->debugger()->UnloadDebugger();
|
916
941
|
}
|
917
942
|
}
|
918
943
|
|
919
944
|
// Leaving this debugger entry.
|
920
|
-
|
945
|
+
debug->set_debugger_entry(prev_);
|
921
946
|
}
|
922
947
|
|
923
948
|
// Check whether the debugger could be entered.
|
@@ -930,6 +955,7 @@ class EnterDebugger BASE_EMBEDDED {
|
|
930
955
|
inline Handle<Context> GetContext() { return save_.context(); }
|
931
956
|
|
932
957
|
private:
|
958
|
+
Isolate* isolate_;
|
933
959
|
EnterDebugger* prev_; // Previous debugger entry if entered recursively.
|
934
960
|
JavaScriptFrameIterator it_;
|
935
961
|
const bool has_js_frames_; // Were there any JavaScript frames?
|
@@ -943,15 +969,17 @@ class EnterDebugger BASE_EMBEDDED {
|
|
943
969
|
// Stack allocated class for disabling break.
|
944
970
|
class DisableBreak BASE_EMBEDDED {
|
945
971
|
public:
|
946
|
-
explicit DisableBreak(bool disable_break)
|
947
|
-
prev_disable_break_ =
|
948
|
-
|
972
|
+
explicit DisableBreak(bool disable_break) : isolate_(Isolate::Current()) {
|
973
|
+
prev_disable_break_ = isolate_->debug()->disable_break();
|
974
|
+
isolate_->debug()->set_disable_break(disable_break);
|
949
975
|
}
|
950
976
|
~DisableBreak() {
|
951
|
-
|
977
|
+
ASSERT(Isolate::Current() == isolate_);
|
978
|
+
isolate_->debug()->set_disable_break(prev_disable_break_);
|
952
979
|
}
|
953
980
|
|
954
981
|
private:
|
982
|
+
Isolate* isolate_;
|
955
983
|
// The previous state of the disable break used to restore the value when this
|
956
984
|
// object is destructed.
|
957
985
|
bool prev_disable_break_;
|
@@ -976,17 +1004,18 @@ class Debug_Address {
|
|
976
1004
|
return Debug_Address(Debug::k_restarter_frame_function_pointer);
|
977
1005
|
}
|
978
1006
|
|
979
|
-
Address address() const {
|
1007
|
+
Address address(Isolate* isolate) const {
|
1008
|
+
Debug* debug = isolate->debug();
|
980
1009
|
switch (id_) {
|
981
1010
|
case Debug::k_after_break_target_address:
|
982
|
-
return reinterpret_cast<Address>(
|
1011
|
+
return reinterpret_cast<Address>(debug->after_break_target_address());
|
983
1012
|
case Debug::k_debug_break_return_address:
|
984
|
-
return reinterpret_cast<Address>(
|
1013
|
+
return reinterpret_cast<Address>(debug->debug_break_return_address());
|
985
1014
|
case Debug::k_debug_break_slot_address:
|
986
|
-
return reinterpret_cast<Address>(
|
1015
|
+
return reinterpret_cast<Address>(debug->debug_break_slot_address());
|
987
1016
|
case Debug::k_restarter_frame_function_pointer:
|
988
1017
|
return reinterpret_cast<Address>(
|
989
|
-
|
1018
|
+
debug->restarter_frame_function_pointer_address());
|
990
1019
|
default:
|
991
1020
|
UNREACHABLE();
|
992
1021
|
return NULL;
|
@@ -1002,7 +1031,7 @@ class Debug_Address {
|
|
1002
1031
|
// to do this via v8::Debug::HostDispatchHandler
|
1003
1032
|
class MessageDispatchHelperThread: public Thread {
|
1004
1033
|
public:
|
1005
|
-
MessageDispatchHelperThread();
|
1034
|
+
explicit MessageDispatchHelperThread(Isolate* isolate);
|
1006
1035
|
~MessageDispatchHelperThread();
|
1007
1036
|
|
1008
1037
|
void Schedule();
|