mustang 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
@@ -56,7 +56,7 @@ class LCodeGen BASE_EMBEDDED {
|
|
56
56
|
deoptimizations_(4),
|
57
57
|
deoptimization_literals_(8),
|
58
58
|
inlined_function_count_(0),
|
59
|
-
scope_(
|
59
|
+
scope_(info->scope()),
|
60
60
|
status_(UNUSED),
|
61
61
|
deferred_(8),
|
62
62
|
osr_pc_offset_(-1),
|
@@ -67,6 +67,10 @@ class LCodeGen BASE_EMBEDDED {
|
|
67
67
|
|
68
68
|
// Simple accessors.
|
69
69
|
MacroAssembler* masm() const { return masm_; }
|
70
|
+
CompilationInfo* info() const { return info_; }
|
71
|
+
Isolate* isolate() const { return info_->isolate(); }
|
72
|
+
Factory* factory() const { return isolate()->factory(); }
|
73
|
+
Heap* heap() const { return isolate()->heap(); }
|
70
74
|
|
71
75
|
// Support for converting LOperands to assembler types.
|
72
76
|
Operand ToOperand(LOperand* op) const;
|
@@ -94,6 +98,7 @@ class LCodeGen BASE_EMBEDDED {
|
|
94
98
|
void DoDeferredMathAbsTaggedHeapNumber(LUnaryMathOperation* instr);
|
95
99
|
void DoDeferredStackCheck(LGoto* instr);
|
96
100
|
void DoDeferredStringCharCodeAt(LStringCharCodeAt* instr);
|
101
|
+
void DoDeferredStringCharFromCode(LStringCharFromCode* instr);
|
97
102
|
void DoDeferredLInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr,
|
98
103
|
Label* map_check);
|
99
104
|
|
@@ -124,7 +129,7 @@ class LCodeGen BASE_EMBEDDED {
|
|
124
129
|
bool is_aborted() const { return status_ == ABORTED; }
|
125
130
|
|
126
131
|
int strict_mode_flag() const {
|
127
|
-
return
|
132
|
+
return info()->is_strict() ? kStrictMode : kNonStrictMode;
|
128
133
|
}
|
129
134
|
|
130
135
|
LChunk* chunk() const { return chunk_; }
|
@@ -161,11 +166,11 @@ class LCodeGen BASE_EMBEDDED {
|
|
161
166
|
|
162
167
|
void CallCode(Handle<Code> code, RelocInfo::Mode mode, LInstruction* instr,
|
163
168
|
bool adjusted = true);
|
164
|
-
void CallRuntime(Runtime::Function* fun, int argc, LInstruction* instr,
|
169
|
+
void CallRuntime(const Runtime::Function* fun, int argc, LInstruction* instr,
|
165
170
|
bool adjusted = true);
|
166
171
|
void CallRuntime(Runtime::FunctionId id, int argc, LInstruction* instr,
|
167
172
|
bool adjusted = true) {
|
168
|
-
Runtime::Function* function = Runtime::FunctionForId(id);
|
173
|
+
const Runtime::Function* function = Runtime::FunctionForId(id);
|
169
174
|
CallRuntime(function, argc, instr, adjusted);
|
170
175
|
}
|
171
176
|
|
@@ -241,6 +246,10 @@ class LCodeGen BASE_EMBEDDED {
|
|
241
246
|
// Caller should branch on equal condition.
|
242
247
|
void EmitIsConstructCall(Register temp);
|
243
248
|
|
249
|
+
void EmitLoadField(Register result,
|
250
|
+
Register object,
|
251
|
+
Handle<Map> type,
|
252
|
+
Handle<String> name);
|
244
253
|
|
245
254
|
LChunk* const chunk_;
|
246
255
|
MacroAssembler* const masm_;
|
@@ -25,6 +25,10 @@
|
|
25
25
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
26
26
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
27
27
|
|
28
|
+
#include "v8.h"
|
29
|
+
|
30
|
+
#if defined(V8_TARGET_ARCH_IA32)
|
31
|
+
|
28
32
|
#include "ia32/lithium-gap-resolver-ia32.h"
|
29
33
|
#include "ia32/lithium-codegen-ia32.h"
|
30
34
|
|
@@ -458,3 +462,5 @@ void LGapResolver::EmitSwap(int index) {
|
|
458
462
|
#undef __
|
459
463
|
|
460
464
|
} } // namespace v8::internal
|
465
|
+
|
466
|
+
#endif // V8_TARGET_ARCH_IA32
|
@@ -469,7 +469,7 @@ int LChunk::GetParameterStackSlot(int index) const {
|
|
469
469
|
// shift all parameter indexes down by the number of parameters, and
|
470
470
|
// make sure they end up negative so they are distinguishable from
|
471
471
|
// spill slots.
|
472
|
-
int result = index -
|
472
|
+
int result = index - info()->scope()->num_parameters() - 1;
|
473
473
|
ASSERT(result < 0);
|
474
474
|
return result;
|
475
475
|
}
|
@@ -477,7 +477,7 @@ int LChunk::GetParameterStackSlot(int index) const {
|
|
477
477
|
// A parameter relative to ebp in the arguments stub.
|
478
478
|
int LChunk::ParameterAt(int index) {
|
479
479
|
ASSERT(-1 <= index); // -1 is the receiver.
|
480
|
-
return (1 +
|
480
|
+
return (1 + info()->scope()->num_parameters() - index) *
|
481
481
|
kPointerSize;
|
482
482
|
}
|
483
483
|
|
@@ -516,7 +516,7 @@ Representation LChunk::LookupLiteralRepresentation(
|
|
516
516
|
|
517
517
|
LChunk* LChunkBuilder::Build() {
|
518
518
|
ASSERT(is_unused());
|
519
|
-
chunk_ = new LChunk(graph());
|
519
|
+
chunk_ = new LChunk(info(), graph());
|
520
520
|
HPhase phase("Building chunk", chunk_);
|
521
521
|
status_ = BUILDING;
|
522
522
|
const ZoneList<HBasicBlock*>* blocks = graph()->blocks();
|
@@ -533,8 +533,8 @@ LChunk* LChunkBuilder::Build() {
|
|
533
533
|
|
534
534
|
void LChunkBuilder::Abort(const char* format, ...) {
|
535
535
|
if (FLAG_trace_bailout) {
|
536
|
-
SmartPointer<char>
|
537
|
-
PrintF("Aborting LChunk building in @\"%s\": ", *
|
536
|
+
SmartPointer<char> name(info()->shared_info()->DebugName()->ToCString());
|
537
|
+
PrintF("Aborting LChunk building in @\"%s\": ", *name);
|
538
538
|
va_list arguments;
|
539
539
|
va_start(arguments, format);
|
540
540
|
OS::VPrint(format, arguments);
|
@@ -870,6 +870,7 @@ LInstruction* LChunkBuilder::DoArithmeticD(Token::Value op,
|
|
870
870
|
ASSERT(instr->representation().IsDouble());
|
871
871
|
ASSERT(instr->left()->representation().IsDouble());
|
872
872
|
ASSERT(instr->right()->representation().IsDouble());
|
873
|
+
ASSERT(op != Token::MOD);
|
873
874
|
LOperand* left = UseRegisterAtStart(instr->left());
|
874
875
|
LOperand* right = UseRegisterAtStart(instr->right());
|
875
876
|
LArithmeticD* result = new LArithmeticD(op, left, right);
|
@@ -1165,8 +1166,7 @@ LInstruction* LChunkBuilder::DoInstanceOfKnownGlobal(
|
|
1165
1166
|
new LInstanceOfKnownGlobal(
|
1166
1167
|
UseFixed(instr->value(), InstanceofStub::left()),
|
1167
1168
|
FixedTemp(edi));
|
1168
|
-
|
1169
|
-
return AssignEnvironment(AssignPointerMap(DefineFixed(result, eax)));
|
1169
|
+
return MarkAsCall(DefineFixed(result, eax), instr);
|
1170
1170
|
}
|
1171
1171
|
|
1172
1172
|
|
@@ -1187,7 +1187,7 @@ LInstruction* LChunkBuilder::DoApplyArguments(HApplyArguments* instr) {
|
|
1187
1187
|
|
1188
1188
|
LInstruction* LChunkBuilder::DoPushArgument(HPushArgument* instr) {
|
1189
1189
|
++argument_count_;
|
1190
|
-
LOperand* argument =
|
1190
|
+
LOperand* argument = UseAny(instr->argument());
|
1191
1191
|
return new LPushArgument(argument);
|
1192
1192
|
}
|
1193
1193
|
|
@@ -1366,13 +1366,23 @@ LInstruction* LChunkBuilder::DoMod(HMod* instr) {
|
|
1366
1366
|
if (instr->representation().IsInteger32()) {
|
1367
1367
|
ASSERT(instr->left()->representation().IsInteger32());
|
1368
1368
|
ASSERT(instr->right()->representation().IsInteger32());
|
1369
|
-
|
1370
|
-
|
1371
|
-
|
1372
|
-
|
1373
|
-
|
1374
|
-
|
1375
|
-
|
1369
|
+
|
1370
|
+
LInstruction* result;
|
1371
|
+
if (instr->HasPowerOf2Divisor()) {
|
1372
|
+
ASSERT(!instr->CheckFlag(HValue::kCanBeDivByZero));
|
1373
|
+
LOperand* value = UseRegisterAtStart(instr->left());
|
1374
|
+
LModI* mod = new LModI(value, UseOrConstant(instr->right()), NULL);
|
1375
|
+
result = DefineSameAsFirst(mod);
|
1376
|
+
} else {
|
1377
|
+
// The temporary operand is necessary to ensure that right is
|
1378
|
+
// not allocated into edx.
|
1379
|
+
LOperand* temp = FixedTemp(edx);
|
1380
|
+
LOperand* value = UseFixed(instr->left(), eax);
|
1381
|
+
LOperand* divisor = UseRegister(instr->right());
|
1382
|
+
LModI* mod = new LModI(value, divisor, temp);
|
1383
|
+
result = DefineFixed(mod, edx);
|
1384
|
+
}
|
1385
|
+
|
1376
1386
|
return (instr->CheckFlag(HValue::kBailoutOnMinusZero) ||
|
1377
1387
|
instr->CheckFlag(HValue::kCanBeDivByZero))
|
1378
1388
|
? AssignEnvironment(result)
|
@@ -1384,8 +1394,8 @@ LInstruction* LChunkBuilder::DoMod(HMod* instr) {
|
|
1384
1394
|
// We call a C function for double modulo. It can't trigger a GC.
|
1385
1395
|
// We need to use fixed result register for the call.
|
1386
1396
|
// TODO(fschneider): Allow any register as input registers.
|
1387
|
-
LOperand* left = UseFixedDouble(instr->left(),
|
1388
|
-
LOperand* right = UseFixedDouble(instr->right(),
|
1397
|
+
LOperand* left = UseFixedDouble(instr->left(), xmm2);
|
1398
|
+
LOperand* right = UseFixedDouble(instr->right(), xmm1);
|
1389
1399
|
LArithmeticD* result = new LArithmeticD(Token::MOD, left, right);
|
1390
1400
|
return MarkAsCall(DefineFixedDouble(result, xmm1), instr);
|
1391
1401
|
}
|
@@ -1541,8 +1551,10 @@ LInstruction* LChunkBuilder::DoHasInstanceType(HHasInstanceType* instr) {
|
|
1541
1551
|
|
1542
1552
|
LInstruction* LChunkBuilder::DoGetCachedArrayIndex(
|
1543
1553
|
HGetCachedArrayIndex* instr) {
|
1544
|
-
|
1545
|
-
|
1554
|
+
ASSERT(instr->value()->representation().IsTagged());
|
1555
|
+
LOperand* value = UseRegisterAtStart(instr->value());
|
1556
|
+
|
1557
|
+
return DefineAsRegister(new LGetCachedArrayIndex(value));
|
1546
1558
|
}
|
1547
1559
|
|
1548
1560
|
|
@@ -1575,9 +1587,10 @@ LInstruction* LChunkBuilder::DoFixedArrayLength(HFixedArrayLength* instr) {
|
|
1575
1587
|
}
|
1576
1588
|
|
1577
1589
|
|
1578
|
-
LInstruction* LChunkBuilder::
|
1590
|
+
LInstruction* LChunkBuilder::DoExternalArrayLength(
|
1591
|
+
HExternalArrayLength* instr) {
|
1579
1592
|
LOperand* array = UseRegisterAtStart(instr->value());
|
1580
|
-
return DefineAsRegister(new
|
1593
|
+
return DefineAsRegister(new LExternalArrayLength(array));
|
1581
1594
|
}
|
1582
1595
|
|
1583
1596
|
|
@@ -1670,7 +1683,7 @@ LInstruction* LChunkBuilder::DoChange(HChange* instr) {
|
|
1670
1683
|
|
1671
1684
|
LInstruction* LChunkBuilder::DoCheckNonSmi(HCheckNonSmi* instr) {
|
1672
1685
|
LOperand* value = UseRegisterAtStart(instr->value());
|
1673
|
-
return AssignEnvironment(new
|
1686
|
+
return AssignEnvironment(new LCheckNonSmi(value));
|
1674
1687
|
}
|
1675
1688
|
|
1676
1689
|
|
@@ -1691,7 +1704,7 @@ LInstruction* LChunkBuilder::DoCheckPrototypeMaps(HCheckPrototypeMaps* instr) {
|
|
1691
1704
|
|
1692
1705
|
LInstruction* LChunkBuilder::DoCheckSmi(HCheckSmi* instr) {
|
1693
1706
|
LOperand* value = UseRegisterAtStart(instr->value());
|
1694
|
-
return AssignEnvironment(new LCheckSmi(value
|
1707
|
+
return AssignEnvironment(new LCheckSmi(value));
|
1695
1708
|
}
|
1696
1709
|
|
1697
1710
|
|
@@ -1732,14 +1745,22 @@ LInstruction* LChunkBuilder::DoConstant(HConstant* instr) {
|
|
1732
1745
|
}
|
1733
1746
|
|
1734
1747
|
|
1735
|
-
LInstruction* LChunkBuilder::
|
1736
|
-
|
1748
|
+
LInstruction* LChunkBuilder::DoLoadGlobalCell(HLoadGlobalCell* instr) {
|
1749
|
+
LLoadGlobalCell* result = new LLoadGlobalCell;
|
1737
1750
|
return instr->check_hole_value()
|
1738
1751
|
? AssignEnvironment(DefineAsRegister(result))
|
1739
1752
|
: DefineAsRegister(result);
|
1740
1753
|
}
|
1741
1754
|
|
1742
1755
|
|
1756
|
+
LInstruction* LChunkBuilder::DoLoadGlobalGeneric(HLoadGlobalGeneric* instr) {
|
1757
|
+
LOperand* context = UseFixed(instr->context(), esi);
|
1758
|
+
LOperand* global_object = UseFixed(instr->global_object(), eax);
|
1759
|
+
LLoadGlobalGeneric* result = new LLoadGlobalGeneric(context, global_object);
|
1760
|
+
return MarkAsCall(DefineFixed(result, eax), instr);
|
1761
|
+
}
|
1762
|
+
|
1763
|
+
|
1743
1764
|
LInstruction* LChunkBuilder::DoStoreGlobal(HStoreGlobal* instr) {
|
1744
1765
|
LStoreGlobal* result = new LStoreGlobal(UseRegisterAtStart(instr->value()));
|
1745
1766
|
return instr->check_hole_value() ? AssignEnvironment(result) : result;
|
@@ -1776,6 +1797,21 @@ LInstruction* LChunkBuilder::DoLoadNamedField(HLoadNamedField* instr) {
|
|
1776
1797
|
}
|
1777
1798
|
|
1778
1799
|
|
1800
|
+
LInstruction* LChunkBuilder::DoLoadNamedFieldPolymorphic(
|
1801
|
+
HLoadNamedFieldPolymorphic* instr) {
|
1802
|
+
ASSERT(instr->representation().IsTagged());
|
1803
|
+
if (instr->need_generic()) {
|
1804
|
+
LOperand* obj = UseFixed(instr->object(), eax);
|
1805
|
+
LLoadNamedFieldPolymorphic* result = new LLoadNamedFieldPolymorphic(obj);
|
1806
|
+
return MarkAsCall(DefineFixed(result, eax), instr);
|
1807
|
+
} else {
|
1808
|
+
LOperand* obj = UseRegisterAtStart(instr->object());
|
1809
|
+
LLoadNamedFieldPolymorphic* result = new LLoadNamedFieldPolymorphic(obj);
|
1810
|
+
return AssignEnvironment(DefineAsRegister(result));
|
1811
|
+
}
|
1812
|
+
}
|
1813
|
+
|
1814
|
+
|
1779
1815
|
LInstruction* LChunkBuilder::DoLoadNamedGeneric(HLoadNamedGeneric* instr) {
|
1780
1816
|
LOperand* context = UseFixed(instr->context(), esi);
|
1781
1817
|
LOperand* object = UseFixed(instr->object(), eax);
|
@@ -1798,10 +1834,10 @@ LInstruction* LChunkBuilder::DoLoadElements(HLoadElements* instr) {
|
|
1798
1834
|
}
|
1799
1835
|
|
1800
1836
|
|
1801
|
-
LInstruction* LChunkBuilder::
|
1802
|
-
|
1837
|
+
LInstruction* LChunkBuilder::DoLoadExternalArrayPointer(
|
1838
|
+
HLoadExternalArrayPointer* instr) {
|
1803
1839
|
LOperand* input = UseRegisterAtStart(instr->value());
|
1804
|
-
return DefineAsRegister(new
|
1840
|
+
return DefineAsRegister(new LLoadExternalArrayPointer(input));
|
1805
1841
|
}
|
1806
1842
|
|
1807
1843
|
|
@@ -1816,16 +1852,24 @@ LInstruction* LChunkBuilder::DoLoadKeyedFastElement(
|
|
1816
1852
|
}
|
1817
1853
|
|
1818
1854
|
|
1819
|
-
LInstruction* LChunkBuilder::
|
1820
|
-
|
1821
|
-
|
1855
|
+
LInstruction* LChunkBuilder::DoLoadKeyedSpecializedArrayElement(
|
1856
|
+
HLoadKeyedSpecializedArrayElement* instr) {
|
1857
|
+
ExternalArrayType array_type = instr->array_type();
|
1858
|
+
Representation representation(instr->representation());
|
1859
|
+
ASSERT((representation.IsInteger32() && array_type != kExternalFloatArray) ||
|
1860
|
+
(representation.IsDouble() && array_type == kExternalFloatArray));
|
1822
1861
|
ASSERT(instr->key()->representation().IsInteger32());
|
1823
|
-
LOperand* external_pointer =
|
1824
|
-
|
1825
|
-
|
1826
|
-
|
1827
|
-
|
1828
|
-
|
1862
|
+
LOperand* external_pointer = UseRegister(instr->external_pointer());
|
1863
|
+
LOperand* key = UseRegister(instr->key());
|
1864
|
+
LLoadKeyedSpecializedArrayElement* result =
|
1865
|
+
new LLoadKeyedSpecializedArrayElement(external_pointer,
|
1866
|
+
key);
|
1867
|
+
LInstruction* load_instr = DefineAsRegister(result);
|
1868
|
+
// An unsigned int array load might overflow and cause a deopt, make sure it
|
1869
|
+
// has an environment.
|
1870
|
+
return (array_type == kExternalUnsignedIntArray)
|
1871
|
+
? AssignEnvironment(load_instr)
|
1872
|
+
: load_instr;
|
1829
1873
|
}
|
1830
1874
|
|
1831
1875
|
|
@@ -1858,20 +1902,39 @@ LInstruction* LChunkBuilder::DoStoreKeyedFastElement(
|
|
1858
1902
|
}
|
1859
1903
|
|
1860
1904
|
|
1861
|
-
LInstruction* LChunkBuilder::
|
1862
|
-
|
1863
|
-
|
1905
|
+
LInstruction* LChunkBuilder::DoStoreKeyedSpecializedArrayElement(
|
1906
|
+
HStoreKeyedSpecializedArrayElement* instr) {
|
1907
|
+
Representation representation(instr->value()->representation());
|
1908
|
+
ExternalArrayType array_type = instr->array_type();
|
1909
|
+
ASSERT((representation.IsInteger32() && array_type != kExternalFloatArray) ||
|
1910
|
+
(representation.IsDouble() && array_type == kExternalFloatArray));
|
1864
1911
|
ASSERT(instr->external_pointer()->representation().IsExternal());
|
1865
1912
|
ASSERT(instr->key()->representation().IsInteger32());
|
1866
1913
|
|
1867
1914
|
LOperand* external_pointer = UseRegister(instr->external_pointer());
|
1868
|
-
LOperand* val = UseRegister(instr->value());
|
1869
1915
|
LOperand* key = UseRegister(instr->key());
|
1870
|
-
|
1871
|
-
|
1872
|
-
|
1916
|
+
LOperand* temp = NULL;
|
1917
|
+
|
1918
|
+
if (array_type == kExternalPixelArray) {
|
1919
|
+
// The generated code for pixel array stores requires that the clamped value
|
1920
|
+
// is in a byte register. eax is an arbitrary choice to satisfy this
|
1921
|
+
// requirement.
|
1922
|
+
temp = FixedTemp(eax);
|
1923
|
+
}
|
1873
1924
|
|
1874
|
-
|
1925
|
+
LOperand* val = NULL;
|
1926
|
+
if (array_type == kExternalByteArray ||
|
1927
|
+
array_type == kExternalUnsignedByteArray) {
|
1928
|
+
// We need a byte register in this case for the value.
|
1929
|
+
val = UseFixed(instr->value(), eax);
|
1930
|
+
} else {
|
1931
|
+
val = UseRegister(instr->value());
|
1932
|
+
}
|
1933
|
+
|
1934
|
+
return new LStoreKeyedSpecializedArrayElement(external_pointer,
|
1935
|
+
key,
|
1936
|
+
val,
|
1937
|
+
temp);
|
1875
1938
|
}
|
1876
1939
|
|
1877
1940
|
|
@@ -1930,6 +1993,13 @@ LInstruction* LChunkBuilder::DoStringCharCodeAt(HStringCharCodeAt* instr) {
|
|
1930
1993
|
}
|
1931
1994
|
|
1932
1995
|
|
1996
|
+
LInstruction* LChunkBuilder::DoStringCharFromCode(HStringCharFromCode* instr) {
|
1997
|
+
LOperand* char_code = UseRegister(instr->value());
|
1998
|
+
LStringCharFromCode* result = new LStringCharFromCode(char_code);
|
1999
|
+
return AssignPointerMap(DefineAsRegister(result));
|
2000
|
+
}
|
2001
|
+
|
2002
|
+
|
1933
2003
|
LInstruction* LChunkBuilder::DoStringLength(HStringLength* instr) {
|
1934
2004
|
LOperand* string = UseRegisterAtStart(instr->value());
|
1935
2005
|
return DefineAsRegister(new LStringLength(string));
|
@@ -2009,6 +2079,13 @@ LInstruction* LChunkBuilder::DoAccessArgumentsAt(HAccessArgumentsAt* instr) {
|
|
2009
2079
|
}
|
2010
2080
|
|
2011
2081
|
|
2082
|
+
LInstruction* LChunkBuilder::DoToFastProperties(HToFastProperties* instr) {
|
2083
|
+
LOperand* object = UseFixed(instr->value(), eax);
|
2084
|
+
LToFastProperties* result = new LToFastProperties(object);
|
2085
|
+
return MarkAsCall(DefineFixed(result, eax), instr);
|
2086
|
+
}
|
2087
|
+
|
2088
|
+
|
2012
2089
|
LInstruction* LChunkBuilder::DoTypeof(HTypeof* instr) {
|
2013
2090
|
LTypeof* result = new LTypeof(UseAtStart(instr->value()));
|
2014
2091
|
return MarkAsCall(DefineFixed(result, eax), instr);
|
@@ -70,6 +70,7 @@ class LCodeGen;
|
|
70
70
|
V(CheckFunction) \
|
71
71
|
V(CheckInstanceType) \
|
72
72
|
V(CheckMap) \
|
73
|
+
V(CheckNonSmi) \
|
73
74
|
V(CheckPrototypeMaps) \
|
74
75
|
V(CheckSmi) \
|
75
76
|
V(ClassOfTest) \
|
@@ -89,9 +90,11 @@ class LCodeGen;
|
|
89
90
|
V(Deoptimize) \
|
90
91
|
V(DivI) \
|
91
92
|
V(DoubleToI) \
|
93
|
+
V(ExternalArrayLength) \
|
92
94
|
V(FixedArrayLength) \
|
93
95
|
V(FunctionLiteral) \
|
94
96
|
V(Gap) \
|
97
|
+
V(GetCachedArrayIndex) \
|
95
98
|
V(GlobalObject) \
|
96
99
|
V(GlobalReceiver) \
|
97
100
|
V(Goto) \
|
@@ -116,14 +119,16 @@ class LCodeGen;
|
|
116
119
|
V(LazyBailout) \
|
117
120
|
V(LoadContextSlot) \
|
118
121
|
V(LoadElements) \
|
122
|
+
V(LoadExternalArrayPointer) \
|
119
123
|
V(LoadFunctionPrototype) \
|
120
|
-
V(
|
124
|
+
V(LoadGlobalCell) \
|
125
|
+
V(LoadGlobalGeneric) \
|
121
126
|
V(LoadKeyedFastElement) \
|
122
127
|
V(LoadKeyedGeneric) \
|
128
|
+
V(LoadKeyedSpecializedArrayElement) \
|
123
129
|
V(LoadNamedField) \
|
130
|
+
V(LoadNamedFieldPolymorphic) \
|
124
131
|
V(LoadNamedGeneric) \
|
125
|
-
V(LoadPixelArrayElement) \
|
126
|
-
V(LoadPixelArrayExternalPointer) \
|
127
132
|
V(ModI) \
|
128
133
|
V(MulI) \
|
129
134
|
V(NumberTagD) \
|
@@ -133,7 +138,6 @@ class LCodeGen;
|
|
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,14 +150,16 @@ class LCodeGen;
|
|
146
150
|
V(StoreGlobal) \
|
147
151
|
V(StoreKeyedFastElement) \
|
148
152
|
V(StoreKeyedGeneric) \
|
153
|
+
V(StoreKeyedSpecializedArrayElement) \
|
149
154
|
V(StoreNamedField) \
|
150
155
|
V(StoreNamedGeneric) \
|
151
|
-
V(StorePixelArrayElement) \
|
152
156
|
V(StringCharCodeAt) \
|
157
|
+
V(StringCharFromCode) \
|
153
158
|
V(StringLength) \
|
154
159
|
V(SubI) \
|
155
160
|
V(TaggedToI) \
|
156
161
|
V(Throw) \
|
162
|
+
V(ToFastProperties) \
|
157
163
|
V(Typeof) \
|
158
164
|
V(TypeofIs) \
|
159
165
|
V(TypeofIsAndBranch) \
|
@@ -743,6 +749,17 @@ class LHasInstanceTypeAndBranch: public LControlInstruction<1, 1> {
|
|
743
749
|
};
|
744
750
|
|
745
751
|
|
752
|
+
class LGetCachedArrayIndex: public LTemplateInstruction<1, 1, 0> {
|
753
|
+
public:
|
754
|
+
explicit LGetCachedArrayIndex(LOperand* value) {
|
755
|
+
inputs_[0] = value;
|
756
|
+
}
|
757
|
+
|
758
|
+
DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex, "get-cached-array-index")
|
759
|
+
DECLARE_HYDROGEN_ACCESSOR(GetCachedArrayIndex)
|
760
|
+
};
|
761
|
+
|
762
|
+
|
746
763
|
class LHasCachedArrayIndex: public LTemplateInstruction<1, 1, 0> {
|
747
764
|
public:
|
748
765
|
explicit LHasCachedArrayIndex(LOperand* value) {
|
@@ -1024,14 +1041,14 @@ class LJSArrayLength: public LTemplateInstruction<1, 1, 0> {
|
|
1024
1041
|
};
|
1025
1042
|
|
1026
1043
|
|
1027
|
-
class
|
1044
|
+
class LExternalArrayLength: public LTemplateInstruction<1, 1, 0> {
|
1028
1045
|
public:
|
1029
|
-
explicit
|
1046
|
+
explicit LExternalArrayLength(LOperand* value) {
|
1030
1047
|
inputs_[0] = value;
|
1031
1048
|
}
|
1032
1049
|
|
1033
|
-
DECLARE_CONCRETE_INSTRUCTION(
|
1034
|
-
DECLARE_HYDROGEN_ACCESSOR(
|
1050
|
+
DECLARE_CONCRETE_INSTRUCTION(ExternalArrayLength, "external-array-length")
|
1051
|
+
DECLARE_HYDROGEN_ACCESSOR(ExternalArrayLength)
|
1035
1052
|
};
|
1036
1053
|
|
1037
1054
|
|
@@ -1156,6 +1173,21 @@ class LLoadNamedField: public LTemplateInstruction<1, 1, 0> {
|
|
1156
1173
|
|
1157
1174
|
DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field")
|
1158
1175
|
DECLARE_HYDROGEN_ACCESSOR(LoadNamedField)
|
1176
|
+
|
1177
|
+
LOperand* object() { return inputs_[0]; }
|
1178
|
+
};
|
1179
|
+
|
1180
|
+
|
1181
|
+
class LLoadNamedFieldPolymorphic: public LTemplateInstruction<1, 1, 0> {
|
1182
|
+
public:
|
1183
|
+
explicit LLoadNamedFieldPolymorphic(LOperand* object) {
|
1184
|
+
inputs_[0] = object;
|
1185
|
+
}
|
1186
|
+
|
1187
|
+
DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field-polymorphic")
|
1188
|
+
DECLARE_HYDROGEN_ACCESSOR(LoadNamedFieldPolymorphic)
|
1189
|
+
|
1190
|
+
LOperand* object() { return inputs_[0]; }
|
1159
1191
|
};
|
1160
1192
|
|
1161
1193
|
|
@@ -1199,14 +1231,14 @@ class LLoadElements: public LTemplateInstruction<1, 1, 0> {
|
|
1199
1231
|
};
|
1200
1232
|
|
1201
1233
|
|
1202
|
-
class
|
1234
|
+
class LLoadExternalArrayPointer: public LTemplateInstruction<1, 1, 0> {
|
1203
1235
|
public:
|
1204
|
-
explicit
|
1236
|
+
explicit LLoadExternalArrayPointer(LOperand* object) {
|
1205
1237
|
inputs_[0] = object;
|
1206
1238
|
}
|
1207
1239
|
|
1208
|
-
DECLARE_CONCRETE_INSTRUCTION(
|
1209
|
-
"load-
|
1240
|
+
DECLARE_CONCRETE_INSTRUCTION(LoadExternalArrayPointer,
|
1241
|
+
"load-external-array-pointer")
|
1210
1242
|
};
|
1211
1243
|
|
1212
1244
|
|
@@ -1225,19 +1257,23 @@ class LLoadKeyedFastElement: public LTemplateInstruction<1, 2, 0> {
|
|
1225
1257
|
};
|
1226
1258
|
|
1227
1259
|
|
1228
|
-
class
|
1260
|
+
class LLoadKeyedSpecializedArrayElement: public LTemplateInstruction<1, 2, 0> {
|
1229
1261
|
public:
|
1230
|
-
|
1262
|
+
LLoadKeyedSpecializedArrayElement(LOperand* external_pointer,
|
1263
|
+
LOperand* key) {
|
1231
1264
|
inputs_[0] = external_pointer;
|
1232
1265
|
inputs_[1] = key;
|
1233
1266
|
}
|
1234
1267
|
|
1235
|
-
DECLARE_CONCRETE_INSTRUCTION(
|
1236
|
-
"load-
|
1237
|
-
DECLARE_HYDROGEN_ACCESSOR(
|
1268
|
+
DECLARE_CONCRETE_INSTRUCTION(LoadKeyedSpecializedArrayElement,
|
1269
|
+
"load-keyed-specialized-array-element")
|
1270
|
+
DECLARE_HYDROGEN_ACCESSOR(LoadKeyedSpecializedArrayElement)
|
1238
1271
|
|
1239
1272
|
LOperand* external_pointer() { return inputs_[0]; }
|
1240
1273
|
LOperand* key() { return inputs_[1]; }
|
1274
|
+
ExternalArrayType array_type() const {
|
1275
|
+
return hydrogen()->array_type();
|
1276
|
+
}
|
1241
1277
|
};
|
1242
1278
|
|
1243
1279
|
|
@@ -1257,10 +1293,27 @@ class LLoadKeyedGeneric: public LTemplateInstruction<1, 3, 0> {
|
|
1257
1293
|
};
|
1258
1294
|
|
1259
1295
|
|
1260
|
-
class
|
1296
|
+
class LLoadGlobalCell: public LTemplateInstruction<1, 0, 0> {
|
1261
1297
|
public:
|
1262
|
-
DECLARE_CONCRETE_INSTRUCTION(
|
1263
|
-
DECLARE_HYDROGEN_ACCESSOR(
|
1298
|
+
DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell, "load-global-cell")
|
1299
|
+
DECLARE_HYDROGEN_ACCESSOR(LoadGlobalCell)
|
1300
|
+
};
|
1301
|
+
|
1302
|
+
|
1303
|
+
class LLoadGlobalGeneric: public LTemplateInstruction<1, 2, 0> {
|
1304
|
+
public:
|
1305
|
+
LLoadGlobalGeneric(LOperand* context, LOperand* global_object) {
|
1306
|
+
inputs_[0] = context;
|
1307
|
+
inputs_[1] = global_object;
|
1308
|
+
}
|
1309
|
+
|
1310
|
+
DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load-global-generic")
|
1311
|
+
DECLARE_HYDROGEN_ACCESSOR(LoadGlobalGeneric)
|
1312
|
+
|
1313
|
+
LOperand* context() { return inputs_[0]; }
|
1314
|
+
LOperand* global_object() { return inputs_[1]; }
|
1315
|
+
Handle<Object> name() const { return hydrogen()->name(); }
|
1316
|
+
bool for_typeof() const { return hydrogen()->for_typeof(); }
|
1264
1317
|
};
|
1265
1318
|
|
1266
1319
|
|
@@ -1477,7 +1530,7 @@ class LCallRuntime: public LTemplateInstruction<1, 0, 0> {
|
|
1477
1530
|
DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime")
|
1478
1531
|
DECLARE_HYDROGEN_ACCESSOR(CallRuntime)
|
1479
1532
|
|
1480
|
-
Runtime::Function* function() const { return hydrogen()->function(); }
|
1533
|
+
const Runtime::Function* function() const { return hydrogen()->function(); }
|
1481
1534
|
int arity() const { return hydrogen()->argument_count(); }
|
1482
1535
|
};
|
1483
1536
|
|
@@ -1643,25 +1696,28 @@ class LStoreKeyedFastElement: public LTemplateInstruction<0, 3, 0> {
|
|
1643
1696
|
};
|
1644
1697
|
|
1645
1698
|
|
1646
|
-
class
|
1699
|
+
class LStoreKeyedSpecializedArrayElement: public LTemplateInstruction<0, 3, 1> {
|
1647
1700
|
public:
|
1648
|
-
|
1649
|
-
|
1650
|
-
|
1651
|
-
|
1701
|
+
LStoreKeyedSpecializedArrayElement(LOperand* external_pointer,
|
1702
|
+
LOperand* key,
|
1703
|
+
LOperand* val,
|
1704
|
+
LOperand* temp) {
|
1652
1705
|
inputs_[0] = external_pointer;
|
1653
1706
|
inputs_[1] = key;
|
1654
1707
|
inputs_[2] = val;
|
1655
|
-
temps_[0] =
|
1708
|
+
temps_[0] = temp;
|
1656
1709
|
}
|
1657
1710
|
|
1658
|
-
DECLARE_CONCRETE_INSTRUCTION(
|
1659
|
-
"store-
|
1660
|
-
DECLARE_HYDROGEN_ACCESSOR(
|
1711
|
+
DECLARE_CONCRETE_INSTRUCTION(StoreKeyedSpecializedArrayElement,
|
1712
|
+
"store-keyed-specialized-array-element")
|
1713
|
+
DECLARE_HYDROGEN_ACCESSOR(StoreKeyedSpecializedArrayElement)
|
1661
1714
|
|
1662
1715
|
LOperand* external_pointer() { return inputs_[0]; }
|
1663
1716
|
LOperand* key() { return inputs_[1]; }
|
1664
1717
|
LOperand* value() { return inputs_[2]; }
|
1718
|
+
ExternalArrayType array_type() const {
|
1719
|
+
return hydrogen()->array_type();
|
1720
|
+
}
|
1665
1721
|
};
|
1666
1722
|
|
1667
1723
|
|
@@ -1703,6 +1759,19 @@ class LStringCharCodeAt: public LTemplateInstruction<1, 2, 0> {
|
|
1703
1759
|
};
|
1704
1760
|
|
1705
1761
|
|
1762
|
+
class LStringCharFromCode: public LTemplateInstruction<1, 1, 0> {
|
1763
|
+
public:
|
1764
|
+
explicit LStringCharFromCode(LOperand* char_code) {
|
1765
|
+
inputs_[0] = char_code;
|
1766
|
+
}
|
1767
|
+
|
1768
|
+
DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string-char-from-code")
|
1769
|
+
DECLARE_HYDROGEN_ACCESSOR(StringCharFromCode)
|
1770
|
+
|
1771
|
+
LOperand* char_code() { return inputs_[0]; }
|
1772
|
+
};
|
1773
|
+
|
1774
|
+
|
1706
1775
|
class LStringLength: public LTemplateInstruction<1, 1, 0> {
|
1707
1776
|
public:
|
1708
1777
|
explicit LStringLength(LOperand* string) {
|
@@ -1766,20 +1835,21 @@ class LCheckPrototypeMaps: public LTemplateInstruction<0, 0, 1> {
|
|
1766
1835
|
|
1767
1836
|
class LCheckSmi: public LTemplateInstruction<0, 1, 0> {
|
1768
1837
|
public:
|
1769
|
-
LCheckSmi(LOperand* value
|
1770
|
-
: condition_(condition) {
|
1838
|
+
explicit LCheckSmi(LOperand* value) {
|
1771
1839
|
inputs_[0] = value;
|
1772
1840
|
}
|
1773
1841
|
|
1774
|
-
|
1842
|
+
DECLARE_CONCRETE_INSTRUCTION(CheckSmi, "check-smi")
|
1843
|
+
};
|
1775
1844
|
|
1776
|
-
|
1777
|
-
|
1778
|
-
|
1845
|
+
|
1846
|
+
class LCheckNonSmi: public LTemplateInstruction<0, 1, 0> {
|
1847
|
+
public:
|
1848
|
+
explicit LCheckNonSmi(LOperand* value) {
|
1849
|
+
inputs_[0] = value;
|
1779
1850
|
}
|
1780
1851
|
|
1781
|
-
|
1782
|
-
Condition condition_;
|
1852
|
+
DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check-non-smi")
|
1783
1853
|
};
|
1784
1854
|
|
1785
1855
|
|
@@ -1819,6 +1889,17 @@ class LFunctionLiteral: public LTemplateInstruction<1, 0, 0> {
|
|
1819
1889
|
};
|
1820
1890
|
|
1821
1891
|
|
1892
|
+
class LToFastProperties: public LTemplateInstruction<1, 1, 0> {
|
1893
|
+
public:
|
1894
|
+
explicit LToFastProperties(LOperand* value) {
|
1895
|
+
inputs_[0] = value;
|
1896
|
+
}
|
1897
|
+
|
1898
|
+
DECLARE_CONCRETE_INSTRUCTION(ToFastProperties, "to-fast-properties")
|
1899
|
+
DECLARE_HYDROGEN_ACCESSOR(ToFastProperties)
|
1900
|
+
};
|
1901
|
+
|
1902
|
+
|
1822
1903
|
class LTypeof: public LTemplateInstruction<1, 1, 0> {
|
1823
1904
|
public:
|
1824
1905
|
explicit LTypeof(LOperand* value) {
|
@@ -1905,8 +1986,9 @@ class LStackCheck: public LTemplateInstruction<0, 0, 0> {
|
|
1905
1986
|
class LChunkBuilder;
|
1906
1987
|
class LChunk: public ZoneObject {
|
1907
1988
|
public:
|
1908
|
-
explicit LChunk(HGraph* graph)
|
1989
|
+
explicit LChunk(CompilationInfo* info, HGraph* graph)
|
1909
1990
|
: spill_slot_count_(0),
|
1991
|
+
info_(info),
|
1910
1992
|
graph_(graph),
|
1911
1993
|
instructions_(32),
|
1912
1994
|
pointer_maps_(8),
|
@@ -1923,6 +2005,7 @@ class LChunk: public ZoneObject {
|
|
1923
2005
|
int ParameterAt(int index);
|
1924
2006
|
int GetParameterStackSlot(int index) const;
|
1925
2007
|
int spill_slot_count() const { return spill_slot_count_; }
|
2008
|
+
CompilationInfo* info() const { return info_; }
|
1926
2009
|
HGraph* graph() const { return graph_; }
|
1927
2010
|
const ZoneList<LInstruction*>* instructions() const { return &instructions_; }
|
1928
2011
|
void AddGapMove(int index, LOperand* from, LOperand* to);
|
@@ -1959,6 +2042,7 @@ class LChunk: public ZoneObject {
|
|
1959
2042
|
|
1960
2043
|
private:
|
1961
2044
|
int spill_slot_count_;
|
2045
|
+
CompilationInfo* info_;
|
1962
2046
|
HGraph* const graph_;
|
1963
2047
|
ZoneList<LInstruction*> instructions_;
|
1964
2048
|
ZoneList<LPointerMap*> pointer_maps_;
|
@@ -1968,8 +2052,9 @@ class LChunk: public ZoneObject {
|
|
1968
2052
|
|
1969
2053
|
class LChunkBuilder BASE_EMBEDDED {
|
1970
2054
|
public:
|
1971
|
-
LChunkBuilder(HGraph* graph, LAllocator* allocator)
|
2055
|
+
LChunkBuilder(CompilationInfo* info, HGraph* graph, LAllocator* allocator)
|
1972
2056
|
: chunk_(NULL),
|
2057
|
+
info_(info),
|
1973
2058
|
graph_(graph),
|
1974
2059
|
status_(UNUSED),
|
1975
2060
|
current_instruction_(NULL),
|
@@ -1998,6 +2083,7 @@ class LChunkBuilder BASE_EMBEDDED {
|
|
1998
2083
|
};
|
1999
2084
|
|
2000
2085
|
LChunk* chunk() const { return chunk_; }
|
2086
|
+
CompilationInfo* info() const { return info_; }
|
2001
2087
|
HGraph* graph() const { return graph_; }
|
2002
2088
|
|
2003
2089
|
bool is_unused() const { return status_ == UNUSED; }
|
@@ -2104,6 +2190,7 @@ class LChunkBuilder BASE_EMBEDDED {
|
|
2104
2190
|
HArithmeticBinaryOperation* instr);
|
2105
2191
|
|
2106
2192
|
LChunk* chunk_;
|
2193
|
+
CompilationInfo* info_;
|
2107
2194
|
HGraph* const graph_;
|
2108
2195
|
Status status_;
|
2109
2196
|
HInstruction* current_instruction_;
|