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
@@ -36,6 +36,8 @@
|
|
36
36
|
#include "x64/lithium-x64.h"
|
37
37
|
#elif V8_TARGET_ARCH_ARM
|
38
38
|
#include "arm/lithium-arm.h"
|
39
|
+
#elif V8_TARGET_ARCH_MIPS
|
40
|
+
#include "mips/lithium-mips.h"
|
39
41
|
#else
|
40
42
|
#error Unsupported target architecture.
|
41
43
|
#endif
|
@@ -120,6 +122,44 @@ void Range::AddConstant(int32_t value) {
|
|
120
122
|
}
|
121
123
|
|
122
124
|
|
125
|
+
void Range::Intersect(Range* other) {
|
126
|
+
upper_ = Min(upper_, other->upper_);
|
127
|
+
lower_ = Max(lower_, other->lower_);
|
128
|
+
bool b = CanBeMinusZero() && other->CanBeMinusZero();
|
129
|
+
set_can_be_minus_zero(b);
|
130
|
+
}
|
131
|
+
|
132
|
+
|
133
|
+
void Range::Union(Range* other) {
|
134
|
+
upper_ = Max(upper_, other->upper_);
|
135
|
+
lower_ = Min(lower_, other->lower_);
|
136
|
+
bool b = CanBeMinusZero() || other->CanBeMinusZero();
|
137
|
+
set_can_be_minus_zero(b);
|
138
|
+
}
|
139
|
+
|
140
|
+
|
141
|
+
void Range::Sar(int32_t value) {
|
142
|
+
int32_t bits = value & 0x1F;
|
143
|
+
lower_ = lower_ >> bits;
|
144
|
+
upper_ = upper_ >> bits;
|
145
|
+
set_can_be_minus_zero(false);
|
146
|
+
}
|
147
|
+
|
148
|
+
|
149
|
+
void Range::Shl(int32_t value) {
|
150
|
+
int32_t bits = value & 0x1F;
|
151
|
+
int old_lower = lower_;
|
152
|
+
int old_upper = upper_;
|
153
|
+
lower_ = lower_ << bits;
|
154
|
+
upper_ = upper_ << bits;
|
155
|
+
if (old_lower != lower_ >> bits || old_upper != upper_ >> bits) {
|
156
|
+
upper_ = kMaxInt;
|
157
|
+
lower_ = kMinInt;
|
158
|
+
}
|
159
|
+
set_can_be_minus_zero(false);
|
160
|
+
}
|
161
|
+
|
162
|
+
|
123
163
|
bool Range::AddAndCheckOverflow(Range* other) {
|
124
164
|
bool may_overflow = false;
|
125
165
|
lower_ = AddWithoutOverflow(lower_, other->lower(), &may_overflow);
|
@@ -285,24 +325,19 @@ void HValue::SetOperandAt(int index, HValue* value) {
|
|
285
325
|
|
286
326
|
|
287
327
|
void HValue::ReplaceAndDelete(HValue* other) {
|
288
|
-
ReplaceValue(other);
|
328
|
+
if (other != NULL) ReplaceValue(other);
|
289
329
|
Delete();
|
290
330
|
}
|
291
331
|
|
292
332
|
|
293
333
|
void HValue::ReplaceValue(HValue* other) {
|
294
|
-
ZoneList<HValue*> start_uses(2);
|
295
334
|
for (int i = 0; i < uses_.length(); ++i) {
|
296
|
-
HValue* use = uses_
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
} else {
|
301
|
-
start_uses.Add(use);
|
302
|
-
}
|
335
|
+
HValue* use = uses_[i];
|
336
|
+
ASSERT(!use->block()->IsStartBlock());
|
337
|
+
InternalReplaceAtUse(use, other);
|
338
|
+
other->uses_.Add(use);
|
303
339
|
}
|
304
|
-
uses_.
|
305
|
-
uses_.AddAll(start_uses);
|
340
|
+
uses_.Rewind(0);
|
306
341
|
}
|
307
342
|
|
308
343
|
|
@@ -381,10 +416,7 @@ bool HValue::UpdateInferredType() {
|
|
381
416
|
void HValue::RegisterUse(int index, HValue* new_value) {
|
382
417
|
HValue* old_value = OperandAt(index);
|
383
418
|
if (old_value == new_value) return;
|
384
|
-
if (old_value != NULL)
|
385
|
-
ASSERT(old_value->uses_.Contains(this));
|
386
|
-
old_value->uses_.RemoveElement(this);
|
387
|
-
}
|
419
|
+
if (old_value != NULL) old_value->uses_.RemoveElement(this);
|
388
420
|
if (new_value != NULL) {
|
389
421
|
new_value->uses_.Add(this);
|
390
422
|
}
|
@@ -420,7 +452,9 @@ void HInstruction::PrintTo(StringStream* stream) {
|
|
420
452
|
stream->Add(" ");
|
421
453
|
PrintDataTo(stream);
|
422
454
|
|
423
|
-
if (range() != NULL
|
455
|
+
if (range() != NULL &&
|
456
|
+
!range()->IsMostGeneric() &&
|
457
|
+
!range()->CanBeMinusZero()) {
|
424
458
|
stream->Add(" range[%d,%d,m0=%d]",
|
425
459
|
range()->lower(),
|
426
460
|
range()->upper(),
|
@@ -744,6 +778,8 @@ Range* HValue::InferRange() {
|
|
744
778
|
} else if (representation().IsNone()) {
|
745
779
|
return NULL;
|
746
780
|
} else {
|
781
|
+
// Untagged integer32 cannot be -0 and we don't compute ranges for
|
782
|
+
// untagged doubles.
|
747
783
|
return new Range();
|
748
784
|
}
|
749
785
|
}
|
@@ -755,7 +791,7 @@ Range* HConstant::InferRange() {
|
|
755
791
|
result->set_can_be_minus_zero(false);
|
756
792
|
return result;
|
757
793
|
}
|
758
|
-
return
|
794
|
+
return HValue::InferRange();
|
759
795
|
}
|
760
796
|
|
761
797
|
|
@@ -789,7 +825,7 @@ Range* HAdd::InferRange() {
|
|
789
825
|
res->set_can_be_minus_zero(m0);
|
790
826
|
return res;
|
791
827
|
} else {
|
792
|
-
return
|
828
|
+
return HValue::InferRange();
|
793
829
|
}
|
794
830
|
}
|
795
831
|
|
@@ -805,7 +841,7 @@ Range* HSub::InferRange() {
|
|
805
841
|
res->set_can_be_minus_zero(a->CanBeMinusZero() && b->CanBeZero());
|
806
842
|
return res;
|
807
843
|
} else {
|
808
|
-
return
|
844
|
+
return HValue::InferRange();
|
809
845
|
}
|
810
846
|
}
|
811
847
|
|
@@ -823,7 +859,7 @@ Range* HMul::InferRange() {
|
|
823
859
|
res->set_can_be_minus_zero(m0);
|
824
860
|
return res;
|
825
861
|
} else {
|
826
|
-
return
|
862
|
+
return HValue::InferRange();
|
827
863
|
}
|
828
864
|
}
|
829
865
|
|
@@ -848,7 +884,7 @@ Range* HDiv::InferRange() {
|
|
848
884
|
}
|
849
885
|
return result;
|
850
886
|
} else {
|
851
|
-
return
|
887
|
+
return HValue::InferRange();
|
852
888
|
}
|
853
889
|
}
|
854
890
|
|
@@ -865,7 +901,7 @@ Range* HMod::InferRange() {
|
|
865
901
|
}
|
866
902
|
return result;
|
867
903
|
} else {
|
868
|
-
return
|
904
|
+
return HValue::InferRange();
|
869
905
|
}
|
870
906
|
}
|
871
907
|
|
@@ -896,6 +932,14 @@ void HPhi::AddInput(HValue* value) {
|
|
896
932
|
}
|
897
933
|
|
898
934
|
|
935
|
+
bool HPhi::HasRealUses() {
|
936
|
+
for (int i = 0; i < uses()->length(); i++) {
|
937
|
+
if (!uses()->at(i)->IsPhi()) return true;
|
938
|
+
}
|
939
|
+
return false;
|
940
|
+
}
|
941
|
+
|
942
|
+
|
899
943
|
HValue* HPhi::GetRedundantReplacement() {
|
900
944
|
HValue* candidate = NULL;
|
901
945
|
int count = OperandCount();
|
@@ -1001,7 +1045,7 @@ HConstant* HConstant::CopyToRepresentation(Representation r) const {
|
|
1001
1045
|
HConstant* HConstant::CopyToTruncatedInt32() const {
|
1002
1046
|
if (!has_double_value_) return NULL;
|
1003
1047
|
int32_t truncated = NumberToInt32(*handle_);
|
1004
|
-
return new HConstant(
|
1048
|
+
return new HConstant(FACTORY->NewNumberFromInt(truncated),
|
1005
1049
|
Representation::Integer32());
|
1006
1050
|
}
|
1007
1051
|
|
@@ -1012,7 +1056,7 @@ void HConstant::PrintDataTo(StringStream* stream) {
|
|
1012
1056
|
|
1013
1057
|
|
1014
1058
|
bool HArrayLiteral::IsCopyOnWrite() const {
|
1015
|
-
return constant_elements()->map() ==
|
1059
|
+
return constant_elements()->map() == HEAP->fixed_cow_array_map();
|
1016
1060
|
}
|
1017
1061
|
|
1018
1062
|
|
@@ -1026,34 +1070,30 @@ void HBinaryOperation::PrintDataTo(StringStream* stream) {
|
|
1026
1070
|
|
1027
1071
|
|
1028
1072
|
Range* HBitAnd::InferRange() {
|
1029
|
-
|
1030
|
-
|
1031
|
-
|
1032
|
-
int32_t
|
1033
|
-
|
1034
|
-
|
1035
|
-
int32_t result_mask =
|
1036
|
-
|
1037
|
-
|
1038
|
-
|
1039
|
-
return HBinaryOperation::InferRange();
|
1040
|
-
}
|
1073
|
+
int32_t left_mask = (left()->range() != NULL)
|
1074
|
+
? left()->range()->Mask()
|
1075
|
+
: 0xffffffff;
|
1076
|
+
int32_t right_mask = (right()->range() != NULL)
|
1077
|
+
? right()->range()->Mask()
|
1078
|
+
: 0xffffffff;
|
1079
|
+
int32_t result_mask = left_mask & right_mask;
|
1080
|
+
return (result_mask >= 0)
|
1081
|
+
? new Range(0, result_mask)
|
1082
|
+
: HValue::InferRange();
|
1041
1083
|
}
|
1042
1084
|
|
1043
1085
|
|
1044
1086
|
Range* HBitOr::InferRange() {
|
1045
|
-
|
1046
|
-
|
1047
|
-
|
1048
|
-
int32_t
|
1049
|
-
|
1050
|
-
|
1051
|
-
int32_t result_mask =
|
1052
|
-
|
1053
|
-
|
1054
|
-
|
1055
|
-
return HBinaryOperation::InferRange();
|
1056
|
-
}
|
1087
|
+
int32_t left_mask = (left()->range() != NULL)
|
1088
|
+
? left()->range()->Mask()
|
1089
|
+
: 0xffffffff;
|
1090
|
+
int32_t right_mask = (right()->range() != NULL)
|
1091
|
+
? right()->range()->Mask()
|
1092
|
+
: 0xffffffff;
|
1093
|
+
int32_t result_mask = left_mask | right_mask;
|
1094
|
+
return (result_mask >= 0)
|
1095
|
+
? new Range(0, result_mask)
|
1096
|
+
: HValue::InferRange();
|
1057
1097
|
}
|
1058
1098
|
|
1059
1099
|
|
@@ -1061,20 +1101,14 @@ Range* HSar::InferRange() {
|
|
1061
1101
|
if (right()->IsConstant()) {
|
1062
1102
|
HConstant* c = HConstant::cast(right());
|
1063
1103
|
if (c->HasInteger32Value()) {
|
1064
|
-
|
1065
|
-
|
1066
|
-
|
1067
|
-
|
1068
|
-
result = new Range();
|
1069
|
-
} else {
|
1070
|
-
result = left_range->Copy();
|
1071
|
-
}
|
1072
|
-
result->Sar(val);
|
1104
|
+
Range* result = (left()->range() != NULL)
|
1105
|
+
? left()->range()->Copy()
|
1106
|
+
: new Range();
|
1107
|
+
result->Sar(c->Integer32Value());
|
1073
1108
|
return result;
|
1074
1109
|
}
|
1075
1110
|
}
|
1076
|
-
|
1077
|
-
return HBinaryOperation::InferRange();
|
1111
|
+
return HValue::InferRange();
|
1078
1112
|
}
|
1079
1113
|
|
1080
1114
|
|
@@ -1082,20 +1116,14 @@ Range* HShl::InferRange() {
|
|
1082
1116
|
if (right()->IsConstant()) {
|
1083
1117
|
HConstant* c = HConstant::cast(right());
|
1084
1118
|
if (c->HasInteger32Value()) {
|
1085
|
-
|
1086
|
-
|
1087
|
-
|
1088
|
-
|
1089
|
-
result = new Range();
|
1090
|
-
} else {
|
1091
|
-
result = left_range->Copy();
|
1092
|
-
}
|
1093
|
-
result->Shl(val);
|
1119
|
+
Range* result = (left()->range() != NULL)
|
1120
|
+
? left()->range()->Copy()
|
1121
|
+
: new Range();
|
1122
|
+
result->Shl(c->Integer32Value());
|
1094
1123
|
return result;
|
1095
1124
|
}
|
1096
1125
|
}
|
1097
|
-
|
1098
|
-
return HBinaryOperation::InferRange();
|
1126
|
+
return HValue::InferRange();
|
1099
1127
|
}
|
1100
1128
|
|
1101
1129
|
|
@@ -1130,6 +1158,60 @@ void HLoadNamedField::PrintDataTo(StringStream* stream) {
|
|
1130
1158
|
}
|
1131
1159
|
|
1132
1160
|
|
1161
|
+
HLoadNamedFieldPolymorphic::HLoadNamedFieldPolymorphic(HValue* object,
|
1162
|
+
ZoneMapList* types,
|
1163
|
+
Handle<String> name)
|
1164
|
+
: HUnaryOperation(object),
|
1165
|
+
types_(Min(types->length(), kMaxLoadPolymorphism)),
|
1166
|
+
name_(name),
|
1167
|
+
need_generic_(false) {
|
1168
|
+
set_representation(Representation::Tagged());
|
1169
|
+
SetFlag(kDependsOnMaps);
|
1170
|
+
for (int i = 0;
|
1171
|
+
i < types->length() && types_.length() < kMaxLoadPolymorphism;
|
1172
|
+
++i) {
|
1173
|
+
Handle<Map> map = types->at(i);
|
1174
|
+
LookupResult lookup;
|
1175
|
+
map->LookupInDescriptors(NULL, *name, &lookup);
|
1176
|
+
if (lookup.IsProperty() && lookup.type() == FIELD) {
|
1177
|
+
types_.Add(types->at(i));
|
1178
|
+
int index = lookup.GetLocalFieldIndexFromMap(*map);
|
1179
|
+
if (index < 0) {
|
1180
|
+
SetFlag(kDependsOnInobjectFields);
|
1181
|
+
} else {
|
1182
|
+
SetFlag(kDependsOnBackingStoreFields);
|
1183
|
+
}
|
1184
|
+
}
|
1185
|
+
}
|
1186
|
+
|
1187
|
+
if (types_.length() == types->length() && FLAG_deoptimize_uncommon_cases) {
|
1188
|
+
SetFlag(kUseGVN);
|
1189
|
+
} else {
|
1190
|
+
SetAllSideEffects();
|
1191
|
+
need_generic_ = true;
|
1192
|
+
}
|
1193
|
+
}
|
1194
|
+
|
1195
|
+
|
1196
|
+
bool HLoadNamedFieldPolymorphic::DataEquals(HValue* value) {
|
1197
|
+
HLoadNamedFieldPolymorphic* other = HLoadNamedFieldPolymorphic::cast(value);
|
1198
|
+
if (types_.length() != other->types()->length()) return false;
|
1199
|
+
if (!name_.is_identical_to(other->name())) return false;
|
1200
|
+
if (need_generic_ != other->need_generic_) return false;
|
1201
|
+
for (int i = 0; i < types_.length(); i++) {
|
1202
|
+
bool found = false;
|
1203
|
+
for (int j = 0; j < types_.length(); j++) {
|
1204
|
+
if (types_.at(j).is_identical_to(other->types()->at(i))) {
|
1205
|
+
found = true;
|
1206
|
+
break;
|
1207
|
+
}
|
1208
|
+
}
|
1209
|
+
if (!found) return false;
|
1210
|
+
}
|
1211
|
+
return true;
|
1212
|
+
}
|
1213
|
+
|
1214
|
+
|
1133
1215
|
void HLoadKeyedFastElement::PrintDataTo(StringStream* stream) {
|
1134
1216
|
object()->PrintNameTo(stream);
|
1135
1217
|
stream->Add("[");
|
@@ -1146,8 +1228,36 @@ void HLoadKeyedGeneric::PrintDataTo(StringStream* stream) {
|
|
1146
1228
|
}
|
1147
1229
|
|
1148
1230
|
|
1149
|
-
void
|
1231
|
+
void HLoadKeyedSpecializedArrayElement::PrintDataTo(
|
1232
|
+
StringStream* stream) {
|
1150
1233
|
external_pointer()->PrintNameTo(stream);
|
1234
|
+
stream->Add(".");
|
1235
|
+
switch (array_type()) {
|
1236
|
+
case kExternalByteArray:
|
1237
|
+
stream->Add("byte");
|
1238
|
+
break;
|
1239
|
+
case kExternalUnsignedByteArray:
|
1240
|
+
stream->Add("u_byte");
|
1241
|
+
break;
|
1242
|
+
case kExternalShortArray:
|
1243
|
+
stream->Add("short");
|
1244
|
+
break;
|
1245
|
+
case kExternalUnsignedShortArray:
|
1246
|
+
stream->Add("u_short");
|
1247
|
+
break;
|
1248
|
+
case kExternalIntArray:
|
1249
|
+
stream->Add("int");
|
1250
|
+
break;
|
1251
|
+
case kExternalUnsignedIntArray:
|
1252
|
+
stream->Add("u_int");
|
1253
|
+
break;
|
1254
|
+
case kExternalFloatArray:
|
1255
|
+
stream->Add("float");
|
1256
|
+
break;
|
1257
|
+
case kExternalPixelArray:
|
1258
|
+
stream->Add("pixel");
|
1259
|
+
break;
|
1260
|
+
}
|
1151
1261
|
stream->Add("[");
|
1152
1262
|
key()->PrintNameTo(stream);
|
1153
1263
|
stream->Add("]");
|
@@ -1195,8 +1305,36 @@ void HStoreKeyedGeneric::PrintDataTo(StringStream* stream) {
|
|
1195
1305
|
}
|
1196
1306
|
|
1197
1307
|
|
1198
|
-
void
|
1308
|
+
void HStoreKeyedSpecializedArrayElement::PrintDataTo(
|
1309
|
+
StringStream* stream) {
|
1199
1310
|
external_pointer()->PrintNameTo(stream);
|
1311
|
+
stream->Add(".");
|
1312
|
+
switch (array_type()) {
|
1313
|
+
case kExternalByteArray:
|
1314
|
+
stream->Add("byte");
|
1315
|
+
break;
|
1316
|
+
case kExternalUnsignedByteArray:
|
1317
|
+
stream->Add("u_byte");
|
1318
|
+
break;
|
1319
|
+
case kExternalShortArray:
|
1320
|
+
stream->Add("short");
|
1321
|
+
break;
|
1322
|
+
case kExternalUnsignedShortArray:
|
1323
|
+
stream->Add("u_short");
|
1324
|
+
break;
|
1325
|
+
case kExternalIntArray:
|
1326
|
+
stream->Add("int");
|
1327
|
+
break;
|
1328
|
+
case kExternalUnsignedIntArray:
|
1329
|
+
stream->Add("u_int");
|
1330
|
+
break;
|
1331
|
+
case kExternalFloatArray:
|
1332
|
+
stream->Add("float");
|
1333
|
+
break;
|
1334
|
+
case kExternalPixelArray:
|
1335
|
+
stream->Add("pixel");
|
1336
|
+
break;
|
1337
|
+
}
|
1200
1338
|
stream->Add("[");
|
1201
1339
|
key()->PrintNameTo(stream);
|
1202
1340
|
stream->Add("] = ");
|
@@ -1204,12 +1342,17 @@ void HStorePixelArrayElement::PrintDataTo(StringStream* stream) {
|
|
1204
1342
|
}
|
1205
1343
|
|
1206
1344
|
|
1207
|
-
void
|
1345
|
+
void HLoadGlobalCell::PrintDataTo(StringStream* stream) {
|
1208
1346
|
stream->Add("[%p]", *cell());
|
1209
1347
|
if (check_hole_value()) stream->Add(" (deleteable/read-only)");
|
1210
1348
|
}
|
1211
1349
|
|
1212
1350
|
|
1351
|
+
void HLoadGlobalGeneric::PrintDataTo(StringStream* stream) {
|
1352
|
+
stream->Add("%o ", *name());
|
1353
|
+
}
|
1354
|
+
|
1355
|
+
|
1213
1356
|
void HStoreGlobal::PrintDataTo(StringStream* stream) {
|
1214
1357
|
stream->Add("[%p] = ", *cell());
|
1215
1358
|
value()->PrintNameTo(stream);
|