mustang 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.rspec +1 -0
- data/Isolate +9 -0
- data/README.md +6 -12
- data/Rakefile +30 -4
- data/TODO.md +9 -0
- data/ext/v8/extconf.rb +56 -0
- data/ext/v8/v8.cpp +37 -0
- data/ext/v8/v8_array.cpp +161 -0
- data/ext/v8/v8_array.h +17 -0
- data/ext/v8/v8_base.cpp +147 -0
- data/ext/v8/v8_base.h +23 -0
- data/ext/v8/v8_cast.cpp +151 -0
- data/ext/v8/v8_cast.h +64 -0
- data/ext/v8/v8_context.cpp +174 -0
- data/ext/v8/v8_context.h +12 -0
- data/ext/v8/v8_date.cpp +61 -0
- data/ext/v8/v8_date.h +16 -0
- data/ext/v8/v8_errors.cpp +147 -0
- data/ext/v8/v8_errors.h +19 -0
- data/ext/v8/v8_external.cpp +66 -0
- data/ext/v8/v8_external.h +16 -0
- data/ext/v8/v8_function.cpp +182 -0
- data/ext/v8/v8_function.h +14 -0
- data/ext/v8/v8_integer.cpp +70 -0
- data/ext/v8/v8_integer.h +16 -0
- data/ext/v8/v8_macros.h +30 -0
- data/ext/v8/v8_main.cpp +53 -0
- data/ext/v8/v8_main.h +13 -0
- data/ext/v8/v8_number.cpp +62 -0
- data/ext/v8/v8_number.h +16 -0
- data/ext/v8/v8_object.cpp +172 -0
- data/ext/v8/v8_object.h +17 -0
- data/ext/v8/v8_ref.cpp +72 -0
- data/ext/v8/v8_ref.h +43 -0
- data/ext/v8/v8_regexp.cpp +148 -0
- data/ext/v8/v8_regexp.h +16 -0
- data/ext/v8/v8_string.cpp +78 -0
- data/ext/v8/v8_string.h +16 -0
- data/ext/v8/v8_value.cpp +370 -0
- data/ext/v8/v8_value.h +19 -0
- data/gemspec.yml +2 -1
- data/lib/core_ext/class.rb +14 -0
- data/lib/core_ext/object.rb +12 -0
- data/lib/core_ext/symbol.rb +23 -0
- data/lib/mustang.rb +44 -0
- data/lib/mustang/context.rb +69 -0
- data/lib/mustang/errors.rb +36 -0
- data/lib/support/delegated.rb +25 -0
- data/lib/v8/array.rb +21 -0
- data/lib/v8/context.rb +13 -0
- data/lib/v8/date.rb +20 -0
- data/lib/v8/error.rb +15 -0
- data/lib/v8/external.rb +16 -0
- data/lib/v8/function.rb +11 -0
- data/lib/v8/integer.rb +16 -0
- data/lib/v8/number.rb +16 -0
- data/lib/v8/object.rb +66 -0
- data/lib/v8/regexp.rb +23 -0
- data/lib/v8/string.rb +27 -0
- data/mustang.gemspec +3 -0
- data/spec/core_ext/class_spec.rb +19 -0
- data/spec/core_ext/object_spec.rb +19 -0
- data/spec/core_ext/symbol_spec.rb +27 -0
- data/spec/fixtures/test1.js +2 -0
- data/spec/fixtures/test2.js +2 -0
- data/spec/spec_helper.rb +20 -0
- data/spec/v8/array_spec.rb +88 -0
- data/spec/v8/cast_spec.rb +151 -0
- data/spec/v8/context_spec.rb +78 -0
- data/spec/v8/data_spec.rb +39 -0
- data/spec/v8/date_spec.rb +45 -0
- data/spec/v8/empty_spec.rb +27 -0
- data/spec/v8/errors_spec.rb +142 -0
- data/spec/v8/external_spec.rb +44 -0
- data/spec/v8/function_spec.rb +170 -0
- data/spec/v8/integer_spec.rb +41 -0
- data/spec/v8/main_spec.rb +18 -0
- data/spec/v8/null_spec.rb +27 -0
- data/spec/v8/number_spec.rb +40 -0
- data/spec/v8/object_spec.rb +79 -0
- data/spec/v8/primitive_spec.rb +9 -0
- data/spec/v8/regexp_spec.rb +65 -0
- data/spec/v8/string_spec.rb +48 -0
- data/spec/v8/undefined_spec.rb +27 -0
- data/spec/v8/value_spec.rb +215 -0
- data/vendor/v8/.gitignore +2 -0
- data/vendor/v8/AUTHORS +3 -1
- data/vendor/v8/ChangeLog +117 -0
- data/vendor/v8/SConstruct +334 -53
- data/vendor/v8/include/v8-debug.h +21 -11
- data/vendor/v8/include/v8-preparser.h +1 -1
- data/vendor/v8/include/v8-profiler.h +122 -43
- data/vendor/v8/include/v8-testing.h +5 -0
- data/vendor/v8/include/v8.h +171 -17
- data/vendor/v8/preparser/SConscript +38 -0
- data/vendor/v8/preparser/preparser-process.cc +77 -114
- data/vendor/v8/samples/shell.cc +232 -46
- data/vendor/v8/src/SConscript +29 -5
- data/vendor/v8/src/accessors.cc +70 -211
- data/vendor/v8/{test/cctest/test-mips.cc → src/allocation-inl.h} +15 -18
- data/vendor/v8/src/allocation.cc +0 -82
- data/vendor/v8/src/allocation.h +9 -42
- data/vendor/v8/src/api.cc +1645 -1156
- data/vendor/v8/src/api.h +76 -12
- data/vendor/v8/src/apiutils.h +0 -7
- data/vendor/v8/src/arguments.h +15 -4
- data/vendor/v8/src/arm/assembler-arm-inl.h +10 -9
- data/vendor/v8/src/arm/assembler-arm.cc +62 -23
- data/vendor/v8/src/arm/assembler-arm.h +76 -11
- data/vendor/v8/src/arm/builtins-arm.cc +39 -33
- data/vendor/v8/src/arm/code-stubs-arm.cc +1182 -402
- data/vendor/v8/src/arm/code-stubs-arm.h +20 -54
- data/vendor/v8/src/arm/codegen-arm.cc +159 -106
- data/vendor/v8/src/arm/codegen-arm.h +6 -6
- data/vendor/v8/src/arm/constants-arm.h +16 -1
- data/vendor/v8/src/arm/cpu-arm.cc +7 -5
- data/vendor/v8/src/arm/debug-arm.cc +6 -4
- data/vendor/v8/src/arm/deoptimizer-arm.cc +51 -14
- data/vendor/v8/src/arm/disasm-arm.cc +47 -15
- data/vendor/v8/src/arm/frames-arm.h +1 -1
- data/vendor/v8/src/arm/full-codegen-arm.cc +724 -408
- data/vendor/v8/src/arm/ic-arm.cc +90 -85
- data/vendor/v8/src/arm/lithium-arm.cc +140 -69
- data/vendor/v8/src/arm/lithium-arm.h +161 -46
- data/vendor/v8/src/arm/lithium-codegen-arm.cc +567 -297
- data/vendor/v8/src/arm/lithium-codegen-arm.h +21 -9
- data/vendor/v8/src/arm/lithium-gap-resolver-arm.cc +2 -0
- data/vendor/v8/src/arm/macro-assembler-arm.cc +457 -96
- data/vendor/v8/src/arm/macro-assembler-arm.h +115 -18
- data/vendor/v8/src/arm/regexp-macro-assembler-arm.cc +20 -13
- data/vendor/v8/src/arm/regexp-macro-assembler-arm.h +1 -0
- data/vendor/v8/src/arm/simulator-arm.cc +184 -101
- data/vendor/v8/src/arm/simulator-arm.h +26 -21
- data/vendor/v8/src/arm/stub-cache-arm.cc +450 -467
- data/vendor/v8/src/arm/virtual-frame-arm.cc +14 -12
- data/vendor/v8/src/arm/virtual-frame-arm.h +11 -8
- data/vendor/v8/src/array.js +35 -18
- data/vendor/v8/src/assembler.cc +186 -92
- data/vendor/v8/src/assembler.h +106 -69
- data/vendor/v8/src/ast-inl.h +5 -0
- data/vendor/v8/src/ast.cc +46 -35
- data/vendor/v8/src/ast.h +107 -50
- data/vendor/v8/src/atomicops.h +2 -0
- data/vendor/v8/src/atomicops_internals_mips_gcc.h +169 -0
- data/vendor/v8/src/bootstrapper.cc +649 -399
- data/vendor/v8/src/bootstrapper.h +94 -27
- data/vendor/v8/src/builtins.cc +359 -227
- data/vendor/v8/src/builtins.h +157 -123
- data/vendor/v8/src/checks.cc +2 -2
- data/vendor/v8/src/checks.h +4 -0
- data/vendor/v8/src/code-stubs.cc +27 -17
- data/vendor/v8/src/code-stubs.h +38 -17
- data/vendor/v8/src/codegen-inl.h +5 -1
- data/vendor/v8/src/codegen.cc +27 -17
- data/vendor/v8/src/codegen.h +9 -9
- data/vendor/v8/src/compilation-cache.cc +92 -206
- data/vendor/v8/src/compilation-cache.h +205 -30
- data/vendor/v8/src/compiler.cc +107 -120
- data/vendor/v8/src/compiler.h +17 -2
- data/vendor/v8/src/contexts.cc +22 -15
- data/vendor/v8/src/contexts.h +14 -8
- data/vendor/v8/src/conversions.cc +86 -30
- data/vendor/v8/src/counters.cc +19 -4
- data/vendor/v8/src/counters.h +28 -16
- data/vendor/v8/src/cpu-profiler-inl.h +4 -3
- data/vendor/v8/src/cpu-profiler.cc +123 -72
- data/vendor/v8/src/cpu-profiler.h +33 -19
- data/vendor/v8/src/cpu.h +2 -0
- data/vendor/v8/src/d8-debug.cc +3 -3
- data/vendor/v8/src/d8-debug.h +7 -6
- data/vendor/v8/src/d8-posix.cc +2 -0
- data/vendor/v8/src/d8.cc +22 -12
- data/vendor/v8/src/d8.gyp +3 -0
- data/vendor/v8/src/d8.js +618 -0
- data/vendor/v8/src/data-flow.h +3 -3
- data/vendor/v8/src/dateparser.h +4 -2
- data/vendor/v8/src/debug-agent.cc +10 -9
- data/vendor/v8/src/debug-agent.h +9 -11
- data/vendor/v8/src/debug-debugger.js +121 -0
- data/vendor/v8/src/debug.cc +331 -227
- data/vendor/v8/src/debug.h +248 -219
- data/vendor/v8/src/deoptimizer.cc +173 -62
- data/vendor/v8/src/deoptimizer.h +119 -19
- data/vendor/v8/src/disasm.h +3 -0
- data/vendor/v8/src/disassembler.cc +10 -9
- data/vendor/v8/src/execution.cc +185 -129
- data/vendor/v8/src/execution.h +47 -78
- data/vendor/v8/src/extensions/experimental/break-iterator.cc +250 -0
- data/vendor/v8/src/extensions/experimental/break-iterator.h +89 -0
- data/vendor/v8/src/extensions/experimental/experimental.gyp +2 -0
- data/vendor/v8/src/extensions/experimental/i18n-extension.cc +22 -2
- data/vendor/v8/src/extensions/externalize-string-extension.cc +2 -2
- data/vendor/v8/src/extensions/gc-extension.cc +1 -1
- data/vendor/v8/src/factory.cc +261 -154
- data/vendor/v8/src/factory.h +162 -158
- data/vendor/v8/src/flag-definitions.h +17 -11
- data/vendor/v8/src/frame-element.cc +0 -5
- data/vendor/v8/src/frame-element.h +9 -13
- data/vendor/v8/src/frames-inl.h +7 -0
- data/vendor/v8/src/frames.cc +56 -46
- data/vendor/v8/src/frames.h +36 -25
- data/vendor/v8/src/full-codegen.cc +15 -24
- data/vendor/v8/src/full-codegen.h +13 -41
- data/vendor/v8/src/func-name-inferrer.cc +7 -6
- data/vendor/v8/src/func-name-inferrer.h +1 -1
- data/vendor/v8/src/gdb-jit.cc +1 -0
- data/vendor/v8/src/global-handles.cc +118 -56
- data/vendor/v8/src/global-handles.h +98 -40
- data/vendor/v8/src/globals.h +2 -2
- data/vendor/v8/src/handles-inl.h +106 -9
- data/vendor/v8/src/handles.cc +220 -157
- data/vendor/v8/src/handles.h +38 -59
- data/vendor/v8/src/hashmap.h +3 -3
- data/vendor/v8/src/heap-inl.h +141 -25
- data/vendor/v8/src/heap-profiler.cc +117 -63
- data/vendor/v8/src/heap-profiler.h +38 -21
- data/vendor/v8/src/heap.cc +805 -564
- data/vendor/v8/src/heap.h +640 -594
- data/vendor/v8/src/hydrogen-instructions.cc +216 -73
- data/vendor/v8/src/hydrogen-instructions.h +259 -124
- data/vendor/v8/src/hydrogen.cc +996 -1171
- data/vendor/v8/src/hydrogen.h +163 -144
- data/vendor/v8/src/ia32/assembler-ia32-inl.h +12 -11
- data/vendor/v8/src/ia32/assembler-ia32.cc +85 -39
- data/vendor/v8/src/ia32/assembler-ia32.h +82 -16
- data/vendor/v8/src/ia32/builtins-ia32.cc +64 -58
- data/vendor/v8/src/ia32/code-stubs-ia32.cc +248 -324
- data/vendor/v8/src/ia32/code-stubs-ia32.h +3 -44
- data/vendor/v8/src/ia32/codegen-ia32.cc +217 -165
- data/vendor/v8/src/ia32/codegen-ia32.h +3 -0
- data/vendor/v8/src/ia32/cpu-ia32.cc +6 -5
- data/vendor/v8/src/ia32/debug-ia32.cc +8 -5
- data/vendor/v8/src/ia32/deoptimizer-ia32.cc +124 -14
- data/vendor/v8/src/ia32/disasm-ia32.cc +85 -62
- data/vendor/v8/src/ia32/frames-ia32.h +1 -1
- data/vendor/v8/src/ia32/full-codegen-ia32.cc +348 -435
- data/vendor/v8/src/ia32/ic-ia32.cc +91 -91
- data/vendor/v8/src/ia32/lithium-codegen-ia32.cc +500 -255
- data/vendor/v8/src/ia32/lithium-codegen-ia32.h +13 -4
- data/vendor/v8/src/ia32/lithium-gap-resolver-ia32.cc +6 -0
- data/vendor/v8/src/ia32/lithium-ia32.cc +122 -45
- data/vendor/v8/src/ia32/lithium-ia32.h +128 -41
- data/vendor/v8/src/ia32/macro-assembler-ia32.cc +109 -84
- data/vendor/v8/src/ia32/macro-assembler-ia32.h +18 -9
- data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.cc +26 -15
- data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.h +1 -0
- data/vendor/v8/src/ia32/register-allocator-ia32.cc +30 -30
- data/vendor/v8/src/ia32/simulator-ia32.h +4 -4
- data/vendor/v8/src/ia32/stub-cache-ia32.cc +383 -400
- data/vendor/v8/src/ia32/virtual-frame-ia32.cc +36 -13
- data/vendor/v8/src/ia32/virtual-frame-ia32.h +11 -5
- data/vendor/v8/src/ic-inl.h +12 -2
- data/vendor/v8/src/ic.cc +304 -221
- data/vendor/v8/src/ic.h +115 -58
- data/vendor/v8/src/interpreter-irregexp.cc +25 -21
- data/vendor/v8/src/interpreter-irregexp.h +2 -1
- data/vendor/v8/src/isolate.cc +883 -0
- data/vendor/v8/src/isolate.h +1304 -0
- data/vendor/v8/src/json.js +10 -10
- data/vendor/v8/src/jsregexp.cc +111 -80
- data/vendor/v8/src/jsregexp.h +6 -7
- data/vendor/v8/src/jump-target-heavy.cc +5 -8
- data/vendor/v8/src/jump-target-heavy.h +0 -6
- data/vendor/v8/src/jump-target-inl.h +1 -1
- data/vendor/v8/src/jump-target-light.cc +3 -3
- data/vendor/v8/src/lithium-allocator-inl.h +2 -0
- data/vendor/v8/src/lithium-allocator.cc +42 -30
- data/vendor/v8/src/lithium-allocator.h +8 -22
- data/vendor/v8/src/lithium.cc +1 -0
- data/vendor/v8/src/liveedit.cc +141 -99
- data/vendor/v8/src/liveedit.h +7 -2
- data/vendor/v8/src/liveobjectlist-inl.h +90 -0
- data/vendor/v8/src/liveobjectlist.cc +2537 -1
- data/vendor/v8/src/liveobjectlist.h +245 -35
- data/vendor/v8/src/log-utils.cc +122 -35
- data/vendor/v8/src/log-utils.h +33 -36
- data/vendor/v8/src/log.cc +299 -241
- data/vendor/v8/src/log.h +177 -110
- data/vendor/v8/src/mark-compact.cc +612 -470
- data/vendor/v8/src/mark-compact.h +153 -80
- data/vendor/v8/src/messages.cc +16 -14
- data/vendor/v8/src/messages.js +30 -7
- data/vendor/v8/src/mips/assembler-mips-inl.h +155 -35
- data/vendor/v8/src/mips/assembler-mips.cc +1093 -219
- data/vendor/v8/src/mips/assembler-mips.h +552 -153
- data/vendor/v8/src/mips/builtins-mips.cc +43 -100
- data/vendor/v8/src/mips/code-stubs-mips.cc +752 -0
- data/vendor/v8/src/mips/code-stubs-mips.h +511 -0
- data/vendor/v8/src/mips/codegen-mips-inl.h +8 -14
- data/vendor/v8/src/mips/codegen-mips.cc +672 -896
- data/vendor/v8/src/mips/codegen-mips.h +271 -69
- data/vendor/v8/src/mips/constants-mips.cc +44 -20
- data/vendor/v8/src/mips/constants-mips.h +238 -40
- data/vendor/v8/src/mips/cpu-mips.cc +20 -3
- data/vendor/v8/src/mips/debug-mips.cc +35 -7
- data/vendor/v8/src/mips/deoptimizer-mips.cc +91 -0
- data/vendor/v8/src/mips/disasm-mips.cc +329 -93
- data/vendor/v8/src/mips/frames-mips.cc +2 -50
- data/vendor/v8/src/mips/frames-mips.h +24 -9
- data/vendor/v8/src/mips/full-codegen-mips.cc +473 -23
- data/vendor/v8/src/mips/ic-mips.cc +81 -45
- data/vendor/v8/src/mips/jump-target-mips.cc +11 -106
- data/vendor/v8/src/mips/lithium-codegen-mips.h +65 -0
- data/vendor/v8/src/mips/lithium-mips.h +304 -0
- data/vendor/v8/src/mips/macro-assembler-mips.cc +2391 -390
- data/vendor/v8/src/mips/macro-assembler-mips.h +718 -121
- data/vendor/v8/src/mips/regexp-macro-assembler-mips.cc +478 -0
- data/vendor/v8/src/mips/regexp-macro-assembler-mips.h +250 -0
- data/vendor/v8/src/mips/register-allocator-mips-inl.h +0 -3
- data/vendor/v8/src/mips/register-allocator-mips.h +3 -2
- data/vendor/v8/src/mips/simulator-mips.cc +1009 -221
- data/vendor/v8/src/mips/simulator-mips.h +119 -36
- data/vendor/v8/src/mips/stub-cache-mips.cc +331 -148
- data/vendor/v8/src/mips/{fast-codegen-mips.cc → virtual-frame-mips-inl.h} +11 -30
- data/vendor/v8/src/mips/virtual-frame-mips.cc +137 -149
- data/vendor/v8/src/mips/virtual-frame-mips.h +294 -312
- data/vendor/v8/src/mirror-debugger.js +9 -8
- data/vendor/v8/src/mksnapshot.cc +2 -2
- data/vendor/v8/src/objects-debug.cc +16 -16
- data/vendor/v8/src/objects-inl.h +421 -195
- data/vendor/v8/src/objects-printer.cc +7 -7
- data/vendor/v8/src/objects-visiting.cc +1 -1
- data/vendor/v8/src/objects-visiting.h +33 -12
- data/vendor/v8/src/objects.cc +935 -658
- data/vendor/v8/src/objects.h +234 -139
- data/vendor/v8/src/parser.cc +484 -439
- data/vendor/v8/src/parser.h +35 -14
- data/vendor/v8/src/platform-cygwin.cc +173 -107
- data/vendor/v8/src/platform-freebsd.cc +224 -72
- data/vendor/v8/src/platform-linux.cc +234 -95
- data/vendor/v8/src/platform-macos.cc +215 -82
- data/vendor/v8/src/platform-nullos.cc +9 -3
- data/vendor/v8/src/platform-openbsd.cc +22 -7
- data/vendor/v8/src/platform-posix.cc +30 -5
- data/vendor/v8/src/platform-solaris.cc +120 -38
- data/vendor/v8/src/platform-tls-mac.h +62 -0
- data/vendor/v8/src/platform-tls-win32.h +62 -0
- data/vendor/v8/src/platform-tls.h +50 -0
- data/vendor/v8/src/platform-win32.cc +195 -97
- data/vendor/v8/src/platform.h +72 -15
- data/vendor/v8/src/preparse-data.cc +2 -0
- data/vendor/v8/src/preparser-api.cc +8 -2
- data/vendor/v8/src/preparser.cc +1 -1
- data/vendor/v8/src/prettyprinter.cc +43 -52
- data/vendor/v8/src/prettyprinter.h +1 -1
- data/vendor/v8/src/profile-generator-inl.h +0 -28
- data/vendor/v8/src/profile-generator.cc +942 -685
- data/vendor/v8/src/profile-generator.h +210 -176
- data/vendor/v8/src/property.cc +6 -0
- data/vendor/v8/src/property.h +14 -3
- data/vendor/v8/src/regexp-macro-assembler-irregexp.cc +1 -1
- data/vendor/v8/src/regexp-macro-assembler.cc +28 -19
- data/vendor/v8/src/regexp-macro-assembler.h +11 -6
- data/vendor/v8/src/regexp-stack.cc +18 -10
- data/vendor/v8/src/regexp-stack.h +45 -21
- data/vendor/v8/src/regexp.js +3 -3
- data/vendor/v8/src/register-allocator-inl.h +3 -3
- data/vendor/v8/src/register-allocator.cc +1 -7
- data/vendor/v8/src/register-allocator.h +5 -15
- data/vendor/v8/src/rewriter.cc +2 -1
- data/vendor/v8/src/runtime-profiler.cc +158 -128
- data/vendor/v8/src/runtime-profiler.h +131 -15
- data/vendor/v8/src/runtime.cc +2409 -1692
- data/vendor/v8/src/runtime.h +93 -17
- data/vendor/v8/src/safepoint-table.cc +3 -0
- data/vendor/v8/src/safepoint-table.h +9 -3
- data/vendor/v8/src/scanner-base.cc +21 -28
- data/vendor/v8/src/scanner-base.h +22 -11
- data/vendor/v8/src/scanner.cc +3 -5
- data/vendor/v8/src/scanner.h +4 -2
- data/vendor/v8/src/scopeinfo.cc +11 -16
- data/vendor/v8/src/scopeinfo.h +26 -15
- data/vendor/v8/src/scopes.cc +67 -37
- data/vendor/v8/src/scopes.h +26 -12
- data/vendor/v8/src/serialize.cc +193 -154
- data/vendor/v8/src/serialize.h +41 -36
- data/vendor/v8/src/small-pointer-list.h +163 -0
- data/vendor/v8/src/snapshot-common.cc +1 -1
- data/vendor/v8/src/snapshot.h +3 -1
- data/vendor/v8/src/spaces-inl.h +30 -25
- data/vendor/v8/src/spaces.cc +263 -370
- data/vendor/v8/src/spaces.h +178 -166
- data/vendor/v8/src/string-search.cc +4 -3
- data/vendor/v8/src/string-search.h +21 -20
- data/vendor/v8/src/string-stream.cc +32 -24
- data/vendor/v8/src/string.js +7 -7
- data/vendor/v8/src/stub-cache.cc +324 -248
- data/vendor/v8/src/stub-cache.h +181 -155
- data/vendor/v8/src/token.cc +3 -3
- data/vendor/v8/src/token.h +3 -3
- data/vendor/v8/src/top.cc +218 -390
- data/vendor/v8/src/type-info.cc +98 -32
- data/vendor/v8/src/type-info.h +10 -3
- data/vendor/v8/src/unicode.cc +1 -1
- data/vendor/v8/src/unicode.h +1 -1
- data/vendor/v8/src/utils.h +3 -0
- data/vendor/v8/src/v8-counters.cc +18 -11
- data/vendor/v8/src/v8-counters.h +34 -13
- data/vendor/v8/src/v8.cc +66 -121
- data/vendor/v8/src/v8.h +7 -4
- data/vendor/v8/src/v8globals.h +18 -12
- data/vendor/v8/src/{memory.h → v8memory.h} +0 -0
- data/vendor/v8/src/v8natives.js +59 -18
- data/vendor/v8/src/v8threads.cc +127 -114
- data/vendor/v8/src/v8threads.h +42 -35
- data/vendor/v8/src/v8utils.h +2 -39
- data/vendor/v8/src/variables.h +1 -1
- data/vendor/v8/src/version.cc +26 -5
- data/vendor/v8/src/version.h +4 -0
- data/vendor/v8/src/virtual-frame-heavy-inl.h +2 -4
- data/vendor/v8/src/virtual-frame-light-inl.h +5 -4
- data/vendor/v8/src/vm-state-inl.h +21 -17
- data/vendor/v8/src/vm-state.h +7 -5
- data/vendor/v8/src/win32-headers.h +1 -0
- data/vendor/v8/src/x64/assembler-x64-inl.h +12 -11
- data/vendor/v8/src/x64/assembler-x64.cc +80 -40
- data/vendor/v8/src/x64/assembler-x64.h +67 -17
- data/vendor/v8/src/x64/builtins-x64.cc +34 -33
- data/vendor/v8/src/x64/code-stubs-x64.cc +636 -377
- data/vendor/v8/src/x64/code-stubs-x64.h +14 -48
- data/vendor/v8/src/x64/codegen-x64-inl.h +1 -1
- data/vendor/v8/src/x64/codegen-x64.cc +158 -136
- data/vendor/v8/src/x64/codegen-x64.h +4 -1
- data/vendor/v8/src/x64/cpu-x64.cc +7 -5
- data/vendor/v8/src/x64/debug-x64.cc +8 -6
- data/vendor/v8/src/x64/deoptimizer-x64.cc +195 -20
- data/vendor/v8/src/x64/disasm-x64.cc +42 -23
- data/vendor/v8/src/x64/frames-x64.cc +1 -1
- data/vendor/v8/src/x64/frames-x64.h +2 -2
- data/vendor/v8/src/x64/full-codegen-x64.cc +780 -218
- data/vendor/v8/src/x64/ic-x64.cc +77 -79
- data/vendor/v8/src/x64/jump-target-x64.cc +1 -1
- data/vendor/v8/src/x64/lithium-codegen-x64.cc +698 -181
- data/vendor/v8/src/x64/lithium-codegen-x64.h +31 -6
- data/vendor/v8/src/x64/lithium-x64.cc +136 -54
- data/vendor/v8/src/x64/lithium-x64.h +142 -51
- data/vendor/v8/src/x64/macro-assembler-x64.cc +456 -187
- data/vendor/v8/src/x64/macro-assembler-x64.h +166 -34
- data/vendor/v8/src/x64/regexp-macro-assembler-x64.cc +44 -28
- data/vendor/v8/src/x64/regexp-macro-assembler-x64.h +8 -4
- data/vendor/v8/src/x64/register-allocator-x64-inl.h +3 -3
- data/vendor/v8/src/x64/register-allocator-x64.cc +12 -8
- data/vendor/v8/src/x64/simulator-x64.h +5 -5
- data/vendor/v8/src/x64/stub-cache-x64.cc +299 -344
- data/vendor/v8/src/x64/virtual-frame-x64.cc +37 -13
- data/vendor/v8/src/x64/virtual-frame-x64.h +13 -7
- data/vendor/v8/src/zone-inl.h +49 -3
- data/vendor/v8/src/zone.cc +42 -41
- data/vendor/v8/src/zone.h +37 -34
- data/vendor/v8/test/benchmarks/testcfg.py +100 -0
- data/vendor/v8/test/cctest/SConscript +5 -4
- data/vendor/v8/test/cctest/cctest.h +3 -2
- data/vendor/v8/test/cctest/cctest.status +6 -11
- data/vendor/v8/test/cctest/test-accessors.cc +3 -3
- data/vendor/v8/test/cctest/test-alloc.cc +39 -33
- data/vendor/v8/test/cctest/test-api.cc +1092 -205
- data/vendor/v8/test/cctest/test-assembler-arm.cc +39 -25
- data/vendor/v8/test/cctest/test-assembler-ia32.cc +36 -37
- data/vendor/v8/test/cctest/test-assembler-mips.cc +1098 -40
- data/vendor/v8/test/cctest/test-assembler-x64.cc +32 -25
- data/vendor/v8/test/cctest/test-ast.cc +1 -0
- data/vendor/v8/test/cctest/test-circular-queue.cc +8 -5
- data/vendor/v8/test/cctest/test-compiler.cc +24 -24
- data/vendor/v8/test/cctest/test-cpu-profiler.cc +140 -5
- data/vendor/v8/test/cctest/test-dataflow.cc +1 -0
- data/vendor/v8/test/cctest/test-debug.cc +136 -77
- data/vendor/v8/test/cctest/test-decls.cc +1 -1
- data/vendor/v8/test/cctest/test-deoptimization.cc +25 -24
- data/vendor/v8/test/cctest/test-disasm-arm.cc +9 -4
- data/vendor/v8/test/cctest/test-disasm-ia32.cc +10 -8
- data/vendor/v8/test/cctest/test-func-name-inference.cc +10 -4
- data/vendor/v8/test/cctest/test-heap-profiler.cc +226 -164
- data/vendor/v8/test/cctest/test-heap.cc +240 -217
- data/vendor/v8/test/cctest/test-liveedit.cc +1 -0
- data/vendor/v8/test/cctest/test-log-stack-tracer.cc +18 -20
- data/vendor/v8/test/cctest/test-log.cc +114 -108
- data/vendor/v8/test/cctest/test-macro-assembler-x64.cc +247 -177
- data/vendor/v8/test/cctest/test-mark-compact.cc +129 -90
- data/vendor/v8/test/cctest/test-parsing.cc +15 -14
- data/vendor/v8/test/cctest/test-platform-linux.cc +1 -0
- data/vendor/v8/test/cctest/test-platform-tls.cc +66 -0
- data/vendor/v8/test/cctest/test-platform-win32.cc +1 -0
- data/vendor/v8/test/cctest/test-profile-generator.cc +1 -1
- data/vendor/v8/test/cctest/test-regexp.cc +53 -41
- data/vendor/v8/test/cctest/test-reloc-info.cc +18 -11
- data/vendor/v8/test/cctest/test-serialize.cc +44 -43
- data/vendor/v8/test/cctest/test-sockets.cc +8 -3
- data/vendor/v8/test/cctest/test-spaces.cc +47 -29
- data/vendor/v8/test/cctest/test-strings.cc +20 -20
- data/vendor/v8/test/cctest/test-thread-termination.cc +8 -3
- data/vendor/v8/test/cctest/test-threads.cc +5 -3
- data/vendor/v8/test/cctest/test-utils.cc +5 -4
- data/vendor/v8/test/cctest/testcfg.py +7 -3
- data/vendor/v8/test/es5conform/es5conform.status +2 -77
- data/vendor/v8/test/es5conform/testcfg.py +1 -1
- data/vendor/v8/test/message/testcfg.py +1 -1
- data/vendor/v8/test/mjsunit/accessors-on-global-object.js +3 -3
- data/vendor/v8/test/mjsunit/array-concat.js +43 -1
- data/vendor/v8/test/mjsunit/array-join.js +25 -0
- data/vendor/v8/test/mjsunit/bitops-info.js +7 -1
- data/vendor/v8/test/mjsunit/compiler/array-length.js +2 -2
- data/vendor/v8/test/mjsunit/compiler/global-accessors.js +47 -0
- data/vendor/v8/test/mjsunit/compiler/pic.js +1 -1
- data/vendor/v8/test/mjsunit/compiler/regress-loadfield.js +65 -0
- data/vendor/v8/test/mjsunit/math-sqrt.js +5 -1
- data/vendor/v8/test/mjsunit/mjsunit.js +59 -8
- data/vendor/v8/test/mjsunit/mjsunit.status +0 -12
- data/vendor/v8/test/mjsunit/mul-exhaustive.js +129 -11
- data/vendor/v8/test/mjsunit/negate-zero.js +1 -1
- data/vendor/v8/test/mjsunit/object-freeze.js +5 -13
- data/vendor/v8/test/mjsunit/object-prevent-extensions.js +9 -50
- data/vendor/v8/test/mjsunit/object-seal.js +4 -13
- data/vendor/v8/test/mjsunit/override-eval-with-non-function.js +36 -0
- data/vendor/v8/test/mjsunit/regress/regress-1145.js +54 -0
- data/vendor/v8/test/mjsunit/regress/regress-1172-bis.js +37 -0
- data/vendor/v8/test/mjsunit/regress/regress-1181.js +54 -0
- data/vendor/v8/test/mjsunit/regress/regress-1207.js +35 -0
- data/vendor/v8/test/mjsunit/regress/regress-1209.js +34 -0
- data/vendor/v8/test/mjsunit/regress/regress-1210.js +48 -0
- data/vendor/v8/test/mjsunit/regress/regress-1213.js +43 -0
- data/vendor/v8/test/mjsunit/regress/regress-1218.js +29 -0
- data/vendor/v8/test/mjsunit/regress/regress-1229.js +79 -0
- data/vendor/v8/test/mjsunit/regress/regress-1233.js +47 -0
- data/vendor/v8/test/mjsunit/regress/regress-1236.js +34 -0
- data/vendor/v8/test/mjsunit/regress/regress-1237.js +36 -0
- data/vendor/v8/test/mjsunit/regress/regress-1240.js +39 -0
- data/vendor/v8/test/mjsunit/regress/regress-1257.js +58 -0
- data/vendor/v8/test/mjsunit/regress/regress-1278.js +69 -0
- data/vendor/v8/test/mjsunit/regress/regress-create-exception.js +1 -0
- data/vendor/v8/test/mjsunit/regress/regress-lazy-deopt-reloc.js +52 -0
- data/vendor/v8/test/mjsunit/sin-cos.js +15 -10
- data/vendor/v8/test/mjsunit/smi-negative-zero.js +2 -2
- data/vendor/v8/test/mjsunit/str-to-num.js +1 -1
- data/vendor/v8/test/mjsunit/strict-mode.js +435 -0
- data/vendor/v8/test/mjsunit/testcfg.py +23 -6
- data/vendor/v8/test/mozilla/mozilla.status +0 -2
- data/vendor/v8/test/mozilla/testcfg.py +1 -1
- data/vendor/v8/test/preparser/empty.js +28 -0
- data/vendor/v8/test/preparser/functions-only.js +38 -0
- data/vendor/v8/test/preparser/non-alphanum.js +34 -0
- data/vendor/v8/test/preparser/symbols-only.js +49 -0
- data/vendor/v8/test/preparser/testcfg.py +90 -0
- data/vendor/v8/test/sputnik/testcfg.py +1 -1
- data/vendor/v8/test/test262/README +16 -0
- data/vendor/v8/test/test262/harness-adapt.js +80 -0
- data/vendor/v8/test/test262/test262.status +1506 -0
- data/vendor/v8/test/test262/testcfg.py +123 -0
- data/vendor/v8/tools/freebsd-tick-processor +10 -0
- data/vendor/v8/tools/gyp/v8.gyp +8 -33
- data/vendor/v8/tools/linux-tick-processor +5 -3
- data/vendor/v8/tools/test.py +37 -14
- data/vendor/v8/tools/tickprocessor.js +22 -8
- data/vendor/v8/tools/visual_studio/v8_base.vcproj +13 -1
- data/vendor/v8/tools/visual_studio/v8_base_arm.vcproj +5 -1
- data/vendor/v8/tools/visual_studio/v8_base_x64.vcproj +5 -1
- data/vendor/v8/tools/visual_studio/x64.vsprops +1 -0
- metadata +1495 -1341
- data/ext/extconf.rb +0 -22
- data/ext/mustang.cpp +0 -58
- data/vendor/v8/src/top.h +0 -608
data/vendor/v8/src/objects.h
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
// Copyright
|
1
|
+
// Copyright 2011 the V8 project authors. All rights reserved.
|
2
2
|
// Redistribution and use in source and binary forms, with or without
|
3
3
|
// modification, are permitted provided that the following conditions are
|
4
4
|
// met:
|
@@ -57,8 +57,8 @@
|
|
57
57
|
// - JSValue
|
58
58
|
// - JSMessageObject
|
59
59
|
// - ByteArray
|
60
|
-
// - PixelArray
|
61
60
|
// - ExternalArray
|
61
|
+
// - ExternalPixelArray
|
62
62
|
// - ExternalByteArray
|
63
63
|
// - ExternalUnsignedByteArray
|
64
64
|
// - ExternalShortArray
|
@@ -135,19 +135,37 @@ class PropertyDetails BASE_EMBEDDED {
|
|
135
135
|
PropertyDetails(PropertyAttributes attributes,
|
136
136
|
PropertyType type,
|
137
137
|
int index = 0) {
|
138
|
+
ASSERT(type != EXTERNAL_ARRAY_TRANSITION);
|
138
139
|
ASSERT(TypeField::is_valid(type));
|
139
140
|
ASSERT(AttributesField::is_valid(attributes));
|
140
|
-
ASSERT(
|
141
|
+
ASSERT(StorageField::is_valid(index));
|
141
142
|
|
142
143
|
value_ = TypeField::encode(type)
|
143
144
|
| AttributesField::encode(attributes)
|
144
|
-
|
|
145
|
+
| StorageField::encode(index);
|
145
146
|
|
146
147
|
ASSERT(type == this->type());
|
147
148
|
ASSERT(attributes == this->attributes());
|
148
149
|
ASSERT(index == this->index());
|
149
150
|
}
|
150
151
|
|
152
|
+
PropertyDetails(PropertyAttributes attributes,
|
153
|
+
PropertyType type,
|
154
|
+
ExternalArrayType array_type) {
|
155
|
+
ASSERT(type == EXTERNAL_ARRAY_TRANSITION);
|
156
|
+
ASSERT(TypeField::is_valid(type));
|
157
|
+
ASSERT(AttributesField::is_valid(attributes));
|
158
|
+
ASSERT(StorageField::is_valid(static_cast<int>(array_type)));
|
159
|
+
|
160
|
+
value_ = TypeField::encode(type)
|
161
|
+
| AttributesField::encode(attributes)
|
162
|
+
| StorageField::encode(static_cast<int>(array_type));
|
163
|
+
|
164
|
+
ASSERT(type == this->type());
|
165
|
+
ASSERT(attributes == this->attributes());
|
166
|
+
ASSERT(array_type == this->array_type());
|
167
|
+
}
|
168
|
+
|
151
169
|
// Conversion for storing details as Object*.
|
152
170
|
inline PropertyDetails(Smi* smi);
|
153
171
|
inline Smi* AsSmi();
|
@@ -157,7 +175,8 @@ class PropertyDetails BASE_EMBEDDED {
|
|
157
175
|
bool IsTransition() {
|
158
176
|
PropertyType t = type();
|
159
177
|
ASSERT(t != INTERCEPTOR);
|
160
|
-
return t == MAP_TRANSITION || t == CONSTANT_TRANSITION
|
178
|
+
return t == MAP_TRANSITION || t == CONSTANT_TRANSITION ||
|
179
|
+
t == EXTERNAL_ARRAY_TRANSITION;
|
161
180
|
}
|
162
181
|
|
163
182
|
bool IsProperty() {
|
@@ -166,11 +185,18 @@ class PropertyDetails BASE_EMBEDDED {
|
|
166
185
|
|
167
186
|
PropertyAttributes attributes() { return AttributesField::decode(value_); }
|
168
187
|
|
169
|
-
int index() { return
|
188
|
+
int index() { return StorageField::decode(value_); }
|
189
|
+
|
190
|
+
ExternalArrayType array_type() {
|
191
|
+
ASSERT(type() == EXTERNAL_ARRAY_TRANSITION);
|
192
|
+
return static_cast<ExternalArrayType>(StorageField::decode(value_));
|
193
|
+
}
|
170
194
|
|
171
195
|
inline PropertyDetails AsDeleted();
|
172
196
|
|
173
|
-
static bool IsValidIndex(int index) {
|
197
|
+
static bool IsValidIndex(int index) {
|
198
|
+
return StorageField::is_valid(index);
|
199
|
+
}
|
174
200
|
|
175
201
|
bool IsReadOnly() { return (attributes() & READ_ONLY) != 0; }
|
176
202
|
bool IsDontDelete() { return (attributes() & DONT_DELETE) != 0; }
|
@@ -179,10 +205,10 @@ class PropertyDetails BASE_EMBEDDED {
|
|
179
205
|
|
180
206
|
// Bit fields in value_ (type, shift, size). Must be public so the
|
181
207
|
// constants can be embedded in generated code.
|
182
|
-
class TypeField: public BitField<PropertyType, 0,
|
183
|
-
class AttributesField: public BitField<PropertyAttributes,
|
184
|
-
class DeletedField: public BitField<uint32_t,
|
185
|
-
class
|
208
|
+
class TypeField: public BitField<PropertyType, 0, 4> {};
|
209
|
+
class AttributesField: public BitField<PropertyAttributes, 4, 3> {};
|
210
|
+
class DeletedField: public BitField<uint32_t, 7, 1> {};
|
211
|
+
class StorageField: public BitField<uint32_t, 8, 32-8> {};
|
186
212
|
|
187
213
|
static const int kInitialIndex = 1;
|
188
214
|
private:
|
@@ -262,7 +288,6 @@ static const int kVariableSizeSentinel = 0;
|
|
262
288
|
V(HEAP_NUMBER_TYPE) \
|
263
289
|
V(PROXY_TYPE) \
|
264
290
|
V(BYTE_ARRAY_TYPE) \
|
265
|
-
V(PIXEL_ARRAY_TYPE) \
|
266
291
|
/* Note: the order of these external array */ \
|
267
292
|
/* types is relied upon in */ \
|
268
293
|
/* Object::IsExternalArray(). */ \
|
@@ -273,6 +298,7 @@ static const int kVariableSizeSentinel = 0;
|
|
273
298
|
V(EXTERNAL_INT_ARRAY_TYPE) \
|
274
299
|
V(EXTERNAL_UNSIGNED_INT_ARRAY_TYPE) \
|
275
300
|
V(EXTERNAL_FLOAT_ARRAY_TYPE) \
|
301
|
+
V(EXTERNAL_PIXEL_ARRAY_TYPE) \
|
276
302
|
V(FILLER_TYPE) \
|
277
303
|
\
|
278
304
|
V(ACCESSOR_INFO_TYPE) \
|
@@ -490,14 +516,14 @@ enum InstanceType {
|
|
490
516
|
HEAP_NUMBER_TYPE,
|
491
517
|
PROXY_TYPE,
|
492
518
|
BYTE_ARRAY_TYPE,
|
493
|
-
PIXEL_ARRAY_TYPE,
|
494
519
|
EXTERNAL_BYTE_ARRAY_TYPE, // FIRST_EXTERNAL_ARRAY_TYPE
|
495
520
|
EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE,
|
496
521
|
EXTERNAL_SHORT_ARRAY_TYPE,
|
497
522
|
EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE,
|
498
523
|
EXTERNAL_INT_ARRAY_TYPE,
|
499
524
|
EXTERNAL_UNSIGNED_INT_ARRAY_TYPE,
|
500
|
-
EXTERNAL_FLOAT_ARRAY_TYPE,
|
525
|
+
EXTERNAL_FLOAT_ARRAY_TYPE,
|
526
|
+
EXTERNAL_PIXEL_ARRAY_TYPE, // LAST_EXTERNAL_ARRAY_TYPE
|
501
527
|
FILLER_TYPE, // LAST_DATA_TYPE
|
502
528
|
|
503
529
|
// Structs.
|
@@ -544,7 +570,7 @@ enum InstanceType {
|
|
544
570
|
LAST_STRING_TYPE = FIRST_NONSTRING_TYPE - 1,
|
545
571
|
// Boundaries for testing for an external array.
|
546
572
|
FIRST_EXTERNAL_ARRAY_TYPE = EXTERNAL_BYTE_ARRAY_TYPE,
|
547
|
-
LAST_EXTERNAL_ARRAY_TYPE =
|
573
|
+
LAST_EXTERNAL_ARRAY_TYPE = EXTERNAL_PIXEL_ARRAY_TYPE,
|
548
574
|
// Boundary for promotion to old data space/old pointer space.
|
549
575
|
LAST_DATA_TYPE = FILLER_TYPE,
|
550
576
|
// Boundaries for testing the type is a JavaScript "object". Note that
|
@@ -557,6 +583,8 @@ enum InstanceType {
|
|
557
583
|
FIRST_FUNCTION_CLASS_TYPE = JS_REGEXP_TYPE
|
558
584
|
};
|
559
585
|
|
586
|
+
static const int kExternalArrayTypeCount = LAST_EXTERNAL_ARRAY_TYPE -
|
587
|
+
FIRST_EXTERNAL_ARRAY_TYPE + 1;
|
560
588
|
|
561
589
|
STATIC_CHECK(JS_OBJECT_TYPE == Internals::kJSObjectType);
|
562
590
|
STATIC_CHECK(FIRST_NONSTRING_TYPE == Internals::kFirstNonstringType);
|
@@ -655,7 +683,6 @@ class MaybeObject BASE_EMBEDDED {
|
|
655
683
|
V(SeqTwoByteString) \
|
656
684
|
V(SeqAsciiString) \
|
657
685
|
\
|
658
|
-
V(PixelArray) \
|
659
686
|
V(ExternalArray) \
|
660
687
|
V(ExternalByteArray) \
|
661
688
|
V(ExternalUnsignedByteArray) \
|
@@ -664,6 +691,7 @@ class MaybeObject BASE_EMBEDDED {
|
|
664
691
|
V(ExternalIntArray) \
|
665
692
|
V(ExternalUnsignedIntArray) \
|
666
693
|
V(ExternalFloatArray) \
|
694
|
+
V(ExternalPixelArray) \
|
667
695
|
V(ByteArray) \
|
668
696
|
V(JSObject) \
|
669
697
|
V(JSContextExtensionObject) \
|
@@ -729,6 +757,7 @@ class Object : public MaybeObject {
|
|
729
757
|
// Oddball testing.
|
730
758
|
INLINE(bool IsUndefined());
|
731
759
|
INLINE(bool IsNull());
|
760
|
+
INLINE(bool IsTheHole()); // Shadows MaybeObject's implementation.
|
732
761
|
INLINE(bool IsTrue());
|
733
762
|
INLINE(bool IsFalse());
|
734
763
|
inline bool IsArgumentsMarker();
|
@@ -885,7 +914,7 @@ class Failure: public MaybeObject {
|
|
885
914
|
enum Type {
|
886
915
|
RETRY_AFTER_GC = 0,
|
887
916
|
EXCEPTION = 1, // Returning this marker tells the real exception
|
888
|
-
// is in
|
917
|
+
// is in Isolate::pending_exception.
|
889
918
|
INTERNAL_ERROR = 2,
|
890
919
|
OUT_OF_MEMORY_EXCEPTION = 3
|
891
920
|
};
|
@@ -1073,6 +1102,14 @@ class HeapObject: public Object {
|
|
1073
1102
|
inline MapWord map_word();
|
1074
1103
|
inline void set_map_word(MapWord map_word);
|
1075
1104
|
|
1105
|
+
// The Heap the object was allocated in. Used also to access Isolate.
|
1106
|
+
// This method can not be used during GC, it ASSERTs this.
|
1107
|
+
inline Heap* GetHeap();
|
1108
|
+
// Convenience method to get current isolate. This method can be
|
1109
|
+
// accessed only when its result is the same as
|
1110
|
+
// Isolate::Current(), it ASSERTs this. See also comment for GetHeap.
|
1111
|
+
inline Isolate* GetIsolate();
|
1112
|
+
|
1076
1113
|
// Converts an address to a HeapObject pointer.
|
1077
1114
|
static inline HeapObject* FromAddress(Address address);
|
1078
1115
|
|
@@ -1297,14 +1334,14 @@ class JSObject: public HeapObject {
|
|
1297
1334
|
FAST_ELEMENTS,
|
1298
1335
|
// All the kinds below are "slow".
|
1299
1336
|
DICTIONARY_ELEMENTS,
|
1300
|
-
PIXEL_ELEMENTS,
|
1301
1337
|
EXTERNAL_BYTE_ELEMENTS,
|
1302
1338
|
EXTERNAL_UNSIGNED_BYTE_ELEMENTS,
|
1303
1339
|
EXTERNAL_SHORT_ELEMENTS,
|
1304
1340
|
EXTERNAL_UNSIGNED_SHORT_ELEMENTS,
|
1305
1341
|
EXTERNAL_INT_ELEMENTS,
|
1306
1342
|
EXTERNAL_UNSIGNED_INT_ELEMENTS,
|
1307
|
-
EXTERNAL_FLOAT_ELEMENTS
|
1343
|
+
EXTERNAL_FLOAT_ELEMENTS,
|
1344
|
+
EXTERNAL_PIXEL_ELEMENTS
|
1308
1345
|
};
|
1309
1346
|
|
1310
1347
|
// [properties]: Backing storage for properties.
|
@@ -1329,15 +1366,14 @@ class JSObject: public HeapObject {
|
|
1329
1366
|
// few objects and so before writing to any element the array must
|
1330
1367
|
// be copied. Use EnsureWritableFastElements in this case.
|
1331
1368
|
//
|
1332
|
-
// In the slow mode elements is either a NumberDictionary or
|
1333
|
-
// PixelArray or an ExternalArray.
|
1369
|
+
// In the slow mode elements is either a NumberDictionary or an ExternalArray.
|
1334
1370
|
DECL_ACCESSORS(elements, HeapObject)
|
1335
1371
|
inline void initialize_elements();
|
1336
1372
|
MUST_USE_RESULT inline MaybeObject* ResetElements();
|
1337
1373
|
inline ElementsKind GetElementsKind();
|
1338
1374
|
inline bool HasFastElements();
|
1339
1375
|
inline bool HasDictionaryElements();
|
1340
|
-
inline bool
|
1376
|
+
inline bool HasExternalPixelElements();
|
1341
1377
|
inline bool HasExternalArrayElements();
|
1342
1378
|
inline bool HasExternalByteElements();
|
1343
1379
|
inline bool HasExternalUnsignedByteElements();
|
@@ -1361,11 +1397,13 @@ class JSObject: public HeapObject {
|
|
1361
1397
|
|
1362
1398
|
MUST_USE_RESULT MaybeObject* SetProperty(String* key,
|
1363
1399
|
Object* value,
|
1364
|
-
PropertyAttributes attributes
|
1400
|
+
PropertyAttributes attributes,
|
1401
|
+
StrictModeFlag strict_mode);
|
1365
1402
|
MUST_USE_RESULT MaybeObject* SetProperty(LookupResult* result,
|
1366
1403
|
String* key,
|
1367
1404
|
Object* value,
|
1368
|
-
PropertyAttributes attributes
|
1405
|
+
PropertyAttributes attributes,
|
1406
|
+
StrictModeFlag strict_mode);
|
1369
1407
|
MUST_USE_RESULT MaybeObject* SetPropertyWithFailedAccessCheck(
|
1370
1408
|
LookupResult* result,
|
1371
1409
|
String* name,
|
@@ -1380,11 +1418,13 @@ class JSObject: public HeapObject {
|
|
1380
1418
|
MUST_USE_RESULT MaybeObject* SetPropertyWithInterceptor(
|
1381
1419
|
String* name,
|
1382
1420
|
Object* value,
|
1383
|
-
PropertyAttributes attributes
|
1421
|
+
PropertyAttributes attributes,
|
1422
|
+
StrictModeFlag strict_mode);
|
1384
1423
|
MUST_USE_RESULT MaybeObject* SetPropertyPostInterceptor(
|
1385
1424
|
String* name,
|
1386
1425
|
Object* value,
|
1387
|
-
PropertyAttributes attributes
|
1426
|
+
PropertyAttributes attributes,
|
1427
|
+
StrictModeFlag strict_mode);
|
1388
1428
|
MUST_USE_RESULT MaybeObject* SetLocalPropertyIgnoreAttributes(
|
1389
1429
|
String* key,
|
1390
1430
|
Object* value,
|
@@ -1511,6 +1551,12 @@ class JSObject: public HeapObject {
|
|
1511
1551
|
inline bool HasElement(uint32_t index);
|
1512
1552
|
bool HasElementWithReceiver(JSObject* receiver, uint32_t index);
|
1513
1553
|
|
1554
|
+
// Computes the new capacity when expanding the elements of a JSObject.
|
1555
|
+
static int NewElementsCapacity(int old_capacity) {
|
1556
|
+
// (old_capacity + 50%) + 16
|
1557
|
+
return old_capacity + (old_capacity >> 1) + 16;
|
1558
|
+
}
|
1559
|
+
|
1514
1560
|
// Tells whether the index'th element is present and how it is stored.
|
1515
1561
|
enum LocalElementType {
|
1516
1562
|
// There is no element with given index.
|
@@ -1536,12 +1582,14 @@ class JSObject: public HeapObject {
|
|
1536
1582
|
|
1537
1583
|
MUST_USE_RESULT MaybeObject* SetFastElement(uint32_t index,
|
1538
1584
|
Object* value,
|
1585
|
+
StrictModeFlag strict_mode,
|
1539
1586
|
bool check_prototype = true);
|
1540
1587
|
|
1541
1588
|
// Set the index'th array element.
|
1542
1589
|
// A Failure object is returned if GC is needed.
|
1543
1590
|
MUST_USE_RESULT MaybeObject* SetElement(uint32_t index,
|
1544
1591
|
Object* value,
|
1592
|
+
StrictModeFlag strict_mode,
|
1545
1593
|
bool check_prototype = true);
|
1546
1594
|
|
1547
1595
|
// Returns the index'th element.
|
@@ -1576,6 +1624,7 @@ class JSObject: public HeapObject {
|
|
1576
1624
|
inline int GetHeaderSize();
|
1577
1625
|
|
1578
1626
|
inline int GetInternalFieldCount();
|
1627
|
+
inline int GetInternalFieldOffset(int index);
|
1579
1628
|
inline Object* GetInternalField(int index);
|
1580
1629
|
inline void SetInternalField(int index, Object* value);
|
1581
1630
|
|
@@ -1670,7 +1719,8 @@ class JSObject: public HeapObject {
|
|
1670
1719
|
// Add a property to an object.
|
1671
1720
|
MUST_USE_RESULT MaybeObject* AddProperty(String* name,
|
1672
1721
|
Object* value,
|
1673
|
-
PropertyAttributes attributes
|
1722
|
+
PropertyAttributes attributes,
|
1723
|
+
StrictModeFlag strict_mode);
|
1674
1724
|
|
1675
1725
|
// Convert the object to use the canonical dictionary
|
1676
1726
|
// representation. If the object is expected to have additional properties
|
@@ -1693,6 +1743,7 @@ class JSObject: public HeapObject {
|
|
1693
1743
|
inline Object* FastPropertyAtPut(int index, Object* value);
|
1694
1744
|
|
1695
1745
|
// Access to in object properties.
|
1746
|
+
inline int GetInObjectPropertyOffset(int index);
|
1696
1747
|
inline Object* InObjectPropertyAt(int index);
|
1697
1748
|
inline Object* InObjectPropertyAtPut(int index,
|
1698
1749
|
Object* value,
|
@@ -1801,12 +1852,15 @@ class JSObject: public HeapObject {
|
|
1801
1852
|
uint32_t index,
|
1802
1853
|
Object* value,
|
1803
1854
|
JSObject* holder);
|
1804
|
-
MUST_USE_RESULT MaybeObject* SetElementWithInterceptor(
|
1805
|
-
|
1806
|
-
|
1855
|
+
MUST_USE_RESULT MaybeObject* SetElementWithInterceptor(
|
1856
|
+
uint32_t index,
|
1857
|
+
Object* value,
|
1858
|
+
StrictModeFlag strict_mode,
|
1859
|
+
bool check_prototype);
|
1807
1860
|
MUST_USE_RESULT MaybeObject* SetElementWithoutInterceptor(
|
1808
1861
|
uint32_t index,
|
1809
1862
|
Object* value,
|
1863
|
+
StrictModeFlag strict_mode,
|
1810
1864
|
bool check_prototype);
|
1811
1865
|
|
1812
1866
|
MaybeObject* GetElementPostInterceptor(Object* receiver, uint32_t index);
|
@@ -1876,13 +1930,18 @@ class FixedArray: public HeapObject {
|
|
1876
1930
|
|
1877
1931
|
// Setters for frequently used oddballs located in old space.
|
1878
1932
|
inline void set_undefined(int index);
|
1933
|
+
// TODO(isolates): duplicate.
|
1934
|
+
inline void set_undefined(Heap* heap, int index);
|
1879
1935
|
inline void set_null(int index);
|
1936
|
+
// TODO(isolates): duplicate.
|
1937
|
+
inline void set_null(Heap* heap, int index);
|
1880
1938
|
inline void set_the_hole(int index);
|
1881
1939
|
|
1882
1940
|
// Setters with less debug checks for the GC to use.
|
1883
1941
|
inline void set_unchecked(int index, Smi* value);
|
1884
|
-
inline void set_null_unchecked(int index);
|
1885
|
-
inline void set_unchecked(int index, Object* value,
|
1942
|
+
inline void set_null_unchecked(Heap* heap, int index);
|
1943
|
+
inline void set_unchecked(Heap* heap, int index, Object* value,
|
1944
|
+
WriteBarrierMode mode);
|
1886
1945
|
|
1887
1946
|
// Gives access to raw memory which stores the array's data.
|
1888
1947
|
inline Object** data_start();
|
@@ -1977,7 +2036,9 @@ class DescriptorArray: public FixedArray {
|
|
1977
2036
|
|
1978
2037
|
// Returns the number of descriptors in the array.
|
1979
2038
|
int number_of_descriptors() {
|
1980
|
-
|
2039
|
+
ASSERT(length() > kFirstIndex || IsEmpty());
|
2040
|
+
int len = length();
|
2041
|
+
return len <= kFirstIndex ? 0 : len - kFirstIndex;
|
1981
2042
|
}
|
1982
2043
|
|
1983
2044
|
int NextEnumerationIndex() {
|
@@ -2269,7 +2330,8 @@ class HashTable: public FixedArray {
|
|
2269
2330
|
(FixedArray::kMaxLength - kElementsStartOffset) / kEntrySize;
|
2270
2331
|
|
2271
2332
|
// Find entry for key otherwise return kNotFound.
|
2272
|
-
int FindEntry(Key key);
|
2333
|
+
inline int FindEntry(Key key);
|
2334
|
+
int FindEntry(Isolate* isolate, Key key);
|
2273
2335
|
|
2274
2336
|
protected:
|
2275
2337
|
|
@@ -2341,16 +2403,16 @@ class HashTableKey {
|
|
2341
2403
|
|
2342
2404
|
class SymbolTableShape {
|
2343
2405
|
public:
|
2344
|
-
static bool IsMatch(HashTableKey* key, Object* value) {
|
2406
|
+
static inline bool IsMatch(HashTableKey* key, Object* value) {
|
2345
2407
|
return key->IsMatch(value);
|
2346
2408
|
}
|
2347
|
-
static uint32_t Hash(HashTableKey* key) {
|
2409
|
+
static inline uint32_t Hash(HashTableKey* key) {
|
2348
2410
|
return key->Hash();
|
2349
2411
|
}
|
2350
|
-
static uint32_t HashForObject(HashTableKey* key, Object* object) {
|
2412
|
+
static inline uint32_t HashForObject(HashTableKey* key, Object* object) {
|
2351
2413
|
return key->HashForObject(object);
|
2352
2414
|
}
|
2353
|
-
MUST_USE_RESULT static MaybeObject* AsObject(HashTableKey* key) {
|
2415
|
+
MUST_USE_RESULT static inline MaybeObject* AsObject(HashTableKey* key) {
|
2354
2416
|
return key->AsObject();
|
2355
2417
|
}
|
2356
2418
|
|
@@ -2393,18 +2455,18 @@ class SymbolTable: public HashTable<SymbolTableShape, HashTableKey*> {
|
|
2393
2455
|
|
2394
2456
|
class MapCacheShape {
|
2395
2457
|
public:
|
2396
|
-
static bool IsMatch(HashTableKey* key, Object* value) {
|
2458
|
+
static inline bool IsMatch(HashTableKey* key, Object* value) {
|
2397
2459
|
return key->IsMatch(value);
|
2398
2460
|
}
|
2399
|
-
static uint32_t Hash(HashTableKey* key) {
|
2461
|
+
static inline uint32_t Hash(HashTableKey* key) {
|
2400
2462
|
return key->Hash();
|
2401
2463
|
}
|
2402
2464
|
|
2403
|
-
static uint32_t HashForObject(HashTableKey* key, Object* object) {
|
2465
|
+
static inline uint32_t HashForObject(HashTableKey* key, Object* object) {
|
2404
2466
|
return key->HashForObject(object);
|
2405
2467
|
}
|
2406
2468
|
|
2407
|
-
MUST_USE_RESULT static MaybeObject* AsObject(HashTableKey* key) {
|
2469
|
+
MUST_USE_RESULT static inline MaybeObject* AsObject(HashTableKey* key) {
|
2408
2470
|
return key->AsObject();
|
2409
2471
|
}
|
2410
2472
|
|
@@ -2443,13 +2505,18 @@ class Dictionary: public HashTable<Shape, Key> {
|
|
2443
2505
|
}
|
2444
2506
|
|
2445
2507
|
// Set the value for entry.
|
2446
|
-
|
2508
|
+
// Returns false if the put wasn't performed due to property being read only.
|
2509
|
+
// Returns true on successful put.
|
2510
|
+
bool ValueAtPut(int entry, Object* value) {
|
2447
2511
|
// Check that this value can actually be written.
|
2448
2512
|
PropertyDetails details = DetailsAt(entry);
|
2449
2513
|
// If a value has not been initilized we allow writing to it even if
|
2450
2514
|
// it is read only (a declared const that has not been initialized).
|
2451
|
-
if (details.IsReadOnly() && !ValueAt(entry)->IsTheHole())
|
2452
|
-
|
2515
|
+
if (details.IsReadOnly() && !ValueAt(entry)->IsTheHole()) {
|
2516
|
+
return false;
|
2517
|
+
}
|
2518
|
+
this->set(HashTable<Shape, Key>::EntryToIndex(entry) + 1, value);
|
2519
|
+
return true;
|
2453
2520
|
}
|
2454
2521
|
|
2455
2522
|
// Returns the property details for the property at entry.
|
@@ -2755,59 +2822,6 @@ class ByteArray: public HeapObject {
|
|
2755
2822
|
};
|
2756
2823
|
|
2757
2824
|
|
2758
|
-
// A PixelArray represents a fixed-size byte array with special semantics
|
2759
|
-
// used for implementing the CanvasPixelArray object. Please see the
|
2760
|
-
// specification at:
|
2761
|
-
// http://www.whatwg.org/specs/web-apps/current-work/
|
2762
|
-
// multipage/the-canvas-element.html#canvaspixelarray
|
2763
|
-
// In particular, write access clamps the value written to 0 or 255 if the
|
2764
|
-
// value written is outside this range.
|
2765
|
-
class PixelArray: public HeapObject {
|
2766
|
-
public:
|
2767
|
-
// [length]: length of the array.
|
2768
|
-
inline int length();
|
2769
|
-
inline void set_length(int value);
|
2770
|
-
|
2771
|
-
// [external_pointer]: The pointer to the external memory area backing this
|
2772
|
-
// pixel array.
|
2773
|
-
DECL_ACCESSORS(external_pointer, uint8_t) // Pointer to the data store.
|
2774
|
-
|
2775
|
-
// Setter and getter.
|
2776
|
-
inline uint8_t get(int index);
|
2777
|
-
inline void set(int index, uint8_t value);
|
2778
|
-
|
2779
|
-
// This accessor applies the correct conversion from Smi, HeapNumber and
|
2780
|
-
// undefined and clamps the converted value between 0 and 255.
|
2781
|
-
Object* SetValue(uint32_t index, Object* value);
|
2782
|
-
|
2783
|
-
// Casting.
|
2784
|
-
static inline PixelArray* cast(Object* obj);
|
2785
|
-
|
2786
|
-
#ifdef OBJECT_PRINT
|
2787
|
-
inline void PixelArrayPrint() {
|
2788
|
-
PixelArrayPrint(stdout);
|
2789
|
-
}
|
2790
|
-
void PixelArrayPrint(FILE* out);
|
2791
|
-
#endif
|
2792
|
-
#ifdef DEBUG
|
2793
|
-
void PixelArrayVerify();
|
2794
|
-
#endif // DEBUG
|
2795
|
-
|
2796
|
-
// Maximal acceptable length for a pixel array.
|
2797
|
-
static const int kMaxLength = 0x3fffffff;
|
2798
|
-
|
2799
|
-
// PixelArray headers are not quadword aligned.
|
2800
|
-
static const int kLengthOffset = HeapObject::kHeaderSize;
|
2801
|
-
static const int kExternalPointerOffset =
|
2802
|
-
POINTER_SIZE_ALIGN(kLengthOffset + kIntSize);
|
2803
|
-
static const int kHeaderSize = kExternalPointerOffset + kPointerSize;
|
2804
|
-
static const int kAlignedSize = OBJECT_POINTER_ALIGN(kHeaderSize);
|
2805
|
-
|
2806
|
-
private:
|
2807
|
-
DISALLOW_IMPLICIT_CONSTRUCTORS(PixelArray);
|
2808
|
-
};
|
2809
|
-
|
2810
|
-
|
2811
2825
|
// An ExternalArray represents a fixed-size array of primitive values
|
2812
2826
|
// which live outside the JavaScript heap. Its subclasses are used to
|
2813
2827
|
// implement the CanvasArray types being defined in the WebGL
|
@@ -2847,6 +2861,44 @@ class ExternalArray: public HeapObject {
|
|
2847
2861
|
};
|
2848
2862
|
|
2849
2863
|
|
2864
|
+
// A ExternalPixelArray represents a fixed-size byte array with special
|
2865
|
+
// semantics used for implementing the CanvasPixelArray object. Please see the
|
2866
|
+
// specification at:
|
2867
|
+
|
2868
|
+
// http://www.whatwg.org/specs/web-apps/current-work/
|
2869
|
+
// multipage/the-canvas-element.html#canvaspixelarray
|
2870
|
+
// In particular, write access clamps the value written to 0 or 255 if the
|
2871
|
+
// value written is outside this range.
|
2872
|
+
class ExternalPixelArray: public ExternalArray {
|
2873
|
+
public:
|
2874
|
+
inline uint8_t* external_pixel_pointer();
|
2875
|
+
|
2876
|
+
// Setter and getter.
|
2877
|
+
inline uint8_t get(int index);
|
2878
|
+
inline void set(int index, uint8_t value);
|
2879
|
+
|
2880
|
+
// This accessor applies the correct conversion from Smi, HeapNumber and
|
2881
|
+
// undefined and clamps the converted value between 0 and 255.
|
2882
|
+
Object* SetValue(uint32_t index, Object* value);
|
2883
|
+
|
2884
|
+
// Casting.
|
2885
|
+
static inline ExternalPixelArray* cast(Object* obj);
|
2886
|
+
|
2887
|
+
#ifdef OBJECT_PRINT
|
2888
|
+
inline void ExternalPixelArrayPrint() {
|
2889
|
+
ExternalPixelArrayPrint(stdout);
|
2890
|
+
}
|
2891
|
+
void ExternalPixelArrayPrint(FILE* out);
|
2892
|
+
#endif
|
2893
|
+
#ifdef DEBUG
|
2894
|
+
void ExternalPixelArrayVerify();
|
2895
|
+
#endif // DEBUG
|
2896
|
+
|
2897
|
+
private:
|
2898
|
+
DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalPixelArray);
|
2899
|
+
};
|
2900
|
+
|
2901
|
+
|
2850
2902
|
class ExternalByteArray: public ExternalArray {
|
2851
2903
|
public:
|
2852
2904
|
// Setter and getter.
|
@@ -3181,10 +3233,12 @@ class Code: public HeapObject {
|
|
3181
3233
|
BUILTIN,
|
3182
3234
|
LOAD_IC,
|
3183
3235
|
KEYED_LOAD_IC,
|
3236
|
+
KEYED_EXTERNAL_ARRAY_LOAD_IC,
|
3184
3237
|
CALL_IC,
|
3185
3238
|
KEYED_CALL_IC,
|
3186
3239
|
STORE_IC,
|
3187
3240
|
KEYED_STORE_IC,
|
3241
|
+
KEYED_EXTERNAL_ARRAY_STORE_IC,
|
3188
3242
|
BINARY_OP_IC,
|
3189
3243
|
TYPE_RECORDING_BINARY_OP_IC,
|
3190
3244
|
COMPARE_IC,
|
@@ -3259,6 +3313,12 @@ class Code: public HeapObject {
|
|
3259
3313
|
return kind() == TYPE_RECORDING_BINARY_OP_IC;
|
3260
3314
|
}
|
3261
3315
|
inline bool is_compare_ic_stub() { return kind() == COMPARE_IC; }
|
3316
|
+
inline bool is_external_array_load_stub() {
|
3317
|
+
return kind() == KEYED_EXTERNAL_ARRAY_LOAD_IC;
|
3318
|
+
}
|
3319
|
+
inline bool is_external_array_store_stub() {
|
3320
|
+
return kind() == KEYED_EXTERNAL_ARRAY_STORE_IC;
|
3321
|
+
}
|
3262
3322
|
|
3263
3323
|
// [major_key]: For kind STUB or BINARY_OP_IC, the major key.
|
3264
3324
|
inline int major_key();
|
@@ -3300,6 +3360,12 @@ class Code: public HeapObject {
|
|
3300
3360
|
inline CheckType check_type();
|
3301
3361
|
inline void set_check_type(CheckType value);
|
3302
3362
|
|
3363
|
+
// [external array type]: For kind KEYED_EXTERNAL_ARRAY_LOAD_IC and
|
3364
|
+
// KEYED_EXTERNAL_ARRAY_STORE_IC, identifies the type of external
|
3365
|
+
// array that the code stub is specialized for.
|
3366
|
+
inline ExternalArrayType external_array_type();
|
3367
|
+
inline void set_external_array_type(ExternalArrayType value);
|
3368
|
+
|
3303
3369
|
// [binary op type]: For all BINARY_OP_IC.
|
3304
3370
|
inline byte binary_op_type();
|
3305
3371
|
inline void set_binary_op_type(byte value);
|
@@ -3410,7 +3476,7 @@ class Code: public HeapObject {
|
|
3410
3476
|
inline void CodeIterateBody(ObjectVisitor* v);
|
3411
3477
|
|
3412
3478
|
template<typename StaticVisitor>
|
3413
|
-
inline void CodeIterateBody();
|
3479
|
+
inline void CodeIterateBody(Heap* heap);
|
3414
3480
|
#ifdef OBJECT_PRINT
|
3415
3481
|
inline void CodePrint() {
|
3416
3482
|
CodePrint(stdout);
|
@@ -3421,6 +3487,10 @@ class Code: public HeapObject {
|
|
3421
3487
|
void CodeVerify();
|
3422
3488
|
#endif
|
3423
3489
|
|
3490
|
+
// Returns the isolate/heap this code object belongs to.
|
3491
|
+
inline Isolate* isolate();
|
3492
|
+
inline Heap* heap();
|
3493
|
+
|
3424
3494
|
// Max loop nesting marker used to postpose OSR. We don't take loop
|
3425
3495
|
// nesting that is deeper than 5 levels into account.
|
3426
3496
|
static const int kMaxLoopNestingMarker = 6;
|
@@ -3448,6 +3518,7 @@ class Code: public HeapObject {
|
|
3448
3518
|
static const int kOptimizableOffset = kKindSpecificFlagsOffset;
|
3449
3519
|
static const int kStackSlotsOffset = kKindSpecificFlagsOffset;
|
3450
3520
|
static const int kCheckTypeOffset = kKindSpecificFlagsOffset;
|
3521
|
+
static const int kExternalArrayTypeOffset = kKindSpecificFlagsOffset;
|
3451
3522
|
|
3452
3523
|
static const int kCompareStateOffset = kStubMajorKeyOffset + 1;
|
3453
3524
|
static const int kBinaryOpTypeOffset = kStubMajorKeyOffset + 1;
|
@@ -3464,18 +3535,18 @@ class Code: public HeapObject {
|
|
3464
3535
|
static const int kFlagsICStateShift = 0;
|
3465
3536
|
static const int kFlagsICInLoopShift = 3;
|
3466
3537
|
static const int kFlagsTypeShift = 4;
|
3467
|
-
static const int kFlagsKindShift =
|
3468
|
-
static const int kFlagsICHolderShift =
|
3469
|
-
static const int kFlagsExtraICStateShift =
|
3470
|
-
static const int kFlagsArgumentsCountShift =
|
3538
|
+
static const int kFlagsKindShift = 8;
|
3539
|
+
static const int kFlagsICHolderShift = 12;
|
3540
|
+
static const int kFlagsExtraICStateShift = 13;
|
3541
|
+
static const int kFlagsArgumentsCountShift = 15;
|
3471
3542
|
|
3472
3543
|
static const int kFlagsICStateMask = 0x00000007; // 00000000111
|
3473
3544
|
static const int kFlagsICInLoopMask = 0x00000008; // 00000001000
|
3474
|
-
static const int kFlagsTypeMask =
|
3475
|
-
static const int kFlagsKindMask =
|
3476
|
-
static const int kFlagsCacheInPrototypeMapMask =
|
3477
|
-
static const int kFlagsExtraICStateMask =
|
3478
|
-
static const int kFlagsArgumentsCountMask =
|
3545
|
+
static const int kFlagsTypeMask = 0x000000F0; // 00001110000
|
3546
|
+
static const int kFlagsKindMask = 0x00000F00; // 11110000000
|
3547
|
+
static const int kFlagsCacheInPrototypeMapMask = 0x00001000;
|
3548
|
+
static const int kFlagsExtraICStateMask = 0x00006000;
|
3549
|
+
static const int kFlagsArgumentsCountMask = 0xFFFF8000;
|
3479
3550
|
|
3480
3551
|
static const int kFlagsNotUsedInLookup =
|
3481
3552
|
(kFlagsICInLoopMask | kFlagsTypeMask | kFlagsCacheInPrototypeMapMask);
|
@@ -3605,16 +3676,16 @@ class Map: public HeapObject {
|
|
3605
3676
|
}
|
3606
3677
|
|
3607
3678
|
// Tells whether an instance has pixel array elements.
|
3608
|
-
inline void
|
3679
|
+
inline void set_has_external_array_elements(bool value) {
|
3609
3680
|
if (value) {
|
3610
|
-
set_bit_field2(bit_field2() | (1 <<
|
3681
|
+
set_bit_field2(bit_field2() | (1 << kHasExternalArrayElements));
|
3611
3682
|
} else {
|
3612
|
-
set_bit_field2(bit_field2() & ~(1 <<
|
3683
|
+
set_bit_field2(bit_field2() & ~(1 << kHasExternalArrayElements));
|
3613
3684
|
}
|
3614
3685
|
}
|
3615
3686
|
|
3616
|
-
inline bool
|
3617
|
-
return ((1 <<
|
3687
|
+
inline bool has_external_array_elements() {
|
3688
|
+
return ((1 << kHasExternalArrayElements) & bit_field2()) != 0;
|
3618
3689
|
}
|
3619
3690
|
|
3620
3691
|
// Tells whether the map is attached to SharedFunctionInfo
|
@@ -3675,10 +3746,11 @@ class Map: public HeapObject {
|
|
3675
3746
|
// from the descriptors and the fast elements bit cleared.
|
3676
3747
|
MUST_USE_RESULT inline MaybeObject* GetSlowElementsMap();
|
3677
3748
|
|
3678
|
-
// Returns
|
3679
|
-
//
|
3680
|
-
|
3681
|
-
|
3749
|
+
// Returns a new map with all transitions dropped from the descriptors and the
|
3750
|
+
// external array elements bit set.
|
3751
|
+
MUST_USE_RESULT MaybeObject* GetExternalArrayElementsMap(
|
3752
|
+
ExternalArrayType array_type,
|
3753
|
+
bool safe_to_add_transition);
|
3682
3754
|
|
3683
3755
|
// Returns the property index for name (only valid for FAST MODE).
|
3684
3756
|
int PropertyIndexFor(String* name);
|
@@ -3698,7 +3770,7 @@ class Map: public HeapObject {
|
|
3698
3770
|
// Code cache operations.
|
3699
3771
|
|
3700
3772
|
// Clears the code cache.
|
3701
|
-
inline void ClearCodeCache();
|
3773
|
+
inline void ClearCodeCache(Heap* heap);
|
3702
3774
|
|
3703
3775
|
// Update code cache.
|
3704
3776
|
MUST_USE_RESULT MaybeObject* UpdateCodeCache(String* name, Code* code);
|
@@ -3722,7 +3794,7 @@ class Map: public HeapObject {
|
|
3722
3794
|
// Also, restore the original prototype on the targets of these
|
3723
3795
|
// transitions, so that we do not process this map again while
|
3724
3796
|
// following back pointers.
|
3725
|
-
void ClearNonLiveTransitions(Object* real_prototype);
|
3797
|
+
void ClearNonLiveTransitions(Heap* heap, Object* real_prototype);
|
3726
3798
|
|
3727
3799
|
// Dispatched behavior.
|
3728
3800
|
#ifdef OBJECT_PRINT
|
@@ -3739,6 +3811,10 @@ class Map: public HeapObject {
|
|
3739
3811
|
inline int visitor_id();
|
3740
3812
|
inline void set_visitor_id(int visitor_id);
|
3741
3813
|
|
3814
|
+
// Returns the isolate/heap this map belongs to.
|
3815
|
+
inline Isolate* isolate();
|
3816
|
+
inline Heap* heap();
|
3817
|
+
|
3742
3818
|
typedef void (*TraverseCallback)(Map* map, void* data);
|
3743
3819
|
|
3744
3820
|
void TraverseTransitionTree(TraverseCallback callback, void* data);
|
@@ -3798,7 +3874,7 @@ class Map: public HeapObject {
|
|
3798
3874
|
static const int kStringWrapperSafeForDefaultValueOf = 3;
|
3799
3875
|
static const int kAttachedToSharedFunctionInfo = 4;
|
3800
3876
|
static const int kIsShared = 5;
|
3801
|
-
static const int
|
3877
|
+
static const int kHasExternalArrayElements = 6;
|
3802
3878
|
|
3803
3879
|
// Layout of the default cache. It holds alternating name and code objects.
|
3804
3880
|
static const int kCodeCacheEntrySize = 2;
|
@@ -4183,9 +4259,6 @@ class SharedFunctionInfo: public HeapObject {
|
|
4183
4259
|
// this.x = y; where y is either a constant or refers to an argument.
|
4184
4260
|
inline bool has_only_simple_this_property_assignments();
|
4185
4261
|
|
4186
|
-
inline bool try_full_codegen();
|
4187
|
-
inline void set_try_full_codegen(bool flag);
|
4188
|
-
|
4189
4262
|
// Indicates if this function can be lazy compiled.
|
4190
4263
|
// This is used to determine if we can safely flush code from a function
|
4191
4264
|
// when doing GC if we expect that the function will no longer be used.
|
@@ -4385,13 +4458,12 @@ class SharedFunctionInfo: public HeapObject {
|
|
4385
4458
|
|
4386
4459
|
// Bit positions in compiler_hints.
|
4387
4460
|
static const int kHasOnlySimpleThisPropertyAssignments = 0;
|
4388
|
-
static const int
|
4389
|
-
static const int
|
4390
|
-
static const int
|
4391
|
-
static const int kCodeAgeShift = 4;
|
4461
|
+
static const int kAllowLazyCompilation = 1;
|
4462
|
+
static const int kLiveObjectsMayExist = 2;
|
4463
|
+
static const int kCodeAgeShift = 3;
|
4392
4464
|
static const int kCodeAgeMask = 0x7;
|
4393
|
-
static const int kOptimizationDisabled =
|
4394
|
-
static const int kStrictModeFunction =
|
4465
|
+
static const int kOptimizationDisabled = 6;
|
4466
|
+
static const int kStrictModeFunction = 7;
|
4395
4467
|
|
4396
4468
|
private:
|
4397
4469
|
#if V8_HOST_ARCH_32_BIT
|
@@ -5136,6 +5208,11 @@ class StringHasher {
|
|
5136
5208
|
};
|
5137
5209
|
|
5138
5210
|
|
5211
|
+
// Calculates string hash.
|
5212
|
+
template <typename schar>
|
5213
|
+
inline uint32_t HashSequentialString(const schar* chars, int length);
|
5214
|
+
|
5215
|
+
|
5139
5216
|
// The characteristics of a string are stored in its map. Retrieving these
|
5140
5217
|
// few bits of information is moderately expensive, involving two memory
|
5141
5218
|
// loads where the second is dependent on the first. To improve efficiency
|
@@ -5779,11 +5856,8 @@ class ExternalTwoByteString: public ExternalString {
|
|
5779
5856
|
// iterating or updating after gc.
|
5780
5857
|
class Relocatable BASE_EMBEDDED {
|
5781
5858
|
public:
|
5782
|
-
inline Relocatable(
|
5783
|
-
virtual ~Relocatable()
|
5784
|
-
ASSERT_EQ(top_, this);
|
5785
|
-
top_ = prev_;
|
5786
|
-
}
|
5859
|
+
explicit inline Relocatable(Isolate* isolate);
|
5860
|
+
inline virtual ~Relocatable();
|
5787
5861
|
virtual void IterateInstance(ObjectVisitor* v) { }
|
5788
5862
|
virtual void PostGarbageCollection() { }
|
5789
5863
|
|
@@ -5795,7 +5869,7 @@ class Relocatable BASE_EMBEDDED {
|
|
5795
5869
|
static void Iterate(ObjectVisitor* v, Relocatable* top);
|
5796
5870
|
static char* Iterate(ObjectVisitor* v, char* t);
|
5797
5871
|
private:
|
5798
|
-
|
5872
|
+
Isolate* isolate_;
|
5799
5873
|
Relocatable* prev_;
|
5800
5874
|
};
|
5801
5875
|
|
@@ -5805,8 +5879,8 @@ class Relocatable BASE_EMBEDDED {
|
|
5805
5879
|
// must be valid as long as the reader is being used.
|
5806
5880
|
class FlatStringReader : public Relocatable {
|
5807
5881
|
public:
|
5808
|
-
|
5809
|
-
|
5882
|
+
FlatStringReader(Isolate* isolate, Handle<String> str);
|
5883
|
+
FlatStringReader(Isolate* isolate, Vector<const char> input);
|
5810
5884
|
void PostGarbageCollection();
|
5811
5885
|
inline uc32 Get(int index);
|
5812
5886
|
int length() { return length_; }
|
@@ -5869,6 +5943,9 @@ class Oddball: public HeapObject {
|
|
5869
5943
|
// [to_number]: Cached to_number computed at startup.
|
5870
5944
|
DECL_ACCESSORS(to_number, Object)
|
5871
5945
|
|
5946
|
+
inline byte kind();
|
5947
|
+
inline void set_kind(byte kind);
|
5948
|
+
|
5872
5949
|
// Casting.
|
5873
5950
|
static inline Oddball* cast(Object* obj);
|
5874
5951
|
|
@@ -5879,12 +5956,23 @@ class Oddball: public HeapObject {
|
|
5879
5956
|
|
5880
5957
|
// Initialize the fields.
|
5881
5958
|
MUST_USE_RESULT MaybeObject* Initialize(const char* to_string,
|
5882
|
-
Object* to_number
|
5959
|
+
Object* to_number,
|
5960
|
+
byte kind);
|
5883
5961
|
|
5884
5962
|
// Layout description.
|
5885
5963
|
static const int kToStringOffset = HeapObject::kHeaderSize;
|
5886
5964
|
static const int kToNumberOffset = kToStringOffset + kPointerSize;
|
5887
|
-
static const int
|
5965
|
+
static const int kKindOffset = kToNumberOffset + kPointerSize;
|
5966
|
+
static const int kSize = kKindOffset + kPointerSize;
|
5967
|
+
|
5968
|
+
static const byte kFalse = 0;
|
5969
|
+
static const byte kTrue = 1;
|
5970
|
+
static const byte kNotBooleanMask = ~1;
|
5971
|
+
static const byte kTheHole = 2;
|
5972
|
+
static const byte kNull = 3;
|
5973
|
+
static const byte kArgumentMarker = 4;
|
5974
|
+
static const byte kUndefined = 5;
|
5975
|
+
static const byte kOther = 6;
|
5888
5976
|
|
5889
5977
|
typedef FixedBodyDescriptor<kToStringOffset,
|
5890
5978
|
kToNumberOffset + kPointerSize,
|
@@ -5921,6 +6009,10 @@ class JSGlobalPropertyCell: public HeapObject {
|
|
5921
6009
|
kValueOffset + kPointerSize,
|
5922
6010
|
kSize> BodyDescriptor;
|
5923
6011
|
|
6012
|
+
// Returns the isolate/heap this cell object belongs to.
|
6013
|
+
inline Isolate* isolate();
|
6014
|
+
inline Heap* heap();
|
6015
|
+
|
5924
6016
|
private:
|
5925
6017
|
DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalPropertyCell);
|
5926
6018
|
};
|
@@ -6517,6 +6609,9 @@ class ObjectVisitor BASE_EMBEDDED {
|
|
6517
6609
|
VisitExternalReferences(p, p + 1);
|
6518
6610
|
}
|
6519
6611
|
|
6612
|
+
// Visits a handle that has an embedder-assigned class ID.
|
6613
|
+
virtual void VisitEmbedderReference(Object** p, uint16_t class_id) {}
|
6614
|
+
|
6520
6615
|
#ifdef DEBUG
|
6521
6616
|
// Intended for serialization/deserialization checking: insert, or
|
6522
6617
|
// check for the presence of, a tag at this position in the stream.
|