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
@@ -29,7 +29,9 @@
|
|
29
29
|
#define V8_HYDROGEN_INSTRUCTIONS_H_
|
30
30
|
|
31
31
|
#include "v8.h"
|
32
|
+
|
32
33
|
#include "code-stubs.h"
|
34
|
+
#include "small-pointer-list.h"
|
33
35
|
#include "string-stream.h"
|
34
36
|
#include "zone.h"
|
35
37
|
|
@@ -91,6 +93,7 @@ class LChunkBuilder;
|
|
91
93
|
V(CheckNonSmi) \
|
92
94
|
V(CheckPrototypeMaps) \
|
93
95
|
V(CheckSmi) \
|
96
|
+
V(ClassOfTest) \
|
94
97
|
V(Compare) \
|
95
98
|
V(CompareJSObjectEq) \
|
96
99
|
V(CompareMap) \
|
@@ -100,40 +103,41 @@ class LChunkBuilder;
|
|
100
103
|
V(Deoptimize) \
|
101
104
|
V(Div) \
|
102
105
|
V(EnterInlined) \
|
106
|
+
V(ExternalArrayLength) \
|
103
107
|
V(FixedArrayLength) \
|
104
108
|
V(FunctionLiteral) \
|
105
109
|
V(GetCachedArrayIndex) \
|
106
110
|
V(GlobalObject) \
|
107
111
|
V(GlobalReceiver) \
|
108
112
|
V(Goto) \
|
113
|
+
V(HasInstanceType) \
|
114
|
+
V(HasCachedArrayIndex) \
|
109
115
|
V(InstanceOf) \
|
110
116
|
V(InstanceOfKnownGlobal) \
|
111
117
|
V(IsNull) \
|
112
118
|
V(IsObject) \
|
113
119
|
V(IsSmi) \
|
114
120
|
V(IsConstructCall) \
|
115
|
-
V(HasInstanceType) \
|
116
|
-
V(HasCachedArrayIndex) \
|
117
121
|
V(JSArrayLength) \
|
118
|
-
V(ClassOfTest) \
|
119
122
|
V(LeaveInlined) \
|
120
123
|
V(LoadContextSlot) \
|
121
124
|
V(LoadElements) \
|
125
|
+
V(LoadExternalArrayPointer) \
|
122
126
|
V(LoadFunctionPrototype) \
|
123
|
-
V(
|
127
|
+
V(LoadGlobalCell) \
|
128
|
+
V(LoadGlobalGeneric) \
|
124
129
|
V(LoadKeyedFastElement) \
|
125
130
|
V(LoadKeyedGeneric) \
|
131
|
+
V(LoadKeyedSpecializedArrayElement) \
|
126
132
|
V(LoadNamedField) \
|
133
|
+
V(LoadNamedFieldPolymorphic) \
|
127
134
|
V(LoadNamedGeneric) \
|
128
|
-
V(LoadPixelArrayElement) \
|
129
|
-
V(LoadPixelArrayExternalPointer) \
|
130
135
|
V(Mod) \
|
131
136
|
V(Mul) \
|
132
137
|
V(ObjectLiteral) \
|
133
138
|
V(OsrEntry) \
|
134
139
|
V(OuterContext) \
|
135
140
|
V(Parameter) \
|
136
|
-
V(PixelArrayLength) \
|
137
141
|
V(Power) \
|
138
142
|
V(PushArgument) \
|
139
143
|
V(RegExpLiteral) \
|
@@ -146,15 +150,17 @@ class LChunkBuilder;
|
|
146
150
|
V(StoreContextSlot) \
|
147
151
|
V(StoreGlobal) \
|
148
152
|
V(StoreKeyedFastElement) \
|
149
|
-
V(
|
153
|
+
V(StoreKeyedSpecializedArrayElement) \
|
150
154
|
V(StoreKeyedGeneric) \
|
151
155
|
V(StoreNamedField) \
|
152
156
|
V(StoreNamedGeneric) \
|
153
157
|
V(StringCharCodeAt) \
|
158
|
+
V(StringCharFromCode) \
|
154
159
|
V(StringLength) \
|
155
160
|
V(Sub) \
|
156
161
|
V(Test) \
|
157
162
|
V(Throw) \
|
163
|
+
V(ToFastProperties) \
|
158
164
|
V(Typeof) \
|
159
165
|
V(TypeofIs) \
|
160
166
|
V(UnaryMathOperation) \
|
@@ -166,7 +172,7 @@ class LChunkBuilder;
|
|
166
172
|
V(InobjectFields) \
|
167
173
|
V(BackingStoreFields) \
|
168
174
|
V(ArrayElements) \
|
169
|
-
V(
|
175
|
+
V(SpecializedArrayElements) \
|
170
176
|
V(GlobalVars) \
|
171
177
|
V(Maps) \
|
172
178
|
V(ArrayLengths) \
|
@@ -190,81 +196,48 @@ class LChunkBuilder;
|
|
190
196
|
|
191
197
|
class Range: public ZoneObject {
|
192
198
|
public:
|
193
|
-
Range()
|
194
|
-
|
195
|
-
|
196
|
-
|
199
|
+
Range()
|
200
|
+
: lower_(kMinInt),
|
201
|
+
upper_(kMaxInt),
|
202
|
+
next_(NULL),
|
203
|
+
can_be_minus_zero_(false) { }
|
197
204
|
|
198
205
|
Range(int32_t lower, int32_t upper)
|
199
|
-
: lower_(lower),
|
206
|
+
: lower_(lower),
|
207
|
+
upper_(upper),
|
208
|
+
next_(NULL),
|
209
|
+
can_be_minus_zero_(false) { }
|
200
210
|
|
201
|
-
bool IsInSmiRange() const {
|
202
|
-
return lower_ >= Smi::kMinValue && upper_ <= Smi::kMaxValue;
|
203
|
-
}
|
204
|
-
void KeepOrder();
|
205
|
-
void Verify() const;
|
206
211
|
int32_t upper() const { return upper_; }
|
207
212
|
int32_t lower() const { return lower_; }
|
208
213
|
Range* next() const { return next_; }
|
209
214
|
Range* CopyClearLower() const { return new Range(kMinInt, upper_); }
|
210
215
|
Range* CopyClearUpper() const { return new Range(lower_, kMaxInt); }
|
211
|
-
void ClearLower() { lower_ = kMinInt; }
|
212
|
-
void ClearUpper() { upper_ = kMaxInt; }
|
213
216
|
Range* Copy() const { return new Range(lower_, upper_); }
|
214
|
-
bool IsMostGeneric() const { return lower_ == kMinInt && upper_ == kMaxInt; }
|
215
217
|
int32_t Mask() const;
|
216
218
|
void set_can_be_minus_zero(bool b) { can_be_minus_zero_ = b; }
|
217
219
|
bool CanBeMinusZero() const { return CanBeZero() && can_be_minus_zero_; }
|
218
220
|
bool CanBeZero() const { return upper_ >= 0 && lower_ <= 0; }
|
219
221
|
bool CanBeNegative() const { return lower_ < 0; }
|
220
|
-
bool Includes(int value) const {
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
void Sar(int32_t value) {
|
225
|
-
int32_t bits = value & 0x1F;
|
226
|
-
lower_ = lower_ >> bits;
|
227
|
-
upper_ = upper_ >> bits;
|
228
|
-
set_can_be_minus_zero(false);
|
229
|
-
}
|
230
|
-
|
231
|
-
void Shl(int32_t value) {
|
232
|
-
int32_t bits = value & 0x1F;
|
233
|
-
int old_lower = lower_;
|
234
|
-
int old_upper = upper_;
|
235
|
-
lower_ = lower_ << bits;
|
236
|
-
upper_ = upper_ << bits;
|
237
|
-
if (old_lower != lower_ >> bits || old_upper != upper_ >> bits) {
|
238
|
-
upper_ = kMaxInt;
|
239
|
-
lower_ = kMinInt;
|
240
|
-
}
|
241
|
-
set_can_be_minus_zero(false);
|
222
|
+
bool Includes(int value) const { return lower_ <= value && upper_ >= value; }
|
223
|
+
bool IsMostGeneric() const { return lower_ == kMinInt && upper_ == kMaxInt; }
|
224
|
+
bool IsInSmiRange() const {
|
225
|
+
return lower_ >= Smi::kMinValue && upper_ <= Smi::kMaxValue;
|
242
226
|
}
|
243
|
-
|
244
|
-
|
245
|
-
void AddConstant(int32_t value);
|
227
|
+
void KeepOrder();
|
228
|
+
void Verify() const;
|
246
229
|
|
247
230
|
void StackUpon(Range* other) {
|
248
231
|
Intersect(other);
|
249
232
|
next_ = other;
|
250
233
|
}
|
251
234
|
|
252
|
-
void Intersect(Range* other)
|
253
|
-
|
254
|
-
lower_ = Max(lower_, other->lower_);
|
255
|
-
bool b = CanBeMinusZero() && other->CanBeMinusZero();
|
256
|
-
set_can_be_minus_zero(b);
|
257
|
-
}
|
258
|
-
|
259
|
-
void Union(Range* other) {
|
260
|
-
upper_ = Max(upper_, other->upper_);
|
261
|
-
lower_ = Min(lower_, other->lower_);
|
262
|
-
bool b = CanBeMinusZero() || other->CanBeMinusZero();
|
263
|
-
set_can_be_minus_zero(b);
|
264
|
-
}
|
235
|
+
void Intersect(Range* other);
|
236
|
+
void Union(Range* other);
|
265
237
|
|
266
|
-
|
267
|
-
|
238
|
+
void AddConstant(int32_t value);
|
239
|
+
void Sar(int32_t value);
|
240
|
+
void Shl(int32_t value);
|
268
241
|
bool AddAndCheckOverflow(Range* other);
|
269
242
|
bool SubAndCheckOverflow(Range* other);
|
270
243
|
bool MulAndCheckOverflow(Range* other);
|
@@ -482,7 +455,6 @@ class HValue: public ZoneObject {
|
|
482
455
|
|
483
456
|
HValue() : block_(NULL),
|
484
457
|
id_(kNoNumber),
|
485
|
-
uses_(2),
|
486
458
|
type_(HType::Tagged()),
|
487
459
|
range_(NULL),
|
488
460
|
flags_(0) {}
|
@@ -494,9 +466,9 @@ class HValue: public ZoneObject {
|
|
494
466
|
int id() const { return id_; }
|
495
467
|
void set_id(int id) { id_ = id; }
|
496
468
|
|
497
|
-
|
469
|
+
SmallPointerList<HValue>* uses() { return &uses_; }
|
498
470
|
|
499
|
-
virtual bool EmitAtUses()
|
471
|
+
virtual bool EmitAtUses() { return false; }
|
500
472
|
Representation representation() const { return representation_; }
|
501
473
|
void ChangeRepresentation(Representation r) {
|
502
474
|
// Representation was already set and is allowed to be changed.
|
@@ -638,7 +610,7 @@ class HValue: public ZoneObject {
|
|
638
610
|
int id_;
|
639
611
|
|
640
612
|
Representation representation_;
|
641
|
-
|
613
|
+
SmallPointerList<HValue> uses_;
|
642
614
|
HType type_;
|
643
615
|
Range* range_;
|
644
616
|
int flags_;
|
@@ -789,15 +761,33 @@ class HBlockEntry: public HTemplateInstruction<0> {
|
|
789
761
|
};
|
790
762
|
|
791
763
|
|
792
|
-
class HDeoptimize: public
|
764
|
+
class HDeoptimize: public HControlInstruction {
|
793
765
|
public:
|
794
|
-
HDeoptimize(
|
766
|
+
explicit HDeoptimize(int environment_length)
|
767
|
+
: HControlInstruction(NULL, NULL),
|
768
|
+
values_(environment_length) { }
|
795
769
|
|
796
770
|
virtual Representation RequiredInputRepresentation(int index) const {
|
797
771
|
return Representation::None();
|
798
772
|
}
|
799
773
|
|
774
|
+
virtual int OperandCount() { return values_.length(); }
|
775
|
+
virtual HValue* OperandAt(int index) { return values_[index]; }
|
776
|
+
|
777
|
+
void AddEnvironmentValue(HValue* value) {
|
778
|
+
values_.Add(NULL);
|
779
|
+
SetOperandAt(values_.length() - 1, value);
|
780
|
+
}
|
781
|
+
|
800
782
|
DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize")
|
783
|
+
|
784
|
+
protected:
|
785
|
+
virtual void InternalSetOperandAt(int index, HValue* value) {
|
786
|
+
values_[index] = value;
|
787
|
+
}
|
788
|
+
|
789
|
+
private:
|
790
|
+
ZoneList<HValue*> values_;
|
801
791
|
};
|
802
792
|
|
803
793
|
|
@@ -940,13 +930,14 @@ class HChange: public HUnaryOperation {
|
|
940
930
|
public:
|
941
931
|
HChange(HValue* value,
|
942
932
|
Representation from,
|
943
|
-
Representation to
|
933
|
+
Representation to,
|
934
|
+
bool is_truncating)
|
944
935
|
: HUnaryOperation(value), from_(from), to_(to) {
|
945
936
|
ASSERT(!from.IsNone() && !to.IsNone());
|
946
937
|
ASSERT(!from.Equals(to));
|
947
938
|
set_representation(to);
|
948
939
|
SetFlag(kUseGVN);
|
949
|
-
|
940
|
+
if (is_truncating) SetFlag(kTruncatingToInt32);
|
950
941
|
if (from.IsInteger32() && to.IsTagged() && value->range() != NULL &&
|
951
942
|
value->range()->IsInSmiRange()) {
|
952
943
|
set_type(HType::Smi());
|
@@ -961,12 +952,7 @@ class HChange: public HUnaryOperation {
|
|
961
952
|
return from_;
|
962
953
|
}
|
963
954
|
|
964
|
-
bool CanTruncateToInt32() const {
|
965
|
-
for (int i = 0; i < uses()->length(); ++i) {
|
966
|
-
if (!uses()->at(i)->CheckFlag(HValue::kTruncatingToInt32)) return false;
|
967
|
-
}
|
968
|
-
return true;
|
969
|
-
}
|
955
|
+
bool CanTruncateToInt32() const { return CheckFlag(kTruncatingToInt32); }
|
970
956
|
|
971
957
|
virtual void PrintDataTo(StringStream* stream);
|
972
958
|
|
@@ -978,8 +964,7 @@ class HChange: public HUnaryOperation {
|
|
978
964
|
if (!other->IsChange()) return false;
|
979
965
|
HChange* change = HChange::cast(other);
|
980
966
|
return value() == change->value()
|
981
|
-
&& to().Equals(change->to())
|
982
|
-
&& CanTruncateToInt32() == change->CanTruncateToInt32();
|
967
|
+
&& to().Equals(change->to());
|
983
968
|
}
|
984
969
|
|
985
970
|
private:
|
@@ -1263,7 +1248,8 @@ class HCallConstantFunction: public HCall<0> {
|
|
1263
1248
|
Handle<JSFunction> function() const { return function_; }
|
1264
1249
|
|
1265
1250
|
bool IsApplyFunction() const {
|
1266
|
-
return function_->code() ==
|
1251
|
+
return function_->code() ==
|
1252
|
+
Isolate::Current()->builtins()->builtin(Builtins::kFunctionApply);
|
1267
1253
|
}
|
1268
1254
|
|
1269
1255
|
virtual void PrintDataTo(StringStream* stream);
|
@@ -1396,12 +1382,12 @@ class HCallNew: public HBinaryCall {
|
|
1396
1382
|
class HCallRuntime: public HCall<0> {
|
1397
1383
|
public:
|
1398
1384
|
HCallRuntime(Handle<String> name,
|
1399
|
-
Runtime::Function* c_function,
|
1385
|
+
const Runtime::Function* c_function,
|
1400
1386
|
int argument_count)
|
1401
1387
|
: HCall<0>(argument_count), c_function_(c_function), name_(name) { }
|
1402
1388
|
virtual void PrintDataTo(StringStream* stream);
|
1403
1389
|
|
1404
|
-
Runtime::Function* function() const { return c_function_; }
|
1390
|
+
const Runtime::Function* function() const { return c_function_; }
|
1405
1391
|
Handle<String> name() const { return name_; }
|
1406
1392
|
|
1407
1393
|
virtual Representation RequiredInputRepresentation(int index) const {
|
@@ -1411,7 +1397,7 @@ class HCallRuntime: public HCall<0> {
|
|
1411
1397
|
DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call_runtime")
|
1412
1398
|
|
1413
1399
|
private:
|
1414
|
-
Runtime::Function* c_function_;
|
1400
|
+
const Runtime::Function* c_function_;
|
1415
1401
|
Handle<String> name_;
|
1416
1402
|
};
|
1417
1403
|
|
@@ -1423,8 +1409,9 @@ class HJSArrayLength: public HUnaryOperation {
|
|
1423
1409
|
// object. It is guaranteed to be 32 bit integer, but it can be
|
1424
1410
|
// represented as either a smi or heap number.
|
1425
1411
|
set_representation(Representation::Tagged());
|
1426
|
-
SetFlag(kDependsOnArrayLengths);
|
1427
1412
|
SetFlag(kUseGVN);
|
1413
|
+
SetFlag(kDependsOnArrayLengths);
|
1414
|
+
SetFlag(kDependsOnMaps);
|
1428
1415
|
}
|
1429
1416
|
|
1430
1417
|
virtual Representation RequiredInputRepresentation(int index) const {
|
@@ -1442,8 +1429,8 @@ class HFixedArrayLength: public HUnaryOperation {
|
|
1442
1429
|
public:
|
1443
1430
|
explicit HFixedArrayLength(HValue* value) : HUnaryOperation(value) {
|
1444
1431
|
set_representation(Representation::Tagged());
|
1445
|
-
SetFlag(kDependsOnArrayLengths);
|
1446
1432
|
SetFlag(kUseGVN);
|
1433
|
+
SetFlag(kDependsOnArrayLengths);
|
1447
1434
|
}
|
1448
1435
|
|
1449
1436
|
virtual Representation RequiredInputRepresentation(int index) const {
|
@@ -1457,9 +1444,9 @@ class HFixedArrayLength: public HUnaryOperation {
|
|
1457
1444
|
};
|
1458
1445
|
|
1459
1446
|
|
1460
|
-
class
|
1447
|
+
class HExternalArrayLength: public HUnaryOperation {
|
1461
1448
|
public:
|
1462
|
-
explicit
|
1449
|
+
explicit HExternalArrayLength(HValue* value) : HUnaryOperation(value) {
|
1463
1450
|
set_representation(Representation::Integer32());
|
1464
1451
|
// The result of this instruction is idempotent as long as its inputs don't
|
1465
1452
|
// change. The length of a pixel array cannot change once set, so it's not
|
@@ -1471,7 +1458,7 @@ class HPixelArrayLength: public HUnaryOperation {
|
|
1471
1458
|
return Representation::Tagged();
|
1472
1459
|
}
|
1473
1460
|
|
1474
|
-
DECLARE_CONCRETE_INSTRUCTION(
|
1461
|
+
DECLARE_CONCRETE_INSTRUCTION(ExternalArrayLength, "external_array_length")
|
1475
1462
|
|
1476
1463
|
protected:
|
1477
1464
|
virtual bool DataEquals(HValue* other) { return true; }
|
@@ -1595,13 +1582,13 @@ class HLoadElements: public HUnaryOperation {
|
|
1595
1582
|
};
|
1596
1583
|
|
1597
1584
|
|
1598
|
-
class
|
1585
|
+
class HLoadExternalArrayPointer: public HUnaryOperation {
|
1599
1586
|
public:
|
1600
|
-
explicit
|
1587
|
+
explicit HLoadExternalArrayPointer(HValue* value)
|
1601
1588
|
: HUnaryOperation(value) {
|
1602
1589
|
set_representation(Representation::External());
|
1603
1590
|
// The result of this instruction is idempotent as long as its inputs don't
|
1604
|
-
// change. The external array of a
|
1591
|
+
// change. The external array of a specialized array elements object cannot
|
1605
1592
|
// change once set, so it's no necessary to introduce any additional
|
1606
1593
|
// dependencies on top of the inputs.
|
1607
1594
|
SetFlag(kUseGVN);
|
@@ -1611,8 +1598,8 @@ class HLoadPixelArrayExternalPointer: public HUnaryOperation {
|
|
1611
1598
|
return Representation::Tagged();
|
1612
1599
|
}
|
1613
1600
|
|
1614
|
-
DECLARE_CONCRETE_INSTRUCTION(
|
1615
|
-
"load-
|
1601
|
+
DECLARE_CONCRETE_INSTRUCTION(LoadExternalArrayPointer,
|
1602
|
+
"load-external-array-pointer")
|
1616
1603
|
|
1617
1604
|
protected:
|
1618
1605
|
virtual bool DataEquals(HValue* other) { return true; }
|
@@ -1789,7 +1776,7 @@ class HCheckPrototypeMaps: public HTemplateInstruction<0> {
|
|
1789
1776
|
}
|
1790
1777
|
|
1791
1778
|
virtual intptr_t Hashcode() {
|
1792
|
-
ASSERT(!
|
1779
|
+
ASSERT(!HEAP->IsAllocationAllowed());
|
1793
1780
|
intptr_t hash = reinterpret_cast<intptr_t>(*prototype());
|
1794
1781
|
hash = 17 * hash + reinterpret_cast<intptr_t>(*holder());
|
1795
1782
|
return hash;
|
@@ -1838,7 +1825,8 @@ class HPhi: public HValue {
|
|
1838
1825
|
explicit HPhi(int merged_index)
|
1839
1826
|
: inputs_(2),
|
1840
1827
|
merged_index_(merged_index),
|
1841
|
-
phi_id_(-1)
|
1828
|
+
phi_id_(-1),
|
1829
|
+
is_live_(false) {
|
1842
1830
|
for (int i = 0; i < Representation::kNumRepresentations; i++) {
|
1843
1831
|
non_phi_uses_[i] = 0;
|
1844
1832
|
indirect_uses_[i] = 0;
|
@@ -1872,6 +1860,7 @@ class HPhi: public HValue {
|
|
1872
1860
|
virtual HValue* OperandAt(int index) { return inputs_[index]; }
|
1873
1861
|
HValue* GetRedundantReplacement();
|
1874
1862
|
void AddInput(HValue* value);
|
1863
|
+
bool HasRealUses();
|
1875
1864
|
|
1876
1865
|
bool IsReceiver() { return merged_index_ == 0; }
|
1877
1866
|
|
@@ -1910,6 +1899,8 @@ class HPhi: public HValue {
|
|
1910
1899
|
return indirect_uses_[Representation::kDouble];
|
1911
1900
|
}
|
1912
1901
|
int phi_id() { return phi_id_; }
|
1902
|
+
bool is_live() { return is_live_; }
|
1903
|
+
void set_is_live(bool b) { is_live_ = b; }
|
1913
1904
|
|
1914
1905
|
protected:
|
1915
1906
|
virtual void DeleteFromGraph();
|
@@ -1924,6 +1915,7 @@ class HPhi: public HValue {
|
|
1924
1915
|
int non_phi_uses_[Representation::kNumRepresentations];
|
1925
1916
|
int indirect_uses_[Representation::kNumRepresentations];
|
1926
1917
|
int phi_id_;
|
1918
|
+
bool is_live_;
|
1927
1919
|
};
|
1928
1920
|
|
1929
1921
|
|
@@ -1948,13 +1940,13 @@ class HConstant: public HTemplateInstruction<0> {
|
|
1948
1940
|
|
1949
1941
|
Handle<Object> handle() const { return handle_; }
|
1950
1942
|
|
1951
|
-
bool InOldSpace() const { return !
|
1943
|
+
bool InOldSpace() const { return !HEAP->InNewSpace(*handle_); }
|
1952
1944
|
|
1953
1945
|
virtual Representation RequiredInputRepresentation(int index) const {
|
1954
1946
|
return Representation::None();
|
1955
1947
|
}
|
1956
1948
|
|
1957
|
-
virtual bool EmitAtUses()
|
1949
|
+
virtual bool EmitAtUses() { return !representation().IsDouble(); }
|
1958
1950
|
virtual void PrintDataTo(StringStream* stream);
|
1959
1951
|
virtual HType CalculateInferredType();
|
1960
1952
|
bool IsInteger() const { return handle_->IsSmi(); }
|
@@ -1973,7 +1965,7 @@ class HConstant: public HTemplateInstruction<0> {
|
|
1973
1965
|
bool HasStringValue() const { return handle_->IsString(); }
|
1974
1966
|
|
1975
1967
|
virtual intptr_t Hashcode() {
|
1976
|
-
ASSERT(!
|
1968
|
+
ASSERT(!HEAP->allow_allocation(false));
|
1977
1969
|
return reinterpret_cast<intptr_t>(*handle());
|
1978
1970
|
}
|
1979
1971
|
|
@@ -2229,7 +2221,7 @@ class HCompare: public HBinaryOperation {
|
|
2229
2221
|
|
2230
2222
|
void SetInputRepresentation(Representation r);
|
2231
2223
|
|
2232
|
-
virtual bool EmitAtUses()
|
2224
|
+
virtual bool EmitAtUses() {
|
2233
2225
|
return !HasSideEffects() && (uses()->length() <= 1);
|
2234
2226
|
}
|
2235
2227
|
|
@@ -2268,9 +2260,10 @@ class HCompareJSObjectEq: public HBinaryOperation {
|
|
2268
2260
|
: HBinaryOperation(left, right) {
|
2269
2261
|
set_representation(Representation::Tagged());
|
2270
2262
|
SetFlag(kUseGVN);
|
2263
|
+
SetFlag(kDependsOnMaps);
|
2271
2264
|
}
|
2272
2265
|
|
2273
|
-
virtual bool EmitAtUses()
|
2266
|
+
virtual bool EmitAtUses() {
|
2274
2267
|
return !HasSideEffects() && (uses()->length() <= 1);
|
2275
2268
|
}
|
2276
2269
|
|
@@ -2293,7 +2286,7 @@ class HUnaryPredicate: public HUnaryOperation {
|
|
2293
2286
|
SetFlag(kUseGVN);
|
2294
2287
|
}
|
2295
2288
|
|
2296
|
-
virtual bool EmitAtUses()
|
2289
|
+
virtual bool EmitAtUses() {
|
2297
2290
|
return !HasSideEffects() && (uses()->length() <= 1);
|
2298
2291
|
}
|
2299
2292
|
|
@@ -2353,7 +2346,7 @@ class HIsConstructCall: public HTemplateInstruction<0> {
|
|
2353
2346
|
SetFlag(kUseGVN);
|
2354
2347
|
}
|
2355
2348
|
|
2356
|
-
virtual bool EmitAtUses()
|
2349
|
+
virtual bool EmitAtUses() {
|
2357
2350
|
return !HasSideEffects() && (uses()->length() <= 1);
|
2358
2351
|
}
|
2359
2352
|
|
@@ -2475,7 +2468,7 @@ class HInstanceOf: public HTemplateInstruction<3> {
|
|
2475
2468
|
HValue* left() { return OperandAt(1); }
|
2476
2469
|
HValue* right() { return OperandAt(2); }
|
2477
2470
|
|
2478
|
-
virtual bool EmitAtUses()
|
2471
|
+
virtual bool EmitAtUses() {
|
2479
2472
|
return !HasSideEffects() && (uses()->length() <= 1);
|
2480
2473
|
}
|
2481
2474
|
|
@@ -2600,6 +2593,16 @@ class HMod: public HArithmeticBinaryOperation {
|
|
2600
2593
|
SetFlag(kCanBeDivByZero);
|
2601
2594
|
}
|
2602
2595
|
|
2596
|
+
bool HasPowerOf2Divisor() {
|
2597
|
+
if (right()->IsConstant() &&
|
2598
|
+
HConstant::cast(right())->HasInteger32Value()) {
|
2599
|
+
int32_t value = HConstant::cast(right())->Integer32Value();
|
2600
|
+
return value != 0 && (IsPowerOf2(value) || IsPowerOf2(-value));
|
2601
|
+
}
|
2602
|
+
|
2603
|
+
return false;
|
2604
|
+
}
|
2605
|
+
|
2603
2606
|
virtual HValue* EnsureAndPropagateNotMinusZero(BitVector* visited);
|
2604
2607
|
|
2605
2608
|
DECLARE_CONCRETE_INSTRUCTION(Mod, "mod")
|
@@ -2807,9 +2810,9 @@ class HUnknownOSRValue: public HTemplateInstruction<0> {
|
|
2807
2810
|
};
|
2808
2811
|
|
2809
2812
|
|
2810
|
-
class
|
2813
|
+
class HLoadGlobalCell: public HTemplateInstruction<0> {
|
2811
2814
|
public:
|
2812
|
-
|
2815
|
+
HLoadGlobalCell(Handle<JSGlobalPropertyCell> cell, bool check_hole_value)
|
2813
2816
|
: cell_(cell), check_hole_value_(check_hole_value) {
|
2814
2817
|
set_representation(Representation::Tagged());
|
2815
2818
|
SetFlag(kUseGVN);
|
@@ -2822,7 +2825,7 @@ class HLoadGlobal: public HTemplateInstruction<0> {
|
|
2822
2825
|
virtual void PrintDataTo(StringStream* stream);
|
2823
2826
|
|
2824
2827
|
virtual intptr_t Hashcode() {
|
2825
|
-
ASSERT(!
|
2828
|
+
ASSERT(!HEAP->allow_allocation(false));
|
2826
2829
|
return reinterpret_cast<intptr_t>(*cell_);
|
2827
2830
|
}
|
2828
2831
|
|
@@ -2830,11 +2833,11 @@ class HLoadGlobal: public HTemplateInstruction<0> {
|
|
2830
2833
|
return Representation::None();
|
2831
2834
|
}
|
2832
2835
|
|
2833
|
-
DECLARE_CONCRETE_INSTRUCTION(
|
2836
|
+
DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell, "load_global_cell")
|
2834
2837
|
|
2835
2838
|
protected:
|
2836
2839
|
virtual bool DataEquals(HValue* other) {
|
2837
|
-
|
2840
|
+
HLoadGlobalCell* b = HLoadGlobalCell::cast(other);
|
2838
2841
|
return cell_.is_identical_to(b->cell());
|
2839
2842
|
}
|
2840
2843
|
|
@@ -2844,6 +2847,38 @@ class HLoadGlobal: public HTemplateInstruction<0> {
|
|
2844
2847
|
};
|
2845
2848
|
|
2846
2849
|
|
2850
|
+
class HLoadGlobalGeneric: public HBinaryOperation {
|
2851
|
+
public:
|
2852
|
+
HLoadGlobalGeneric(HValue* context,
|
2853
|
+
HValue* global_object,
|
2854
|
+
Handle<Object> name,
|
2855
|
+
bool for_typeof)
|
2856
|
+
: HBinaryOperation(context, global_object),
|
2857
|
+
name_(name),
|
2858
|
+
for_typeof_(for_typeof) {
|
2859
|
+
set_representation(Representation::Tagged());
|
2860
|
+
SetAllSideEffects();
|
2861
|
+
}
|
2862
|
+
|
2863
|
+
HValue* context() { return OperandAt(0); }
|
2864
|
+
HValue* global_object() { return OperandAt(1); }
|
2865
|
+
Handle<Object> name() const { return name_; }
|
2866
|
+
bool for_typeof() const { return for_typeof_; }
|
2867
|
+
|
2868
|
+
virtual void PrintDataTo(StringStream* stream);
|
2869
|
+
|
2870
|
+
virtual Representation RequiredInputRepresentation(int index) const {
|
2871
|
+
return Representation::Tagged();
|
2872
|
+
}
|
2873
|
+
|
2874
|
+
DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load_global_generic")
|
2875
|
+
|
2876
|
+
private:
|
2877
|
+
Handle<Object> name_;
|
2878
|
+
bool for_typeof_;
|
2879
|
+
};
|
2880
|
+
|
2881
|
+
|
2847
2882
|
class HStoreGlobal: public HUnaryOperation {
|
2848
2883
|
public:
|
2849
2884
|
HStoreGlobal(HValue* value,
|
@@ -2943,6 +2978,7 @@ class HLoadNamedField: public HUnaryOperation {
|
|
2943
2978
|
offset_(offset) {
|
2944
2979
|
set_representation(Representation::Tagged());
|
2945
2980
|
SetFlag(kUseGVN);
|
2981
|
+
SetFlag(kDependsOnMaps);
|
2946
2982
|
if (is_in_object) {
|
2947
2983
|
SetFlag(kDependsOnInobjectFields);
|
2948
2984
|
} else {
|
@@ -2973,6 +3009,37 @@ class HLoadNamedField: public HUnaryOperation {
|
|
2973
3009
|
};
|
2974
3010
|
|
2975
3011
|
|
3012
|
+
class HLoadNamedFieldPolymorphic: public HUnaryOperation {
|
3013
|
+
public:
|
3014
|
+
HLoadNamedFieldPolymorphic(HValue* object,
|
3015
|
+
ZoneMapList* types,
|
3016
|
+
Handle<String> name);
|
3017
|
+
|
3018
|
+
HValue* object() { return OperandAt(0); }
|
3019
|
+
ZoneMapList* types() { return &types_; }
|
3020
|
+
Handle<String> name() { return name_; }
|
3021
|
+
bool need_generic() { return need_generic_; }
|
3022
|
+
|
3023
|
+
virtual Representation RequiredInputRepresentation(int index) const {
|
3024
|
+
return Representation::Tagged();
|
3025
|
+
}
|
3026
|
+
|
3027
|
+
DECLARE_CONCRETE_INSTRUCTION(LoadNamedFieldPolymorphic,
|
3028
|
+
"load_named_field_polymorphic")
|
3029
|
+
|
3030
|
+
static const int kMaxLoadPolymorphism = 4;
|
3031
|
+
|
3032
|
+
protected:
|
3033
|
+
virtual bool DataEquals(HValue* value);
|
3034
|
+
|
3035
|
+
private:
|
3036
|
+
ZoneMapList types_;
|
3037
|
+
Handle<String> name_;
|
3038
|
+
bool need_generic_;
|
3039
|
+
};
|
3040
|
+
|
3041
|
+
|
3042
|
+
|
2976
3043
|
class HLoadNamedGeneric: public HBinaryOperation {
|
2977
3044
|
public:
|
2978
3045
|
HLoadNamedGeneric(HValue* context, HValue* object, Handle<Object> name)
|
@@ -3045,13 +3112,20 @@ class HLoadKeyedFastElement: public HBinaryOperation {
|
|
3045
3112
|
};
|
3046
3113
|
|
3047
3114
|
|
3048
|
-
class
|
3115
|
+
class HLoadKeyedSpecializedArrayElement: public HBinaryOperation {
|
3049
3116
|
public:
|
3050
|
-
|
3051
|
-
|
3052
|
-
|
3053
|
-
|
3054
|
-
|
3117
|
+
HLoadKeyedSpecializedArrayElement(HValue* external_elements,
|
3118
|
+
HValue* key,
|
3119
|
+
ExternalArrayType array_type)
|
3120
|
+
: HBinaryOperation(external_elements, key),
|
3121
|
+
array_type_(array_type) {
|
3122
|
+
if (array_type == kExternalFloatArray) {
|
3123
|
+
set_representation(Representation::Double());
|
3124
|
+
} else {
|
3125
|
+
set_representation(Representation::Integer32());
|
3126
|
+
}
|
3127
|
+
SetFlag(kDependsOnSpecializedArrayElements);
|
3128
|
+
// Native code could change the specialized array.
|
3055
3129
|
SetFlag(kDependsOnCalls);
|
3056
3130
|
SetFlag(kUseGVN);
|
3057
3131
|
}
|
@@ -3067,12 +3141,21 @@ class HLoadPixelArrayElement: public HBinaryOperation {
|
|
3067
3141
|
|
3068
3142
|
HValue* external_pointer() { return OperandAt(0); }
|
3069
3143
|
HValue* key() { return OperandAt(1); }
|
3144
|
+
ExternalArrayType array_type() const { return array_type_; }
|
3070
3145
|
|
3071
|
-
DECLARE_CONCRETE_INSTRUCTION(
|
3072
|
-
"
|
3146
|
+
DECLARE_CONCRETE_INSTRUCTION(LoadKeyedSpecializedArrayElement,
|
3147
|
+
"load_keyed_specialized_array_element")
|
3073
3148
|
|
3074
3149
|
protected:
|
3075
|
-
virtual bool DataEquals(HValue* other) {
|
3150
|
+
virtual bool DataEquals(HValue* other) {
|
3151
|
+
if (!other->IsLoadKeyedSpecializedArrayElement()) return false;
|
3152
|
+
HLoadKeyedSpecializedArrayElement* cast_other =
|
3153
|
+
HLoadKeyedSpecializedArrayElement::cast(other);
|
3154
|
+
return array_type_ == cast_other->array_type();
|
3155
|
+
}
|
3156
|
+
|
3157
|
+
private:
|
3158
|
+
ExternalArrayType array_type_;
|
3076
3159
|
};
|
3077
3160
|
|
3078
3161
|
|
@@ -3207,10 +3290,14 @@ class HStoreKeyedFastElement: public HTemplateInstruction<3> {
|
|
3207
3290
|
};
|
3208
3291
|
|
3209
3292
|
|
3210
|
-
class
|
3293
|
+
class HStoreKeyedSpecializedArrayElement: public HTemplateInstruction<3> {
|
3211
3294
|
public:
|
3212
|
-
|
3213
|
-
|
3295
|
+
HStoreKeyedSpecializedArrayElement(HValue* external_elements,
|
3296
|
+
HValue* key,
|
3297
|
+
HValue* val,
|
3298
|
+
ExternalArrayType array_type)
|
3299
|
+
: array_type_(array_type) {
|
3300
|
+
SetFlag(kChangesSpecializedArrayElements);
|
3214
3301
|
SetOperandAt(0, external_elements);
|
3215
3302
|
SetOperandAt(1, key);
|
3216
3303
|
SetOperandAt(2, val);
|
@@ -3222,16 +3309,23 @@ class HStorePixelArrayElement: public HTemplateInstruction<3> {
|
|
3222
3309
|
if (index == 0) {
|
3223
3310
|
return Representation::External();
|
3224
3311
|
} else {
|
3225
|
-
|
3312
|
+
if (index == 2 && array_type() == kExternalFloatArray) {
|
3313
|
+
return Representation::Double();
|
3314
|
+
} else {
|
3315
|
+
return Representation::Integer32();
|
3316
|
+
}
|
3226
3317
|
}
|
3227
3318
|
}
|
3228
3319
|
|
3229
3320
|
HValue* external_pointer() { return OperandAt(0); }
|
3230
3321
|
HValue* key() { return OperandAt(1); }
|
3231
3322
|
HValue* value() { return OperandAt(2); }
|
3323
|
+
ExternalArrayType array_type() const { return array_type_; }
|
3232
3324
|
|
3233
|
-
DECLARE_CONCRETE_INSTRUCTION(
|
3234
|
-
"
|
3325
|
+
DECLARE_CONCRETE_INSTRUCTION(StoreKeyedSpecializedArrayElement,
|
3326
|
+
"store_keyed_specialized_array_element")
|
3327
|
+
private:
|
3328
|
+
ExternalArrayType array_type_;
|
3235
3329
|
};
|
3236
3330
|
|
3237
3331
|
|
@@ -3269,6 +3363,7 @@ class HStringCharCodeAt: public HBinaryOperation {
|
|
3269
3363
|
: HBinaryOperation(string, index) {
|
3270
3364
|
set_representation(Representation::Integer32());
|
3271
3365
|
SetFlag(kUseGVN);
|
3366
|
+
SetFlag(kDependsOnMaps);
|
3272
3367
|
}
|
3273
3368
|
|
3274
3369
|
virtual Representation RequiredInputRepresentation(int index) const {
|
@@ -3291,11 +3386,29 @@ class HStringCharCodeAt: public HBinaryOperation {
|
|
3291
3386
|
};
|
3292
3387
|
|
3293
3388
|
|
3389
|
+
class HStringCharFromCode: public HUnaryOperation {
|
3390
|
+
public:
|
3391
|
+
explicit HStringCharFromCode(HValue* char_code) : HUnaryOperation(char_code) {
|
3392
|
+
set_representation(Representation::Tagged());
|
3393
|
+
SetFlag(kUseGVN);
|
3394
|
+
}
|
3395
|
+
|
3396
|
+
virtual Representation RequiredInputRepresentation(int index) const {
|
3397
|
+
return Representation::Integer32();
|
3398
|
+
}
|
3399
|
+
|
3400
|
+
virtual bool DataEquals(HValue* other) { return true; }
|
3401
|
+
|
3402
|
+
DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string_char_from_code")
|
3403
|
+
};
|
3404
|
+
|
3405
|
+
|
3294
3406
|
class HStringLength: public HUnaryOperation {
|
3295
3407
|
public:
|
3296
3408
|
explicit HStringLength(HValue* string) : HUnaryOperation(string) {
|
3297
3409
|
set_representation(Representation::Tagged());
|
3298
3410
|
SetFlag(kUseGVN);
|
3411
|
+
SetFlag(kDependsOnMaps);
|
3299
3412
|
}
|
3300
3413
|
|
3301
3414
|
virtual Representation RequiredInputRepresentation(int index) const {
|
@@ -3368,10 +3481,12 @@ class HObjectLiteral: public HMaterializedLiteral<1> {
|
|
3368
3481
|
Handle<FixedArray> constant_properties,
|
3369
3482
|
bool fast_elements,
|
3370
3483
|
int literal_index,
|
3371
|
-
int depth
|
3484
|
+
int depth,
|
3485
|
+
bool has_function)
|
3372
3486
|
: HMaterializedLiteral<1>(literal_index, depth),
|
3373
3487
|
constant_properties_(constant_properties),
|
3374
|
-
fast_elements_(fast_elements)
|
3488
|
+
fast_elements_(fast_elements),
|
3489
|
+
has_function_(has_function) {
|
3375
3490
|
SetOperandAt(0, context);
|
3376
3491
|
}
|
3377
3492
|
|
@@ -3380,6 +3495,7 @@ class HObjectLiteral: public HMaterializedLiteral<1> {
|
|
3380
3495
|
return constant_properties_;
|
3381
3496
|
}
|
3382
3497
|
bool fast_elements() const { return fast_elements_; }
|
3498
|
+
bool has_function() const { return has_function_; }
|
3383
3499
|
|
3384
3500
|
virtual Representation RequiredInputRepresentation(int index) const {
|
3385
3501
|
return Representation::Tagged();
|
@@ -3390,6 +3506,7 @@ class HObjectLiteral: public HMaterializedLiteral<1> {
|
|
3390
3506
|
private:
|
3391
3507
|
Handle<FixedArray> constant_properties_;
|
3392
3508
|
bool fast_elements_;
|
3509
|
+
bool has_function_;
|
3393
3510
|
};
|
3394
3511
|
|
3395
3512
|
|
@@ -3453,6 +3570,24 @@ class HTypeof: public HUnaryOperation {
|
|
3453
3570
|
};
|
3454
3571
|
|
3455
3572
|
|
3573
|
+
class HToFastProperties: public HUnaryOperation {
|
3574
|
+
public:
|
3575
|
+
explicit HToFastProperties(HValue* value) : HUnaryOperation(value) {
|
3576
|
+
// This instruction is not marked as having side effects, but
|
3577
|
+
// changes the map of the input operand. Use it only when creating
|
3578
|
+
// object literals.
|
3579
|
+
ASSERT(value->IsObjectLiteral());
|
3580
|
+
set_representation(Representation::Tagged());
|
3581
|
+
}
|
3582
|
+
|
3583
|
+
virtual Representation RequiredInputRepresentation(int index) const {
|
3584
|
+
return Representation::Tagged();
|
3585
|
+
}
|
3586
|
+
|
3587
|
+
DECLARE_CONCRETE_INSTRUCTION(ToFastProperties, "to_fast_properties")
|
3588
|
+
};
|
3589
|
+
|
3590
|
+
|
3456
3591
|
class HValueOf: public HUnaryOperation {
|
3457
3592
|
public:
|
3458
3593
|
explicit HValueOf(HValue* value) : HUnaryOperation(value) {
|