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/jsregexp.h
CHANGED
@@ -1424,7 +1424,7 @@ class RegExpEngine: public AllStatic {
|
|
1424
1424
|
struct CompilationResult {
|
1425
1425
|
explicit CompilationResult(const char* error_message)
|
1426
1426
|
: error_message(error_message),
|
1427
|
-
code(
|
1427
|
+
code(HEAP->the_hole_value()),
|
1428
1428
|
num_registers(0) {}
|
1429
1429
|
CompilationResult(Object* code, int registers)
|
1430
1430
|
: error_message(NULL),
|
@@ -1449,14 +1449,14 @@ class OffsetsVector {
|
|
1449
1449
|
public:
|
1450
1450
|
inline OffsetsVector(int num_registers)
|
1451
1451
|
: offsets_vector_length_(num_registers) {
|
1452
|
-
if (offsets_vector_length_ >
|
1452
|
+
if (offsets_vector_length_ > Isolate::kJSRegexpStaticOffsetsVectorSize) {
|
1453
1453
|
vector_ = NewArray<int>(offsets_vector_length_);
|
1454
1454
|
} else {
|
1455
|
-
vector_ =
|
1455
|
+
vector_ = Isolate::Current()->jsregexp_static_offsets_vector();
|
1456
1456
|
}
|
1457
1457
|
}
|
1458
1458
|
inline ~OffsetsVector() {
|
1459
|
-
if (offsets_vector_length_ >
|
1459
|
+
if (offsets_vector_length_ > Isolate::kJSRegexpStaticOffsetsVectorSize) {
|
1460
1460
|
DeleteArray(vector_);
|
1461
1461
|
vector_ = NULL;
|
1462
1462
|
}
|
@@ -1467,13 +1467,12 @@ class OffsetsVector {
|
|
1467
1467
|
static const int kStaticOffsetsVectorSize = 50;
|
1468
1468
|
|
1469
1469
|
private:
|
1470
|
-
static Address static_offsets_vector_address() {
|
1471
|
-
return reinterpret_cast<Address>(
|
1470
|
+
static Address static_offsets_vector_address(Isolate* isolate) {
|
1471
|
+
return reinterpret_cast<Address>(isolate->jsregexp_static_offsets_vector());
|
1472
1472
|
}
|
1473
1473
|
|
1474
1474
|
int* vector_;
|
1475
1475
|
int offsets_vector_length_;
|
1476
|
-
static int static_offsets_vector_[kStaticOffsetsVectorSize];
|
1477
1476
|
|
1478
1477
|
friend class ExternalReference;
|
1479
1478
|
};
|
@@ -35,9 +35,6 @@ namespace v8 {
|
|
35
35
|
namespace internal {
|
36
36
|
|
37
37
|
|
38
|
-
bool JumpTarget::compiling_deferred_code_ = false;
|
39
|
-
|
40
|
-
|
41
38
|
void JumpTarget::Jump(Result* arg) {
|
42
39
|
ASSERT(cgen()->has_valid_frame());
|
43
40
|
|
@@ -143,9 +140,9 @@ void JumpTarget::ComputeEntryFrame() {
|
|
143
140
|
// the directionality of the block. Compute: an entry frame for the
|
144
141
|
// block.
|
145
142
|
|
146
|
-
|
143
|
+
Isolate::Current()->counters()->compute_entry_frame()->Increment();
|
147
144
|
#ifdef DEBUG
|
148
|
-
if (
|
145
|
+
if (Isolate::Current()->jump_target_compiling_deferred_code()) {
|
149
146
|
ASSERT(reaching_frames_.length() > 1);
|
150
147
|
VirtualFrame* frame = reaching_frames_[0];
|
151
148
|
bool all_identical = true;
|
@@ -413,15 +410,15 @@ void BreakTarget::Branch(Condition cc, Hint hint) {
|
|
413
410
|
|
414
411
|
|
415
412
|
DeferredCode::DeferredCode()
|
416
|
-
: masm_(CodeGeneratorScope::Current()->masm()),
|
413
|
+
: masm_(CodeGeneratorScope::Current(Isolate::Current())->masm()),
|
417
414
|
statement_position_(masm_->positions_recorder()->
|
418
415
|
current_statement_position()),
|
419
416
|
position_(masm_->positions_recorder()->current_position()),
|
420
|
-
frame_state_(CodeGeneratorScope::Current()->frame()) {
|
417
|
+
frame_state_(CodeGeneratorScope::Current(Isolate::Current())->frame()) {
|
421
418
|
ASSERT(statement_position_ != RelocInfo::kNoPosition);
|
422
419
|
ASSERT(position_ != RelocInfo::kNoPosition);
|
423
420
|
|
424
|
-
CodeGeneratorScope::Current()->AddDeferred(this);
|
421
|
+
CodeGeneratorScope::Current(Isolate::Current())->AddDeferred(this);
|
425
422
|
#ifdef DEBUG
|
426
423
|
comment_ = "";
|
427
424
|
#endif
|
@@ -135,10 +135,6 @@ class JumpTarget : public ZoneObject { // Shadows are dynamically allocated.
|
|
135
135
|
// after the call is the same as the frame before the call.
|
136
136
|
void Call();
|
137
137
|
|
138
|
-
static void set_compiling_deferred_code(bool flag) {
|
139
|
-
compiling_deferred_code_ = flag;
|
140
|
-
}
|
141
|
-
|
142
138
|
protected:
|
143
139
|
// Directionality flag set at initialization time.
|
144
140
|
Directionality direction_;
|
@@ -164,8 +160,6 @@ class JumpTarget : public ZoneObject { // Shadows are dynamically allocated.
|
|
164
160
|
void DoBind();
|
165
161
|
|
166
162
|
private:
|
167
|
-
static bool compiling_deferred_code_;
|
168
|
-
|
169
163
|
// Add a virtual frame reaching this labeled block via a forward jump,
|
170
164
|
// and a corresponding merge code label.
|
171
165
|
void AddReachingFrame(VirtualFrame* frame);
|
@@ -35,15 +35,15 @@ namespace internal {
|
|
35
35
|
|
36
36
|
|
37
37
|
DeferredCode::DeferredCode()
|
38
|
-
: masm_(CodeGeneratorScope::Current()->masm()),
|
38
|
+
: masm_(CodeGeneratorScope::Current(Isolate::Current())->masm()),
|
39
39
|
statement_position_(masm_->positions_recorder()->
|
40
40
|
current_statement_position()),
|
41
41
|
position_(masm_->positions_recorder()->current_position()),
|
42
|
-
frame_state_(*CodeGeneratorScope::Current()->frame()) {
|
42
|
+
frame_state_(*CodeGeneratorScope::Current(Isolate::Current())->frame()) {
|
43
43
|
ASSERT(statement_position_ != RelocInfo::kNoPosition);
|
44
44
|
ASSERT(position_ != RelocInfo::kNoPosition);
|
45
45
|
|
46
|
-
CodeGeneratorScope::Current()->AddDeferred(this);
|
46
|
+
CodeGeneratorScope::Current(Isolate::Current())->AddDeferred(this);
|
47
47
|
|
48
48
|
#ifdef DEBUG
|
49
49
|
comment_ = "";
|
@@ -25,6 +25,7 @@
|
|
25
25
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
26
26
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
27
27
|
|
28
|
+
#include "v8.h"
|
28
29
|
#include "lithium-allocator-inl.h"
|
29
30
|
|
30
31
|
#include "hydrogen.h"
|
@@ -36,6 +37,8 @@
|
|
36
37
|
#include "x64/lithium-x64.h"
|
37
38
|
#elif V8_TARGET_ARCH_ARM
|
38
39
|
#include "arm/lithium-arm.h"
|
40
|
+
#elif V8_TARGET_ARCH_MIPS
|
41
|
+
#include "mips/lithium-mips.h"
|
39
42
|
#else
|
40
43
|
#error "Unknown architecture."
|
41
44
|
#endif
|
@@ -44,13 +47,18 @@ namespace v8 {
|
|
44
47
|
namespace internal {
|
45
48
|
|
46
49
|
|
47
|
-
#define DEFINE_OPERAND_CACHE(name, type)
|
48
|
-
name name::cache[name::kNumCachedOperands];
|
49
|
-
void name::SetupCache() {
|
50
|
-
for (int i = 0; i < kNumCachedOperands; i++) {
|
51
|
-
cache[i].ConvertTo(type, i);
|
52
|
-
}
|
53
|
-
}
|
50
|
+
#define DEFINE_OPERAND_CACHE(name, type) \
|
51
|
+
name name::cache[name::kNumCachedOperands]; \
|
52
|
+
void name::SetupCache() { \
|
53
|
+
for (int i = 0; i < kNumCachedOperands; i++) { \
|
54
|
+
cache[i].ConvertTo(type, i); \
|
55
|
+
} \
|
56
|
+
} \
|
57
|
+
static bool name##_initialize() { \
|
58
|
+
name::SetupCache(); \
|
59
|
+
return true; \
|
60
|
+
} \
|
61
|
+
static bool name##_cache_initialized = name##_initialize();
|
54
62
|
|
55
63
|
DEFINE_OPERAND_CACHE(LConstantOperand, CONSTANT_OPERAND)
|
56
64
|
DEFINE_OPERAND_CACHE(LStackSlot, STACK_SLOT)
|
@@ -525,6 +533,24 @@ LifetimePosition LiveRange::FirstIntersection(LiveRange* other) {
|
|
525
533
|
}
|
526
534
|
|
527
535
|
|
536
|
+
LAllocator::LAllocator(int num_values, HGraph* graph)
|
537
|
+
: chunk_(NULL),
|
538
|
+
live_in_sets_(graph->blocks()->length()),
|
539
|
+
live_ranges_(num_values * 2),
|
540
|
+
fixed_live_ranges_(NULL),
|
541
|
+
fixed_double_live_ranges_(NULL),
|
542
|
+
unhandled_live_ranges_(num_values * 2),
|
543
|
+
active_live_ranges_(8),
|
544
|
+
inactive_live_ranges_(8),
|
545
|
+
reusable_slots_(8),
|
546
|
+
next_virtual_register_(num_values),
|
547
|
+
first_artificial_register_(num_values),
|
548
|
+
mode_(NONE),
|
549
|
+
num_registers_(-1),
|
550
|
+
graph_(graph),
|
551
|
+
has_osr_entry_(false) {}
|
552
|
+
|
553
|
+
|
528
554
|
void LAllocator::InitializeLivenessAnalysis() {
|
529
555
|
// Initialize the live_in sets for each block to NULL.
|
530
556
|
int block_count = graph_->blocks()->length();
|
@@ -618,11 +644,7 @@ LOperand* LAllocator::AllocateFixed(LUnallocated* operand,
|
|
618
644
|
|
619
645
|
|
620
646
|
LiveRange* LAllocator::FixedLiveRangeFor(int index) {
|
621
|
-
|
622
|
-
fixed_live_ranges_.AddBlock(NULL,
|
623
|
-
index - fixed_live_ranges_.length() + 1);
|
624
|
-
}
|
625
|
-
|
647
|
+
ASSERT(index < Register::kNumAllocatableRegisters);
|
626
648
|
LiveRange* result = fixed_live_ranges_[index];
|
627
649
|
if (result == NULL) {
|
628
650
|
result = new LiveRange(FixedLiveRangeID(index));
|
@@ -635,11 +657,7 @@ LiveRange* LAllocator::FixedLiveRangeFor(int index) {
|
|
635
657
|
|
636
658
|
|
637
659
|
LiveRange* LAllocator::FixedDoubleLiveRangeFor(int index) {
|
638
|
-
|
639
|
-
fixed_double_live_ranges_.AddBlock(NULL,
|
640
|
-
index - fixed_double_live_ranges_.length() + 1);
|
641
|
-
}
|
642
|
-
|
660
|
+
ASSERT(index < DoubleRegister::kNumAllocatableRegisters);
|
643
661
|
LiveRange* result = fixed_double_live_ranges_[index];
|
644
662
|
if (result == NULL) {
|
645
663
|
result = new LiveRange(FixedDoubleLiveRangeID(index));
|
@@ -650,6 +668,7 @@ LiveRange* LAllocator::FixedDoubleLiveRangeFor(int index) {
|
|
650
668
|
return result;
|
651
669
|
}
|
652
670
|
|
671
|
+
|
653
672
|
LiveRange* LAllocator::LiveRangeFor(int index) {
|
654
673
|
if (index >= live_ranges_.length()) {
|
655
674
|
live_ranges_.AddBlock(NULL, index - live_ranges_.length() + 1);
|
@@ -1274,7 +1293,7 @@ void LAllocator::BuildLiveRanges() {
|
|
1274
1293
|
found = true;
|
1275
1294
|
int operand_index = iterator.Current();
|
1276
1295
|
PrintF("Function: %s\n",
|
1277
|
-
*
|
1296
|
+
*chunk_->info()->function()->debug_name()->ToCString());
|
1278
1297
|
PrintF("Value %d used before first definition!\n", operand_index);
|
1279
1298
|
LiveRange* range = LiveRangeFor(operand_index);
|
1280
1299
|
PrintF("First use is at %d\n", range->first_pos()->pos().Value());
|
@@ -1436,7 +1455,7 @@ void LAllocator::AllocateDoubleRegisters() {
|
|
1436
1455
|
|
1437
1456
|
void LAllocator::AllocateRegisters() {
|
1438
1457
|
ASSERT(mode_ != NONE);
|
1439
|
-
|
1458
|
+
ASSERT(unhandled_live_ranges_.is_empty());
|
1440
1459
|
|
1441
1460
|
for (int i = 0; i < live_ranges_.length(); ++i) {
|
1442
1461
|
if (live_ranges_[i] != NULL) {
|
@@ -1448,6 +1467,7 @@ void LAllocator::AllocateRegisters() {
|
|
1448
1467
|
SortUnhandled();
|
1449
1468
|
ASSERT(UnhandledIsSorted());
|
1450
1469
|
|
1470
|
+
ASSERT(reusable_slots_.is_empty());
|
1451
1471
|
ASSERT(active_live_ranges_.is_empty());
|
1452
1472
|
ASSERT(inactive_live_ranges_.is_empty());
|
1453
1473
|
|
@@ -1532,17 +1552,9 @@ void LAllocator::AllocateRegisters() {
|
|
1532
1552
|
}
|
1533
1553
|
}
|
1534
1554
|
|
1535
|
-
|
1536
|
-
|
1537
|
-
|
1538
|
-
|
1539
|
-
|
1540
|
-
void LAllocator::Setup() {
|
1541
|
-
LConstantOperand::SetupCache();
|
1542
|
-
LStackSlot::SetupCache();
|
1543
|
-
LDoubleStackSlot::SetupCache();
|
1544
|
-
LRegister::SetupCache();
|
1545
|
-
LDoubleRegister::SetupCache();
|
1555
|
+
reusable_slots_.Rewind(0);
|
1556
|
+
active_live_ranges_.Rewind(0);
|
1557
|
+
inactive_live_ranges_.Rewind(0);
|
1546
1558
|
}
|
1547
1559
|
|
1548
1560
|
|
@@ -428,24 +428,8 @@ class GrowableBitVector BASE_EMBEDDED {
|
|
428
428
|
|
429
429
|
class LAllocator BASE_EMBEDDED {
|
430
430
|
public:
|
431
|
-
|
432
|
-
|
433
|
-
live_in_sets_(0),
|
434
|
-
live_ranges_(16),
|
435
|
-
fixed_live_ranges_(8),
|
436
|
-
fixed_double_live_ranges_(8),
|
437
|
-
unhandled_live_ranges_(8),
|
438
|
-
active_live_ranges_(8),
|
439
|
-
inactive_live_ranges_(8),
|
440
|
-
reusable_slots_(8),
|
441
|
-
next_virtual_register_(first_virtual_register),
|
442
|
-
first_artificial_register_(first_virtual_register),
|
443
|
-
mode_(NONE),
|
444
|
-
num_registers_(-1),
|
445
|
-
graph_(graph),
|
446
|
-
has_osr_entry_(false) {}
|
447
|
-
|
448
|
-
static void Setup();
|
431
|
+
LAllocator(int first_virtual_register, HGraph* graph);
|
432
|
+
|
449
433
|
static void TraceAlloc(const char* msg, ...);
|
450
434
|
|
451
435
|
// Lithium translation support.
|
@@ -468,10 +452,10 @@ class LAllocator BASE_EMBEDDED {
|
|
468
452
|
void Allocate(LChunk* chunk);
|
469
453
|
|
470
454
|
const ZoneList<LiveRange*>* live_ranges() const { return &live_ranges_; }
|
471
|
-
const
|
455
|
+
const Vector<LiveRange*>* fixed_live_ranges() const {
|
472
456
|
return &fixed_live_ranges_;
|
473
457
|
}
|
474
|
-
const
|
458
|
+
const Vector<LiveRange*>* fixed_double_live_ranges() const {
|
475
459
|
return &fixed_double_live_ranges_;
|
476
460
|
}
|
477
461
|
|
@@ -616,8 +600,10 @@ class LAllocator BASE_EMBEDDED {
|
|
616
600
|
ZoneList<LiveRange*> live_ranges_;
|
617
601
|
|
618
602
|
// Lists of live ranges
|
619
|
-
|
620
|
-
|
603
|
+
EmbeddedVector<LiveRange*, Register::kNumAllocatableRegisters>
|
604
|
+
fixed_live_ranges_;
|
605
|
+
EmbeddedVector<LiveRange*, DoubleRegister::kNumAllocatableRegisters>
|
606
|
+
fixed_double_live_ranges_;
|
621
607
|
ZoneList<LiveRange*> unhandled_live_ranges_;
|
622
608
|
ZoneList<LiveRange*> active_live_ranges_;
|
623
609
|
ZoneList<LiveRange*> inactive_live_ranges_;
|
data/vendor/v8/src/lithium.cc
CHANGED
data/vendor/v8/src/liveedit.cc
CHANGED
@@ -35,10 +35,10 @@
|
|
35
35
|
#include "debug.h"
|
36
36
|
#include "deoptimizer.h"
|
37
37
|
#include "global-handles.h"
|
38
|
-
#include "memory.h"
|
39
38
|
#include "parser.h"
|
40
39
|
#include "scopeinfo.h"
|
41
40
|
#include "scopes.h"
|
41
|
+
#include "v8memory.h"
|
42
42
|
|
43
43
|
namespace v8 {
|
44
44
|
namespace internal {
|
@@ -47,6 +47,18 @@ namespace internal {
|
|
47
47
|
#ifdef ENABLE_DEBUGGER_SUPPORT
|
48
48
|
|
49
49
|
|
50
|
+
void SetElementNonStrict(Handle<JSObject> object,
|
51
|
+
uint32_t index,
|
52
|
+
Handle<Object> value) {
|
53
|
+
// Ignore return value from SetElement. It can only be a failure if there
|
54
|
+
// are element setters causing exceptions and the debugger context has none
|
55
|
+
// of these.
|
56
|
+
Handle<Object> no_failure;
|
57
|
+
no_failure = SetElement(object, index, value, kNonStrictMode);
|
58
|
+
ASSERT(!no_failure.is_null());
|
59
|
+
USE(no_failure);
|
60
|
+
}
|
61
|
+
|
50
62
|
// A simple implementation of dynamic programming algorithm. It solves
|
51
63
|
// the problem of finding the difference of 2 arrays. It uses a table of results
|
52
64
|
// of subproblems. Each cell contains a number together with 2-bit flag
|
@@ -256,10 +268,10 @@ void Comparator::CalculateDifference(Comparator::Input* input,
|
|
256
268
|
}
|
257
269
|
|
258
270
|
|
259
|
-
static bool CompareSubstrings(Handle<String> s1, int pos1,
|
271
|
+
static bool CompareSubstrings(Isolate* isolate, Handle<String> s1, int pos1,
|
260
272
|
Handle<String> s2, int pos2, int len) {
|
261
|
-
|
262
|
-
|
273
|
+
StringInputBuffer& buf1 = *isolate->liveedit_compare_substrings_buf1();
|
274
|
+
StringInputBuffer& buf2 = *isolate->liveedit_compare_substrings_buf2();
|
263
275
|
buf1.Reset(*s1);
|
264
276
|
buf1.Seek(pos1);
|
265
277
|
buf2.Reset(*s2);
|
@@ -279,18 +291,22 @@ static bool CompareSubstrings(Handle<String> s1, int pos1,
|
|
279
291
|
class CompareOutputArrayWriter {
|
280
292
|
public:
|
281
293
|
CompareOutputArrayWriter()
|
282
|
-
: array_(
|
294
|
+
: array_(FACTORY->NewJSArray(10)), current_size_(0) {}
|
283
295
|
|
284
296
|
Handle<JSArray> GetResult() {
|
285
297
|
return array_;
|
286
298
|
}
|
287
299
|
|
288
300
|
void WriteChunk(int char_pos1, int char_pos2, int char_len1, int char_len2) {
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
301
|
+
SetElementNonStrict(array_,
|
302
|
+
current_size_,
|
303
|
+
Handle<Object>(Smi::FromInt(char_pos1)));
|
304
|
+
SetElementNonStrict(array_,
|
305
|
+
current_size_ + 1,
|
306
|
+
Handle<Object>(Smi::FromInt(char_pos1 + char_len1)));
|
307
|
+
SetElementNonStrict(array_,
|
308
|
+
current_size_ + 2,
|
309
|
+
Handle<Object>(Smi::FromInt(char_pos2 + char_len2)));
|
294
310
|
current_size_ += 3;
|
295
311
|
}
|
296
312
|
|
@@ -394,9 +410,10 @@ class LineEndsWrapper {
|
|
394
410
|
// Represents 2 strings as 2 arrays of lines.
|
395
411
|
class LineArrayCompareInput : public Comparator::Input {
|
396
412
|
public:
|
397
|
-
LineArrayCompareInput(Handle<String> s1, Handle<String> s2,
|
413
|
+
LineArrayCompareInput(Isolate* isolate, Handle<String> s1, Handle<String> s2,
|
398
414
|
LineEndsWrapper line_ends1, LineEndsWrapper line_ends2)
|
399
|
-
: s1_(s1), s2_(s2), line_ends1_(line_ends1),
|
415
|
+
: isolate_(isolate), s1_(s1), s2_(s2), line_ends1_(line_ends1),
|
416
|
+
line_ends2_(line_ends2) {
|
400
417
|
}
|
401
418
|
int getLength1() {
|
402
419
|
return line_ends1_.length();
|
@@ -414,10 +431,12 @@ class LineArrayCompareInput : public Comparator::Input {
|
|
414
431
|
if (len1 != len2) {
|
415
432
|
return false;
|
416
433
|
}
|
417
|
-
return CompareSubstrings(s1_, line_start1, s2_, line_start2,
|
434
|
+
return CompareSubstrings(isolate_, s1_, line_start1, s2_, line_start2,
|
435
|
+
len1);
|
418
436
|
}
|
419
437
|
|
420
438
|
private:
|
439
|
+
Isolate* isolate_;
|
421
440
|
Handle<String> s1_;
|
422
441
|
Handle<String> s2_;
|
423
442
|
LineEndsWrapper line_ends1_;
|
@@ -476,7 +495,8 @@ Handle<JSArray> LiveEdit::CompareStrings(Handle<String> s1,
|
|
476
495
|
LineEndsWrapper line_ends1(s1);
|
477
496
|
LineEndsWrapper line_ends2(s2);
|
478
497
|
|
479
|
-
LineArrayCompareInput
|
498
|
+
LineArrayCompareInput
|
499
|
+
input(Isolate::Current(), s1, s2, line_ends1, line_ends2);
|
480
500
|
TokenizingLineArrayCompareOutput output(line_ends1, line_ends2, s1, s2);
|
481
501
|
|
482
502
|
Comparator::CalculateDifference(&input, &output);
|
@@ -485,21 +505,21 @@ Handle<JSArray> LiveEdit::CompareStrings(Handle<String> s1,
|
|
485
505
|
}
|
486
506
|
|
487
507
|
|
488
|
-
static void CompileScriptForTracker(Handle<Script> script) {
|
508
|
+
static void CompileScriptForTracker(Isolate* isolate, Handle<Script> script) {
|
489
509
|
// TODO(635): support extensions.
|
490
|
-
PostponeInterruptsScope postpone;
|
510
|
+
PostponeInterruptsScope postpone(isolate);
|
491
511
|
|
492
512
|
// Build AST.
|
493
513
|
CompilationInfo info(script);
|
494
514
|
info.MarkAsGlobal();
|
495
515
|
if (ParserApi::Parse(&info)) {
|
496
516
|
// Compile the code.
|
497
|
-
LiveEditFunctionTracker tracker(info.function());
|
517
|
+
LiveEditFunctionTracker tracker(info.isolate(), info.function());
|
498
518
|
if (Compiler::MakeCodeForLiveEdit(&info)) {
|
499
519
|
ASSERT(!info.code().is_null());
|
500
520
|
tracker.RecordRootFunctionInfo(info.code());
|
501
521
|
} else {
|
502
|
-
|
522
|
+
info.isolate()->StackOverflow();
|
503
523
|
}
|
504
524
|
}
|
505
525
|
}
|
@@ -514,9 +534,10 @@ static Handle<Object> UnwrapJSValue(Handle<JSValue> jsValue) {
|
|
514
534
|
// Wraps any object into a OpaqueReference, that will hide the object
|
515
535
|
// from JavaScript.
|
516
536
|
static Handle<JSValue> WrapInJSValue(Object* object) {
|
517
|
-
Handle<JSFunction> constructor =
|
537
|
+
Handle<JSFunction> constructor =
|
538
|
+
Isolate::Current()->opaque_reference_function();
|
518
539
|
Handle<JSValue> result =
|
519
|
-
Handle<JSValue>::cast(
|
540
|
+
Handle<JSValue>::cast(FACTORY->NewJSObject(constructor));
|
520
541
|
result->set_value(object);
|
521
542
|
return result;
|
522
543
|
}
|
@@ -529,7 +550,7 @@ template<typename S>
|
|
529
550
|
class JSArrayBasedStruct {
|
530
551
|
public:
|
531
552
|
static S Create() {
|
532
|
-
Handle<JSArray> array =
|
553
|
+
Handle<JSArray> array = FACTORY->NewJSArray(S::kSize_);
|
533
554
|
return S(array);
|
534
555
|
}
|
535
556
|
static S cast(Object* object) {
|
@@ -545,10 +566,12 @@ class JSArrayBasedStruct {
|
|
545
566
|
|
546
567
|
protected:
|
547
568
|
void SetField(int field_position, Handle<Object> value) {
|
548
|
-
|
569
|
+
SetElementNonStrict(array_, field_position, value);
|
549
570
|
}
|
550
571
|
void SetSmiValueField(int field_position, int value) {
|
551
|
-
|
572
|
+
SetElementNonStrict(array_,
|
573
|
+
field_position,
|
574
|
+
Handle<Smi>(Smi::FromInt(value)));
|
552
575
|
}
|
553
576
|
Object* GetField(int field_position) {
|
554
577
|
return array_->GetElementNoExceptionThrown(field_position);
|
@@ -677,7 +700,7 @@ class FunctionInfoListener {
|
|
677
700
|
FunctionInfoListener() {
|
678
701
|
current_parent_index_ = -1;
|
679
702
|
len_ = 0;
|
680
|
-
result_ =
|
703
|
+
result_ = FACTORY->NewJSArray(10);
|
681
704
|
}
|
682
705
|
|
683
706
|
void FunctionStarted(FunctionLiteral* fun) {
|
@@ -687,7 +710,7 @@ class FunctionInfoListener {
|
|
687
710
|
fun->end_position(), fun->num_parameters(),
|
688
711
|
current_parent_index_);
|
689
712
|
current_parent_index_ = len_;
|
690
|
-
|
713
|
+
SetElementNonStrict(result_, len_, info.GetJSArray());
|
691
714
|
len_++;
|
692
715
|
}
|
693
716
|
|
@@ -705,7 +728,7 @@ class FunctionInfoListener {
|
|
705
728
|
FunctionInfoWrapper info =
|
706
729
|
FunctionInfoWrapper::cast(
|
707
730
|
result_->GetElementNoExceptionThrown(current_parent_index_));
|
708
|
-
info.SetFunctionCode(function_code, Handle<Object>(
|
731
|
+
info.SetFunctionCode(function_code, Handle<Object>(HEAP->null_value()));
|
709
732
|
}
|
710
733
|
|
711
734
|
// Saves full information about a function: its code, its scope info
|
@@ -731,7 +754,7 @@ class FunctionInfoListener {
|
|
731
754
|
Object* SerializeFunctionScope(Scope* scope) {
|
732
755
|
HandleScope handle_scope;
|
733
756
|
|
734
|
-
Handle<JSArray> scope_info_list =
|
757
|
+
Handle<JSArray> scope_info_list = FACTORY->NewJSArray(10);
|
735
758
|
int scope_info_length = 0;
|
736
759
|
|
737
760
|
// Saves some description of scope. It stores name and indexes of
|
@@ -739,7 +762,7 @@ class FunctionInfoListener {
|
|
739
762
|
// scopes of this chain.
|
740
763
|
Scope* outer_scope = scope->outer_scope();
|
741
764
|
if (outer_scope == NULL) {
|
742
|
-
return
|
765
|
+
return HEAP->undefined_value();
|
743
766
|
}
|
744
767
|
do {
|
745
768
|
ZoneList<Variable*> list(10);
|
@@ -767,14 +790,19 @@ class FunctionInfoListener {
|
|
767
790
|
list[k] = list[l];
|
768
791
|
}
|
769
792
|
for (int i = 0; i < j; i++) {
|
770
|
-
|
793
|
+
SetElementNonStrict(scope_info_list,
|
794
|
+
scope_info_length,
|
795
|
+
list[i]->name());
|
771
796
|
scope_info_length++;
|
772
|
-
|
773
|
-
|
797
|
+
SetElementNonStrict(
|
798
|
+
scope_info_list,
|
799
|
+
scope_info_length,
|
800
|
+
Handle<Smi>(Smi::FromInt(list[i]->AsSlot()->index())));
|
774
801
|
scope_info_length++;
|
775
802
|
}
|
776
|
-
|
777
|
-
|
803
|
+
SetElementNonStrict(scope_info_list,
|
804
|
+
scope_info_length,
|
805
|
+
Handle<Object>(HEAP->null_value()));
|
778
806
|
scope_info_length++;
|
779
807
|
|
780
808
|
outer_scope = outer_scope->outer_scope();
|
@@ -789,18 +817,17 @@ class FunctionInfoListener {
|
|
789
817
|
};
|
790
818
|
|
791
819
|
|
792
|
-
static FunctionInfoListener* active_function_info_listener = NULL;
|
793
|
-
|
794
820
|
JSArray* LiveEdit::GatherCompileInfo(Handle<Script> script,
|
795
821
|
Handle<String> source) {
|
822
|
+
Isolate* isolate = Isolate::Current();
|
796
823
|
CompilationZoneScope zone_scope(DELETE_ON_EXIT);
|
797
824
|
|
798
825
|
FunctionInfoListener listener;
|
799
826
|
Handle<Object> original_source = Handle<Object>(script->source());
|
800
827
|
script->set_source(*source);
|
801
|
-
|
802
|
-
CompileScriptForTracker(script);
|
803
|
-
|
828
|
+
isolate->set_active_function_info_listener(&listener);
|
829
|
+
CompileScriptForTracker(isolate, script);
|
830
|
+
isolate->set_active_function_info_listener(NULL);
|
804
831
|
script->set_source(*original_source);
|
805
832
|
|
806
833
|
return *(listener.GetResult());
|
@@ -817,7 +844,7 @@ void LiveEdit::WrapSharedFunctionInfos(Handle<JSArray> array) {
|
|
817
844
|
Handle<String> name_handle(String::cast(info->name()));
|
818
845
|
info_wrapper.SetProperties(name_handle, info->start_position(),
|
819
846
|
info->end_position(), info);
|
820
|
-
|
847
|
+
SetElementNonStrict(array, i, info_wrapper.GetJSArray());
|
821
848
|
}
|
822
849
|
}
|
823
850
|
|
@@ -882,7 +909,7 @@ class ReferenceCollectorVisitor : public ObjectVisitor {
|
|
882
909
|
|
883
910
|
// Finds all references to original and replaces them with substitution.
|
884
911
|
static void ReplaceCodeObject(Code* original, Code* substitution) {
|
885
|
-
ASSERT(!
|
912
|
+
ASSERT(!HEAP->InNewSpace(substitution));
|
886
913
|
|
887
914
|
AssertNoAllocation no_allocations_please;
|
888
915
|
|
@@ -895,7 +922,7 @@ static void ReplaceCodeObject(Code* original, Code* substitution) {
|
|
895
922
|
// so temporary replace the pointers with offset numbers
|
896
923
|
// in prologue/epilogue.
|
897
924
|
{
|
898
|
-
|
925
|
+
HEAP->IterateStrongRoots(&visitor, VISIT_ALL);
|
899
926
|
}
|
900
927
|
|
901
928
|
// Now iterate over all pointers of all objects, including code_target
|
@@ -925,7 +952,7 @@ static bool IsInlined(JSFunction* function, SharedFunctionInfo* candidate) {
|
|
925
952
|
DeoptimizationInputData* data =
|
926
953
|
DeoptimizationInputData::cast(function->code()->deoptimization_data());
|
927
954
|
|
928
|
-
if (data ==
|
955
|
+
if (data == HEAP->empty_fixed_array()) return false;
|
929
956
|
|
930
957
|
FixedArray* literals = data->LiteralArray();
|
931
958
|
|
@@ -977,7 +1004,7 @@ MaybeObject* LiveEdit::ReplaceFunctionCode(
|
|
977
1004
|
HandleScope scope;
|
978
1005
|
|
979
1006
|
if (!SharedInfoWrapper::IsInstance(shared_info_array)) {
|
980
|
-
return
|
1007
|
+
return Isolate::Current()->ThrowIllegalOperation();
|
981
1008
|
}
|
982
1009
|
|
983
1010
|
FunctionInfoWrapper compile_info_wrapper(new_compile_info_array);
|
@@ -986,8 +1013,8 @@ MaybeObject* LiveEdit::ReplaceFunctionCode(
|
|
986
1013
|
Handle<SharedFunctionInfo> shared_info = shared_info_wrapper.GetInfo();
|
987
1014
|
|
988
1015
|
if (IsJSFunctionCode(shared_info->code())) {
|
989
|
-
|
990
|
-
|
1016
|
+
Handle<Code> code = compile_info_wrapper.GetFunctionCode();
|
1017
|
+
ReplaceCodeObject(shared_info->code(), *code);
|
991
1018
|
Handle<Object> code_scope_info = compile_info_wrapper.GetCodeScopeInfo();
|
992
1019
|
if (code_scope_info->IsFixedArray()) {
|
993
1020
|
shared_info->set_scope_info(SerializedScopeInfo::cast(*code_scope_info));
|
@@ -997,20 +1024,23 @@ MaybeObject* LiveEdit::ReplaceFunctionCode(
|
|
997
1024
|
if (shared_info->debug_info()->IsDebugInfo()) {
|
998
1025
|
Handle<DebugInfo> debug_info(DebugInfo::cast(shared_info->debug_info()));
|
999
1026
|
Handle<Code> new_original_code =
|
1000
|
-
|
1027
|
+
FACTORY->CopyCode(compile_info_wrapper.GetFunctionCode());
|
1001
1028
|
debug_info->set_original_code(*new_original_code);
|
1002
1029
|
}
|
1003
1030
|
|
1004
|
-
|
1005
|
-
|
1031
|
+
int start_position = compile_info_wrapper.GetStartPosition();
|
1032
|
+
int end_position = compile_info_wrapper.GetEndPosition();
|
1033
|
+
shared_info->set_start_position(start_position);
|
1034
|
+
shared_info->set_end_position(end_position);
|
1006
1035
|
|
1007
1036
|
shared_info->set_construct_stub(
|
1008
|
-
|
1037
|
+
Isolate::Current()->builtins()->builtin(
|
1038
|
+
Builtins::kJSConstructStubGeneric));
|
1009
1039
|
|
1010
1040
|
DeoptimizeDependentFunctions(*shared_info);
|
1011
|
-
|
1041
|
+
Isolate::Current()->compilation_cache()->Remove(shared_info);
|
1012
1042
|
|
1013
|
-
return
|
1043
|
+
return HEAP->undefined_value();
|
1014
1044
|
}
|
1015
1045
|
|
1016
1046
|
|
@@ -1019,16 +1049,16 @@ MaybeObject* LiveEdit::FunctionSourceUpdated(
|
|
1019
1049
|
HandleScope scope;
|
1020
1050
|
|
1021
1051
|
if (!SharedInfoWrapper::IsInstance(shared_info_array)) {
|
1022
|
-
return
|
1052
|
+
return Isolate::Current()->ThrowIllegalOperation();
|
1023
1053
|
}
|
1024
1054
|
|
1025
1055
|
SharedInfoWrapper shared_info_wrapper(shared_info_array);
|
1026
1056
|
Handle<SharedFunctionInfo> shared_info = shared_info_wrapper.GetInfo();
|
1027
1057
|
|
1028
1058
|
DeoptimizeDependentFunctions(*shared_info);
|
1029
|
-
|
1059
|
+
Isolate::Current()->compilation_cache()->Remove(shared_info);
|
1030
1060
|
|
1031
|
-
return
|
1061
|
+
return HEAP->undefined_value();
|
1032
1062
|
}
|
1033
1063
|
|
1034
1064
|
|
@@ -1038,7 +1068,7 @@ void LiveEdit::SetFunctionScript(Handle<JSValue> function_wrapper,
|
|
1038
1068
|
Handle<SharedFunctionInfo>::cast(UnwrapJSValue(function_wrapper));
|
1039
1069
|
shared_info->set_script(*script_handle);
|
1040
1070
|
|
1041
|
-
|
1071
|
+
Isolate::Current()->compilation_cache()->Remove(shared_info);
|
1042
1072
|
}
|
1043
1073
|
|
1044
1074
|
|
@@ -1186,7 +1216,7 @@ static Handle<Code> PatchPositionsInCode(Handle<Code> code,
|
|
1186
1216
|
// Relocation info section now has different size. We cannot simply
|
1187
1217
|
// rewrite it inside code object. Instead we have to create a new
|
1188
1218
|
// code object.
|
1189
|
-
Handle<Code> result(
|
1219
|
+
Handle<Code> result(FACTORY->CopyCode(code, buffer));
|
1190
1220
|
return result;
|
1191
1221
|
}
|
1192
1222
|
}
|
@@ -1196,7 +1226,7 @@ MaybeObject* LiveEdit::PatchFunctionPositions(
|
|
1196
1226
|
Handle<JSArray> shared_info_array, Handle<JSArray> position_change_array) {
|
1197
1227
|
|
1198
1228
|
if (!SharedInfoWrapper::IsInstance(shared_info_array)) {
|
1199
|
-
return
|
1229
|
+
return Isolate::Current()->ThrowIllegalOperation();
|
1200
1230
|
}
|
1201
1231
|
|
1202
1232
|
SharedInfoWrapper shared_info_wrapper(shared_info_array);
|
@@ -1205,13 +1235,14 @@ MaybeObject* LiveEdit::PatchFunctionPositions(
|
|
1205
1235
|
int old_function_start = info->start_position();
|
1206
1236
|
int new_function_start = TranslatePosition(old_function_start,
|
1207
1237
|
position_change_array);
|
1208
|
-
info->
|
1209
|
-
|
1210
|
-
|
1238
|
+
int new_function_end = TranslatePosition(info->end_position(),
|
1239
|
+
position_change_array);
|
1240
|
+
int new_function_token_pos =
|
1241
|
+
TranslatePosition(info->function_token_position(), position_change_array);
|
1211
1242
|
|
1212
|
-
info->
|
1213
|
-
|
1214
|
-
|
1243
|
+
info->set_start_position(new_function_start);
|
1244
|
+
info->set_end_position(new_function_end);
|
1245
|
+
info->set_function_token_position(new_function_token_pos);
|
1215
1246
|
|
1216
1247
|
if (IsJSFunctionCode(info->code())) {
|
1217
1248
|
// Patch relocation info section of the code.
|
@@ -1227,14 +1258,14 @@ MaybeObject* LiveEdit::PatchFunctionPositions(
|
|
1227
1258
|
}
|
1228
1259
|
}
|
1229
1260
|
|
1230
|
-
return
|
1261
|
+
return HEAP->undefined_value();
|
1231
1262
|
}
|
1232
1263
|
|
1233
1264
|
|
1234
1265
|
static Handle<Script> CreateScriptCopy(Handle<Script> original) {
|
1235
1266
|
Handle<String> original_source(String::cast(original->source()));
|
1236
1267
|
|
1237
|
-
Handle<Script> copy =
|
1268
|
+
Handle<Script> copy = FACTORY->NewScript(original_source);
|
1238
1269
|
|
1239
1270
|
copy->set_name(original->name());
|
1240
1271
|
copy->set_line_offset(original->line_offset());
|
@@ -1259,15 +1290,16 @@ Object* LiveEdit::ChangeScriptSource(Handle<Script> original_script,
|
|
1259
1290
|
Handle<Script> old_script = CreateScriptCopy(original_script);
|
1260
1291
|
old_script->set_name(String::cast(*old_script_name));
|
1261
1292
|
old_script_object = old_script;
|
1262
|
-
|
1293
|
+
Isolate::Current()->debugger()->OnAfterCompile(
|
1294
|
+
old_script, Debugger::SEND_WHEN_DEBUGGING);
|
1263
1295
|
} else {
|
1264
|
-
old_script_object = Handle<Object>(
|
1296
|
+
old_script_object = Handle<Object>(HEAP->null_value());
|
1265
1297
|
}
|
1266
1298
|
|
1267
1299
|
original_script->set_source(*new_source);
|
1268
1300
|
|
1269
1301
|
// Drop line ends so that they will be recalculated.
|
1270
|
-
original_script->set_line_ends(
|
1302
|
+
original_script->set_line_ends(HEAP->undefined_value());
|
1271
1303
|
|
1272
1304
|
return *old_script_object;
|
1273
1305
|
}
|
@@ -1315,7 +1347,7 @@ static bool CheckActivation(Handle<JSArray> shared_info_array,
|
|
1315
1347
|
SharedFunctionInfo::cast(wrapper->value()));
|
1316
1348
|
|
1317
1349
|
if (function->shared() == *shared || IsInlined(*function, *shared)) {
|
1318
|
-
|
1350
|
+
SetElementNonStrict(result, i, Handle<Smi>(Smi::FromInt(status)));
|
1319
1351
|
return true;
|
1320
1352
|
}
|
1321
1353
|
}
|
@@ -1328,7 +1360,8 @@ static bool CheckActivation(Handle<JSArray> shared_info_array,
|
|
1328
1360
|
static bool FixTryCatchHandler(StackFrame* top_frame,
|
1329
1361
|
StackFrame* bottom_frame) {
|
1330
1362
|
Address* pointer_address =
|
1331
|
-
&Memory::Address_at(
|
1363
|
+
&Memory::Address_at(Isolate::Current()->get_address_from_id(
|
1364
|
+
Isolate::k_handler_address));
|
1332
1365
|
|
1333
1366
|
while (*pointer_address < top_frame->sp()) {
|
1334
1367
|
pointer_address = &Memory::Address_at(*pointer_address);
|
@@ -1363,19 +1396,22 @@ static const char* DropFrames(Vector<StackFrame*> frames,
|
|
1363
1396
|
ASSERT(bottom_js_frame->is_java_script());
|
1364
1397
|
|
1365
1398
|
// Check the nature of the top frame.
|
1366
|
-
|
1367
|
-
|
1399
|
+
Code* pre_top_frame_code = pre_top_frame->LookupCode(Isolate::Current());
|
1400
|
+
if (pre_top_frame_code->is_inline_cache_stub() &&
|
1401
|
+
pre_top_frame_code->ic_state() == DEBUG_BREAK) {
|
1368
1402
|
// OK, we can drop inline cache calls.
|
1369
1403
|
*mode = Debug::FRAME_DROPPED_IN_IC_CALL;
|
1370
|
-
} else if (
|
1404
|
+
} else if (pre_top_frame_code ==
|
1405
|
+
Isolate::Current()->debug()->debug_break_slot()) {
|
1371
1406
|
// OK, we can drop debug break slot.
|
1372
1407
|
*mode = Debug::FRAME_DROPPED_IN_DEBUG_SLOT_CALL;
|
1373
|
-
} else if (
|
1374
|
-
|
1408
|
+
} else if (pre_top_frame_code ==
|
1409
|
+
Isolate::Current()->builtins()->builtin(
|
1410
|
+
Builtins::kFrameDropper_LiveEdit)) {
|
1375
1411
|
// OK, we can drop our own code.
|
1376
1412
|
*mode = Debug::FRAME_DROPPED_IN_DIRECT_CALL;
|
1377
|
-
} else if (
|
1378
|
-
|
1413
|
+
} else if (pre_top_frame_code->kind() == Code::STUB &&
|
1414
|
+
pre_top_frame_code->major_key()) {
|
1379
1415
|
// Entry from our unit tests, it's fine, we support this case.
|
1380
1416
|
*mode = Debug::FRAME_DROPPED_IN_DIRECT_CALL;
|
1381
1417
|
} else {
|
@@ -1397,7 +1433,7 @@ static const char* DropFrames(Vector<StackFrame*> frames,
|
|
1397
1433
|
// Make sure FixTryCatchHandler is idempotent.
|
1398
1434
|
ASSERT(!FixTryCatchHandler(pre_top_frame, bottom_js_frame));
|
1399
1435
|
|
1400
|
-
Handle<Code> code
|
1436
|
+
Handle<Code> code = Isolate::Current()->builtins()->FrameDropper_LiveEdit();
|
1401
1437
|
top_frame->set_pc(code->entry());
|
1402
1438
|
pre_top_frame->SetCallerFp(bottom_js_frame->fp());
|
1403
1439
|
|
@@ -1424,7 +1460,7 @@ static bool IsDropableFrame(StackFrame* frame) {
|
|
1424
1460
|
// removing all listed function if possible and if do_drop is true.
|
1425
1461
|
static const char* DropActivationsInActiveThread(
|
1426
1462
|
Handle<JSArray> shared_info_array, Handle<JSArray> result, bool do_drop) {
|
1427
|
-
|
1463
|
+
Debug* debug = Isolate::Current()->debug();
|
1428
1464
|
ZoneScope scope(DELETE_ON_EXIT);
|
1429
1465
|
Vector<StackFrame*> frames = CreateStackMap();
|
1430
1466
|
|
@@ -1434,7 +1470,7 @@ static const char* DropActivationsInActiveThread(
|
|
1434
1470
|
int frame_index = 0;
|
1435
1471
|
for (; frame_index < frames.length(); frame_index++) {
|
1436
1472
|
StackFrame* frame = frames[frame_index];
|
1437
|
-
if (frame->id() ==
|
1473
|
+
if (frame->id() == debug->break_frame_id()) {
|
1438
1474
|
top_frame_index = frame_index;
|
1439
1475
|
break;
|
1440
1476
|
}
|
@@ -1511,7 +1547,7 @@ static const char* DropActivationsInActiveThread(
|
|
1511
1547
|
break;
|
1512
1548
|
}
|
1513
1549
|
}
|
1514
|
-
|
1550
|
+
debug->FramesHaveBeenDropped(new_id, drop_mode,
|
1515
1551
|
restarter_frame_function_pointer);
|
1516
1552
|
|
1517
1553
|
// Replace "blocked on active" with "replaced on active" status.
|
@@ -1520,7 +1556,7 @@ static const char* DropActivationsInActiveThread(
|
|
1520
1556
|
Smi::FromInt(LiveEdit::FUNCTION_BLOCKED_ON_ACTIVE_STACK)) {
|
1521
1557
|
Handle<Object> replaced(
|
1522
1558
|
Smi::FromInt(LiveEdit::FUNCTION_REPLACED_ON_ACTIVE_STACK));
|
1523
|
-
|
1559
|
+
SetElementNonStrict(result, i, replaced);
|
1524
1560
|
}
|
1525
1561
|
}
|
1526
1562
|
return NULL;
|
@@ -1556,19 +1592,22 @@ Handle<JSArray> LiveEdit::CheckAndDropActivations(
|
|
1556
1592
|
Handle<JSArray> shared_info_array, bool do_drop) {
|
1557
1593
|
int len = Smi::cast(shared_info_array->length())->value();
|
1558
1594
|
|
1559
|
-
Handle<JSArray> result =
|
1595
|
+
Handle<JSArray> result = FACTORY->NewJSArray(len);
|
1560
1596
|
|
1561
1597
|
// Fill the default values.
|
1562
1598
|
for (int i = 0; i < len; i++) {
|
1563
|
-
|
1564
|
-
|
1599
|
+
SetElementNonStrict(
|
1600
|
+
result,
|
1601
|
+
i,
|
1602
|
+
Handle<Smi>(Smi::FromInt(FUNCTION_AVAILABLE_FOR_PATCH)));
|
1565
1603
|
}
|
1566
1604
|
|
1567
1605
|
|
1568
1606
|
// First check inactive threads. Fail if some functions are blocked there.
|
1569
1607
|
InactiveThreadActivationsChecker inactive_threads_checker(shared_info_array,
|
1570
1608
|
result);
|
1571
|
-
|
1609
|
+
Isolate::Current()->thread_manager()->IterateArchivedThreads(
|
1610
|
+
&inactive_threads_checker);
|
1572
1611
|
if (inactive_threads_checker.HasBlockedFunctions()) {
|
1573
1612
|
return result;
|
1574
1613
|
}
|
@@ -1579,42 +1618,44 @@ Handle<JSArray> LiveEdit::CheckAndDropActivations(
|
|
1579
1618
|
if (error_message != NULL) {
|
1580
1619
|
// Add error message as an array extra element.
|
1581
1620
|
Vector<const char> vector_message(error_message, StrLength(error_message));
|
1582
|
-
Handle<String> str =
|
1583
|
-
|
1621
|
+
Handle<String> str = FACTORY->NewStringFromAscii(vector_message);
|
1622
|
+
SetElementNonStrict(result, len, str);
|
1584
1623
|
}
|
1585
1624
|
return result;
|
1586
1625
|
}
|
1587
1626
|
|
1588
1627
|
|
1589
|
-
LiveEditFunctionTracker::LiveEditFunctionTracker(
|
1590
|
-
|
1591
|
-
|
1628
|
+
LiveEditFunctionTracker::LiveEditFunctionTracker(Isolate* isolate,
|
1629
|
+
FunctionLiteral* fun)
|
1630
|
+
: isolate_(isolate) {
|
1631
|
+
if (isolate_->active_function_info_listener() != NULL) {
|
1632
|
+
isolate_->active_function_info_listener()->FunctionStarted(fun);
|
1592
1633
|
}
|
1593
1634
|
}
|
1594
1635
|
|
1595
1636
|
|
1596
1637
|
LiveEditFunctionTracker::~LiveEditFunctionTracker() {
|
1597
|
-
if (active_function_info_listener != NULL) {
|
1598
|
-
active_function_info_listener->FunctionDone();
|
1638
|
+
if (isolate_->active_function_info_listener() != NULL) {
|
1639
|
+
isolate_->active_function_info_listener()->FunctionDone();
|
1599
1640
|
}
|
1600
1641
|
}
|
1601
1642
|
|
1602
1643
|
|
1603
1644
|
void LiveEditFunctionTracker::RecordFunctionInfo(
|
1604
1645
|
Handle<SharedFunctionInfo> info, FunctionLiteral* lit) {
|
1605
|
-
if (active_function_info_listener != NULL) {
|
1606
|
-
active_function_info_listener->FunctionInfo(info, lit->scope());
|
1646
|
+
if (isolate_->active_function_info_listener() != NULL) {
|
1647
|
+
isolate_->active_function_info_listener()->FunctionInfo(info, lit->scope());
|
1607
1648
|
}
|
1608
1649
|
}
|
1609
1650
|
|
1610
1651
|
|
1611
1652
|
void LiveEditFunctionTracker::RecordRootFunctionInfo(Handle<Code> code) {
|
1612
|
-
active_function_info_listener->FunctionCode(code);
|
1653
|
+
isolate_->active_function_info_listener()->FunctionCode(code);
|
1613
1654
|
}
|
1614
1655
|
|
1615
1656
|
|
1616
|
-
bool LiveEditFunctionTracker::IsActive() {
|
1617
|
-
return active_function_info_listener != NULL;
|
1657
|
+
bool LiveEditFunctionTracker::IsActive(Isolate* isolate) {
|
1658
|
+
return isolate->active_function_info_listener() != NULL;
|
1618
1659
|
}
|
1619
1660
|
|
1620
1661
|
|
@@ -1622,7 +1663,8 @@ bool LiveEditFunctionTracker::IsActive() {
|
|
1622
1663
|
|
1623
1664
|
// This ifdef-else-endif section provides working or stub implementation of
|
1624
1665
|
// LiveEditFunctionTracker.
|
1625
|
-
LiveEditFunctionTracker::LiveEditFunctionTracker(
|
1666
|
+
LiveEditFunctionTracker::LiveEditFunctionTracker(Isolate* isolate,
|
1667
|
+
FunctionLiteral* fun) {
|
1626
1668
|
}
|
1627
1669
|
|
1628
1670
|
|