libv8 3.11.8.17 → 3.16.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -2
- data/Gemfile +1 -1
- data/Rakefile +6 -7
- data/lib/libv8/version.rb +1 -1
- data/vendor/v8/.gitignore +24 -3
- data/vendor/v8/AUTHORS +7 -0
- data/vendor/v8/ChangeLog +839 -0
- data/vendor/v8/DEPS +1 -1
- data/vendor/v8/Makefile.android +92 -0
- data/vendor/v8/OWNERS +11 -0
- data/vendor/v8/PRESUBMIT.py +71 -0
- data/vendor/v8/SConstruct +34 -39
- data/vendor/v8/build/android.gypi +56 -37
- data/vendor/v8/build/common.gypi +112 -30
- data/vendor/v8/build/gyp_v8 +1 -1
- data/vendor/v8/build/standalone.gypi +15 -11
- data/vendor/v8/include/v8-debug.h +9 -1
- data/vendor/v8/include/v8-preparser.h +4 -3
- data/vendor/v8/include/v8-profiler.h +25 -25
- data/vendor/v8/include/v8-testing.h +4 -3
- data/vendor/v8/include/v8.h +994 -540
- data/vendor/v8/preparser/preparser-process.cc +3 -3
- data/vendor/v8/samples/lineprocessor.cc +20 -27
- data/vendor/v8/samples/process.cc +18 -14
- data/vendor/v8/samples/shell.cc +16 -15
- data/vendor/v8/src/SConscript +15 -14
- data/vendor/v8/src/accessors.cc +169 -77
- data/vendor/v8/src/accessors.h +4 -0
- data/vendor/v8/src/allocation-inl.h +2 -2
- data/vendor/v8/src/allocation.h +7 -7
- data/vendor/v8/src/api.cc +810 -497
- data/vendor/v8/src/api.h +85 -60
- data/vendor/v8/src/arm/assembler-arm-inl.h +179 -22
- data/vendor/v8/src/arm/assembler-arm.cc +633 -264
- data/vendor/v8/src/arm/assembler-arm.h +264 -197
- data/vendor/v8/src/arm/builtins-arm.cc +117 -27
- data/vendor/v8/src/arm/code-stubs-arm.cc +1241 -700
- data/vendor/v8/src/arm/code-stubs-arm.h +35 -138
- data/vendor/v8/src/arm/codegen-arm.cc +285 -16
- data/vendor/v8/src/arm/codegen-arm.h +22 -0
- data/vendor/v8/src/arm/constants-arm.cc +5 -3
- data/vendor/v8/src/arm/constants-arm.h +24 -11
- data/vendor/v8/src/arm/debug-arm.cc +3 -3
- data/vendor/v8/src/arm/deoptimizer-arm.cc +382 -92
- data/vendor/v8/src/arm/disasm-arm.cc +61 -12
- data/vendor/v8/src/arm/frames-arm.h +0 -14
- data/vendor/v8/src/arm/full-codegen-arm.cc +332 -304
- data/vendor/v8/src/arm/ic-arm.cc +180 -259
- data/vendor/v8/src/arm/lithium-arm.cc +364 -316
- data/vendor/v8/src/arm/lithium-arm.h +512 -275
- data/vendor/v8/src/arm/lithium-codegen-arm.cc +1768 -809
- data/vendor/v8/src/arm/lithium-codegen-arm.h +97 -35
- data/vendor/v8/src/arm/lithium-gap-resolver-arm.cc +12 -5
- data/vendor/v8/src/arm/macro-assembler-arm.cc +439 -228
- data/vendor/v8/src/arm/macro-assembler-arm.h +116 -70
- data/vendor/v8/src/arm/regexp-macro-assembler-arm.cc +54 -44
- data/vendor/v8/src/arm/regexp-macro-assembler-arm.h +3 -10
- data/vendor/v8/src/arm/simulator-arm.cc +272 -238
- data/vendor/v8/src/arm/simulator-arm.h +38 -8
- data/vendor/v8/src/arm/stub-cache-arm.cc +522 -895
- data/vendor/v8/src/array.js +101 -70
- data/vendor/v8/src/assembler.cc +270 -19
- data/vendor/v8/src/assembler.h +110 -15
- data/vendor/v8/src/ast.cc +79 -69
- data/vendor/v8/src/ast.h +255 -301
- data/vendor/v8/src/atomicops.h +7 -1
- data/vendor/v8/src/atomicops_internals_tsan.h +335 -0
- data/vendor/v8/src/bootstrapper.cc +481 -418
- data/vendor/v8/src/bootstrapper.h +4 -4
- data/vendor/v8/src/builtins.cc +498 -311
- data/vendor/v8/src/builtins.h +75 -47
- data/vendor/v8/src/checks.cc +2 -1
- data/vendor/v8/src/checks.h +8 -0
- data/vendor/v8/src/code-stubs-hydrogen.cc +253 -0
- data/vendor/v8/src/code-stubs.cc +249 -84
- data/vendor/v8/src/code-stubs.h +501 -169
- data/vendor/v8/src/codegen.cc +36 -18
- data/vendor/v8/src/codegen.h +25 -3
- data/vendor/v8/src/collection.js +54 -17
- data/vendor/v8/src/compilation-cache.cc +24 -16
- data/vendor/v8/src/compilation-cache.h +15 -6
- data/vendor/v8/src/compiler.cc +497 -195
- data/vendor/v8/src/compiler.h +246 -38
- data/vendor/v8/src/contexts.cc +64 -24
- data/vendor/v8/src/contexts.h +60 -29
- data/vendor/v8/src/conversions-inl.h +24 -14
- data/vendor/v8/src/conversions.h +7 -4
- data/vendor/v8/src/counters.cc +21 -12
- data/vendor/v8/src/counters.h +44 -16
- data/vendor/v8/src/cpu-profiler.h +1 -1
- data/vendor/v8/src/d8-debug.cc +2 -2
- data/vendor/v8/src/d8-readline.cc +13 -2
- data/vendor/v8/src/d8.cc +681 -273
- data/vendor/v8/src/d8.gyp +4 -4
- data/vendor/v8/src/d8.h +38 -18
- data/vendor/v8/src/d8.js +0 -617
- data/vendor/v8/src/data-flow.h +55 -0
- data/vendor/v8/src/date.js +1 -42
- data/vendor/v8/src/dateparser-inl.h +5 -1
- data/vendor/v8/src/debug-agent.cc +10 -15
- data/vendor/v8/src/debug-debugger.js +147 -149
- data/vendor/v8/src/debug.cc +323 -164
- data/vendor/v8/src/debug.h +26 -14
- data/vendor/v8/src/deoptimizer.cc +765 -290
- data/vendor/v8/src/deoptimizer.h +130 -28
- data/vendor/v8/src/disassembler.cc +10 -4
- data/vendor/v8/src/elements-kind.cc +7 -2
- data/vendor/v8/src/elements-kind.h +19 -0
- data/vendor/v8/src/elements.cc +607 -285
- data/vendor/v8/src/elements.h +36 -13
- data/vendor/v8/src/execution.cc +52 -31
- data/vendor/v8/src/execution.h +4 -4
- data/vendor/v8/src/extensions/externalize-string-extension.cc +5 -4
- data/vendor/v8/src/extensions/gc-extension.cc +5 -1
- data/vendor/v8/src/extensions/statistics-extension.cc +153 -0
- data/vendor/v8/src/{inspector.h → extensions/statistics-extension.h} +12 -23
- data/vendor/v8/src/factory.cc +101 -134
- data/vendor/v8/src/factory.h +36 -31
- data/vendor/v8/src/flag-definitions.h +102 -25
- data/vendor/v8/src/flags.cc +9 -5
- data/vendor/v8/src/frames-inl.h +10 -0
- data/vendor/v8/src/frames.cc +116 -26
- data/vendor/v8/src/frames.h +96 -12
- data/vendor/v8/src/full-codegen.cc +219 -74
- data/vendor/v8/src/full-codegen.h +63 -21
- data/vendor/v8/src/func-name-inferrer.cc +8 -7
- data/vendor/v8/src/func-name-inferrer.h +5 -3
- data/vendor/v8/src/gdb-jit.cc +71 -57
- data/vendor/v8/src/global-handles.cc +230 -101
- data/vendor/v8/src/global-handles.h +26 -27
- data/vendor/v8/src/globals.h +17 -19
- data/vendor/v8/src/handles-inl.h +59 -12
- data/vendor/v8/src/handles.cc +180 -200
- data/vendor/v8/src/handles.h +80 -11
- data/vendor/v8/src/hashmap.h +60 -40
- data/vendor/v8/src/heap-inl.h +107 -45
- data/vendor/v8/src/heap-profiler.cc +38 -19
- data/vendor/v8/src/heap-profiler.h +24 -14
- data/vendor/v8/src/heap.cc +1123 -738
- data/vendor/v8/src/heap.h +385 -146
- data/vendor/v8/src/hydrogen-instructions.cc +700 -217
- data/vendor/v8/src/hydrogen-instructions.h +1158 -472
- data/vendor/v8/src/hydrogen.cc +3319 -1662
- data/vendor/v8/src/hydrogen.h +411 -170
- data/vendor/v8/src/ia32/assembler-ia32-inl.h +46 -16
- data/vendor/v8/src/ia32/assembler-ia32.cc +131 -61
- data/vendor/v8/src/ia32/assembler-ia32.h +115 -57
- data/vendor/v8/src/ia32/builtins-ia32.cc +99 -5
- data/vendor/v8/src/ia32/code-stubs-ia32.cc +787 -495
- data/vendor/v8/src/ia32/code-stubs-ia32.h +10 -100
- data/vendor/v8/src/ia32/codegen-ia32.cc +227 -23
- data/vendor/v8/src/ia32/codegen-ia32.h +14 -0
- data/vendor/v8/src/ia32/deoptimizer-ia32.cc +428 -87
- data/vendor/v8/src/ia32/disasm-ia32.cc +28 -1
- data/vendor/v8/src/ia32/frames-ia32.h +6 -16
- data/vendor/v8/src/ia32/full-codegen-ia32.cc +280 -272
- data/vendor/v8/src/ia32/ic-ia32.cc +150 -250
- data/vendor/v8/src/ia32/lithium-codegen-ia32.cc +1600 -517
- data/vendor/v8/src/ia32/lithium-codegen-ia32.h +90 -24
- data/vendor/v8/src/ia32/lithium-gap-resolver-ia32.cc +10 -6
- data/vendor/v8/src/ia32/lithium-gap-resolver-ia32.h +2 -2
- data/vendor/v8/src/ia32/lithium-ia32.cc +405 -302
- data/vendor/v8/src/ia32/lithium-ia32.h +526 -271
- data/vendor/v8/src/ia32/macro-assembler-ia32.cc +378 -119
- data/vendor/v8/src/ia32/macro-assembler-ia32.h +62 -28
- data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.cc +43 -30
- data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.h +2 -10
- data/vendor/v8/src/ia32/stub-cache-ia32.cc +492 -678
- data/vendor/v8/src/ic-inl.h +9 -4
- data/vendor/v8/src/ic.cc +836 -923
- data/vendor/v8/src/ic.h +228 -247
- data/vendor/v8/src/incremental-marking-inl.h +26 -30
- data/vendor/v8/src/incremental-marking.cc +276 -248
- data/vendor/v8/src/incremental-marking.h +29 -37
- data/vendor/v8/src/interface.cc +34 -25
- data/vendor/v8/src/interface.h +69 -25
- data/vendor/v8/src/interpreter-irregexp.cc +2 -2
- data/vendor/v8/src/isolate.cc +382 -76
- data/vendor/v8/src/isolate.h +109 -56
- data/vendor/v8/src/json-parser.h +217 -104
- data/vendor/v8/src/json-stringifier.h +745 -0
- data/vendor/v8/src/json.js +10 -132
- data/vendor/v8/src/jsregexp-inl.h +106 -0
- data/vendor/v8/src/jsregexp.cc +517 -285
- data/vendor/v8/src/jsregexp.h +145 -117
- data/vendor/v8/src/list-inl.h +35 -22
- data/vendor/v8/src/list.h +46 -19
- data/vendor/v8/src/lithium-allocator-inl.h +22 -2
- data/vendor/v8/src/lithium-allocator.cc +85 -70
- data/vendor/v8/src/lithium-allocator.h +21 -39
- data/vendor/v8/src/lithium.cc +259 -5
- data/vendor/v8/src/lithium.h +131 -32
- data/vendor/v8/src/liveedit-debugger.js +52 -3
- data/vendor/v8/src/liveedit.cc +393 -113
- data/vendor/v8/src/liveedit.h +7 -3
- data/vendor/v8/src/log-utils.cc +4 -2
- data/vendor/v8/src/log.cc +170 -140
- data/vendor/v8/src/log.h +62 -11
- data/vendor/v8/src/macro-assembler.h +17 -0
- data/vendor/v8/src/macros.py +2 -0
- data/vendor/v8/src/mark-compact-inl.h +3 -23
- data/vendor/v8/src/mark-compact.cc +801 -830
- data/vendor/v8/src/mark-compact.h +154 -47
- data/vendor/v8/src/marking-thread.cc +85 -0
- data/vendor/v8/src/{inspector.cc → marking-thread.h} +32 -24
- data/vendor/v8/src/math.js +12 -18
- data/vendor/v8/src/messages.cc +18 -8
- data/vendor/v8/src/messages.js +314 -261
- data/vendor/v8/src/mips/assembler-mips-inl.h +58 -6
- data/vendor/v8/src/mips/assembler-mips.cc +92 -75
- data/vendor/v8/src/mips/assembler-mips.h +54 -60
- data/vendor/v8/src/mips/builtins-mips.cc +116 -17
- data/vendor/v8/src/mips/code-stubs-mips.cc +919 -556
- data/vendor/v8/src/mips/code-stubs-mips.h +22 -131
- data/vendor/v8/src/mips/codegen-mips.cc +281 -6
- data/vendor/v8/src/mips/codegen-mips.h +22 -0
- data/vendor/v8/src/mips/constants-mips.cc +2 -0
- data/vendor/v8/src/mips/constants-mips.h +12 -2
- data/vendor/v8/src/mips/deoptimizer-mips.cc +286 -50
- data/vendor/v8/src/mips/disasm-mips.cc +13 -0
- data/vendor/v8/src/mips/full-codegen-mips.cc +297 -284
- data/vendor/v8/src/mips/ic-mips.cc +182 -263
- data/vendor/v8/src/mips/lithium-codegen-mips.cc +1208 -556
- data/vendor/v8/src/mips/lithium-codegen-mips.h +72 -19
- data/vendor/v8/src/mips/lithium-gap-resolver-mips.cc +9 -2
- data/vendor/v8/src/mips/lithium-mips.cc +290 -302
- data/vendor/v8/src/mips/lithium-mips.h +463 -266
- data/vendor/v8/src/mips/macro-assembler-mips.cc +208 -115
- data/vendor/v8/src/mips/macro-assembler-mips.h +67 -24
- data/vendor/v8/src/mips/regexp-macro-assembler-mips.cc +40 -25
- data/vendor/v8/src/mips/regexp-macro-assembler-mips.h +3 -9
- data/vendor/v8/src/mips/simulator-mips.cc +112 -40
- data/vendor/v8/src/mips/simulator-mips.h +5 -0
- data/vendor/v8/src/mips/stub-cache-mips.cc +502 -884
- data/vendor/v8/src/mirror-debugger.js +157 -30
- data/vendor/v8/src/mksnapshot.cc +88 -14
- data/vendor/v8/src/object-observe.js +235 -0
- data/vendor/v8/src/objects-debug.cc +178 -176
- data/vendor/v8/src/objects-inl.h +1333 -486
- data/vendor/v8/src/objects-printer.cc +125 -43
- data/vendor/v8/src/objects-visiting-inl.h +578 -6
- data/vendor/v8/src/objects-visiting.cc +2 -2
- data/vendor/v8/src/objects-visiting.h +172 -79
- data/vendor/v8/src/objects.cc +3533 -2885
- data/vendor/v8/src/objects.h +1352 -1131
- data/vendor/v8/src/optimizing-compiler-thread.cc +152 -0
- data/vendor/v8/src/optimizing-compiler-thread.h +111 -0
- data/vendor/v8/src/parser.cc +390 -500
- data/vendor/v8/src/parser.h +45 -33
- data/vendor/v8/src/platform-cygwin.cc +10 -21
- data/vendor/v8/src/platform-freebsd.cc +36 -41
- data/vendor/v8/src/platform-linux.cc +160 -124
- data/vendor/v8/src/platform-macos.cc +30 -27
- data/vendor/v8/src/platform-nullos.cc +17 -1
- data/vendor/v8/src/platform-openbsd.cc +19 -50
- data/vendor/v8/src/platform-posix.cc +14 -0
- data/vendor/v8/src/platform-solaris.cc +20 -53
- data/vendor/v8/src/platform-win32.cc +49 -26
- data/vendor/v8/src/platform.h +40 -1
- data/vendor/v8/src/preparser.cc +8 -5
- data/vendor/v8/src/preparser.h +2 -2
- data/vendor/v8/src/prettyprinter.cc +16 -0
- data/vendor/v8/src/prettyprinter.h +2 -0
- data/vendor/v8/src/profile-generator-inl.h +1 -0
- data/vendor/v8/src/profile-generator.cc +209 -147
- data/vendor/v8/src/profile-generator.h +15 -12
- data/vendor/v8/src/property-details.h +46 -31
- data/vendor/v8/src/property.cc +27 -46
- data/vendor/v8/src/property.h +163 -83
- data/vendor/v8/src/proxy.js +7 -2
- data/vendor/v8/src/regexp-macro-assembler-irregexp.cc +4 -13
- data/vendor/v8/src/regexp-macro-assembler-irregexp.h +1 -2
- data/vendor/v8/src/regexp-macro-assembler-tracer.cc +1 -11
- data/vendor/v8/src/regexp-macro-assembler-tracer.h +0 -1
- data/vendor/v8/src/regexp-macro-assembler.cc +31 -14
- data/vendor/v8/src/regexp-macro-assembler.h +14 -11
- data/vendor/v8/src/regexp-stack.cc +1 -0
- data/vendor/v8/src/regexp.js +9 -8
- data/vendor/v8/src/rewriter.cc +18 -7
- data/vendor/v8/src/runtime-profiler.cc +52 -43
- data/vendor/v8/src/runtime-profiler.h +0 -25
- data/vendor/v8/src/runtime.cc +2006 -2023
- data/vendor/v8/src/runtime.h +56 -49
- data/vendor/v8/src/safepoint-table.cc +12 -18
- data/vendor/v8/src/safepoint-table.h +11 -8
- data/vendor/v8/src/scanner.cc +1 -0
- data/vendor/v8/src/scanner.h +4 -10
- data/vendor/v8/src/scopeinfo.cc +35 -9
- data/vendor/v8/src/scopeinfo.h +64 -3
- data/vendor/v8/src/scopes.cc +251 -156
- data/vendor/v8/src/scopes.h +61 -27
- data/vendor/v8/src/serialize.cc +348 -396
- data/vendor/v8/src/serialize.h +125 -114
- data/vendor/v8/src/small-pointer-list.h +11 -11
- data/vendor/v8/src/{smart-array-pointer.h → smart-pointers.h} +64 -15
- data/vendor/v8/src/snapshot-common.cc +64 -15
- data/vendor/v8/src/snapshot-empty.cc +7 -1
- data/vendor/v8/src/snapshot.h +9 -2
- data/vendor/v8/src/spaces-inl.h +17 -0
- data/vendor/v8/src/spaces.cc +477 -183
- data/vendor/v8/src/spaces.h +238 -58
- data/vendor/v8/src/splay-tree-inl.h +8 -7
- data/vendor/v8/src/splay-tree.h +24 -10
- data/vendor/v8/src/store-buffer.cc +12 -5
- data/vendor/v8/src/store-buffer.h +2 -4
- data/vendor/v8/src/string-search.h +22 -6
- data/vendor/v8/src/string-stream.cc +11 -8
- data/vendor/v8/src/string.js +47 -15
- data/vendor/v8/src/stub-cache.cc +461 -224
- data/vendor/v8/src/stub-cache.h +164 -102
- data/vendor/v8/src/sweeper-thread.cc +105 -0
- data/vendor/v8/src/sweeper-thread.h +81 -0
- data/vendor/v8/src/token.h +1 -0
- data/vendor/v8/src/transitions-inl.h +220 -0
- data/vendor/v8/src/transitions.cc +160 -0
- data/vendor/v8/src/transitions.h +207 -0
- data/vendor/v8/src/type-info.cc +182 -181
- data/vendor/v8/src/type-info.h +31 -19
- data/vendor/v8/src/unicode-inl.h +62 -106
- data/vendor/v8/src/unicode.cc +57 -67
- data/vendor/v8/src/unicode.h +45 -91
- data/vendor/v8/src/uri.js +57 -29
- data/vendor/v8/src/utils.h +105 -5
- data/vendor/v8/src/v8-counters.cc +54 -11
- data/vendor/v8/src/v8-counters.h +134 -19
- data/vendor/v8/src/v8.cc +29 -29
- data/vendor/v8/src/v8.h +1 -0
- data/vendor/v8/src/v8conversions.cc +26 -22
- data/vendor/v8/src/v8globals.h +56 -43
- data/vendor/v8/src/v8natives.js +83 -30
- data/vendor/v8/src/v8threads.cc +42 -21
- data/vendor/v8/src/v8threads.h +4 -1
- data/vendor/v8/src/v8utils.cc +9 -93
- data/vendor/v8/src/v8utils.h +37 -33
- data/vendor/v8/src/variables.cc +6 -3
- data/vendor/v8/src/variables.h +6 -13
- data/vendor/v8/src/version.cc +2 -2
- data/vendor/v8/src/vm-state-inl.h +11 -0
- data/vendor/v8/src/x64/assembler-x64-inl.h +39 -8
- data/vendor/v8/src/x64/assembler-x64.cc +78 -64
- data/vendor/v8/src/x64/assembler-x64.h +38 -33
- data/vendor/v8/src/x64/builtins-x64.cc +105 -7
- data/vendor/v8/src/x64/code-stubs-x64.cc +790 -413
- data/vendor/v8/src/x64/code-stubs-x64.h +10 -106
- data/vendor/v8/src/x64/codegen-x64.cc +210 -8
- data/vendor/v8/src/x64/codegen-x64.h +20 -1
- data/vendor/v8/src/x64/deoptimizer-x64.cc +336 -75
- data/vendor/v8/src/x64/disasm-x64.cc +15 -0
- data/vendor/v8/src/x64/frames-x64.h +0 -14
- data/vendor/v8/src/x64/full-codegen-x64.cc +293 -270
- data/vendor/v8/src/x64/ic-x64.cc +153 -251
- data/vendor/v8/src/x64/lithium-codegen-x64.cc +1379 -531
- data/vendor/v8/src/x64/lithium-codegen-x64.h +67 -23
- data/vendor/v8/src/x64/lithium-gap-resolver-x64.cc +2 -2
- data/vendor/v8/src/x64/lithium-x64.cc +349 -289
- data/vendor/v8/src/x64/lithium-x64.h +460 -250
- data/vendor/v8/src/x64/macro-assembler-x64.cc +350 -177
- data/vendor/v8/src/x64/macro-assembler-x64.h +67 -49
- data/vendor/v8/src/x64/regexp-macro-assembler-x64.cc +46 -33
- data/vendor/v8/src/x64/regexp-macro-assembler-x64.h +2 -3
- data/vendor/v8/src/x64/stub-cache-x64.cc +484 -653
- data/vendor/v8/src/zone-inl.h +9 -27
- data/vendor/v8/src/zone.cc +5 -5
- data/vendor/v8/src/zone.h +53 -27
- data/vendor/v8/test/benchmarks/testcfg.py +5 -0
- data/vendor/v8/test/cctest/cctest.cc +4 -0
- data/vendor/v8/test/cctest/cctest.gyp +3 -1
- data/vendor/v8/test/cctest/cctest.h +57 -9
- data/vendor/v8/test/cctest/cctest.status +15 -15
- data/vendor/v8/test/cctest/test-accessors.cc +26 -0
- data/vendor/v8/test/cctest/test-alloc.cc +22 -30
- data/vendor/v8/test/cctest/test-api.cc +1943 -314
- data/vendor/v8/test/cctest/test-assembler-arm.cc +133 -13
- data/vendor/v8/test/cctest/test-assembler-ia32.cc +1 -1
- data/vendor/v8/test/cctest/test-assembler-mips.cc +12 -0
- data/vendor/v8/test/cctest/test-ast.cc +4 -2
- data/vendor/v8/test/cctest/test-compiler.cc +61 -29
- data/vendor/v8/test/cctest/test-dataflow.cc +2 -2
- data/vendor/v8/test/cctest/test-debug.cc +212 -33
- data/vendor/v8/test/cctest/test-decls.cc +257 -11
- data/vendor/v8/test/cctest/test-dictionary.cc +24 -10
- data/vendor/v8/test/cctest/test-disasm-arm.cc +118 -1
- data/vendor/v8/test/cctest/test-disasm-ia32.cc +3 -2
- data/vendor/v8/test/cctest/test-flags.cc +14 -1
- data/vendor/v8/test/cctest/test-func-name-inference.cc +7 -4
- data/vendor/v8/test/cctest/test-global-object.cc +51 -0
- data/vendor/v8/test/cctest/test-hashing.cc +32 -23
- data/vendor/v8/test/cctest/test-heap-profiler.cc +131 -77
- data/vendor/v8/test/cctest/test-heap.cc +1084 -143
- data/vendor/v8/test/cctest/test-list.cc +1 -1
- data/vendor/v8/test/cctest/test-liveedit.cc +3 -2
- data/vendor/v8/test/cctest/test-lockers.cc +12 -13
- data/vendor/v8/test/cctest/test-log.cc +10 -8
- data/vendor/v8/test/cctest/test-macro-assembler-x64.cc +2 -2
- data/vendor/v8/test/cctest/test-mark-compact.cc +44 -22
- data/vendor/v8/test/cctest/test-object-observe.cc +434 -0
- data/vendor/v8/test/cctest/test-parsing.cc +86 -39
- data/vendor/v8/test/cctest/test-platform-linux.cc +6 -0
- data/vendor/v8/test/cctest/test-platform-win32.cc +7 -0
- data/vendor/v8/test/cctest/test-random.cc +5 -4
- data/vendor/v8/test/cctest/test-regexp.cc +137 -101
- data/vendor/v8/test/cctest/test-serialize.cc +150 -230
- data/vendor/v8/test/cctest/test-sockets.cc +1 -1
- data/vendor/v8/test/cctest/test-spaces.cc +139 -0
- data/vendor/v8/test/cctest/test-strings.cc +736 -74
- data/vendor/v8/test/cctest/test-thread-termination.cc +10 -11
- data/vendor/v8/test/cctest/test-threads.cc +4 -4
- data/vendor/v8/test/cctest/test-utils.cc +16 -0
- data/vendor/v8/test/cctest/test-weakmaps.cc +7 -3
- data/vendor/v8/test/cctest/testcfg.py +64 -5
- data/vendor/v8/test/es5conform/testcfg.py +5 -0
- data/vendor/v8/test/message/message.status +1 -1
- data/vendor/v8/test/message/overwritten-builtins.out +3 -0
- data/vendor/v8/test/message/testcfg.py +89 -8
- data/vendor/v8/test/message/try-catch-finally-no-message.out +26 -26
- data/vendor/v8/test/mjsunit/accessor-map-sharing.js +18 -2
- data/vendor/v8/test/mjsunit/allocation-site-info.js +126 -0
- data/vendor/v8/test/mjsunit/array-bounds-check-removal.js +62 -1
- data/vendor/v8/test/mjsunit/array-iteration.js +1 -1
- data/vendor/v8/test/mjsunit/array-literal-transitions.js +2 -0
- data/vendor/v8/test/mjsunit/array-natives-elements.js +317 -0
- data/vendor/v8/test/mjsunit/array-reduce.js +8 -8
- data/vendor/v8/test/mjsunit/array-slice.js +12 -0
- data/vendor/v8/test/mjsunit/array-store-and-grow.js +4 -1
- data/vendor/v8/test/mjsunit/assert-opt-and-deopt.js +1 -1
- data/vendor/v8/test/mjsunit/bugs/bug-2337.js +53 -0
- data/vendor/v8/test/mjsunit/compare-known-objects-slow.js +69 -0
- data/vendor/v8/test/mjsunit/compiler/alloc-object-huge.js +3 -1
- data/vendor/v8/test/mjsunit/compiler/inline-accessors.js +368 -0
- data/vendor/v8/test/mjsunit/compiler/inline-arguments.js +87 -1
- data/vendor/v8/test/mjsunit/compiler/inline-closures.js +49 -0
- data/vendor/v8/test/mjsunit/compiler/inline-construct.js +55 -43
- data/vendor/v8/test/mjsunit/compiler/inline-literals.js +39 -0
- data/vendor/v8/test/mjsunit/compiler/multiply-add.js +69 -0
- data/vendor/v8/test/mjsunit/compiler/optimized-closures.js +57 -0
- data/vendor/v8/test/mjsunit/compiler/parallel-proto-change.js +44 -0
- data/vendor/v8/test/mjsunit/compiler/property-static.js +69 -0
- data/vendor/v8/test/mjsunit/compiler/proto-chain-constant.js +55 -0
- data/vendor/v8/test/mjsunit/compiler/proto-chain-load.js +44 -0
- data/vendor/v8/test/mjsunit/compiler/regress-gvn.js +3 -2
- data/vendor/v8/test/mjsunit/compiler/regress-or.js +6 -2
- data/vendor/v8/test/mjsunit/compiler/rotate.js +224 -0
- data/vendor/v8/test/mjsunit/compiler/uint32.js +173 -0
- data/vendor/v8/test/mjsunit/count-based-osr.js +2 -1
- data/vendor/v8/test/mjsunit/d8-os.js +3 -3
- data/vendor/v8/test/mjsunit/date-parse.js +3 -0
- data/vendor/v8/test/mjsunit/date.js +22 -0
- data/vendor/v8/test/mjsunit/debug-break-inline.js +1 -0
- data/vendor/v8/test/mjsunit/debug-evaluate-locals-optimized-double.js +22 -12
- data/vendor/v8/test/mjsunit/debug-evaluate-locals-optimized.js +21 -10
- data/vendor/v8/test/mjsunit/debug-liveedit-compile-error.js +60 -0
- data/vendor/v8/test/mjsunit/debug-liveedit-double-call.js +142 -0
- data/vendor/v8/test/mjsunit/debug-liveedit-literals.js +94 -0
- data/vendor/v8/test/mjsunit/debug-liveedit-restart-frame.js +153 -0
- data/vendor/v8/test/mjsunit/debug-multiple-breakpoints.js +1 -1
- data/vendor/v8/test/mjsunit/debug-script-breakpoints-closure.js +67 -0
- data/vendor/v8/test/mjsunit/debug-script-breakpoints-nested.js +82 -0
- data/vendor/v8/test/mjsunit/debug-script.js +4 -2
- data/vendor/v8/test/mjsunit/debug-set-variable-value.js +308 -0
- data/vendor/v8/test/mjsunit/debug-stepout-scope-part1.js +190 -0
- data/vendor/v8/test/mjsunit/debug-stepout-scope-part2.js +83 -0
- data/vendor/v8/test/mjsunit/debug-stepout-scope-part3.js +80 -0
- data/vendor/v8/test/mjsunit/debug-stepout-scope-part4.js +80 -0
- data/vendor/v8/test/mjsunit/debug-stepout-scope-part5.js +77 -0
- data/vendor/v8/test/mjsunit/debug-stepout-scope-part6.js +79 -0
- data/vendor/v8/test/mjsunit/debug-stepout-scope-part7.js +79 -0
- data/vendor/v8/test/mjsunit/{debug-stepout-scope.js → debug-stepout-scope-part8.js} +0 -189
- data/vendor/v8/test/mjsunit/delete-non-configurable.js +74 -0
- data/vendor/v8/test/mjsunit/deopt-minus-zero.js +56 -0
- data/vendor/v8/test/mjsunit/elements-kind.js +6 -4
- data/vendor/v8/test/mjsunit/elements-length-no-holey.js +33 -0
- data/vendor/v8/test/mjsunit/elements-transition-hoisting.js +46 -19
- data/vendor/v8/test/mjsunit/error-accessors.js +54 -0
- data/vendor/v8/test/mjsunit/error-constructors.js +1 -14
- data/vendor/v8/test/mjsunit/error-tostring.js +8 -0
- data/vendor/v8/test/mjsunit/eval-stack-trace.js +204 -0
- data/vendor/v8/test/mjsunit/external-array.js +364 -1
- data/vendor/v8/test/mjsunit/fast-array-length.js +37 -0
- data/vendor/v8/test/mjsunit/fast-non-keyed.js +113 -0
- data/vendor/v8/test/mjsunit/fast-prototype.js +117 -0
- data/vendor/v8/test/mjsunit/function-call.js +14 -18
- data/vendor/v8/test/mjsunit/fuzz-natives-part1.js +230 -0
- data/vendor/v8/test/mjsunit/fuzz-natives-part2.js +229 -0
- data/vendor/v8/test/mjsunit/fuzz-natives-part3.js +229 -0
- data/vendor/v8/test/mjsunit/{fuzz-natives.js → fuzz-natives-part4.js} +12 -2
- data/vendor/v8/test/mjsunit/generated-transition-stub.js +218 -0
- data/vendor/v8/test/mjsunit/greedy.js +1 -1
- data/vendor/v8/test/mjsunit/harmony/block-conflicts.js +2 -1
- data/vendor/v8/test/mjsunit/harmony/block-let-crankshaft.js +1 -1
- data/vendor/v8/test/mjsunit/harmony/collections.js +69 -11
- data/vendor/v8/test/mjsunit/harmony/debug-blockscopes.js +2 -2
- data/vendor/v8/test/mjsunit/harmony/module-linking.js +180 -3
- data/vendor/v8/test/mjsunit/harmony/module-parsing.js +31 -0
- data/vendor/v8/test/mjsunit/harmony/module-recompile.js +87 -0
- data/vendor/v8/test/mjsunit/harmony/module-resolution.js +15 -2
- data/vendor/v8/test/mjsunit/harmony/object-observe.js +1056 -0
- data/vendor/v8/test/mjsunit/harmony/proxies-json.js +178 -0
- data/vendor/v8/test/mjsunit/harmony/proxies.js +25 -10
- data/vendor/v8/test/mjsunit/json-parser-recursive.js +33 -0
- data/vendor/v8/test/mjsunit/json-stringify-recursive.js +52 -0
- data/vendor/v8/test/mjsunit/json.js +38 -2
- data/vendor/v8/test/mjsunit/json2.js +153 -0
- data/vendor/v8/test/mjsunit/limit-locals.js +5 -4
- data/vendor/v8/test/mjsunit/manual-parallel-recompile.js +79 -0
- data/vendor/v8/test/mjsunit/math-exp-precision.js +64 -0
- data/vendor/v8/test/mjsunit/math-floor-negative.js +59 -0
- data/vendor/v8/test/mjsunit/math-floor-of-div-minus-zero.js +41 -0
- data/vendor/v8/test/mjsunit/math-floor-of-div-nosudiv.js +288 -0
- data/vendor/v8/test/mjsunit/math-floor-of-div.js +81 -9
- data/vendor/v8/test/mjsunit/{math-floor.js → math-floor-part1.js} +1 -72
- data/vendor/v8/test/mjsunit/math-floor-part2.js +76 -0
- data/vendor/v8/test/mjsunit/math-floor-part3.js +78 -0
- data/vendor/v8/test/mjsunit/math-floor-part4.js +76 -0
- data/vendor/v8/test/mjsunit/mirror-object.js +43 -9
- data/vendor/v8/test/mjsunit/mjsunit.js +1 -1
- data/vendor/v8/test/mjsunit/mjsunit.status +52 -27
- data/vendor/v8/test/mjsunit/mul-exhaustive-part1.js +491 -0
- data/vendor/v8/test/mjsunit/mul-exhaustive-part10.js +470 -0
- data/vendor/v8/test/mjsunit/mul-exhaustive-part2.js +525 -0
- data/vendor/v8/test/mjsunit/mul-exhaustive-part3.js +532 -0
- data/vendor/v8/test/mjsunit/mul-exhaustive-part4.js +509 -0
- data/vendor/v8/test/mjsunit/mul-exhaustive-part5.js +505 -0
- data/vendor/v8/test/mjsunit/mul-exhaustive-part6.js +554 -0
- data/vendor/v8/test/mjsunit/mul-exhaustive-part7.js +497 -0
- data/vendor/v8/test/mjsunit/mul-exhaustive-part8.js +526 -0
- data/vendor/v8/test/mjsunit/mul-exhaustive-part9.js +533 -0
- data/vendor/v8/test/mjsunit/new-function.js +34 -0
- data/vendor/v8/test/mjsunit/numops-fuzz-part1.js +1172 -0
- data/vendor/v8/test/mjsunit/numops-fuzz-part2.js +1178 -0
- data/vendor/v8/test/mjsunit/numops-fuzz-part3.js +1178 -0
- data/vendor/v8/test/mjsunit/numops-fuzz-part4.js +1177 -0
- data/vendor/v8/test/mjsunit/object-define-property.js +107 -2
- data/vendor/v8/test/mjsunit/override-read-only-property.js +6 -4
- data/vendor/v8/test/mjsunit/packed-elements.js +2 -2
- data/vendor/v8/test/mjsunit/parse-int-float.js +4 -4
- data/vendor/v8/test/mjsunit/pixel-array-rounding.js +1 -1
- data/vendor/v8/test/mjsunit/readonly.js +228 -0
- data/vendor/v8/test/mjsunit/regexp-capture-3.js +16 -18
- data/vendor/v8/test/mjsunit/regexp-capture.js +2 -0
- data/vendor/v8/test/mjsunit/regexp-global.js +122 -0
- data/vendor/v8/test/mjsunit/regexp-results-cache.js +78 -0
- data/vendor/v8/test/mjsunit/regress/regress-1117.js +12 -3
- data/vendor/v8/test/mjsunit/regress/regress-1118.js +1 -1
- data/vendor/v8/test/mjsunit/regress/regress-115100.js +36 -0
- data/vendor/v8/test/mjsunit/regress/regress-1199637.js +1 -3
- data/vendor/v8/test/mjsunit/regress/regress-121407.js +1 -1
- data/vendor/v8/test/mjsunit/regress/regress-131923.js +30 -0
- data/vendor/v8/test/mjsunit/regress/regress-131994.js +70 -0
- data/vendor/v8/test/mjsunit/regress/regress-133211.js +35 -0
- data/vendor/v8/test/mjsunit/regress/regress-133211b.js +39 -0
- data/vendor/v8/test/mjsunit/regress/regress-136048.js +34 -0
- data/vendor/v8/test/mjsunit/regress/regress-137768.js +73 -0
- data/vendor/v8/test/mjsunit/regress/regress-143967.js +34 -0
- data/vendor/v8/test/mjsunit/regress/regress-145201.js +107 -0
- data/vendor/v8/test/mjsunit/regress/regress-147497.js +45 -0
- data/vendor/v8/test/mjsunit/regress/regress-148378.js +38 -0
- data/vendor/v8/test/mjsunit/regress/regress-1563.js +1 -1
- data/vendor/v8/test/mjsunit/regress/regress-1591.js +48 -0
- data/vendor/v8/test/mjsunit/regress/regress-164442.js +45 -0
- data/vendor/v8/test/mjsunit/regress/regress-165637.js +61 -0
- data/vendor/v8/test/mjsunit/regress/regress-166379.js +39 -0
- data/vendor/v8/test/mjsunit/regress/regress-166553.js +33 -0
- data/vendor/v8/test/mjsunit/regress/regress-1692.js +1 -1
- data/vendor/v8/test/mjsunit/regress/regress-171641.js +40 -0
- data/vendor/v8/test/mjsunit/regress/regress-1980.js +1 -1
- data/vendor/v8/test/mjsunit/regress/regress-2073.js +99 -0
- data/vendor/v8/test/mjsunit/regress/regress-2119.js +36 -0
- data/vendor/v8/test/mjsunit/regress/regress-2156.js +39 -0
- data/vendor/v8/test/mjsunit/regress/regress-2163.js +70 -0
- data/vendor/v8/test/mjsunit/regress/regress-2170.js +58 -0
- data/vendor/v8/test/mjsunit/regress/regress-2172.js +35 -0
- data/vendor/v8/test/mjsunit/regress/regress-2185-2.js +145 -0
- data/vendor/v8/test/mjsunit/regress/regress-2185.js +38 -0
- data/vendor/v8/test/mjsunit/regress/regress-2186.js +49 -0
- data/vendor/v8/test/mjsunit/regress/regress-2193.js +58 -0
- data/vendor/v8/test/mjsunit/regress/regress-2219.js +32 -0
- data/vendor/v8/test/mjsunit/regress/regress-2225.js +65 -0
- data/vendor/v8/test/mjsunit/regress/regress-2226.js +36 -0
- data/vendor/v8/test/mjsunit/regress/regress-2234.js +41 -0
- data/vendor/v8/test/mjsunit/regress/regress-2243.js +31 -0
- data/vendor/v8/test/mjsunit/regress/regress-2249.js +33 -0
- data/vendor/v8/test/mjsunit/regress/regress-2250.js +68 -0
- data/vendor/v8/test/mjsunit/regress/regress-2261.js +113 -0
- data/vendor/v8/test/mjsunit/regress/regress-2263.js +30 -0
- data/vendor/v8/test/mjsunit/regress/regress-2284.js +32 -0
- data/vendor/v8/test/mjsunit/regress/regress-2285.js +32 -0
- data/vendor/v8/test/mjsunit/regress/regress-2286.js +32 -0
- data/vendor/v8/test/mjsunit/regress/regress-2289.js +34 -0
- data/vendor/v8/test/mjsunit/regress/regress-2291.js +36 -0
- data/vendor/v8/test/mjsunit/regress/regress-2294.js +70 -0
- data/vendor/v8/test/mjsunit/regress/regress-2296.js +40 -0
- data/vendor/v8/test/mjsunit/regress/regress-2315.js +40 -0
- data/vendor/v8/test/mjsunit/regress/regress-2318.js +66 -0
- data/vendor/v8/test/mjsunit/regress/regress-2322.js +36 -0
- data/vendor/v8/test/mjsunit/regress/regress-2326.js +54 -0
- data/vendor/v8/test/mjsunit/regress/regress-2336.js +53 -0
- data/vendor/v8/test/mjsunit/regress/regress-2339.js +59 -0
- data/vendor/v8/test/mjsunit/regress/regress-2346.js +123 -0
- data/vendor/v8/test/mjsunit/regress/regress-2373.js +29 -0
- data/vendor/v8/test/mjsunit/regress/regress-2374.js +33 -0
- data/vendor/v8/test/mjsunit/regress/regress-2398.js +41 -0
- data/vendor/v8/test/mjsunit/regress/regress-2410.js +36 -0
- data/vendor/v8/test/mjsunit/regress/regress-2416.js +75 -0
- data/vendor/v8/test/mjsunit/regress/regress-2419.js +37 -0
- data/vendor/v8/test/mjsunit/regress/regress-2433.js +36 -0
- data/vendor/v8/test/mjsunit/regress/regress-2437.js +156 -0
- data/vendor/v8/test/mjsunit/regress/regress-2438.js +52 -0
- data/vendor/v8/test/mjsunit/regress/regress-2443.js +129 -0
- data/vendor/v8/test/mjsunit/regress/regress-2444.js +120 -0
- data/vendor/v8/test/mjsunit/regress/regress-2489.js +50 -0
- data/vendor/v8/test/mjsunit/regress/regress-2499.js +40 -0
- data/vendor/v8/test/mjsunit/regress/regress-334.js +1 -1
- data/vendor/v8/test/mjsunit/regress/regress-492.js +39 -1
- data/vendor/v8/test/mjsunit/regress/regress-builtin-array-op.js +38 -0
- data/vendor/v8/test/mjsunit/regress/regress-cnlt-elements.js +43 -0
- data/vendor/v8/test/mjsunit/regress/regress-cnlt-enum-indices.js +45 -0
- data/vendor/v8/test/mjsunit/regress/regress-cntl-descriptors-enum.js +46 -0
- data/vendor/v8/test/mjsunit/regress/regress-convert-enum.js +60 -0
- data/vendor/v8/test/mjsunit/regress/regress-convert-enum2.js +46 -0
- data/vendor/v8/test/mjsunit/regress/regress-convert-transition.js +40 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-119926.js +3 -1
- data/vendor/v8/test/mjsunit/regress/regress-crbug-125148.js +90 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-134055.js +63 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-134609.js +59 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-135008.js +45 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-135066.js +55 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-137689.js +47 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-138887.js +48 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-140083.js +44 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-142087.js +38 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-142218.js +44 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-145961.js +39 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-146910.js +33 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-147475.js +48 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-148376.js +35 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-150545.js +53 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-150729.js +39 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-157019.js +54 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-157520.js +38 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-158185.js +39 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-160010.js +35 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-162085.js +71 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-168545.js +34 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-170856.js +33 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-172345.js +34 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-173974.js +36 -0
- data/vendor/v8/test/mjsunit/regress/regress-crbug-18639.js +9 -5
- data/vendor/v8/test/mjsunit/regress/regress-debug-code-recompilation.js +2 -1
- data/vendor/v8/test/mjsunit/regress/regress-deep-proto.js +45 -0
- data/vendor/v8/test/mjsunit/regress/regress-delete-empty-double.js +40 -0
- data/vendor/v8/test/mjsunit/regress/regress-iteration-order.js +42 -0
- data/vendor/v8/test/mjsunit/regress/regress-json-stringify-gc.js +41 -0
- data/vendor/v8/test/mjsunit/regress/regress-latin-1.js +78 -0
- data/vendor/v8/test/mjsunit/regress/regress-load-elements.js +49 -0
- data/vendor/v8/test/mjsunit/regress/regress-observe-empty-double-array.js +38 -0
- data/vendor/v8/test/mjsunit/regress/regress-undefined-store-keyed-fast-element.js +37 -0
- data/vendor/v8/test/mjsunit/shift-for-integer-div.js +59 -0
- data/vendor/v8/test/mjsunit/stack-traces-gc.js +119 -0
- data/vendor/v8/test/mjsunit/stack-traces-overflow.js +122 -0
- data/vendor/v8/test/mjsunit/stack-traces.js +39 -1
- data/vendor/v8/test/mjsunit/str-to-num.js +7 -2
- data/vendor/v8/test/mjsunit/strict-mode.js +36 -11
- data/vendor/v8/test/mjsunit/string-charcodeat.js +3 -0
- data/vendor/v8/test/mjsunit/string-natives.js +72 -0
- data/vendor/v8/test/mjsunit/string-split.js +17 -0
- data/vendor/v8/test/mjsunit/testcfg.py +76 -6
- data/vendor/v8/test/mjsunit/tools/tickprocessor.js +4 -1
- data/vendor/v8/test/mjsunit/try-finally-continue.js +72 -0
- data/vendor/v8/test/mjsunit/typed-array-slice.js +61 -0
- data/vendor/v8/test/mjsunit/unbox-double-arrays.js +2 -0
- data/vendor/v8/test/mjsunit/uri.js +12 -0
- data/vendor/v8/test/mjsunit/with-readonly.js +4 -2
- data/vendor/v8/test/mozilla/mozilla.status +19 -113
- data/vendor/v8/test/mozilla/testcfg.py +122 -3
- data/vendor/v8/test/preparser/preparser.status +5 -0
- data/vendor/v8/test/preparser/strict-identifiers.pyt +1 -1
- data/vendor/v8/test/preparser/testcfg.py +101 -5
- data/vendor/v8/test/sputnik/sputnik.status +1 -1
- data/vendor/v8/test/sputnik/testcfg.py +5 -0
- data/vendor/v8/test/test262/README +2 -2
- data/vendor/v8/test/test262/test262.status +13 -36
- data/vendor/v8/test/test262/testcfg.py +102 -8
- data/vendor/v8/tools/android-build.sh +0 -0
- data/vendor/v8/tools/android-ll-prof.sh +69 -0
- data/vendor/v8/tools/android-run.py +109 -0
- data/vendor/v8/tools/android-sync.sh +105 -0
- data/vendor/v8/tools/bash-completion.sh +0 -0
- data/vendor/v8/tools/check-static-initializers.sh +0 -0
- data/vendor/v8/tools/common-includes.sh +15 -22
- data/vendor/v8/tools/disasm.py +4 -4
- data/vendor/v8/tools/fuzz-harness.sh +0 -0
- data/vendor/v8/tools/gen-postmortem-metadata.py +6 -8
- data/vendor/v8/tools/grokdump.py +404 -129
- data/vendor/v8/tools/gyp/v8.gyp +105 -43
- data/vendor/v8/tools/linux-tick-processor +5 -5
- data/vendor/v8/tools/ll_prof.py +75 -15
- data/vendor/v8/tools/merge-to-branch.sh +2 -2
- data/vendor/v8/tools/plot-timer-events +70 -0
- data/vendor/v8/tools/plot-timer-events.js +510 -0
- data/vendor/v8/tools/presubmit.py +1 -0
- data/vendor/v8/tools/push-to-trunk.sh +14 -4
- data/vendor/v8/tools/run-llprof.sh +69 -0
- data/vendor/v8/tools/run-tests.py +372 -0
- data/vendor/v8/tools/run-valgrind.py +1 -1
- data/vendor/v8/tools/status-file-converter.py +39 -0
- data/vendor/v8/tools/test-server.py +224 -0
- data/vendor/v8/tools/test-wrapper-gypbuild.py +13 -16
- data/vendor/v8/tools/test.py +10 -19
- data/vendor/v8/tools/testrunner/README +174 -0
- data/vendor/v8/tools/testrunner/__init__.py +26 -0
- data/vendor/v8/tools/testrunner/local/__init__.py +26 -0
- data/vendor/v8/tools/testrunner/local/commands.py +153 -0
- data/vendor/v8/tools/testrunner/local/execution.py +182 -0
- data/vendor/v8/tools/testrunner/local/old_statusfile.py +460 -0
- data/vendor/v8/tools/testrunner/local/progress.py +238 -0
- data/vendor/v8/tools/testrunner/local/statusfile.py +145 -0
- data/vendor/v8/tools/testrunner/local/testsuite.py +187 -0
- data/vendor/v8/tools/testrunner/local/utils.py +108 -0
- data/vendor/v8/tools/testrunner/local/verbose.py +99 -0
- data/vendor/v8/tools/testrunner/network/__init__.py +26 -0
- data/vendor/v8/tools/testrunner/network/distro.py +90 -0
- data/vendor/v8/tools/testrunner/network/endpoint.py +124 -0
- data/vendor/v8/tools/testrunner/network/network_execution.py +253 -0
- data/vendor/v8/tools/testrunner/network/perfdata.py +120 -0
- data/vendor/v8/tools/testrunner/objects/__init__.py +26 -0
- data/vendor/v8/tools/testrunner/objects/context.py +50 -0
- data/vendor/v8/tools/testrunner/objects/output.py +60 -0
- data/vendor/v8/tools/testrunner/objects/peer.py +80 -0
- data/vendor/v8/tools/testrunner/objects/testcase.py +83 -0
- data/vendor/v8/tools/testrunner/objects/workpacket.py +90 -0
- data/vendor/v8/tools/testrunner/server/__init__.py +26 -0
- data/vendor/v8/tools/testrunner/server/compression.py +111 -0
- data/vendor/v8/tools/testrunner/server/constants.py +51 -0
- data/vendor/v8/tools/testrunner/server/daemon.py +147 -0
- data/vendor/v8/tools/testrunner/server/local_handler.py +119 -0
- data/vendor/v8/tools/testrunner/server/main.py +245 -0
- data/vendor/v8/tools/testrunner/server/presence_handler.py +120 -0
- data/vendor/v8/tools/testrunner/server/signatures.py +63 -0
- data/vendor/v8/tools/testrunner/server/status_handler.py +112 -0
- data/vendor/v8/tools/testrunner/server/work_handler.py +150 -0
- data/vendor/v8/tools/tick-processor.html +168 -0
- data/vendor/v8/tools/tickprocessor-driver.js +5 -3
- data/vendor/v8/tools/tickprocessor.js +58 -15
- metadata +534 -30
- data/patches/add-freebsd9-and-freebsd10-to-gyp-GetFlavor.patch +0 -11
- data/patches/do-not-imply-vfp3-and-armv7.patch +0 -44
- data/patches/fPIC-on-x64.patch +0 -14
- data/vendor/v8/src/liveobjectlist-inl.h +0 -126
- data/vendor/v8/src/liveobjectlist.cc +0 -2631
- data/vendor/v8/src/liveobjectlist.h +0 -319
- data/vendor/v8/test/mjsunit/mul-exhaustive.js +0 -4629
- data/vendor/v8/test/mjsunit/numops-fuzz.js +0 -4609
- data/vendor/v8/test/mjsunit/regress/regress-1969.js +0 -5045
@@ -1,4 +1,4 @@
|
|
1
|
-
// Copyright
|
1
|
+
// Copyright 2012 the V8 project authors. All rights reserved.
|
2
2
|
// Redistribution and use in source and binary forms, with or without
|
3
3
|
// modification, are permitted provided that the following conditions are
|
4
4
|
// met:
|
@@ -47,6 +47,8 @@ Debug.LiveEdit = new function() {
|
|
47
47
|
// Forward declaration for minifier.
|
48
48
|
var FunctionStatus;
|
49
49
|
|
50
|
+
var NEEDS_STEP_IN_PROPERTY_NAME = "stack_update_needs_step_in";
|
51
|
+
|
50
52
|
// Applies the change to the script.
|
51
53
|
// The change is in form of list of chunks encoded in a single array as
|
52
54
|
// a series of triplets (pos1_start, pos1_end, pos2_end)
|
@@ -74,7 +76,17 @@ Debug.LiveEdit = new function() {
|
|
74
76
|
try {
|
75
77
|
new_compile_info = GatherCompileInfo(new_source, script);
|
76
78
|
} catch (e) {
|
77
|
-
|
79
|
+
var failure =
|
80
|
+
new Failure("Failed to compile new version of script: " + e);
|
81
|
+
if (e instanceof SyntaxError) {
|
82
|
+
var details = {
|
83
|
+
type: "liveedit_compile_error",
|
84
|
+
syntaxErrorMessage: e.message
|
85
|
+
};
|
86
|
+
CopyErrorPositionToDetails(e, details);
|
87
|
+
failure.details = details;
|
88
|
+
}
|
89
|
+
throw failure;
|
78
90
|
}
|
79
91
|
var root_new_node = BuildCodeInfoTree(new_compile_info);
|
80
92
|
|
@@ -161,7 +173,7 @@ Debug.LiveEdit = new function() {
|
|
161
173
|
|
162
174
|
// Our current implementation requires client to manually issue "step in"
|
163
175
|
// command for correct stack state.
|
164
|
-
preview_description
|
176
|
+
preview_description[NEEDS_STEP_IN_PROPERTY_NAME] =
|
165
177
|
preview_description.stack_modified;
|
166
178
|
|
167
179
|
// Start with breakpoints. Convert their line/column positions and
|
@@ -976,6 +988,31 @@ Debug.LiveEdit = new function() {
|
|
976
988
|
return "LiveEdit Failure: " + this.message;
|
977
989
|
};
|
978
990
|
|
991
|
+
function CopyErrorPositionToDetails(e, details) {
|
992
|
+
function createPositionStruct(script, position) {
|
993
|
+
if (position == -1) return;
|
994
|
+
var location = script.locationFromPosition(position, true);
|
995
|
+
if (location == null) return;
|
996
|
+
return {
|
997
|
+
line: location.line + 1,
|
998
|
+
column: location.column + 1,
|
999
|
+
position: position
|
1000
|
+
};
|
1001
|
+
}
|
1002
|
+
|
1003
|
+
if (!("scriptObject" in e) || !("startPosition" in e)) {
|
1004
|
+
return;
|
1005
|
+
}
|
1006
|
+
|
1007
|
+
var script = e.scriptObject;
|
1008
|
+
|
1009
|
+
var position_struct = {
|
1010
|
+
start: createPositionStruct(script, e.startPosition),
|
1011
|
+
end: createPositionStruct(script, e.endPosition)
|
1012
|
+
};
|
1013
|
+
details.position = position_struct;
|
1014
|
+
}
|
1015
|
+
|
979
1016
|
// A testing entry.
|
980
1017
|
function GetPcFromSourcePos(func, source_pos) {
|
981
1018
|
return %GetFunctionCodePositionFromSource(func, source_pos);
|
@@ -1078,6 +1115,18 @@ Debug.LiveEdit = new function() {
|
|
1078
1115
|
return ProcessOldNode(old_code_tree);
|
1079
1116
|
}
|
1080
1117
|
|
1118
|
+
// Restarts call frame and returns value similar to what LiveEdit returns.
|
1119
|
+
function RestartFrame(frame_mirror) {
|
1120
|
+
var result = frame_mirror.restart();
|
1121
|
+
if (IS_STRING(result)) {
|
1122
|
+
throw new Failure("Failed to restart frame: " + result);
|
1123
|
+
}
|
1124
|
+
var result = {};
|
1125
|
+
result[NEEDS_STEP_IN_PROPERTY_NAME] = true;
|
1126
|
+
return result;
|
1127
|
+
}
|
1128
|
+
// Function is public.
|
1129
|
+
this.RestartFrame = RestartFrame;
|
1081
1130
|
|
1082
1131
|
// Functions are public for tests.
|
1083
1132
|
this.TestApi = {
|
data/vendor/v8/src/liveedit.cc
CHANGED
@@ -36,6 +36,7 @@
|
|
36
36
|
#include "debug.h"
|
37
37
|
#include "deoptimizer.h"
|
38
38
|
#include "global-handles.h"
|
39
|
+
#include "messages.h"
|
39
40
|
#include "parser.h"
|
40
41
|
#include "scopeinfo.h"
|
41
42
|
#include "scopes.h"
|
@@ -601,7 +602,7 @@ static void CompileScriptForTracker(Isolate* isolate, Handle<Script> script) {
|
|
601
602
|
PostponeInterruptsScope postpone(isolate);
|
602
603
|
|
603
604
|
// Build AST.
|
604
|
-
|
605
|
+
CompilationInfoWithZone info(script);
|
605
606
|
info.MarkAsGlobal();
|
606
607
|
// Parse and don't allow skipping lazy functions.
|
607
608
|
if (ParserApi::Parse(&info, kNoParsingFlags)) {
|
@@ -635,6 +636,21 @@ static Handle<JSValue> WrapInJSValue(Handle<Object> object) {
|
|
635
636
|
}
|
636
637
|
|
637
638
|
|
639
|
+
static Handle<SharedFunctionInfo> UnwrapSharedFunctionInfoFromJSValue(
|
640
|
+
Handle<JSValue> jsValue) {
|
641
|
+
Object* shared = jsValue->value();
|
642
|
+
CHECK(shared->IsSharedFunctionInfo());
|
643
|
+
return Handle<SharedFunctionInfo>(SharedFunctionInfo::cast(shared));
|
644
|
+
}
|
645
|
+
|
646
|
+
|
647
|
+
static int GetArrayLength(Handle<JSArray> array) {
|
648
|
+
Object* length = array->length();
|
649
|
+
CHECK(length->IsSmi());
|
650
|
+
return Smi::cast(length)->value();
|
651
|
+
}
|
652
|
+
|
653
|
+
|
638
654
|
// Simple helper class that creates more or less typed structures over
|
639
655
|
// JSArray object. This is an adhoc method of passing structures from C++
|
640
656
|
// to JavaScript.
|
@@ -670,6 +686,7 @@ class JSArrayBasedStruct {
|
|
670
686
|
}
|
671
687
|
int GetSmiValueField(int field_position) {
|
672
688
|
Object* res = GetField(field_position);
|
689
|
+
CHECK(res->IsSmi());
|
673
690
|
return Smi::cast(res)->value();
|
674
691
|
}
|
675
692
|
|
@@ -687,12 +704,14 @@ class FunctionInfoWrapper : public JSArrayBasedStruct<FunctionInfoWrapper> {
|
|
687
704
|
: JSArrayBasedStruct<FunctionInfoWrapper>(array) {
|
688
705
|
}
|
689
706
|
void SetInitialProperties(Handle<String> name, int start_position,
|
690
|
-
int end_position, int param_num,
|
707
|
+
int end_position, int param_num,
|
708
|
+
int literal_count, int parent_index) {
|
691
709
|
HandleScope scope;
|
692
710
|
this->SetField(kFunctionNameOffset_, name);
|
693
711
|
this->SetSmiValueField(kStartPositionOffset_, start_position);
|
694
712
|
this->SetSmiValueField(kEndPositionOffset_, end_position);
|
695
713
|
this->SetSmiValueField(kParamNumOffset_, param_num);
|
714
|
+
this->SetSmiValueField(kLiteralNumOffset_, literal_count);
|
696
715
|
this->SetSmiValueField(kParentIndexOffset_, parent_index);
|
697
716
|
}
|
698
717
|
void SetFunctionCode(Handle<Code> function_code,
|
@@ -710,18 +729,24 @@ class FunctionInfoWrapper : public JSArrayBasedStruct<FunctionInfoWrapper> {
|
|
710
729
|
Handle<JSValue> info_holder = WrapInJSValue(info);
|
711
730
|
this->SetField(kSharedFunctionInfoOffset_, info_holder);
|
712
731
|
}
|
732
|
+
int GetLiteralCount() {
|
733
|
+
return this->GetSmiValueField(kLiteralNumOffset_);
|
734
|
+
}
|
713
735
|
int GetParentIndex() {
|
714
736
|
return this->GetSmiValueField(kParentIndexOffset_);
|
715
737
|
}
|
716
738
|
Handle<Code> GetFunctionCode() {
|
717
|
-
|
718
|
-
|
739
|
+
Object* element = this->GetField(kCodeOffset_);
|
740
|
+
CHECK(element->IsJSValue());
|
741
|
+
Handle<JSValue> value_wrapper(JSValue::cast(element));
|
742
|
+
Handle<Object> raw_result = UnwrapJSValue(value_wrapper);
|
743
|
+
CHECK(raw_result->IsCode());
|
719
744
|
return Handle<Code>::cast(raw_result);
|
720
745
|
}
|
721
746
|
Handle<Object> GetCodeScopeInfo() {
|
722
|
-
|
723
|
-
|
724
|
-
return
|
747
|
+
Object* element = this->GetField(kCodeScopeInfoOffset_);
|
748
|
+
CHECK(element->IsJSValue());
|
749
|
+
return UnwrapJSValue(Handle<JSValue>(JSValue::cast(element)));
|
725
750
|
}
|
726
751
|
int GetStartPosition() {
|
727
752
|
return this->GetSmiValueField(kStartPositionOffset_);
|
@@ -740,7 +765,8 @@ class FunctionInfoWrapper : public JSArrayBasedStruct<FunctionInfoWrapper> {
|
|
740
765
|
static const int kOuterScopeInfoOffset_ = 6;
|
741
766
|
static const int kParentIndexOffset_ = 7;
|
742
767
|
static const int kSharedFunctionInfoOffset_ = 8;
|
743
|
-
static const int
|
768
|
+
static const int kLiteralNumOffset_ = 9;
|
769
|
+
static const int kSize_ = 10;
|
744
770
|
|
745
771
|
friend class JSArrayBasedStruct<FunctionInfoWrapper>;
|
746
772
|
};
|
@@ -771,9 +797,9 @@ class SharedInfoWrapper : public JSArrayBasedStruct<SharedInfoWrapper> {
|
|
771
797
|
}
|
772
798
|
Handle<SharedFunctionInfo> GetInfo() {
|
773
799
|
Object* element = this->GetField(kSharedInfoOffset_);
|
800
|
+
CHECK(element->IsJSValue());
|
774
801
|
Handle<JSValue> value_wrapper(JSValue::cast(element));
|
775
|
-
|
776
|
-
return Handle<SharedFunctionInfo>::cast(raw_result);
|
802
|
+
return UnwrapSharedFunctionInfoFromJSValue(value_wrapper);
|
777
803
|
}
|
778
804
|
|
779
805
|
private:
|
@@ -800,6 +826,7 @@ class FunctionInfoListener {
|
|
800
826
|
FunctionInfoWrapper info = FunctionInfoWrapper::Create();
|
801
827
|
info.SetInitialProperties(fun->name(), fun->start_position(),
|
802
828
|
fun->end_position(), fun->parameter_count(),
|
829
|
+
fun->materialized_literal_count(),
|
803
830
|
current_parent_index_);
|
804
831
|
current_parent_index_ = len_;
|
805
832
|
SetElementNonStrict(result_, len_, info.GetJSArray());
|
@@ -825,7 +852,8 @@ class FunctionInfoListener {
|
|
825
852
|
|
826
853
|
// Saves full information about a function: its code, its scope info
|
827
854
|
// and a SharedFunctionInfo object.
|
828
|
-
void FunctionInfo(Handle<SharedFunctionInfo> shared, Scope* scope
|
855
|
+
void FunctionInfo(Handle<SharedFunctionInfo> shared, Scope* scope,
|
856
|
+
Zone* zone) {
|
829
857
|
if (!shared->IsSharedFunctionInfo()) {
|
830
858
|
return;
|
831
859
|
}
|
@@ -836,14 +864,14 @@ class FunctionInfoListener {
|
|
836
864
|
Handle<Object>(shared->scope_info()));
|
837
865
|
info.SetSharedFunctionInfo(shared);
|
838
866
|
|
839
|
-
Handle<Object> scope_info_list(SerializeFunctionScope(scope));
|
867
|
+
Handle<Object> scope_info_list(SerializeFunctionScope(scope, zone));
|
840
868
|
info.SetOuterScopeInfo(scope_info_list);
|
841
869
|
}
|
842
870
|
|
843
871
|
Handle<JSArray> GetResult() { return result_; }
|
844
872
|
|
845
873
|
private:
|
846
|
-
Object* SerializeFunctionScope(Scope* scope) {
|
874
|
+
Object* SerializeFunctionScope(Scope* scope, Zone* zone) {
|
847
875
|
HandleScope handle_scope;
|
848
876
|
|
849
877
|
Handle<JSArray> scope_info_list = FACTORY->NewJSArray(10);
|
@@ -857,8 +885,8 @@ class FunctionInfoListener {
|
|
857
885
|
return HEAP->undefined_value();
|
858
886
|
}
|
859
887
|
do {
|
860
|
-
ZoneList<Variable*> stack_list(outer_scope->StackLocalCount());
|
861
|
-
ZoneList<Variable*> context_list(outer_scope->ContextLocalCount());
|
888
|
+
ZoneList<Variable*> stack_list(outer_scope->StackLocalCount(), zone);
|
889
|
+
ZoneList<Variable*> context_list(outer_scope->ContextLocalCount(), zone);
|
862
890
|
outer_scope->CollectStackAndContextLocals(&stack_list, &context_list);
|
863
891
|
context_list.Sort(&Variable::CompareIndex);
|
864
892
|
|
@@ -893,23 +921,70 @@ class FunctionInfoListener {
|
|
893
921
|
JSArray* LiveEdit::GatherCompileInfo(Handle<Script> script,
|
894
922
|
Handle<String> source) {
|
895
923
|
Isolate* isolate = Isolate::Current();
|
896
|
-
ZoneScope zone_scope(isolate, DELETE_ON_EXIT);
|
897
924
|
|
898
925
|
FunctionInfoListener listener;
|
899
926
|
Handle<Object> original_source = Handle<Object>(script->source());
|
900
927
|
script->set_source(*source);
|
901
928
|
isolate->set_active_function_info_listener(&listener);
|
902
|
-
|
929
|
+
|
930
|
+
{
|
931
|
+
// Creating verbose TryCatch from public API is currently the only way to
|
932
|
+
// force code save location. We do not use this the object directly.
|
933
|
+
v8::TryCatch try_catch;
|
934
|
+
try_catch.SetVerbose(true);
|
935
|
+
|
936
|
+
// A logical 'try' section.
|
937
|
+
CompileScriptForTracker(isolate, script);
|
938
|
+
}
|
939
|
+
|
940
|
+
// A logical 'catch' section.
|
941
|
+
Handle<JSObject> rethrow_exception;
|
942
|
+
if (isolate->has_pending_exception()) {
|
943
|
+
Handle<Object> exception(isolate->pending_exception()->ToObjectChecked());
|
944
|
+
MessageLocation message_location = isolate->GetMessageLocation();
|
945
|
+
|
946
|
+
isolate->clear_pending_message();
|
947
|
+
isolate->clear_pending_exception();
|
948
|
+
|
949
|
+
// If possible, copy positions from message object to exception object.
|
950
|
+
if (exception->IsJSObject() && !message_location.script().is_null()) {
|
951
|
+
rethrow_exception = Handle<JSObject>::cast(exception);
|
952
|
+
|
953
|
+
Factory* factory = isolate->factory();
|
954
|
+
Handle<String> start_pos_key =
|
955
|
+
factory->LookupOneByteSymbol(STATIC_ASCII_VECTOR("startPosition"));
|
956
|
+
Handle<String> end_pos_key =
|
957
|
+
factory->LookupOneByteSymbol(STATIC_ASCII_VECTOR("endPosition"));
|
958
|
+
Handle<String> script_obj_key =
|
959
|
+
factory->LookupOneByteSymbol(STATIC_ASCII_VECTOR("scriptObject"));
|
960
|
+
Handle<Smi> start_pos(Smi::FromInt(message_location.start_pos()));
|
961
|
+
Handle<Smi> end_pos(Smi::FromInt(message_location.end_pos()));
|
962
|
+
Handle<JSValue> script_obj = GetScriptWrapper(message_location.script());
|
963
|
+
JSReceiver::SetProperty(
|
964
|
+
rethrow_exception, start_pos_key, start_pos, NONE, kNonStrictMode);
|
965
|
+
JSReceiver::SetProperty(
|
966
|
+
rethrow_exception, end_pos_key, end_pos, NONE, kNonStrictMode);
|
967
|
+
JSReceiver::SetProperty(
|
968
|
+
rethrow_exception, script_obj_key, script_obj, NONE, kNonStrictMode);
|
969
|
+
}
|
970
|
+
}
|
971
|
+
|
972
|
+
// A logical 'finally' section.
|
903
973
|
isolate->set_active_function_info_listener(NULL);
|
904
974
|
script->set_source(*original_source);
|
905
975
|
|
906
|
-
|
976
|
+
if (rethrow_exception.is_null()) {
|
977
|
+
return *(listener.GetResult());
|
978
|
+
} else {
|
979
|
+
isolate->Throw(*rethrow_exception);
|
980
|
+
return 0;
|
981
|
+
}
|
907
982
|
}
|
908
983
|
|
909
984
|
|
910
985
|
void LiveEdit::WrapSharedFunctionInfos(Handle<JSArray> array) {
|
911
986
|
HandleScope scope;
|
912
|
-
int len =
|
987
|
+
int len = GetArrayLength(array);
|
913
988
|
for (int i = 0; i < len; i++) {
|
914
989
|
Handle<SharedFunctionInfo> info(
|
915
990
|
SharedFunctionInfo::cast(array->GetElementNoExceptionThrown(i)));
|
@@ -922,33 +997,35 @@ void LiveEdit::WrapSharedFunctionInfos(Handle<JSArray> array) {
|
|
922
997
|
}
|
923
998
|
|
924
999
|
|
925
|
-
// Visitor that
|
926
|
-
// including "CODE_TARGET" references in other code objects
|
927
|
-
//
|
928
|
-
class
|
1000
|
+
// Visitor that finds all references to a particular code object,
|
1001
|
+
// including "CODE_TARGET" references in other code objects and replaces
|
1002
|
+
// them on the fly.
|
1003
|
+
class ReplacingVisitor : public ObjectVisitor {
|
929
1004
|
public:
|
930
|
-
explicit
|
931
|
-
: original_(original),
|
1005
|
+
explicit ReplacingVisitor(Code* original, Code* substitution)
|
1006
|
+
: original_(original), substitution_(substitution) {
|
932
1007
|
}
|
933
1008
|
|
934
1009
|
virtual void VisitPointers(Object** start, Object** end) {
|
935
1010
|
for (Object** p = start; p < end; p++) {
|
936
1011
|
if (*p == original_) {
|
937
|
-
|
1012
|
+
*p = substitution_;
|
938
1013
|
}
|
939
1014
|
}
|
940
1015
|
}
|
941
1016
|
|
942
1017
|
virtual void VisitCodeEntry(Address entry) {
|
943
1018
|
if (Code::GetObjectFromEntryAddress(entry) == original_) {
|
944
|
-
|
1019
|
+
Address substitution_entry = substitution_->instruction_start();
|
1020
|
+
Memory::Address_at(entry) = substitution_entry;
|
945
1021
|
}
|
946
1022
|
}
|
947
1023
|
|
948
1024
|
virtual void VisitCodeTarget(RelocInfo* rinfo) {
|
949
1025
|
if (RelocInfo::IsCodeTarget(rinfo->rmode()) &&
|
950
1026
|
Code::GetCodeFromTargetAddress(rinfo->target_address()) == original_) {
|
951
|
-
|
1027
|
+
Address substitution_entry = substitution_->instruction_start();
|
1028
|
+
rinfo->set_target_address(substitution_entry);
|
952
1029
|
}
|
953
1030
|
}
|
954
1031
|
|
@@ -956,59 +1033,166 @@ class ReferenceCollectorVisitor : public ObjectVisitor {
|
|
956
1033
|
VisitCodeTarget(rinfo);
|
957
1034
|
}
|
958
1035
|
|
959
|
-
// Post-visiting method that iterates over all collected references and
|
960
|
-
// modifies them.
|
961
|
-
void Replace(Code* substitution) {
|
962
|
-
for (int i = 0; i < rvalues_.length(); i++) {
|
963
|
-
*(rvalues_[i]) = substitution;
|
964
|
-
}
|
965
|
-
Address substitution_entry = substitution->instruction_start();
|
966
|
-
for (int i = 0; i < reloc_infos_.length(); i++) {
|
967
|
-
reloc_infos_[i].set_target_address(substitution_entry);
|
968
|
-
}
|
969
|
-
for (int i = 0; i < code_entries_.length(); i++) {
|
970
|
-
Address entry = code_entries_[i];
|
971
|
-
Memory::Address_at(entry) = substitution_entry;
|
972
|
-
}
|
973
|
-
}
|
974
|
-
|
975
1036
|
private:
|
976
1037
|
Code* original_;
|
977
|
-
|
978
|
-
ZoneList<RelocInfo> reloc_infos_;
|
979
|
-
ZoneList<Address> code_entries_;
|
1038
|
+
Code* substitution_;
|
980
1039
|
};
|
981
1040
|
|
982
1041
|
|
983
1042
|
// Finds all references to original and replaces them with substitution.
|
984
|
-
static void ReplaceCodeObject(Code
|
985
|
-
|
1043
|
+
static void ReplaceCodeObject(Handle<Code> original,
|
1044
|
+
Handle<Code> substitution) {
|
1045
|
+
// Perform a full GC in order to ensure that we are not in the middle of an
|
1046
|
+
// incremental marking phase when we are replacing the code object.
|
1047
|
+
// Since we are not in an incremental marking phase we can write pointers
|
1048
|
+
// to code objects (that are never in new space) without worrying about
|
1049
|
+
// write barriers.
|
1050
|
+
HEAP->CollectAllGarbage(Heap::kMakeHeapIterableMask,
|
1051
|
+
"liveedit.cc ReplaceCodeObject");
|
1052
|
+
|
1053
|
+
ASSERT(!HEAP->InNewSpace(*substitution));
|
986
1054
|
|
987
|
-
HeapIterator iterator;
|
988
1055
|
AssertNoAllocation no_allocations_please;
|
989
1056
|
|
990
|
-
|
991
|
-
ZoneScope scope(Isolate::Current(), DELETE_ON_EXIT);
|
992
|
-
|
993
|
-
ReferenceCollectorVisitor visitor(original);
|
1057
|
+
ReplacingVisitor visitor(*original, *substitution);
|
994
1058
|
|
995
1059
|
// Iterate over all roots. Stack frames may have pointer into original code,
|
996
1060
|
// so temporary replace the pointers with offset numbers
|
997
1061
|
// in prologue/epilogue.
|
998
|
-
|
999
|
-
HEAP->IterateStrongRoots(&visitor, VISIT_ALL);
|
1000
|
-
}
|
1062
|
+
HEAP->IterateRoots(&visitor, VISIT_ALL);
|
1001
1063
|
|
1002
1064
|
// Now iterate over all pointers of all objects, including code_target
|
1003
1065
|
// implicit pointers.
|
1066
|
+
HeapIterator iterator;
|
1004
1067
|
for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) {
|
1005
1068
|
obj->Iterate(&visitor);
|
1006
1069
|
}
|
1007
|
-
|
1008
|
-
visitor.Replace(substitution);
|
1009
1070
|
}
|
1010
1071
|
|
1011
1072
|
|
1073
|
+
// Patch function literals.
|
1074
|
+
// Name 'literals' is a misnomer. Rather it's a cache for complex object
|
1075
|
+
// boilerplates and for a native context. We must clean cached values.
|
1076
|
+
// Additionally we may need to allocate a new array if number of literals
|
1077
|
+
// changed.
|
1078
|
+
class LiteralFixer {
|
1079
|
+
public:
|
1080
|
+
static void PatchLiterals(FunctionInfoWrapper* compile_info_wrapper,
|
1081
|
+
Handle<SharedFunctionInfo> shared_info,
|
1082
|
+
Isolate* isolate) {
|
1083
|
+
int new_literal_count = compile_info_wrapper->GetLiteralCount();
|
1084
|
+
if (new_literal_count > 0) {
|
1085
|
+
new_literal_count += JSFunction::kLiteralsPrefixSize;
|
1086
|
+
}
|
1087
|
+
int old_literal_count = shared_info->num_literals();
|
1088
|
+
|
1089
|
+
if (old_literal_count == new_literal_count) {
|
1090
|
+
// If literal count didn't change, simply go over all functions
|
1091
|
+
// and clear literal arrays.
|
1092
|
+
ClearValuesVisitor visitor;
|
1093
|
+
IterateJSFunctions(*shared_info, &visitor);
|
1094
|
+
} else {
|
1095
|
+
// When literal count changes, we have to create new array instances.
|
1096
|
+
// Since we cannot create instances when iterating heap, we should first
|
1097
|
+
// collect all functions and fix their literal arrays.
|
1098
|
+
Handle<FixedArray> function_instances =
|
1099
|
+
CollectJSFunctions(shared_info, isolate);
|
1100
|
+
for (int i = 0; i < function_instances->length(); i++) {
|
1101
|
+
Handle<JSFunction> fun(JSFunction::cast(function_instances->get(i)));
|
1102
|
+
Handle<FixedArray> old_literals(fun->literals());
|
1103
|
+
Handle<FixedArray> new_literals =
|
1104
|
+
isolate->factory()->NewFixedArray(new_literal_count);
|
1105
|
+
if (new_literal_count > 0) {
|
1106
|
+
Handle<Context> native_context;
|
1107
|
+
if (old_literals->length() >
|
1108
|
+
JSFunction::kLiteralNativeContextIndex) {
|
1109
|
+
native_context = Handle<Context>(
|
1110
|
+
JSFunction::NativeContextFromLiterals(fun->literals()));
|
1111
|
+
} else {
|
1112
|
+
native_context = Handle<Context>(fun->context()->native_context());
|
1113
|
+
}
|
1114
|
+
new_literals->set(JSFunction::kLiteralNativeContextIndex,
|
1115
|
+
*native_context);
|
1116
|
+
}
|
1117
|
+
fun->set_literals(*new_literals);
|
1118
|
+
}
|
1119
|
+
|
1120
|
+
shared_info->set_num_literals(new_literal_count);
|
1121
|
+
}
|
1122
|
+
}
|
1123
|
+
|
1124
|
+
private:
|
1125
|
+
// Iterates all function instances in the HEAP that refers to the
|
1126
|
+
// provided shared_info.
|
1127
|
+
template<typename Visitor>
|
1128
|
+
static void IterateJSFunctions(SharedFunctionInfo* shared_info,
|
1129
|
+
Visitor* visitor) {
|
1130
|
+
AssertNoAllocation no_allocations_please;
|
1131
|
+
|
1132
|
+
HeapIterator iterator;
|
1133
|
+
for (HeapObject* obj = iterator.next(); obj != NULL;
|
1134
|
+
obj = iterator.next()) {
|
1135
|
+
if (obj->IsJSFunction()) {
|
1136
|
+
JSFunction* function = JSFunction::cast(obj);
|
1137
|
+
if (function->shared() == shared_info) {
|
1138
|
+
visitor->visit(function);
|
1139
|
+
}
|
1140
|
+
}
|
1141
|
+
}
|
1142
|
+
}
|
1143
|
+
|
1144
|
+
// Finds all instances of JSFunction that refers to the provided shared_info
|
1145
|
+
// and returns array with them.
|
1146
|
+
static Handle<FixedArray> CollectJSFunctions(
|
1147
|
+
Handle<SharedFunctionInfo> shared_info, Isolate* isolate) {
|
1148
|
+
CountVisitor count_visitor;
|
1149
|
+
count_visitor.count = 0;
|
1150
|
+
IterateJSFunctions(*shared_info, &count_visitor);
|
1151
|
+
int size = count_visitor.count;
|
1152
|
+
|
1153
|
+
Handle<FixedArray> result = isolate->factory()->NewFixedArray(size);
|
1154
|
+
if (size > 0) {
|
1155
|
+
CollectVisitor collect_visitor(result);
|
1156
|
+
IterateJSFunctions(*shared_info, &collect_visitor);
|
1157
|
+
}
|
1158
|
+
return result;
|
1159
|
+
}
|
1160
|
+
|
1161
|
+
class ClearValuesVisitor {
|
1162
|
+
public:
|
1163
|
+
void visit(JSFunction* fun) {
|
1164
|
+
FixedArray* literals = fun->literals();
|
1165
|
+
int len = literals->length();
|
1166
|
+
for (int j = JSFunction::kLiteralsPrefixSize; j < len; j++) {
|
1167
|
+
literals->set_undefined(j);
|
1168
|
+
}
|
1169
|
+
}
|
1170
|
+
};
|
1171
|
+
|
1172
|
+
class CountVisitor {
|
1173
|
+
public:
|
1174
|
+
void visit(JSFunction* fun) {
|
1175
|
+
count++;
|
1176
|
+
}
|
1177
|
+
int count;
|
1178
|
+
};
|
1179
|
+
|
1180
|
+
class CollectVisitor {
|
1181
|
+
public:
|
1182
|
+
explicit CollectVisitor(Handle<FixedArray> output)
|
1183
|
+
: m_output(output), m_pos(0) {}
|
1184
|
+
|
1185
|
+
void visit(JSFunction* fun) {
|
1186
|
+
m_output->set(m_pos, fun);
|
1187
|
+
m_pos++;
|
1188
|
+
}
|
1189
|
+
private:
|
1190
|
+
Handle<FixedArray> m_output;
|
1191
|
+
int m_pos;
|
1192
|
+
};
|
1193
|
+
};
|
1194
|
+
|
1195
|
+
|
1012
1196
|
// Check whether the code is natural function code (not a lazy-compile stub
|
1013
1197
|
// code).
|
1014
1198
|
static bool IsJSFunctionCode(Code* code) {
|
@@ -1039,23 +1223,15 @@ static bool IsInlined(JSFunction* function, SharedFunctionInfo* candidate) {
|
|
1039
1223
|
}
|
1040
1224
|
|
1041
1225
|
|
1042
|
-
class
|
1226
|
+
class DependentFunctionFilter : public OptimizedFunctionFilter {
|
1043
1227
|
public:
|
1044
|
-
explicit
|
1228
|
+
explicit DependentFunctionFilter(
|
1045
1229
|
SharedFunctionInfo* function_info)
|
1046
1230
|
: function_info_(function_info) {}
|
1047
1231
|
|
1048
|
-
virtual
|
1049
|
-
|
1050
|
-
|
1051
|
-
virtual void VisitFunction(JSFunction* function) {
|
1052
|
-
if (function->shared() == function_info_ ||
|
1053
|
-
IsInlined(function, function_info_)) {
|
1054
|
-
Deoptimizer::DeoptimizeFunction(function);
|
1055
|
-
}
|
1056
|
-
}
|
1057
|
-
|
1058
|
-
virtual void LeaveContext(Context* context) {
|
1232
|
+
virtual bool TakeFunction(JSFunction* function) {
|
1233
|
+
return (function->shared() == function_info_ ||
|
1234
|
+
IsInlined(function, function_info_));
|
1059
1235
|
}
|
1060
1236
|
|
1061
1237
|
private:
|
@@ -1066,8 +1242,8 @@ class DependentFunctionsDeoptimizingVisitor : public OptimizedFunctionVisitor {
|
|
1066
1242
|
static void DeoptimizeDependentFunctions(SharedFunctionInfo* function_info) {
|
1067
1243
|
AssertNoAllocation no_allocation;
|
1068
1244
|
|
1069
|
-
|
1070
|
-
Deoptimizer::
|
1245
|
+
DependentFunctionFilter filter(function_info);
|
1246
|
+
Deoptimizer::DeoptimizeAllFunctionsWith(&filter);
|
1071
1247
|
}
|
1072
1248
|
|
1073
1249
|
|
@@ -1075,9 +1251,10 @@ MaybeObject* LiveEdit::ReplaceFunctionCode(
|
|
1075
1251
|
Handle<JSArray> new_compile_info_array,
|
1076
1252
|
Handle<JSArray> shared_info_array) {
|
1077
1253
|
HandleScope scope;
|
1254
|
+
Isolate* isolate = Isolate::Current();
|
1078
1255
|
|
1079
1256
|
if (!SharedInfoWrapper::IsInstance(shared_info_array)) {
|
1080
|
-
return
|
1257
|
+
return isolate->ThrowIllegalOperation();
|
1081
1258
|
}
|
1082
1259
|
|
1083
1260
|
FunctionInfoWrapper compile_info_wrapper(new_compile_info_array);
|
@@ -1089,8 +1266,8 @@ MaybeObject* LiveEdit::ReplaceFunctionCode(
|
|
1089
1266
|
|
1090
1267
|
if (IsJSFunctionCode(shared_info->code())) {
|
1091
1268
|
Handle<Code> code = compile_info_wrapper.GetFunctionCode();
|
1092
|
-
ReplaceCodeObject(shared_info->code(),
|
1093
|
-
Handle<Object> code_scope_info =
|
1269
|
+
ReplaceCodeObject(Handle<Code>(shared_info->code()), code);
|
1270
|
+
Handle<Object> code_scope_info = compile_info_wrapper.GetCodeScopeInfo();
|
1094
1271
|
if (code_scope_info->IsFixedArray()) {
|
1095
1272
|
shared_info->set_scope_info(ScopeInfo::cast(*code_scope_info));
|
1096
1273
|
}
|
@@ -1108,6 +1285,8 @@ MaybeObject* LiveEdit::ReplaceFunctionCode(
|
|
1108
1285
|
shared_info->set_start_position(start_position);
|
1109
1286
|
shared_info->set_end_position(end_position);
|
1110
1287
|
|
1288
|
+
LiteralFixer::PatchLiterals(&compile_info_wrapper, shared_info, isolate);
|
1289
|
+
|
1111
1290
|
shared_info->set_construct_stub(
|
1112
1291
|
Isolate::Current()->builtins()->builtin(
|
1113
1292
|
Builtins::kJSConstructStubGeneric));
|
@@ -1140,7 +1319,8 @@ MaybeObject* LiveEdit::FunctionSourceUpdated(
|
|
1140
1319
|
void LiveEdit::SetFunctionScript(Handle<JSValue> function_wrapper,
|
1141
1320
|
Handle<Object> script_handle) {
|
1142
1321
|
Handle<SharedFunctionInfo> shared_info =
|
1143
|
-
|
1322
|
+
UnwrapSharedFunctionInfoFromJSValue(function_wrapper);
|
1323
|
+
CHECK(script_handle->IsScript() || script_handle->IsUndefined());
|
1144
1324
|
shared_info->set_script(*script_handle);
|
1145
1325
|
|
1146
1326
|
Isolate::Current()->compilation_cache()->Remove(shared_info);
|
@@ -1159,19 +1339,22 @@ void LiveEdit::SetFunctionScript(Handle<JSValue> function_wrapper,
|
|
1159
1339
|
static int TranslatePosition(int original_position,
|
1160
1340
|
Handle<JSArray> position_change_array) {
|
1161
1341
|
int position_diff = 0;
|
1162
|
-
int array_len =
|
1342
|
+
int array_len = GetArrayLength(position_change_array);
|
1163
1343
|
// TODO(635): binary search may be used here
|
1164
1344
|
for (int i = 0; i < array_len; i += 3) {
|
1165
1345
|
Object* element = position_change_array->GetElementNoExceptionThrown(i);
|
1346
|
+
CHECK(element->IsSmi());
|
1166
1347
|
int chunk_start = Smi::cast(element)->value();
|
1167
1348
|
if (original_position < chunk_start) {
|
1168
1349
|
break;
|
1169
1350
|
}
|
1170
1351
|
element = position_change_array->GetElementNoExceptionThrown(i + 1);
|
1352
|
+
CHECK(element->IsSmi());
|
1171
1353
|
int chunk_end = Smi::cast(element)->value();
|
1172
1354
|
// Position mustn't be inside a chunk.
|
1173
1355
|
ASSERT(original_position >= chunk_end);
|
1174
1356
|
element = position_change_array->GetElementNoExceptionThrown(i + 2);
|
1357
|
+
CHECK(element->IsSmi());
|
1175
1358
|
int chunk_changed_end = Smi::cast(element)->value();
|
1176
1359
|
position_diff = chunk_changed_end - chunk_end;
|
1177
1360
|
}
|
@@ -1278,7 +1461,9 @@ static Handle<Code> PatchPositionsInCode(
|
|
1278
1461
|
continue;
|
1279
1462
|
}
|
1280
1463
|
}
|
1281
|
-
|
1464
|
+
if (RelocInfo::IsRealRelocMode(rinfo->rmode())) {
|
1465
|
+
buffer_writer.Write(it.rinfo());
|
1466
|
+
}
|
1282
1467
|
}
|
1283
1468
|
}
|
1284
1469
|
|
@@ -1300,7 +1485,6 @@ static Handle<Code> PatchPositionsInCode(
|
|
1300
1485
|
|
1301
1486
|
MaybeObject* LiveEdit::PatchFunctionPositions(
|
1302
1487
|
Handle<JSArray> shared_info_array, Handle<JSArray> position_change_array) {
|
1303
|
-
|
1304
1488
|
if (!SharedInfoWrapper::IsInstance(shared_info_array)) {
|
1305
1489
|
return Isolate::Current()->ThrowIllegalOperation();
|
1306
1490
|
}
|
@@ -1332,7 +1516,7 @@ MaybeObject* LiveEdit::PatchFunctionPositions(
|
|
1332
1516
|
// on stack (it is safe to substitute the code object on stack, because
|
1333
1517
|
// we only change the structure of rinfo and leave instructions
|
1334
1518
|
// untouched).
|
1335
|
-
ReplaceCodeObject(info->code(),
|
1519
|
+
ReplaceCodeObject(Handle<Code>(info->code()), patched_code);
|
1336
1520
|
}
|
1337
1521
|
}
|
1338
1522
|
|
@@ -1390,11 +1574,11 @@ void LiveEdit::ReplaceRefToNestedFunction(
|
|
1390
1574
|
Handle<JSValue> subst_function_wrapper) {
|
1391
1575
|
|
1392
1576
|
Handle<SharedFunctionInfo> parent_shared =
|
1393
|
-
|
1577
|
+
UnwrapSharedFunctionInfoFromJSValue(parent_function_wrapper);
|
1394
1578
|
Handle<SharedFunctionInfo> orig_shared =
|
1395
|
-
|
1579
|
+
UnwrapSharedFunctionInfoFromJSValue(orig_function_wrapper);
|
1396
1580
|
Handle<SharedFunctionInfo> subst_shared =
|
1397
|
-
|
1581
|
+
UnwrapSharedFunctionInfoFromJSValue(subst_function_wrapper);
|
1398
1582
|
|
1399
1583
|
for (RelocIterator it(parent_shared->code()); !it.done(); it.next()) {
|
1400
1584
|
if (it.rinfo()->rmode() == RelocInfo::EMBEDDED_OBJECT) {
|
@@ -1417,12 +1601,13 @@ static bool CheckActivation(Handle<JSArray> shared_info_array,
|
|
1417
1601
|
Handle<JSFunction> function(
|
1418
1602
|
JSFunction::cast(JavaScriptFrame::cast(frame)->function()));
|
1419
1603
|
|
1420
|
-
int len =
|
1604
|
+
int len = GetArrayLength(shared_info_array);
|
1421
1605
|
for (int i = 0; i < len; i++) {
|
1422
|
-
|
1423
|
-
|
1424
|
-
Handle<
|
1425
|
-
|
1606
|
+
Object* element = shared_info_array->GetElementNoExceptionThrown(i);
|
1607
|
+
CHECK(element->IsJSValue());
|
1608
|
+
Handle<JSValue> jsvalue(JSValue::cast(element));
|
1609
|
+
Handle<SharedFunctionInfo> shared =
|
1610
|
+
UnwrapSharedFunctionInfoFromJSValue(jsvalue);
|
1426
1611
|
|
1427
1612
|
if (function->shared() == *shared || IsInlined(*function, *shared)) {
|
1428
1613
|
SetElementNonStrict(result, i, Handle<Smi>(Smi::FromInt(status)));
|
@@ -1478,7 +1663,7 @@ static const char* DropFrames(Vector<StackFrame*> frames,
|
|
1478
1663
|
Code* pre_top_frame_code = pre_top_frame->LookupCode();
|
1479
1664
|
bool frame_has_padding;
|
1480
1665
|
if (pre_top_frame_code->is_inline_cache_stub() &&
|
1481
|
-
pre_top_frame_code->
|
1666
|
+
pre_top_frame_code->is_debug_break()) {
|
1482
1667
|
// OK, we can drop inline cache calls.
|
1483
1668
|
*mode = Debug::FRAME_DROPPED_IN_IC_CALL;
|
1484
1669
|
frame_has_padding = Debug::FramePaddingLayout::kIsSupported;
|
@@ -1491,7 +1676,9 @@ static const char* DropFrames(Vector<StackFrame*> frames,
|
|
1491
1676
|
isolate->builtins()->builtin(
|
1492
1677
|
Builtins::kFrameDropper_LiveEdit)) {
|
1493
1678
|
// OK, we can drop our own code.
|
1494
|
-
|
1679
|
+
pre_top_frame = frames[top_frame_index - 2];
|
1680
|
+
top_frame = frames[top_frame_index - 1];
|
1681
|
+
*mode = Debug::CURRENTLY_SET_MODE;
|
1495
1682
|
frame_has_padding = false;
|
1496
1683
|
} else if (pre_top_frame_code ==
|
1497
1684
|
isolate->builtins()->builtin(Builtins::kReturn_DebugBreak)) {
|
@@ -1506,6 +1693,15 @@ static const char* DropFrames(Vector<StackFrame*> frames,
|
|
1506
1693
|
// Here the stub is CEntry, it's not debug-only and can't be padded.
|
1507
1694
|
// If anyone would complain, a proxy padded stub could be added.
|
1508
1695
|
frame_has_padding = false;
|
1696
|
+
} else if (pre_top_frame->type() == StackFrame::ARGUMENTS_ADAPTOR) {
|
1697
|
+
// This must be adaptor that remain from the frame dropping that
|
1698
|
+
// is still on stack. A frame dropper frame must be above it.
|
1699
|
+
ASSERT(frames[top_frame_index - 2]->LookupCode() ==
|
1700
|
+
isolate->builtins()->builtin(Builtins::kFrameDropper_LiveEdit));
|
1701
|
+
pre_top_frame = frames[top_frame_index - 3];
|
1702
|
+
top_frame = frames[top_frame_index - 2];
|
1703
|
+
*mode = Debug::CURRENTLY_SET_MODE;
|
1704
|
+
frame_has_padding = false;
|
1509
1705
|
} else {
|
1510
1706
|
return "Unknown structure of stack above changing function";
|
1511
1707
|
}
|
@@ -1589,16 +1785,36 @@ static bool IsDropableFrame(StackFrame* frame) {
|
|
1589
1785
|
return !frame->is_exit();
|
1590
1786
|
}
|
1591
1787
|
|
1592
|
-
|
1593
|
-
//
|
1594
|
-
|
1595
|
-
|
1788
|
+
|
1789
|
+
// Describes a set of call frames that execute any of listed functions.
|
1790
|
+
// Finding no such frames does not mean error.
|
1791
|
+
class MultipleFunctionTarget {
|
1792
|
+
public:
|
1793
|
+
MultipleFunctionTarget(Handle<JSArray> shared_info_array,
|
1794
|
+
Handle<JSArray> result)
|
1795
|
+
: m_shared_info_array(shared_info_array),
|
1796
|
+
m_result(result) {}
|
1797
|
+
bool MatchActivation(StackFrame* frame,
|
1798
|
+
LiveEdit::FunctionPatchabilityStatus status) {
|
1799
|
+
return CheckActivation(m_shared_info_array, m_result, frame, status);
|
1800
|
+
}
|
1801
|
+
const char* GetNotFoundMessage() {
|
1802
|
+
return NULL;
|
1803
|
+
}
|
1804
|
+
private:
|
1805
|
+
Handle<JSArray> m_shared_info_array;
|
1806
|
+
Handle<JSArray> m_result;
|
1807
|
+
};
|
1808
|
+
|
1809
|
+
// Drops all call frame matched by target and all frames above them.
|
1810
|
+
template<typename TARGET>
|
1811
|
+
static const char* DropActivationsInActiveThreadImpl(
|
1812
|
+
TARGET& target, bool do_drop, Zone* zone) {
|
1596
1813
|
Isolate* isolate = Isolate::Current();
|
1597
1814
|
Debug* debug = isolate->debug();
|
1598
|
-
ZoneScope scope(
|
1599
|
-
Vector<StackFrame*> frames = CreateStackMap();
|
1815
|
+
ZoneScope scope(zone, DELETE_ON_EXIT);
|
1816
|
+
Vector<StackFrame*> frames = CreateStackMap(zone);
|
1600
1817
|
|
1601
|
-
int array_len = Smi::cast(shared_info_array->length())->value();
|
1602
1818
|
|
1603
1819
|
int top_frame_index = -1;
|
1604
1820
|
int frame_index = 0;
|
@@ -1608,8 +1824,8 @@ static const char* DropActivationsInActiveThread(
|
|
1608
1824
|
top_frame_index = frame_index;
|
1609
1825
|
break;
|
1610
1826
|
}
|
1611
|
-
if (
|
1612
|
-
|
1827
|
+
if (target.MatchActivation(
|
1828
|
+
frame, LiveEdit::FUNCTION_BLOCKED_UNDER_NATIVE_CODE)) {
|
1613
1829
|
// We are still above break_frame. It is not a target frame,
|
1614
1830
|
// it is a problem.
|
1615
1831
|
return "Debugger mark-up on stack is not found";
|
@@ -1618,7 +1834,7 @@ static const char* DropActivationsInActiveThread(
|
|
1618
1834
|
|
1619
1835
|
if (top_frame_index == -1) {
|
1620
1836
|
// We haven't found break frame, but no function is blocking us anyway.
|
1621
|
-
return
|
1837
|
+
return target.GetNotFoundMessage();
|
1622
1838
|
}
|
1623
1839
|
|
1624
1840
|
bool target_frame_found = false;
|
@@ -1631,8 +1847,8 @@ static const char* DropActivationsInActiveThread(
|
|
1631
1847
|
c_code_found = true;
|
1632
1848
|
break;
|
1633
1849
|
}
|
1634
|
-
if (
|
1635
|
-
|
1850
|
+
if (target.MatchActivation(
|
1851
|
+
frame, LiveEdit::FUNCTION_BLOCKED_ON_ACTIVE_STACK)) {
|
1636
1852
|
target_frame_found = true;
|
1637
1853
|
bottom_js_frame_index = frame_index;
|
1638
1854
|
}
|
@@ -1644,8 +1860,8 @@ static const char* DropActivationsInActiveThread(
|
|
1644
1860
|
for (; frame_index < frames.length(); frame_index++) {
|
1645
1861
|
StackFrame* frame = frames[frame_index];
|
1646
1862
|
if (frame->is_java_script()) {
|
1647
|
-
if (
|
1648
|
-
|
1863
|
+
if (target.MatchActivation(
|
1864
|
+
frame, LiveEdit::FUNCTION_BLOCKED_UNDER_NATIVE_CODE)) {
|
1649
1865
|
// Cannot drop frame under C frames.
|
1650
1866
|
return NULL;
|
1651
1867
|
}
|
@@ -1660,7 +1876,7 @@ static const char* DropActivationsInActiveThread(
|
|
1660
1876
|
|
1661
1877
|
if (!target_frame_found) {
|
1662
1878
|
// Nothing to drop.
|
1663
|
-
return
|
1879
|
+
return target.GetNotFoundMessage();
|
1664
1880
|
}
|
1665
1881
|
|
1666
1882
|
Debug::FrameDropMode drop_mode = Debug::FRAMES_UNTOUCHED;
|
@@ -1683,6 +1899,23 @@ static const char* DropActivationsInActiveThread(
|
|
1683
1899
|
}
|
1684
1900
|
debug->FramesHaveBeenDropped(new_id, drop_mode,
|
1685
1901
|
restarter_frame_function_pointer);
|
1902
|
+
return NULL;
|
1903
|
+
}
|
1904
|
+
|
1905
|
+
// Fills result array with statuses of functions. Modifies the stack
|
1906
|
+
// removing all listed function if possible and if do_drop is true.
|
1907
|
+
static const char* DropActivationsInActiveThread(
|
1908
|
+
Handle<JSArray> shared_info_array, Handle<JSArray> result, bool do_drop,
|
1909
|
+
Zone* zone) {
|
1910
|
+
MultipleFunctionTarget target(shared_info_array, result);
|
1911
|
+
|
1912
|
+
const char* message =
|
1913
|
+
DropActivationsInActiveThreadImpl(target, do_drop, zone);
|
1914
|
+
if (message) {
|
1915
|
+
return message;
|
1916
|
+
}
|
1917
|
+
|
1918
|
+
int array_len = GetArrayLength(shared_info_array);
|
1686
1919
|
|
1687
1920
|
// Replace "blocked on active" with "replaced on active" status.
|
1688
1921
|
for (int i = 0; i < array_len; i++) {
|
@@ -1723,8 +1956,8 @@ class InactiveThreadActivationsChecker : public ThreadVisitor {
|
|
1723
1956
|
|
1724
1957
|
|
1725
1958
|
Handle<JSArray> LiveEdit::CheckAndDropActivations(
|
1726
|
-
Handle<JSArray> shared_info_array, bool do_drop) {
|
1727
|
-
int len =
|
1959
|
+
Handle<JSArray> shared_info_array, bool do_drop, Zone* zone) {
|
1960
|
+
int len = GetArrayLength(shared_info_array);
|
1728
1961
|
|
1729
1962
|
Handle<JSArray> result = FACTORY->NewJSArray(len);
|
1730
1963
|
|
@@ -1748,7 +1981,7 @@ Handle<JSArray> LiveEdit::CheckAndDropActivations(
|
|
1748
1981
|
|
1749
1982
|
// Try to drop activations from the current stack.
|
1750
1983
|
const char* error_message =
|
1751
|
-
DropActivationsInActiveThread(shared_info_array, result, do_drop);
|
1984
|
+
DropActivationsInActiveThread(shared_info_array, result, do_drop, zone);
|
1752
1985
|
if (error_message != NULL) {
|
1753
1986
|
// Add error message as an array extra element.
|
1754
1987
|
Vector<const char> vector_message(error_message, StrLength(error_message));
|
@@ -1759,6 +1992,50 @@ Handle<JSArray> LiveEdit::CheckAndDropActivations(
|
|
1759
1992
|
}
|
1760
1993
|
|
1761
1994
|
|
1995
|
+
// Describes a single callframe a target. Not finding this frame
|
1996
|
+
// means an error.
|
1997
|
+
class SingleFrameTarget {
|
1998
|
+
public:
|
1999
|
+
explicit SingleFrameTarget(JavaScriptFrame* frame)
|
2000
|
+
: m_frame(frame),
|
2001
|
+
m_saved_status(LiveEdit::FUNCTION_AVAILABLE_FOR_PATCH) {}
|
2002
|
+
|
2003
|
+
bool MatchActivation(StackFrame* frame,
|
2004
|
+
LiveEdit::FunctionPatchabilityStatus status) {
|
2005
|
+
if (frame->fp() == m_frame->fp()) {
|
2006
|
+
m_saved_status = status;
|
2007
|
+
return true;
|
2008
|
+
}
|
2009
|
+
return false;
|
2010
|
+
}
|
2011
|
+
const char* GetNotFoundMessage() {
|
2012
|
+
return "Failed to found requested frame";
|
2013
|
+
}
|
2014
|
+
LiveEdit::FunctionPatchabilityStatus saved_status() {
|
2015
|
+
return m_saved_status;
|
2016
|
+
}
|
2017
|
+
private:
|
2018
|
+
JavaScriptFrame* m_frame;
|
2019
|
+
LiveEdit::FunctionPatchabilityStatus m_saved_status;
|
2020
|
+
};
|
2021
|
+
|
2022
|
+
|
2023
|
+
// Finds a drops required frame and all frames above.
|
2024
|
+
// Returns error message or NULL.
|
2025
|
+
const char* LiveEdit::RestartFrame(JavaScriptFrame* frame, Zone* zone) {
|
2026
|
+
SingleFrameTarget target(frame);
|
2027
|
+
|
2028
|
+
const char* result = DropActivationsInActiveThreadImpl(target, true, zone);
|
2029
|
+
if (result != NULL) {
|
2030
|
+
return result;
|
2031
|
+
}
|
2032
|
+
if (target.saved_status() == LiveEdit::FUNCTION_BLOCKED_UNDER_NATIVE_CODE) {
|
2033
|
+
return "Function is blocked under native code";
|
2034
|
+
}
|
2035
|
+
return NULL;
|
2036
|
+
}
|
2037
|
+
|
2038
|
+
|
1762
2039
|
LiveEditFunctionTracker::LiveEditFunctionTracker(Isolate* isolate,
|
1763
2040
|
FunctionLiteral* fun)
|
1764
2041
|
: isolate_(isolate) {
|
@@ -1776,9 +2053,11 @@ LiveEditFunctionTracker::~LiveEditFunctionTracker() {
|
|
1776
2053
|
|
1777
2054
|
|
1778
2055
|
void LiveEditFunctionTracker::RecordFunctionInfo(
|
1779
|
-
Handle<SharedFunctionInfo> info, FunctionLiteral* lit
|
2056
|
+
Handle<SharedFunctionInfo> info, FunctionLiteral* lit,
|
2057
|
+
Zone* zone) {
|
1780
2058
|
if (isolate_->active_function_info_listener() != NULL) {
|
1781
|
-
isolate_->active_function_info_listener()->FunctionInfo(info, lit->scope()
|
2059
|
+
isolate_->active_function_info_listener()->FunctionInfo(info, lit->scope(),
|
2060
|
+
zone);
|
1782
2061
|
}
|
1783
2062
|
}
|
1784
2063
|
|
@@ -1807,7 +2086,8 @@ LiveEditFunctionTracker::~LiveEditFunctionTracker() {
|
|
1807
2086
|
|
1808
2087
|
|
1809
2088
|
void LiveEditFunctionTracker::RecordFunctionInfo(
|
1810
|
-
Handle<SharedFunctionInfo> info, FunctionLiteral* lit
|
2089
|
+
Handle<SharedFunctionInfo> info, FunctionLiteral* lit,
|
2090
|
+
Zone* zone) {
|
1811
2091
|
}
|
1812
2092
|
|
1813
2093
|
|