therubyracer 0.7.4 → 0.7.5
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of therubyracer might be problematic. Click here for more details.
- data/History.txt +11 -0
- data/Rakefile +1 -1
- data/ext/v8/extconf.rb +0 -18
- data/ext/v8/rr.cpp +2 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/AUTHORS +1 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/ChangeLog +239 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/LICENSE +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/SConstruct +29 -17
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/include/v8-debug.h +61 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/include/v8-profiler.h +182 -5
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/include/v8.h +458 -257
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/SConscript +2 -5
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/accessors.cc +2 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/accessors.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/allocation.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/allocation.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/api.cc +574 -30
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/api.h +12 -10
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/apinatives.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/apiutils.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arguments.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/assembler-arm-inl.h +38 -15
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/assembler-arm.cc +646 -101
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/assembler-arm.h +174 -15
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/builtins-arm.cc +56 -47
- data/ext/v8/upstream/2.3.3/src/arm/codegen-arm-inl.h +48 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/codegen-arm.cc +2957 -1448
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/codegen-arm.h +230 -74
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/constants-arm.cc +25 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/constants-arm.h +16 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/cpu-arm.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/debug-arm.cc +76 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/disasm-arm.cc +168 -20
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/fast-codegen-arm.cc +5 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/frames-arm.cc +4 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/frames-arm.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/full-codegen-arm.cc +1558 -248
- data/ext/v8/upstream/2.3.3/src/arm/ic-arm.cc +2258 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/jump-target-arm.cc +55 -103
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/macro-assembler-arm.cc +358 -185
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/macro-assembler-arm.h +136 -41
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/regexp-macro-assembler-arm.cc +26 -5
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/regexp-macro-assembler-arm.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/register-allocator-arm-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/register-allocator-arm.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/register-allocator-arm.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/simulator-arm.cc +203 -22
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/simulator-arm.h +7 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/stub-cache-arm.cc +531 -324
- data/ext/v8/upstream/2.3.3/src/arm/virtual-frame-arm-inl.h +59 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/virtual-frame-arm.cc +247 -81
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/virtual-frame-arm.h +99 -83
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/array.js +2 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/assembler.cc +6 -13
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/assembler.h +36 -10
- data/ext/v8/upstream/2.3.3/src/ast-inl.h +81 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ast.cc +14 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ast.h +20 -35
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/bootstrapper.cc +32 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/bootstrapper.h +0 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/builtins.cc +50 -33
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/builtins.h +2 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/bytecodes-irregexp.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cached-powers.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/char-predicates-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/char-predicates.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/checks.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/checks.h +8 -6
- data/ext/v8/upstream/2.3.3/src/circular-queue-inl.h +53 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/circular-queue.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/circular-queue.h +0 -26
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/code-stubs.cc +2 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/code-stubs.h +1 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/code.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/codegen-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/codegen.cc +44 -13
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/codegen.h +310 -31
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/compilation-cache.cc +28 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/compilation-cache.h +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/compiler.cc +45 -14
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/compiler.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/contexts.cc +11 -11
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/contexts.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/conversions-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/conversions.cc +25 -11
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/conversions.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/counters.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/counters.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cpu-profiler-inl.h +2 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cpu-profiler.cc +68 -24
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cpu-profiler.h +19 -11
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cpu.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-debug.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-debug.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-posix.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-readline.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-windows.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8.js +55 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/data-flow.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/data-flow.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/date.js +68 -137
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/dateparser-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/dateparser.cc +2 -8
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/dateparser.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug-agent.cc +3 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug-agent.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug-debugger.js +81 -23
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug.cc +275 -81
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug.h +85 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/disasm.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/disassembler.cc +1 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/disassembler.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/diy-fp.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/diy-fp.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/double.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/dtoa-config.c +0 -0
- data/ext/v8/upstream/2.3.3/src/dtoa.cc +77 -0
- data/ext/v8/upstream/2.3.3/src/dtoa.h +81 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/execution.cc +111 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/execution.h +12 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/factory.cc +25 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/factory.h +16 -9
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/fast-codegen.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/fast-codegen.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/fast-dtoa.cc +2 -9
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/fast-dtoa.h +1 -2
- data/ext/v8/upstream/2.3.3/src/fixed-dtoa.cc +405 -0
- data/ext/v8/upstream/{2.1.10/src/jump-target-light.cc → 2.3.3/src/fixed-dtoa.h} +22 -53
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flag-definitions.h +14 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flags.cc +5 -9
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flags.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flow-graph.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flow-graph.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frame-element.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frame-element.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frames-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frames.cc +5 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frames.h +1 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/full-codegen.cc +387 -20
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/full-codegen.h +102 -5
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/func-name-inferrer.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/func-name-inferrer.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/global-handles.cc +8 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/global-handles.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/globals.h +44 -7
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/handles-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/handles.cc +19 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/handles.h +8 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/hashmap.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/hashmap.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap-inl.h +56 -14
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap-profiler.cc +85 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap-profiler.h +45 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap.cc +994 -396
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap.h +220 -65
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/assembler-ia32-inl.h +41 -12
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/assembler-ia32.cc +94 -24
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/assembler-ia32.h +32 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/builtins-ia32.cc +42 -30
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/codegen-ia32-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/codegen-ia32.cc +1758 -916
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/codegen-ia32.h +67 -74
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/cpu-ia32.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/debug-ia32.cc +46 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/disasm-ia32.cc +37 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/fast-codegen-ia32.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/fast-codegen-ia32.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/frames-ia32.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/frames-ia32.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/full-codegen-ia32.cc +1465 -198
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/ic-ia32.cc +688 -367
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/jump-target-ia32.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/macro-assembler-ia32.cc +82 -180
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/macro-assembler-ia32.h +41 -25
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/regexp-macro-assembler-ia32.cc +68 -24
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/regexp-macro-assembler-ia32.h +1 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/register-allocator-ia32-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/register-allocator-ia32.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/register-allocator-ia32.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/simulator-ia32.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/simulator-ia32.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/stub-cache-ia32.cc +649 -302
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/virtual-frame-ia32.cc +23 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/virtual-frame-ia32.h +18 -27
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ic-inl.h +30 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ic.cc +384 -66
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ic.h +65 -24
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/interpreter-irregexp.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/interpreter-irregexp.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/json.js +3 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jsregexp.cc +20 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jsregexp.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target-heavy-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target-heavy.cc +79 -13
- data/ext/v8/upstream/{2.1.10/src/jump-target.h → 2.3.3/src/jump-target-heavy.h} +5 -47
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target-light-inl.h +16 -2
- data/ext/v8/upstream/2.3.3/src/jump-target-light.cc +110 -0
- data/ext/v8/upstream/2.3.3/src/jump-target-light.h +192 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target.cc +0 -64
- data/ext/v8/upstream/2.3.3/src/jump-target.h +90 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/list-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/list.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/liveedit-debugger.js +141 -28
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/liveedit.cc +19 -7
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/liveedit.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log-utils.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log-utils.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log.cc +12 -11
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log.h +12 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/macro-assembler.h +0 -16
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/macros.py +21 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mark-compact.cc +120 -109
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mark-compact.h +25 -37
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/math.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/memory.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/messages.cc +8 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/messages.h +2 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/messages.js +15 -7
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/assembler-mips-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/assembler-mips.cc +12 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/assembler-mips.h +4 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/builtins-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/codegen-mips-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/codegen-mips.cc +9 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/codegen-mips.h +1 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/constants-mips.cc +5 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/constants-mips.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/cpu-mips.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/debug-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/disasm-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/fast-codegen-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/frames-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/frames-mips.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/full-codegen-mips.cc +5 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/ic-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/jump-target-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/macro-assembler-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/macro-assembler-mips.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/register-allocator-mips-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/register-allocator-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/register-allocator-mips.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/simulator-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/simulator-mips.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/stub-cache-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/virtual-frame-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/virtual-frame-mips.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mirror-debugger.js +46 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mksnapshot.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/natives.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/objects-debug.cc +8 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/objects-inl.h +235 -62
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/objects.cc +497 -231
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/objects.h +355 -149
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/oprofile-agent.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/oprofile-agent.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/parser.cc +31 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/parser.h +1 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-freebsd.cc +9 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-linux.cc +26 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-macos.cc +11 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-nullos.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-openbsd.cc +6 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-posix.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-solaris.cc +69 -23
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-win32.cc +15 -11
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform.h +10 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/powers-ten.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/prettyprinter.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/prettyprinter.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/profile-generator-inl.h +26 -2
- data/ext/v8/upstream/2.3.3/src/profile-generator.cc +1830 -0
- data/ext/v8/upstream/2.3.3/src/profile-generator.h +853 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/property.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/property.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-irregexp-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-irregexp.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-irregexp.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-tracer.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-tracer.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler.cc +1 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-stack.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-stack.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp.js +25 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/register-allocator-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/register-allocator.cc +4 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/register-allocator.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/rewriter.cc +85 -8
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/rewriter.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/runtime.cc +547 -221
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/runtime.h +5 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/runtime.js +23 -31
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scanner.cc +12 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scanner.h +60 -53
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scopeinfo.cc +156 -168
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scopeinfo.h +58 -62
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scopes.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scopes.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/serialize.cc +320 -242
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/serialize.h +81 -48
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/shell.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/simulator.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/smart-pointer.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/snapshot-common.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/snapshot-empty.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/snapshot.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/spaces-inl.h +177 -74
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/spaces.cc +138 -315
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/spaces.h +155 -124
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/splay-tree-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/splay-tree.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/string-stream.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/string-stream.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/string.js +113 -119
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/stub-cache.cc +242 -97
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/stub-cache.h +118 -55
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/third_party/dtoa/COPYING +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/third_party/dtoa/dtoa.c +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/third_party/valgrind/valgrind.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/token.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/token.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/top.cc +107 -26
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/top.h +9 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/type-info.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/type-info.h +2 -2
- data/ext/v8/upstream/2.3.3/src/unbound-queue-inl.h +95 -0
- data/ext/v8/upstream/2.3.3/src/unbound-queue.h +67 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/unicode-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/unicode.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/unicode.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/uri.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/utils.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/utils.h +83 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8-counters.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8-counters.h +20 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8.cc +5 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8.h +0 -0
- data/ext/v8/upstream/2.3.3/src/v8dll-main.cc +39 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8natives.js +210 -33
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8threads.cc +1 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8threads.h +1 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/variables.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/variables.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/version.cc +3 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/version.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-heavy-inl.h +40 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-heavy.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-light-inl.h +106 -5
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-light.cc +4 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/vm-state-inl.h +6 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/vm-state.cc +1 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/vm-state.h +6 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/assembler-x64-inl.h +42 -5
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/assembler-x64.cc +285 -53
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/assembler-x64.h +54 -18
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/builtins-x64.cc +31 -33
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/codegen-x64-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/codegen-x64.cc +9787 -8722
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/codegen-x64.h +82 -47
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/cpu-x64.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/debug-x64.cc +55 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/disasm-x64.cc +42 -19
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/fast-codegen-x64.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/frames-x64.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/frames-x64.h +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/full-codegen-x64.cc +1487 -210
- data/ext/v8/upstream/2.3.3/src/x64/ic-x64.cc +1907 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/jump-target-x64.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/macro-assembler-x64.cc +366 -338
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/macro-assembler-x64.h +83 -38
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/regexp-macro-assembler-x64.cc +82 -23
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/regexp-macro-assembler-x64.h +1 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/register-allocator-x64-inl.h +6 -5
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/register-allocator-x64.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/register-allocator-x64.h +1 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/simulator-x64.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/simulator-x64.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/stub-cache-x64.cc +556 -377
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/virtual-frame-x64.cc +197 -98
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/virtual-frame-x64.h +37 -28
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/zone-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/zone.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/zone.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/codemap.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/consarray.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/csvparser.js +0 -0
- data/ext/v8/upstream/2.3.3/tools/gc-nvp-trace-processor.py +317 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/generate-ten-powers.scm +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/gyp/v8.gyp +87 -20
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/js2c.py +19 -15
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/jsmin.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/linux-tick-processor +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/linux-tick-processor.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/logreader.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/mac-nm +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/mac-tick-processor +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/annotate +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/common +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/dump +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/report +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/reset +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/run +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/shutdown +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/start +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/presubmit.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/process-heap-prof.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/profile.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/profile_view.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/run-valgrind.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/splaytree.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/splaytree.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/stats-viewer.py +25 -13
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/test.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/tickprocessor-driver.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/tickprocessor.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/tickprocessor.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/utils.py +0 -0
- data/ext/v8/upstream/2.3.3/tools/v8.xcodeproj/project.pbxproj +1855 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/README.txt +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/arm.vsprops +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/common.vsprops +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/d8.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/d8_arm.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/d8_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/d8js2c.cmd +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/debug.vsprops +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/ia32.vsprops +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/js2c.cmd +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/release.vsprops +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8.sln +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_arm.sln +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_arm.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_base.vcproj +40 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_base_arm.vcproj +20 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_base_x64.vcproj +16 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_cctest.vcproj +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_cctest_arm.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_cctest_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_mksnapshot.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_mksnapshot_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_process_sample.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_process_sample_arm.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_process_sample_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_shell_sample.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_shell_sample_arm.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_shell_sample_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_snapshot.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_snapshot_cc.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_snapshot_cc_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_snapshot_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_x64.sln +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/x64.vsprops +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/windows-tick-processor.bat +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/windows-tick-processor.py +0 -0
- data/ext/v8/upstream/Makefile +1 -1
- data/ext/v8/v8_template.cpp +94 -2
- data/ext/v8/v8_try_catch.cpp +2 -2
- data/lib/v8.rb +1 -1
- data/lib/v8/access.rb +93 -40
- data/lib/v8/cli.rb +1 -1
- data/lib/v8/function.rb +14 -2
- data/spec/redjs/jsapi_spec.rb +231 -42
- data/therubyracer.gemspec +3 -3
- metadata +463 -453
- data/ext/v8/upstream/2.1.10/src/arm/assembler-thumb2-inl.h +0 -263
- data/ext/v8/upstream/2.1.10/src/arm/assembler-thumb2.cc +0 -1878
- data/ext/v8/upstream/2.1.10/src/arm/assembler-thumb2.h +0 -1036
- data/ext/v8/upstream/2.1.10/src/arm/codegen-arm-inl.h +0 -72
- data/ext/v8/upstream/2.1.10/src/arm/ic-arm.cc +0 -1833
- data/ext/v8/upstream/2.1.10/src/circular-queue-inl.h +0 -101
- data/ext/v8/upstream/2.1.10/src/profile-generator.cc +0 -583
- data/ext/v8/upstream/2.1.10/src/profile-generator.h +0 -364
- data/ext/v8/upstream/2.1.10/src/x64/ic-x64.cc +0 -1621
@@ -189,7 +189,7 @@ Object* Object::GetPropertyWithCallback(Object* receiver,
|
|
189
189
|
}
|
190
190
|
|
191
191
|
UNREACHABLE();
|
192
|
-
return
|
192
|
+
return NULL;
|
193
193
|
}
|
194
194
|
|
195
195
|
|
@@ -631,7 +631,7 @@ Object* String::SlowTryFlatten(PretenureFlag pretenure) {
|
|
631
631
|
case kConsStringTag: {
|
632
632
|
ConsString* cs = ConsString::cast(this);
|
633
633
|
if (cs->second()->length() == 0) {
|
634
|
-
return
|
634
|
+
return cs->first();
|
635
635
|
}
|
636
636
|
// There's little point in putting the flat string in new space if the
|
637
637
|
// cons string is in old space. It can never get GCed until there is
|
@@ -669,7 +669,7 @@ Object* String::SlowTryFlatten(PretenureFlag pretenure) {
|
|
669
669
|
}
|
670
670
|
cs->set_first(result);
|
671
671
|
cs->set_second(Heap::empty_string());
|
672
|
-
return
|
672
|
+
return result;
|
673
673
|
}
|
674
674
|
default:
|
675
675
|
return this;
|
@@ -678,15 +678,18 @@ Object* String::SlowTryFlatten(PretenureFlag pretenure) {
|
|
678
678
|
|
679
679
|
|
680
680
|
bool String::MakeExternal(v8::String::ExternalStringResource* resource) {
|
681
|
+
// Externalizing twice leaks the external resource, so it's
|
682
|
+
// prohibited by the API.
|
683
|
+
ASSERT(!this->IsExternalString());
|
681
684
|
#ifdef DEBUG
|
682
685
|
if (FLAG_enable_slow_asserts) {
|
683
686
|
// Assert that the resource and the string are equivalent.
|
684
687
|
ASSERT(static_cast<size_t>(this->length()) == resource->length());
|
685
|
-
|
686
|
-
String::WriteToFlat(this,
|
687
|
-
ASSERT(memcmp(
|
688
|
+
ScopedVector<uc16> smart_chars(this->length());
|
689
|
+
String::WriteToFlat(this, smart_chars.start(), 0, this->length());
|
690
|
+
ASSERT(memcmp(smart_chars.start(),
|
688
691
|
resource->data(),
|
689
|
-
resource->length() * sizeof(
|
692
|
+
resource->length() * sizeof(smart_chars[0])) == 0);
|
690
693
|
}
|
691
694
|
#endif // DEBUG
|
692
695
|
|
@@ -697,13 +700,16 @@ bool String::MakeExternal(v8::String::ExternalStringResource* resource) {
|
|
697
700
|
return false;
|
698
701
|
}
|
699
702
|
ASSERT(size >= ExternalString::kSize);
|
703
|
+
bool is_ascii = this->IsAsciiRepresentation();
|
700
704
|
bool is_symbol = this->IsSymbol();
|
701
705
|
int length = this->length();
|
702
706
|
int hash_field = this->hash_field();
|
703
707
|
|
704
708
|
// Morph the object to an external string by adjusting the map and
|
705
709
|
// reinitializing the fields.
|
706
|
-
this->set_map(
|
710
|
+
this->set_map(is_ascii ?
|
711
|
+
Heap::external_string_with_ascii_data_map() :
|
712
|
+
Heap::external_string_map());
|
707
713
|
ExternalTwoByteString* self = ExternalTwoByteString::cast(this);
|
708
714
|
self->set_length(length);
|
709
715
|
self->set_hash_field(hash_field);
|
@@ -713,7 +719,9 @@ bool String::MakeExternal(v8::String::ExternalStringResource* resource) {
|
|
713
719
|
if (is_symbol) {
|
714
720
|
self->Hash(); // Force regeneration of the hash value.
|
715
721
|
// Now morph this external string into a external symbol.
|
716
|
-
this->set_map(
|
722
|
+
this->set_map(is_ascii ?
|
723
|
+
Heap::external_symbol_with_ascii_data_map() :
|
724
|
+
Heap::external_symbol_map());
|
717
725
|
}
|
718
726
|
|
719
727
|
// Fill the remainder of the string with dead wood.
|
@@ -728,11 +736,11 @@ bool String::MakeExternal(v8::String::ExternalAsciiStringResource* resource) {
|
|
728
736
|
if (FLAG_enable_slow_asserts) {
|
729
737
|
// Assert that the resource and the string are equivalent.
|
730
738
|
ASSERT(static_cast<size_t>(this->length()) == resource->length());
|
731
|
-
|
732
|
-
String::WriteToFlat(this,
|
733
|
-
ASSERT(memcmp(
|
739
|
+
ScopedVector<char> smart_chars(this->length());
|
740
|
+
String::WriteToFlat(this, smart_chars.start(), 0, this->length());
|
741
|
+
ASSERT(memcmp(smart_chars.start(),
|
734
742
|
resource->data(),
|
735
|
-
resource->length()*sizeof(
|
743
|
+
resource->length() * sizeof(smart_chars[0])) == 0);
|
736
744
|
}
|
737
745
|
#endif // DEBUG
|
738
746
|
|
@@ -1268,7 +1276,7 @@ Object* JSObject::AddFastProperty(String* name,
|
|
1268
1276
|
}
|
1269
1277
|
|
1270
1278
|
if (map()->unused_property_fields() == 0) {
|
1271
|
-
if (properties()->length() >
|
1279
|
+
if (properties()->length() > MaxFastProperties()) {
|
1272
1280
|
Object* obj = NormalizeProperties(CLEAR_INOBJECT_PROPERTIES, 0);
|
1273
1281
|
if (obj->IsFailure()) return obj;
|
1274
1282
|
return AddSlowProperty(name, value, attributes);
|
@@ -1378,6 +1386,11 @@ Object* JSObject::AddProperty(String* name,
|
|
1378
1386
|
Object* value,
|
1379
1387
|
PropertyAttributes attributes) {
|
1380
1388
|
ASSERT(!IsJSGlobalProxy());
|
1389
|
+
if (!map()->is_extensible()) {
|
1390
|
+
Handle<Object> args[1] = {Handle<String>(name)};
|
1391
|
+
return Top::Throw(*Factory::NewTypeError("object_not_extensible",
|
1392
|
+
HandleVector(args, 1)));
|
1393
|
+
}
|
1381
1394
|
if (HasFastProperties()) {
|
1382
1395
|
// Ensure the descriptor array does not get too big.
|
1383
1396
|
if (map()->instance_descriptors()->number_of_descriptors() <
|
@@ -1466,7 +1479,7 @@ Object* JSObject::ConvertDescriptorToField(String* name,
|
|
1466
1479
|
Object* new_value,
|
1467
1480
|
PropertyAttributes attributes) {
|
1468
1481
|
if (map()->unused_property_fields() == 0 &&
|
1469
|
-
properties()->length() >
|
1482
|
+
properties()->length() > MaxFastProperties()) {
|
1470
1483
|
Object* obj = NormalizeProperties(CLEAR_INOBJECT_PROPERTIES, 0);
|
1471
1484
|
if (obj->IsFailure()) return obj;
|
1472
1485
|
return ReplaceSlowProperty(name, new_value, attributes);
|
@@ -1613,7 +1626,7 @@ Object* JSObject::SetPropertyWithCallback(Object* structure,
|
|
1613
1626
|
}
|
1614
1627
|
|
1615
1628
|
UNREACHABLE();
|
1616
|
-
return
|
1629
|
+
return NULL;
|
1617
1630
|
}
|
1618
1631
|
|
1619
1632
|
|
@@ -1657,7 +1670,8 @@ void JSObject::LookupCallbackSetterInPrototypes(String* name,
|
|
1657
1670
|
}
|
1658
1671
|
|
1659
1672
|
|
1660
|
-
|
1673
|
+
bool JSObject::SetElementWithCallbackSetterInPrototypes(uint32_t index,
|
1674
|
+
Object* value) {
|
1661
1675
|
for (Object* pt = GetPrototype();
|
1662
1676
|
pt != Heap::null_value();
|
1663
1677
|
pt = pt->GetPrototype()) {
|
@@ -1670,12 +1684,12 @@ Object* JSObject::LookupCallbackSetterInPrototypes(uint32_t index) {
|
|
1670
1684
|
Object* element = dictionary->ValueAt(entry);
|
1671
1685
|
PropertyDetails details = dictionary->DetailsAt(entry);
|
1672
1686
|
if (details.type() == CALLBACKS) {
|
1673
|
-
|
1674
|
-
return
|
1687
|
+
SetElementWithCallback(element, index, value, JSObject::cast(pt));
|
1688
|
+
return true;
|
1675
1689
|
}
|
1676
1690
|
}
|
1677
1691
|
}
|
1678
|
-
return
|
1692
|
+
return false;
|
1679
1693
|
}
|
1680
1694
|
|
1681
1695
|
|
@@ -1737,8 +1751,6 @@ void JSObject::LocalLookupRealNamedProperty(String* name,
|
|
1737
1751
|
result->DictionaryResult(this, entry);
|
1738
1752
|
return;
|
1739
1753
|
}
|
1740
|
-
// Slow case object skipped during lookup. Do not use inline caching.
|
1741
|
-
if (!IsGlobalObject()) result->DisallowCaching();
|
1742
1754
|
}
|
1743
1755
|
result->NotFound();
|
1744
1756
|
}
|
@@ -2015,16 +2027,15 @@ PropertyAttributes JSObject::GetPropertyAttributeWithInterceptor(
|
|
2015
2027
|
v8::NamedPropertyQuery query =
|
2016
2028
|
v8::ToCData<v8::NamedPropertyQuery>(interceptor->query());
|
2017
2029
|
LOG(ApiNamedPropertyAccess("interceptor-named-has", *holder_handle, name));
|
2018
|
-
v8::Handle<v8::
|
2030
|
+
v8::Handle<v8::Integer> result;
|
2019
2031
|
{
|
2020
2032
|
// Leaving JavaScript.
|
2021
2033
|
VMState state(EXTERNAL);
|
2022
2034
|
result = query(v8::Utils::ToLocal(name_handle), info);
|
2023
2035
|
}
|
2024
2036
|
if (!result.IsEmpty()) {
|
2025
|
-
|
2026
|
-
|
2027
|
-
return result->IsTrue() ? NONE : ABSENT;
|
2037
|
+
ASSERT(result->IsInt32());
|
2038
|
+
return static_cast<PropertyAttributes>(result->Int32Value());
|
2028
2039
|
}
|
2029
2040
|
} else if (!interceptor->getter()->IsUndefined()) {
|
2030
2041
|
v8::NamedPropertyGetter getter =
|
@@ -2036,7 +2047,7 @@ PropertyAttributes JSObject::GetPropertyAttributeWithInterceptor(
|
|
2036
2047
|
VMState state(EXTERNAL);
|
2037
2048
|
result = getter(v8::Utils::ToLocal(name_handle), info);
|
2038
2049
|
}
|
2039
|
-
if (!result.IsEmpty()) return
|
2050
|
+
if (!result.IsEmpty()) return DONT_ENUM;
|
2040
2051
|
}
|
2041
2052
|
return holder_handle->GetPropertyAttributePostInterceptor(*receiver_handle,
|
2042
2053
|
*name_handle,
|
@@ -2179,6 +2190,8 @@ Object* JSObject::NormalizeProperties(PropertyNormalizationMode mode,
|
|
2179
2190
|
int new_instance_size = map()->instance_size() - instance_size_delta;
|
2180
2191
|
new_map->set_inobject_properties(0);
|
2181
2192
|
new_map->set_instance_size(new_instance_size);
|
2193
|
+
new_map->set_scavenger(Heap::GetScavenger(new_map->instance_type(),
|
2194
|
+
new_map->instance_size()));
|
2182
2195
|
Heap::CreateFillerObjectAt(this->address() + new_instance_size,
|
2183
2196
|
instance_size_delta);
|
2184
2197
|
}
|
@@ -2214,6 +2227,11 @@ Object* JSObject::TransformToFastProperties(int unused_property_fields) {
|
|
2214
2227
|
Object* JSObject::NormalizeElements() {
|
2215
2228
|
ASSERT(!HasPixelElements() && !HasExternalArrayElements());
|
2216
2229
|
if (HasDictionaryElements()) return this;
|
2230
|
+
ASSERT(map()->has_fast_elements());
|
2231
|
+
|
2232
|
+
Object* obj = map()->GetSlowElementsMap();
|
2233
|
+
if (obj->IsFailure()) return obj;
|
2234
|
+
Map* new_map = Map::cast(obj);
|
2217
2235
|
|
2218
2236
|
// Get number of entries.
|
2219
2237
|
FixedArray* array = FixedArray::cast(elements());
|
@@ -2222,7 +2240,7 @@ Object* JSObject::NormalizeElements() {
|
|
2222
2240
|
int length = IsJSArray() ?
|
2223
2241
|
Smi::cast(JSArray::cast(this)->length())->value() :
|
2224
2242
|
array->length();
|
2225
|
-
|
2243
|
+
obj = NumberDictionary::Allocate(length);
|
2226
2244
|
if (obj->IsFailure()) return obj;
|
2227
2245
|
NumberDictionary* dictionary = NumberDictionary::cast(obj);
|
2228
2246
|
// Copy entries.
|
@@ -2235,7 +2253,10 @@ Object* JSObject::NormalizeElements() {
|
|
2235
2253
|
dictionary = NumberDictionary::cast(result);
|
2236
2254
|
}
|
2237
2255
|
}
|
2238
|
-
// Switch to using the dictionary as the backing storage for
|
2256
|
+
// Switch to using the dictionary as the backing storage for
|
2257
|
+
// elements. Set the new map first to satify the elements type
|
2258
|
+
// assert in set_elements().
|
2259
|
+
set_map(new_map);
|
2239
2260
|
set_elements(dictionary);
|
2240
2261
|
|
2241
2262
|
Counters::elements_to_dictionary.Increment();
|
@@ -2560,6 +2581,25 @@ bool JSObject::ReferencesObject(Object* obj) {
|
|
2560
2581
|
}
|
2561
2582
|
|
2562
2583
|
|
2584
|
+
Object* JSObject::PreventExtensions() {
|
2585
|
+
// If there are fast elements we normalize.
|
2586
|
+
if (HasFastElements()) {
|
2587
|
+
NormalizeElements();
|
2588
|
+
}
|
2589
|
+
// Make sure that we never go back to fast case.
|
2590
|
+
element_dictionary()->set_requires_slow_elements();
|
2591
|
+
|
2592
|
+
// Do a map transition, other objects with this map may still
|
2593
|
+
// be extensible.
|
2594
|
+
Object* new_map = map()->CopyDropTransitions();
|
2595
|
+
if (new_map->IsFailure()) return new_map;
|
2596
|
+
Map::cast(new_map)->set_is_extensible(false);
|
2597
|
+
set_map(Map::cast(new_map));
|
2598
|
+
ASSERT(!map()->is_extensible());
|
2599
|
+
return new_map;
|
2600
|
+
}
|
2601
|
+
|
2602
|
+
|
2563
2603
|
// Tests for the fast common case for property enumeration:
|
2564
2604
|
// - This object and all prototypes has an enum cache (which means that it has
|
2565
2605
|
// no interceptors and needs no access checks).
|
@@ -2692,33 +2732,14 @@ Object* JSObject::DefineGetterSetter(String* name,
|
|
2692
2732
|
// interceptor calls.
|
2693
2733
|
AssertNoContextChange ncc;
|
2694
2734
|
|
2695
|
-
// Check access rights if needed.
|
2696
|
-
if (IsAccessCheckNeeded() &&
|
2697
|
-
!Top::MayNamedAccess(this, name, v8::ACCESS_SET)) {
|
2698
|
-
Top::ReportFailedAccessCheck(this, v8::ACCESS_SET);
|
2699
|
-
return Heap::undefined_value();
|
2700
|
-
}
|
2701
|
-
|
2702
2735
|
// Try to flatten before operating on the string.
|
2703
2736
|
name->TryFlatten();
|
2704
2737
|
|
2705
|
-
|
2706
|
-
|
2707
|
-
// This mechanism is needed for instance in a browser setting, where
|
2708
|
-
// certain accessors such as window.location should not be allowed
|
2709
|
-
// to be overwritten because allowing overwriting could potentially
|
2710
|
-
// cause security problems.
|
2711
|
-
LookupResult callback_result;
|
2712
|
-
LookupCallback(name, &callback_result);
|
2713
|
-
if (callback_result.IsFound()) {
|
2714
|
-
Object* obj = callback_result.GetCallbackObject();
|
2715
|
-
if (obj->IsAccessorInfo() &&
|
2716
|
-
AccessorInfo::cast(obj)->prohibits_overwriting()) {
|
2717
|
-
return Heap::undefined_value();
|
2718
|
-
}
|
2738
|
+
if (!CanSetCallback(name)) {
|
2739
|
+
return Heap::undefined_value();
|
2719
2740
|
}
|
2720
2741
|
|
2721
|
-
uint32_t index;
|
2742
|
+
uint32_t index = 0;
|
2722
2743
|
bool is_element = name->AsArrayIndex(&index);
|
2723
2744
|
if (is_element && IsJSArray()) return Heap::undefined_value();
|
2724
2745
|
|
@@ -2746,9 +2767,10 @@ Object* JSObject::DefineGetterSetter(String* name,
|
|
2746
2767
|
PropertyDetails details = dictionary->DetailsAt(entry);
|
2747
2768
|
if (details.IsReadOnly()) return Heap::undefined_value();
|
2748
2769
|
if (details.type() == CALLBACKS) {
|
2749
|
-
|
2750
|
-
|
2751
|
-
|
2770
|
+
if (result->IsFixedArray()) {
|
2771
|
+
return result;
|
2772
|
+
}
|
2773
|
+
// Otherwise allow to override it.
|
2752
2774
|
}
|
2753
2775
|
}
|
2754
2776
|
break;
|
@@ -2765,15 +2787,10 @@ Object* JSObject::DefineGetterSetter(String* name,
|
|
2765
2787
|
if (result.IsReadOnly()) return Heap::undefined_value();
|
2766
2788
|
if (result.type() == CALLBACKS) {
|
2767
2789
|
Object* obj = result.GetCallbackObject();
|
2790
|
+
// Need to preserve old getters/setters.
|
2768
2791
|
if (obj->IsFixedArray()) {
|
2769
|
-
//
|
2770
|
-
|
2771
|
-
Object* ok = NormalizeProperties(CLEAR_INOBJECT_PROPERTIES, 0);
|
2772
|
-
if (ok->IsFailure()) return ok;
|
2773
|
-
|
2774
|
-
PropertyDetails details = PropertyDetails(attributes, CALLBACKS);
|
2775
|
-
SetNormalizedProperty(name, obj, details);
|
2776
|
-
return obj;
|
2792
|
+
// Use set to update attributes.
|
2793
|
+
return SetPropertyCallback(name, obj, attributes);
|
2777
2794
|
}
|
2778
2795
|
}
|
2779
2796
|
}
|
@@ -2782,50 +2799,100 @@ Object* JSObject::DefineGetterSetter(String* name,
|
|
2782
2799
|
// Allocate the fixed array to hold getter and setter.
|
2783
2800
|
Object* structure = Heap::AllocateFixedArray(2, TENURED);
|
2784
2801
|
if (structure->IsFailure()) return structure;
|
2785
|
-
PropertyDetails details = PropertyDetails(attributes, CALLBACKS);
|
2786
2802
|
|
2787
2803
|
if (is_element) {
|
2788
|
-
|
2789
|
-
|
2790
|
-
|
2804
|
+
return SetElementCallback(index, structure, attributes);
|
2805
|
+
} else {
|
2806
|
+
return SetPropertyCallback(name, structure, attributes);
|
2807
|
+
}
|
2808
|
+
}
|
2791
2809
|
|
2792
|
-
// Update the dictionary with the new CALLBACKS property.
|
2793
|
-
Object* dict =
|
2794
|
-
element_dictionary()->Set(index, structure, details);
|
2795
|
-
if (dict->IsFailure()) return dict;
|
2796
2810
|
|
2797
|
-
|
2798
|
-
|
2799
|
-
|
2800
|
-
// Set the potential new dictionary on the object.
|
2801
|
-
set_elements(NumberDictionary::cast(dict));
|
2802
|
-
} else {
|
2803
|
-
// Normalize object to make this operation simple.
|
2804
|
-
Object* ok = NormalizeProperties(CLEAR_INOBJECT_PROPERTIES, 0);
|
2805
|
-
if (ok->IsFailure()) return ok;
|
2811
|
+
bool JSObject::CanSetCallback(String* name) {
|
2812
|
+
ASSERT(!IsAccessCheckNeeded()
|
2813
|
+
|| Top::MayNamedAccess(this, name, v8::ACCESS_SET));
|
2806
2814
|
|
2807
|
-
|
2808
|
-
|
2809
|
-
|
2810
|
-
|
2811
|
-
|
2812
|
-
|
2815
|
+
// Check if there is an API defined callback object which prohibits
|
2816
|
+
// callback overwriting in this object or it's prototype chain.
|
2817
|
+
// This mechanism is needed for instance in a browser setting, where
|
2818
|
+
// certain accessors such as window.location should not be allowed
|
2819
|
+
// to be overwritten because allowing overwriting could potentially
|
2820
|
+
// cause security problems.
|
2821
|
+
LookupResult callback_result;
|
2822
|
+
LookupCallback(name, &callback_result);
|
2823
|
+
if (callback_result.IsProperty()) {
|
2824
|
+
Object* obj = callback_result.GetCallbackObject();
|
2825
|
+
if (obj->IsAccessorInfo() &&
|
2826
|
+
AccessorInfo::cast(obj)->prohibits_overwriting()) {
|
2827
|
+
return false;
|
2813
2828
|
}
|
2814
|
-
|
2815
|
-
// Update the dictionary with the new CALLBACKS property.
|
2816
|
-
return SetNormalizedProperty(name, structure, details);
|
2817
2829
|
}
|
2818
2830
|
|
2831
|
+
return true;
|
2832
|
+
}
|
2833
|
+
|
2834
|
+
|
2835
|
+
Object* JSObject::SetElementCallback(uint32_t index,
|
2836
|
+
Object* structure,
|
2837
|
+
PropertyAttributes attributes) {
|
2838
|
+
PropertyDetails details = PropertyDetails(attributes, CALLBACKS);
|
2839
|
+
|
2840
|
+
// Normalize elements to make this operation simple.
|
2841
|
+
Object* ok = NormalizeElements();
|
2842
|
+
if (ok->IsFailure()) return ok;
|
2843
|
+
|
2844
|
+
// Update the dictionary with the new CALLBACKS property.
|
2845
|
+
Object* dict =
|
2846
|
+
element_dictionary()->Set(index, structure, details);
|
2847
|
+
if (dict->IsFailure()) return dict;
|
2848
|
+
|
2849
|
+
NumberDictionary* elements = NumberDictionary::cast(dict);
|
2850
|
+
elements->set_requires_slow_elements();
|
2851
|
+
// Set the potential new dictionary on the object.
|
2852
|
+
set_elements(elements);
|
2853
|
+
|
2819
2854
|
return structure;
|
2820
2855
|
}
|
2821
2856
|
|
2822
2857
|
|
2858
|
+
Object* JSObject::SetPropertyCallback(String* name,
|
2859
|
+
Object* structure,
|
2860
|
+
PropertyAttributes attributes) {
|
2861
|
+
PropertyDetails details = PropertyDetails(attributes, CALLBACKS);
|
2862
|
+
|
2863
|
+
bool convert_back_to_fast = HasFastProperties() &&
|
2864
|
+
(map()->instance_descriptors()->number_of_descriptors()
|
2865
|
+
< DescriptorArray::kMaxNumberOfDescriptors);
|
2866
|
+
|
2867
|
+
// Normalize object to make this operation simple.
|
2868
|
+
Object* ok = NormalizeProperties(CLEAR_INOBJECT_PROPERTIES, 0);
|
2869
|
+
if (ok->IsFailure()) return ok;
|
2870
|
+
|
2871
|
+
// For the global object allocate a new map to invalidate the global inline
|
2872
|
+
// caches which have a global property cell reference directly in the code.
|
2873
|
+
if (IsGlobalObject()) {
|
2874
|
+
Object* new_map = map()->CopyDropDescriptors();
|
2875
|
+
if (new_map->IsFailure()) return new_map;
|
2876
|
+
set_map(Map::cast(new_map));
|
2877
|
+
}
|
2878
|
+
|
2879
|
+
// Update the dictionary with the new CALLBACKS property.
|
2880
|
+
Object* result = SetNormalizedProperty(name, structure, details);
|
2881
|
+
if (result->IsFailure()) return result;
|
2882
|
+
|
2883
|
+
if (convert_back_to_fast) {
|
2884
|
+
ok = TransformToFastProperties(0);
|
2885
|
+
if (ok->IsFailure()) return ok;
|
2886
|
+
}
|
2887
|
+
return result;
|
2888
|
+
}
|
2889
|
+
|
2823
2890
|
Object* JSObject::DefineAccessor(String* name, bool is_getter, JSFunction* fun,
|
2824
2891
|
PropertyAttributes attributes) {
|
2825
2892
|
// Check access rights if needed.
|
2826
2893
|
if (IsAccessCheckNeeded() &&
|
2827
|
-
!Top::MayNamedAccess(this, name, v8::
|
2828
|
-
Top::ReportFailedAccessCheck(this, v8::
|
2894
|
+
!Top::MayNamedAccess(this, name, v8::ACCESS_SET)) {
|
2895
|
+
Top::ReportFailedAccessCheck(this, v8::ACCESS_SET);
|
2829
2896
|
return Heap::undefined_value();
|
2830
2897
|
}
|
2831
2898
|
|
@@ -2844,6 +2911,80 @@ Object* JSObject::DefineAccessor(String* name, bool is_getter, JSFunction* fun,
|
|
2844
2911
|
}
|
2845
2912
|
|
2846
2913
|
|
2914
|
+
Object* JSObject::DefineAccessor(AccessorInfo* info) {
|
2915
|
+
String* name = String::cast(info->name());
|
2916
|
+
// Check access rights if needed.
|
2917
|
+
if (IsAccessCheckNeeded() &&
|
2918
|
+
!Top::MayNamedAccess(this, name, v8::ACCESS_SET)) {
|
2919
|
+
Top::ReportFailedAccessCheck(this, v8::ACCESS_SET);
|
2920
|
+
return Heap::undefined_value();
|
2921
|
+
}
|
2922
|
+
|
2923
|
+
if (IsJSGlobalProxy()) {
|
2924
|
+
Object* proto = GetPrototype();
|
2925
|
+
if (proto->IsNull()) return this;
|
2926
|
+
ASSERT(proto->IsJSGlobalObject());
|
2927
|
+
return JSObject::cast(proto)->DefineAccessor(info);
|
2928
|
+
}
|
2929
|
+
|
2930
|
+
// Make sure that the top context does not change when doing callbacks or
|
2931
|
+
// interceptor calls.
|
2932
|
+
AssertNoContextChange ncc;
|
2933
|
+
|
2934
|
+
// Try to flatten before operating on the string.
|
2935
|
+
name->TryFlatten();
|
2936
|
+
|
2937
|
+
if (!CanSetCallback(name)) {
|
2938
|
+
return Heap::undefined_value();
|
2939
|
+
}
|
2940
|
+
|
2941
|
+
uint32_t index = 0;
|
2942
|
+
bool is_element = name->AsArrayIndex(&index);
|
2943
|
+
|
2944
|
+
if (is_element) {
|
2945
|
+
if (IsJSArray()) return Heap::undefined_value();
|
2946
|
+
|
2947
|
+
// Accessors overwrite previous callbacks (cf. with getters/setters).
|
2948
|
+
switch (GetElementsKind()) {
|
2949
|
+
case FAST_ELEMENTS:
|
2950
|
+
break;
|
2951
|
+
case PIXEL_ELEMENTS:
|
2952
|
+
case EXTERNAL_BYTE_ELEMENTS:
|
2953
|
+
case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
|
2954
|
+
case EXTERNAL_SHORT_ELEMENTS:
|
2955
|
+
case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
|
2956
|
+
case EXTERNAL_INT_ELEMENTS:
|
2957
|
+
case EXTERNAL_UNSIGNED_INT_ELEMENTS:
|
2958
|
+
case EXTERNAL_FLOAT_ELEMENTS:
|
2959
|
+
// Ignore getters and setters on pixel and external array
|
2960
|
+
// elements.
|
2961
|
+
return Heap::undefined_value();
|
2962
|
+
case DICTIONARY_ELEMENTS:
|
2963
|
+
break;
|
2964
|
+
default:
|
2965
|
+
UNREACHABLE();
|
2966
|
+
break;
|
2967
|
+
}
|
2968
|
+
|
2969
|
+
Object* ok = SetElementCallback(index, info, info->property_attributes());
|
2970
|
+
if (ok->IsFailure()) return ok;
|
2971
|
+
} else {
|
2972
|
+
// Lookup the name.
|
2973
|
+
LookupResult result;
|
2974
|
+
LocalLookup(name, &result);
|
2975
|
+
// ES5 forbids turning a property into an accessor if it's not
|
2976
|
+
// configurable (that is IsDontDelete in ES3 and v8), see 8.6.1 (Table 5).
|
2977
|
+
if (result.IsProperty() && (result.IsReadOnly() || result.IsDontDelete())) {
|
2978
|
+
return Heap::undefined_value();
|
2979
|
+
}
|
2980
|
+
Object* ok = SetPropertyCallback(name, info, info->property_attributes());
|
2981
|
+
if (ok->IsFailure()) return ok;
|
2982
|
+
}
|
2983
|
+
|
2984
|
+
return this;
|
2985
|
+
}
|
2986
|
+
|
2987
|
+
|
2847
2988
|
Object* JSObject::LookupAccessor(String* name, bool is_getter) {
|
2848
2989
|
// Make sure that the top context does not change when doing callbacks or
|
2849
2990
|
// interceptor calls.
|
@@ -2858,7 +2999,7 @@ Object* JSObject::LookupAccessor(String* name, bool is_getter) {
|
|
2858
2999
|
|
2859
3000
|
// Make the lookup and include prototypes.
|
2860
3001
|
int accessor_index = is_getter ? kGetterIndex : kSetterIndex;
|
2861
|
-
uint32_t index;
|
3002
|
+
uint32_t index = 0;
|
2862
3003
|
if (name->AsArrayIndex(&index)) {
|
2863
3004
|
for (Object* obj = this;
|
2864
3005
|
obj != Heap::null_value();
|
@@ -2871,8 +3012,9 @@ Object* JSObject::LookupAccessor(String* name, bool is_getter) {
|
|
2871
3012
|
Object* element = dictionary->ValueAt(entry);
|
2872
3013
|
PropertyDetails details = dictionary->DetailsAt(entry);
|
2873
3014
|
if (details.type() == CALLBACKS) {
|
2874
|
-
|
2875
|
-
|
3015
|
+
if (element->IsFixedArray()) {
|
3016
|
+
return FixedArray::cast(element)->get(accessor_index);
|
3017
|
+
}
|
2876
3018
|
}
|
2877
3019
|
}
|
2878
3020
|
}
|
@@ -2960,7 +3102,7 @@ Object* Map::CopyDropTransitions() {
|
|
2960
3102
|
Object* descriptors = instance_descriptors()->RemoveTransitions();
|
2961
3103
|
if (descriptors->IsFailure()) return descriptors;
|
2962
3104
|
cast(new_map)->set_instance_descriptors(DescriptorArray::cast(descriptors));
|
2963
|
-
return
|
3105
|
+
return new_map;
|
2964
3106
|
}
|
2965
3107
|
|
2966
3108
|
|
@@ -4580,51 +4722,58 @@ bool String::SlowEquals(String* other) {
|
|
4580
4722
|
if (Hash() != other->Hash()) return false;
|
4581
4723
|
}
|
4582
4724
|
|
4583
|
-
|
4584
|
-
|
4585
|
-
|
4586
|
-
|
4725
|
+
// We know the strings are both non-empty. Compare the first chars
|
4726
|
+
// before we try to flatten the strings.
|
4727
|
+
if (this->Get(0) != other->Get(0)) return false;
|
4728
|
+
|
4729
|
+
String* lhs = this->TryFlattenGetString();
|
4730
|
+
String* rhs = other->TryFlattenGetString();
|
4731
|
+
|
4732
|
+
if (StringShape(lhs).IsSequentialAscii() &&
|
4733
|
+
StringShape(rhs).IsSequentialAscii()) {
|
4734
|
+
const char* str1 = SeqAsciiString::cast(lhs)->GetChars();
|
4735
|
+
const char* str2 = SeqAsciiString::cast(rhs)->GetChars();
|
4587
4736
|
return CompareRawStringContents(Vector<const char>(str1, len),
|
4588
4737
|
Vector<const char>(str2, len));
|
4589
4738
|
}
|
4590
4739
|
|
4591
|
-
if (
|
4740
|
+
if (lhs->IsFlat()) {
|
4592
4741
|
if (IsAsciiRepresentation()) {
|
4593
|
-
Vector<const char> vec1 =
|
4594
|
-
if (
|
4595
|
-
if (
|
4596
|
-
Vector<const char> vec2 =
|
4742
|
+
Vector<const char> vec1 = lhs->ToAsciiVector();
|
4743
|
+
if (rhs->IsFlat()) {
|
4744
|
+
if (rhs->IsAsciiRepresentation()) {
|
4745
|
+
Vector<const char> vec2 = rhs->ToAsciiVector();
|
4597
4746
|
return CompareRawStringContents(vec1, vec2);
|
4598
4747
|
} else {
|
4599
4748
|
VectorIterator<char> buf1(vec1);
|
4600
|
-
VectorIterator<uc16> ib(
|
4749
|
+
VectorIterator<uc16> ib(rhs->ToUC16Vector());
|
4601
4750
|
return CompareStringContents(&buf1, &ib);
|
4602
4751
|
}
|
4603
4752
|
} else {
|
4604
4753
|
VectorIterator<char> buf1(vec1);
|
4605
|
-
string_compare_buffer_b.Reset(0,
|
4754
|
+
string_compare_buffer_b.Reset(0, rhs);
|
4606
4755
|
return CompareStringContents(&buf1, &string_compare_buffer_b);
|
4607
4756
|
}
|
4608
4757
|
} else {
|
4609
|
-
Vector<const uc16> vec1 =
|
4610
|
-
if (
|
4611
|
-
if (
|
4758
|
+
Vector<const uc16> vec1 = lhs->ToUC16Vector();
|
4759
|
+
if (rhs->IsFlat()) {
|
4760
|
+
if (rhs->IsAsciiRepresentation()) {
|
4612
4761
|
VectorIterator<uc16> buf1(vec1);
|
4613
|
-
VectorIterator<char> ib(
|
4762
|
+
VectorIterator<char> ib(rhs->ToAsciiVector());
|
4614
4763
|
return CompareStringContents(&buf1, &ib);
|
4615
4764
|
} else {
|
4616
|
-
Vector<const uc16> vec2(
|
4765
|
+
Vector<const uc16> vec2(rhs->ToUC16Vector());
|
4617
4766
|
return CompareRawStringContents(vec1, vec2);
|
4618
4767
|
}
|
4619
4768
|
} else {
|
4620
4769
|
VectorIterator<uc16> buf1(vec1);
|
4621
|
-
string_compare_buffer_b.Reset(0,
|
4770
|
+
string_compare_buffer_b.Reset(0, rhs);
|
4622
4771
|
return CompareStringContents(&buf1, &string_compare_buffer_b);
|
4623
4772
|
}
|
4624
4773
|
}
|
4625
4774
|
} else {
|
4626
|
-
string_compare_buffer_a.Reset(0,
|
4627
|
-
return CompareStringContentsPartial(&string_compare_buffer_a,
|
4775
|
+
string_compare_buffer_a.Reset(0, lhs);
|
4776
|
+
return CompareStringContentsPartial(&string_compare_buffer_a, rhs);
|
4628
4777
|
}
|
4629
4778
|
}
|
4630
4779
|
|
@@ -4676,7 +4825,7 @@ static inline uint32_t HashSequentialString(const schar* chars, int length) {
|
|
4676
4825
|
|
4677
4826
|
uint32_t String::ComputeAndSetHash() {
|
4678
4827
|
// Should only be called if hash code has not yet been computed.
|
4679
|
-
ASSERT(!(
|
4828
|
+
ASSERT(!HasHashCode());
|
4680
4829
|
|
4681
4830
|
const int len = length();
|
4682
4831
|
|
@@ -4695,7 +4844,7 @@ uint32_t String::ComputeAndSetHash() {
|
|
4695
4844
|
set_hash_field(field);
|
4696
4845
|
|
4697
4846
|
// Check the hash code is there.
|
4698
|
-
ASSERT(
|
4847
|
+
ASSERT(HasHashCode());
|
4699
4848
|
uint32_t result = field >> kHashShift;
|
4700
4849
|
ASSERT(result != 0); // Ensure that the hash value of 0 is never computed.
|
4701
4850
|
return result;
|
@@ -4736,7 +4885,7 @@ bool String::SlowAsArrayIndex(uint32_t* index) {
|
|
4736
4885
|
if (length() <= kMaxCachedArrayIndexLength) {
|
4737
4886
|
Hash(); // force computation of hash code
|
4738
4887
|
uint32_t field = hash_field();
|
4739
|
-
if ((field &
|
4888
|
+
if ((field & kIsNotArrayIndexMask) != 0) return false;
|
4740
4889
|
// Isolate the array index form the full hash field.
|
4741
4890
|
*index = (kArrayIndexHashMask & field) >> kHashShift;
|
4742
4891
|
return true;
|
@@ -4750,16 +4899,19 @@ bool String::SlowAsArrayIndex(uint32_t* index) {
|
|
4750
4899
|
static inline uint32_t HashField(uint32_t hash,
|
4751
4900
|
bool is_array_index,
|
4752
4901
|
int length = -1) {
|
4753
|
-
uint32_t result =
|
4754
|
-
(hash << String::kHashShift) | String::kHashComputedMask;
|
4902
|
+
uint32_t result = (hash << String::kHashShift);
|
4755
4903
|
if (is_array_index) {
|
4756
4904
|
// For array indexes mix the length into the hash as an array index could
|
4757
4905
|
// be zero.
|
4758
4906
|
ASSERT(length > 0);
|
4907
|
+
ASSERT(length <= String::kMaxArrayIndexSize);
|
4759
4908
|
ASSERT(TenToThe(String::kMaxCachedArrayIndexLength) <
|
4760
4909
|
(1 << String::kArrayIndexValueBits));
|
4761
|
-
|
4910
|
+
ASSERT(String::kMaxArrayIndexSize < (1 << String::kArrayIndexValueBits));
|
4911
|
+
result &= ~String::kIsNotArrayIndexMask;
|
4762
4912
|
result |= length << String::kArrayIndexHashLengthShift;
|
4913
|
+
} else {
|
4914
|
+
result |= String::kIsNotArrayIndexMask;
|
4763
4915
|
}
|
4764
4916
|
return result;
|
4765
4917
|
}
|
@@ -4885,7 +5037,7 @@ void Map::ClearNonLiveTransitions(Object* real_prototype) {
|
|
4885
5037
|
|
4886
5038
|
void Map::MapIterateBody(ObjectVisitor* v) {
|
4887
5039
|
// Assumes all Object* members are contiguously allocated!
|
4888
|
-
IteratePointers(v,
|
5040
|
+
IteratePointers(v, kPointerFieldsBeginOffset, kPointerFieldsEndOffset);
|
4889
5041
|
}
|
4890
5042
|
|
4891
5043
|
|
@@ -4900,6 +5052,7 @@ Object* JSFunction::SetInstancePrototype(Object* value) {
|
|
4900
5052
|
// prototype is put into the initial map where it belongs.
|
4901
5053
|
set_prototype_or_initial_map(value);
|
4902
5054
|
}
|
5055
|
+
Heap::ClearInstanceofCache();
|
4903
5056
|
return value;
|
4904
5057
|
}
|
4905
5058
|
|
@@ -5146,8 +5299,10 @@ void ObjectVisitor::VisitCodeTarget(RelocInfo* rinfo) {
|
|
5146
5299
|
|
5147
5300
|
|
5148
5301
|
void ObjectVisitor::VisitDebugTarget(RelocInfo* rinfo) {
|
5149
|
-
ASSERT(RelocInfo::IsJSReturn(rinfo->rmode()) &&
|
5150
|
-
|
5302
|
+
ASSERT((RelocInfo::IsJSReturn(rinfo->rmode()) &&
|
5303
|
+
rinfo->IsPatchedReturnSequence()) ||
|
5304
|
+
(RelocInfo::IsDebugBreakSlot(rinfo->rmode()) &&
|
5305
|
+
rinfo->IsPatchedDebugBreakSlotSequence()));
|
5151
5306
|
Object* target = Code::GetCodeFromTargetAddress(rinfo->call_address());
|
5152
5307
|
Object* old_target = target;
|
5153
5308
|
VisitPointer(&target);
|
@@ -5160,28 +5315,20 @@ void Code::CodeIterateBody(ObjectVisitor* v) {
|
|
5160
5315
|
RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT) |
|
5161
5316
|
RelocInfo::ModeMask(RelocInfo::EXTERNAL_REFERENCE) |
|
5162
5317
|
RelocInfo::ModeMask(RelocInfo::JS_RETURN) |
|
5318
|
+
RelocInfo::ModeMask(RelocInfo::DEBUG_BREAK_SLOT) |
|
5163
5319
|
RelocInfo::ModeMask(RelocInfo::RUNTIME_ENTRY);
|
5164
5320
|
|
5165
|
-
|
5166
|
-
|
5167
|
-
|
5168
|
-
|
5169
|
-
|
5170
|
-
|
5171
|
-
|
5172
|
-
v->VisitExternalReference(it.rinfo()->target_reference_address());
|
5173
|
-
#ifdef ENABLE_DEBUGGER_SUPPORT
|
5174
|
-
} else if (Debug::has_break_points() &&
|
5175
|
-
RelocInfo::IsJSReturn(rmode) &&
|
5176
|
-
it.rinfo()->IsPatchedReturnSequence()) {
|
5177
|
-
v->VisitDebugTarget(it.rinfo());
|
5178
|
-
#endif
|
5179
|
-
} else if (rmode == RelocInfo::RUNTIME_ENTRY) {
|
5180
|
-
v->VisitRuntimeEntry(it.rinfo());
|
5181
|
-
}
|
5182
|
-
}
|
5321
|
+
// Use the relocation info pointer before it is visited by
|
5322
|
+
// the heap compaction in the next statement.
|
5323
|
+
RelocIterator it(this, mode_mask);
|
5324
|
+
|
5325
|
+
IteratePointers(v,
|
5326
|
+
kRelocationInfoOffset,
|
5327
|
+
kRelocationInfoOffset + kPointerSize);
|
5183
5328
|
|
5184
|
-
|
5329
|
+
for (; !it.done(); it.next()) {
|
5330
|
+
it.rinfo()->Visit(v);
|
5331
|
+
}
|
5185
5332
|
}
|
5186
5333
|
|
5187
5334
|
|
@@ -5197,14 +5344,6 @@ void Code::CopyFrom(const CodeDesc& desc) {
|
|
5197
5344
|
// copy code
|
5198
5345
|
memmove(instruction_start(), desc.buffer, desc.instr_size);
|
5199
5346
|
|
5200
|
-
// fill gap with zero bytes
|
5201
|
-
{ byte* p = instruction_start() + desc.instr_size;
|
5202
|
-
byte* q = relocation_start();
|
5203
|
-
while (p < q) {
|
5204
|
-
*p++ = 0;
|
5205
|
-
}
|
5206
|
-
}
|
5207
|
-
|
5208
5347
|
// copy reloc info
|
5209
5348
|
memmove(relocation_start(),
|
5210
5349
|
desc.buffer + desc.buffer_size - desc.reloc_size,
|
@@ -5303,6 +5442,7 @@ const char* Code::Kind2String(Kind kind) {
|
|
5303
5442
|
case STORE_IC: return "STORE_IC";
|
5304
5443
|
case KEYED_STORE_IC: return "KEYED_STORE_IC";
|
5305
5444
|
case CALL_IC: return "CALL_IC";
|
5445
|
+
case KEYED_CALL_IC: return "KEYED_CALL_IC";
|
5306
5446
|
case BINARY_OP_IC: return "BINARY_OP_IC";
|
5307
5447
|
}
|
5308
5448
|
UNREACHABLE();
|
@@ -5365,14 +5505,18 @@ void Code::Disassemble(const char* name) {
|
|
5365
5505
|
#endif // ENABLE_DISASSEMBLER
|
5366
5506
|
|
5367
5507
|
|
5368
|
-
|
5508
|
+
Object* JSObject::SetFastElementsCapacityAndLength(int capacity, int length) {
|
5369
5509
|
// We should never end in here with a pixel or external array.
|
5370
5510
|
ASSERT(!HasPixelElements() && !HasExternalArrayElements());
|
5371
|
-
|
5372
|
-
|
5373
|
-
|
5374
|
-
|
5375
|
-
|
5511
|
+
|
5512
|
+
Object* obj = Heap::AllocateFixedArrayWithHoles(capacity);
|
5513
|
+
if (obj->IsFailure()) return obj;
|
5514
|
+
FixedArray* elems = FixedArray::cast(obj);
|
5515
|
+
|
5516
|
+
obj = map()->GetFastElementsMap();
|
5517
|
+
if (obj->IsFailure()) return obj;
|
5518
|
+
Map* new_map = Map::cast(obj);
|
5519
|
+
|
5376
5520
|
AssertNoAllocation no_gc;
|
5377
5521
|
WriteBarrierMode mode = elems->GetWriteBarrierMode(no_gc);
|
5378
5522
|
switch (GetElementsKind()) {
|
@@ -5400,7 +5544,15 @@ void JSObject::SetFastElements(FixedArray* elems) {
|
|
5400
5544
|
UNREACHABLE();
|
5401
5545
|
break;
|
5402
5546
|
}
|
5547
|
+
|
5548
|
+
set_map(new_map);
|
5403
5549
|
set_elements(elems);
|
5550
|
+
|
5551
|
+
if (IsJSArray()) {
|
5552
|
+
JSArray::cast(this)->set_length(Smi::FromInt(length));
|
5553
|
+
}
|
5554
|
+
|
5555
|
+
return this;
|
5404
5556
|
}
|
5405
5557
|
|
5406
5558
|
|
@@ -5487,7 +5639,7 @@ Object* JSObject::SetElementsLength(Object* len) {
|
|
5487
5639
|
|
5488
5640
|
Object* smi_length = len->ToSmi();
|
5489
5641
|
if (smi_length->IsSmi()) {
|
5490
|
-
int value = Smi::cast(smi_length)->value();
|
5642
|
+
const int value = Smi::cast(smi_length)->value();
|
5491
5643
|
if (value < 0) return ArrayLengthRangeError();
|
5492
5644
|
switch (GetElementsKind()) {
|
5493
5645
|
case FAST_ELEMENTS: {
|
@@ -5509,12 +5661,8 @@ Object* JSObject::SetElementsLength(Object* len) {
|
|
5509
5661
|
int new_capacity = value > min ? value : min;
|
5510
5662
|
if (new_capacity <= kMaxFastElementsLength ||
|
5511
5663
|
!ShouldConvertToSlowElements(new_capacity)) {
|
5512
|
-
Object* obj =
|
5664
|
+
Object* obj = SetFastElementsCapacityAndLength(new_capacity, value);
|
5513
5665
|
if (obj->IsFailure()) return obj;
|
5514
|
-
if (IsJSArray()) {
|
5515
|
-
JSArray::cast(this)->set_length(Smi::cast(smi_length));
|
5516
|
-
}
|
5517
|
-
SetFastElements(FixedArray::cast(obj));
|
5518
5666
|
return this;
|
5519
5667
|
}
|
5520
5668
|
break;
|
@@ -5525,7 +5673,8 @@ Object* JSObject::SetElementsLength(Object* len) {
|
|
5525
5673
|
// If the length of a slow array is reset to zero, we clear
|
5526
5674
|
// the array and flush backing storage. This has the added
|
5527
5675
|
// benefit that the array returns to fast mode.
|
5528
|
-
|
5676
|
+
Object* obj = ResetElements();
|
5677
|
+
if (obj->IsFailure()) return obj;
|
5529
5678
|
} else {
|
5530
5679
|
// Remove deleted elements.
|
5531
5680
|
uint32_t old_length =
|
@@ -5545,7 +5694,7 @@ Object* JSObject::SetElementsLength(Object* len) {
|
|
5545
5694
|
// General slow case.
|
5546
5695
|
if (len->IsNumber()) {
|
5547
5696
|
uint32_t length;
|
5548
|
-
if (
|
5697
|
+
if (len->ToArrayIndex(&length)) {
|
5549
5698
|
return SetSlowElements(len);
|
5550
5699
|
} else {
|
5551
5700
|
return ArrayLengthRangeError();
|
@@ -5601,6 +5750,8 @@ Object* JSObject::SetPrototype(Object* value,
|
|
5601
5750
|
Map::cast(new_map)->set_prototype(value);
|
5602
5751
|
real_receiver->set_map(Map::cast(new_map));
|
5603
5752
|
|
5753
|
+
Heap::ClearInstanceofCache();
|
5754
|
+
|
5604
5755
|
return value;
|
5605
5756
|
}
|
5606
5757
|
|
@@ -5844,6 +5995,108 @@ Object* JSObject::SetElementWithInterceptor(uint32_t index, Object* value) {
|
|
5844
5995
|
}
|
5845
5996
|
|
5846
5997
|
|
5998
|
+
Object* JSObject::GetElementWithCallback(Object* receiver,
|
5999
|
+
Object* structure,
|
6000
|
+
uint32_t index,
|
6001
|
+
Object* holder) {
|
6002
|
+
ASSERT(!structure->IsProxy());
|
6003
|
+
|
6004
|
+
// api style callbacks.
|
6005
|
+
if (structure->IsAccessorInfo()) {
|
6006
|
+
AccessorInfo* data = AccessorInfo::cast(structure);
|
6007
|
+
Object* fun_obj = data->getter();
|
6008
|
+
v8::AccessorGetter call_fun = v8::ToCData<v8::AccessorGetter>(fun_obj);
|
6009
|
+
HandleScope scope;
|
6010
|
+
Handle<JSObject> self(JSObject::cast(receiver));
|
6011
|
+
Handle<JSObject> holder_handle(JSObject::cast(holder));
|
6012
|
+
Handle<Object> number = Factory::NewNumberFromUint(index);
|
6013
|
+
Handle<String> key(Factory::NumberToString(number));
|
6014
|
+
LOG(ApiNamedPropertyAccess("load", *self, *key));
|
6015
|
+
CustomArguments args(data->data(), *self, *holder_handle);
|
6016
|
+
v8::AccessorInfo info(args.end());
|
6017
|
+
v8::Handle<v8::Value> result;
|
6018
|
+
{
|
6019
|
+
// Leaving JavaScript.
|
6020
|
+
VMState state(EXTERNAL);
|
6021
|
+
result = call_fun(v8::Utils::ToLocal(key), info);
|
6022
|
+
}
|
6023
|
+
RETURN_IF_SCHEDULED_EXCEPTION();
|
6024
|
+
if (result.IsEmpty()) return Heap::undefined_value();
|
6025
|
+
return *v8::Utils::OpenHandle(*result);
|
6026
|
+
}
|
6027
|
+
|
6028
|
+
// __defineGetter__ callback
|
6029
|
+
if (structure->IsFixedArray()) {
|
6030
|
+
Object* getter = FixedArray::cast(structure)->get(kGetterIndex);
|
6031
|
+
if (getter->IsJSFunction()) {
|
6032
|
+
return Object::GetPropertyWithDefinedGetter(receiver,
|
6033
|
+
JSFunction::cast(getter));
|
6034
|
+
}
|
6035
|
+
// Getter is not a function.
|
6036
|
+
return Heap::undefined_value();
|
6037
|
+
}
|
6038
|
+
|
6039
|
+
UNREACHABLE();
|
6040
|
+
return NULL;
|
6041
|
+
}
|
6042
|
+
|
6043
|
+
|
6044
|
+
Object* JSObject::SetElementWithCallback(Object* structure,
|
6045
|
+
uint32_t index,
|
6046
|
+
Object* value,
|
6047
|
+
JSObject* holder) {
|
6048
|
+
HandleScope scope;
|
6049
|
+
|
6050
|
+
// We should never get here to initialize a const with the hole
|
6051
|
+
// value since a const declaration would conflict with the setter.
|
6052
|
+
ASSERT(!value->IsTheHole());
|
6053
|
+
Handle<Object> value_handle(value);
|
6054
|
+
|
6055
|
+
// To accommodate both the old and the new api we switch on the
|
6056
|
+
// data structure used to store the callbacks. Eventually proxy
|
6057
|
+
// callbacks should be phased out.
|
6058
|
+
ASSERT(!structure->IsProxy());
|
6059
|
+
|
6060
|
+
if (structure->IsAccessorInfo()) {
|
6061
|
+
// api style callbacks
|
6062
|
+
AccessorInfo* data = AccessorInfo::cast(structure);
|
6063
|
+
Object* call_obj = data->setter();
|
6064
|
+
v8::AccessorSetter call_fun = v8::ToCData<v8::AccessorSetter>(call_obj);
|
6065
|
+
if (call_fun == NULL) return value;
|
6066
|
+
Handle<Object> number = Factory::NewNumberFromUint(index);
|
6067
|
+
Handle<String> key(Factory::NumberToString(number));
|
6068
|
+
LOG(ApiNamedPropertyAccess("store", this, *key));
|
6069
|
+
CustomArguments args(data->data(), this, JSObject::cast(holder));
|
6070
|
+
v8::AccessorInfo info(args.end());
|
6071
|
+
{
|
6072
|
+
// Leaving JavaScript.
|
6073
|
+
VMState state(EXTERNAL);
|
6074
|
+
call_fun(v8::Utils::ToLocal(key),
|
6075
|
+
v8::Utils::ToLocal(value_handle),
|
6076
|
+
info);
|
6077
|
+
}
|
6078
|
+
RETURN_IF_SCHEDULED_EXCEPTION();
|
6079
|
+
return *value_handle;
|
6080
|
+
}
|
6081
|
+
|
6082
|
+
if (structure->IsFixedArray()) {
|
6083
|
+
Object* setter = FixedArray::cast(structure)->get(kSetterIndex);
|
6084
|
+
if (setter->IsJSFunction()) {
|
6085
|
+
return SetPropertyWithDefinedSetter(JSFunction::cast(setter), value);
|
6086
|
+
} else {
|
6087
|
+
Handle<Object> holder_handle(holder);
|
6088
|
+
Handle<Object> key(Factory::NewNumberFromUint(index));
|
6089
|
+
Handle<Object> args[2] = { key, holder_handle };
|
6090
|
+
return Top::Throw(*Factory::NewTypeError("no_setter_in_callback",
|
6091
|
+
HandleVector(args, 2)));
|
6092
|
+
}
|
6093
|
+
}
|
6094
|
+
|
6095
|
+
UNREACHABLE();
|
6096
|
+
return NULL;
|
6097
|
+
}
|
6098
|
+
|
6099
|
+
|
5847
6100
|
// Adding n elements in fast case is O(n*n).
|
5848
6101
|
// Note: revisit design to have dual undefined values to capture absent
|
5849
6102
|
// elements.
|
@@ -5854,9 +6107,8 @@ Object* JSObject::SetFastElement(uint32_t index, Object* value) {
|
|
5854
6107
|
uint32_t elms_length = static_cast<uint32_t>(elms->length());
|
5855
6108
|
|
5856
6109
|
if (!IsJSArray() && (index >= elms_length || elms->get(index)->IsTheHole())) {
|
5857
|
-
|
5858
|
-
|
5859
|
-
return SetPropertyWithDefinedSetter(JSFunction::cast(setter), value);
|
6110
|
+
if (SetElementWithCallbackSetterInPrototypes(index, value)) {
|
6111
|
+
return value;
|
5860
6112
|
}
|
5861
6113
|
}
|
5862
6114
|
|
@@ -5866,8 +6118,7 @@ Object* JSObject::SetFastElement(uint32_t index, Object* value) {
|
|
5866
6118
|
if (IsJSArray()) {
|
5867
6119
|
// Update the length of the array if needed.
|
5868
6120
|
uint32_t array_length = 0;
|
5869
|
-
CHECK(
|
5870
|
-
&array_length));
|
6121
|
+
CHECK(JSArray::cast(this)->length()->ToArrayIndex(&array_length));
|
5871
6122
|
if (index >= array_length) {
|
5872
6123
|
JSArray::cast(this)->set_length(Smi::FromInt(index + 1));
|
5873
6124
|
}
|
@@ -5882,12 +6133,8 @@ Object* JSObject::SetFastElement(uint32_t index, Object* value) {
|
|
5882
6133
|
if (new_capacity <= kMaxFastElementsLength ||
|
5883
6134
|
!ShouldConvertToSlowElements(new_capacity)) {
|
5884
6135
|
ASSERT(static_cast<uint32_t>(new_capacity) > index);
|
5885
|
-
Object* obj =
|
6136
|
+
Object* obj = SetFastElementsCapacityAndLength(new_capacity, index + 1);
|
5886
6137
|
if (obj->IsFailure()) return obj;
|
5887
|
-
SetFastElements(FixedArray::cast(obj));
|
5888
|
-
if (IsJSArray()) {
|
5889
|
-
JSArray::cast(this)->set_length(Smi::FromInt(index + 1));
|
5890
|
-
}
|
5891
6138
|
FixedArray::cast(elements())->set(index, value);
|
5892
6139
|
return value;
|
5893
6140
|
}
|
@@ -5974,18 +6221,7 @@ Object* JSObject::SetElementWithoutInterceptor(uint32_t index, Object* value) {
|
|
5974
6221
|
Object* element = dictionary->ValueAt(entry);
|
5975
6222
|
PropertyDetails details = dictionary->DetailsAt(entry);
|
5976
6223
|
if (details.type() == CALLBACKS) {
|
5977
|
-
|
5978
|
-
FixedArray* structure = FixedArray::cast(element);
|
5979
|
-
if (structure->get(kSetterIndex)->IsJSFunction()) {
|
5980
|
-
JSFunction* setter = JSFunction::cast(structure->get(kSetterIndex));
|
5981
|
-
return SetPropertyWithDefinedSetter(setter, value);
|
5982
|
-
} else {
|
5983
|
-
Handle<Object> self(this);
|
5984
|
-
Handle<Object> key(Factory::NewNumberFromUint(index));
|
5985
|
-
Handle<Object> args[2] = { key, self };
|
5986
|
-
return Top::Throw(*Factory::NewTypeError("no_setter_in_callback",
|
5987
|
-
HandleVector(args, 2)));
|
5988
|
-
}
|
6224
|
+
return SetElementWithCallback(element, index, value, this);
|
5989
6225
|
} else {
|
5990
6226
|
dictionary->UpdateMaxNumberKey(index);
|
5991
6227
|
dictionary->ValueAtPut(entry, value);
|
@@ -5993,12 +6229,19 @@ Object* JSObject::SetElementWithoutInterceptor(uint32_t index, Object* value) {
|
|
5993
6229
|
} else {
|
5994
6230
|
// Index not already used. Look for an accessor in the prototype chain.
|
5995
6231
|
if (!IsJSArray()) {
|
5996
|
-
|
5997
|
-
|
5998
|
-
return SetPropertyWithDefinedSetter(JSFunction::cast(setter),
|
5999
|
-
value);
|
6232
|
+
if (SetElementWithCallbackSetterInPrototypes(index, value)) {
|
6233
|
+
return value;
|
6000
6234
|
}
|
6001
6235
|
}
|
6236
|
+
// When we set the is_extensible flag to false we always force
|
6237
|
+
// the element into dictionary mode (and force them to stay there).
|
6238
|
+
if (!map()->is_extensible()) {
|
6239
|
+
Handle<Object> number(Heap::NumberFromUint32(index));
|
6240
|
+
Handle<String> index_string(Factory::NumberToString(number));
|
6241
|
+
Handle<Object> args[1] = { index_string };
|
6242
|
+
return Top::Throw(*Factory::NewTypeError("object_not_extensible",
|
6243
|
+
HandleVector(args, 1)));
|
6244
|
+
}
|
6002
6245
|
Object* result = dictionary->AtNumberPut(index, value);
|
6003
6246
|
if (result->IsFailure()) return result;
|
6004
6247
|
if (elms != FixedArray::cast(result)) {
|
@@ -6018,15 +6261,12 @@ Object* JSObject::SetElementWithoutInterceptor(uint32_t index, Object* value) {
|
|
6018
6261
|
if (ShouldConvertToFastElements()) {
|
6019
6262
|
uint32_t new_length = 0;
|
6020
6263
|
if (IsJSArray()) {
|
6021
|
-
CHECK(
|
6022
|
-
&new_length));
|
6023
|
-
JSArray::cast(this)->set_length(Smi::FromInt(new_length));
|
6264
|
+
CHECK(JSArray::cast(this)->length()->ToArrayIndex(&new_length));
|
6024
6265
|
} else {
|
6025
6266
|
new_length = NumberDictionary::cast(elements())->max_number_key() + 1;
|
6026
6267
|
}
|
6027
|
-
Object* obj =
|
6268
|
+
Object* obj = SetFastElementsCapacityAndLength(new_length, new_length);
|
6028
6269
|
if (obj->IsFailure()) return obj;
|
6029
|
-
SetFastElements(FixedArray::cast(obj));
|
6030
6270
|
#ifdef DEBUG
|
6031
6271
|
if (FLAG_trace_normalization) {
|
6032
6272
|
PrintF("Object elements are fast case again:\n");
|
@@ -6050,7 +6290,7 @@ Object* JSObject::SetElementWithoutInterceptor(uint32_t index, Object* value) {
|
|
6050
6290
|
|
6051
6291
|
Object* JSArray::JSArrayUpdateLengthFromIndex(uint32_t index, Object* value) {
|
6052
6292
|
uint32_t old_len = 0;
|
6053
|
-
CHECK(
|
6293
|
+
CHECK(length()->ToArrayIndex(&old_len));
|
6054
6294
|
// Check to see if we need to update the length. For now, we make
|
6055
6295
|
// sure that the length stays within 32-bits (unsigned).
|
6056
6296
|
if (index >= old_len && index != 0xffffffff) {
|
@@ -6099,16 +6339,10 @@ Object* JSObject::GetElementPostInterceptor(JSObject* receiver,
|
|
6099
6339
|
Object* element = dictionary->ValueAt(entry);
|
6100
6340
|
PropertyDetails details = dictionary->DetailsAt(entry);
|
6101
6341
|
if (details.type() == CALLBACKS) {
|
6102
|
-
|
6103
|
-
|
6104
|
-
|
6105
|
-
|
6106
|
-
return GetPropertyWithDefinedGetter(receiver,
|
6107
|
-
JSFunction::cast(getter));
|
6108
|
-
} else {
|
6109
|
-
// Getter is not a function.
|
6110
|
-
return Heap::undefined_value();
|
6111
|
-
}
|
6342
|
+
return GetElementWithCallback(receiver,
|
6343
|
+
element,
|
6344
|
+
index,
|
6345
|
+
this);
|
6112
6346
|
}
|
6113
6347
|
return element;
|
6114
6348
|
}
|
@@ -6256,16 +6490,10 @@ Object* JSObject::GetElementWithReceiver(JSObject* receiver, uint32_t index) {
|
|
6256
6490
|
Object* element = dictionary->ValueAt(entry);
|
6257
6491
|
PropertyDetails details = dictionary->DetailsAt(entry);
|
6258
6492
|
if (details.type() == CALLBACKS) {
|
6259
|
-
|
6260
|
-
|
6261
|
-
|
6262
|
-
|
6263
|
-
return GetPropertyWithDefinedGetter(receiver,
|
6264
|
-
JSFunction::cast(getter));
|
6265
|
-
} else {
|
6266
|
-
// Getter is not a function.
|
6267
|
-
return Heap::undefined_value();
|
6268
|
-
}
|
6493
|
+
return GetElementWithCallback(receiver,
|
6494
|
+
element,
|
6495
|
+
index,
|
6496
|
+
this);
|
6269
6497
|
}
|
6270
6498
|
return element;
|
6271
6499
|
}
|
@@ -6344,7 +6572,7 @@ bool JSObject::ShouldConvertToFastElements() {
|
|
6344
6572
|
// fast elements.
|
6345
6573
|
uint32_t length = 0;
|
6346
6574
|
if (IsJSArray()) {
|
6347
|
-
CHECK(
|
6575
|
+
CHECK(JSArray::cast(this)->length()->ToArrayIndex(&length));
|
6348
6576
|
} else {
|
6349
6577
|
length = dictionary->max_number_key();
|
6350
6578
|
}
|
@@ -7035,15 +7263,9 @@ class SymbolKey : public HashTableKey {
|
|
7035
7263
|
}
|
7036
7264
|
|
7037
7265
|
Object* AsObject() {
|
7038
|
-
//
|
7039
|
-
//
|
7040
|
-
|
7041
|
-
ConsString* cons_string = ConsString::cast(string_);
|
7042
|
-
cons_string->TryFlatten();
|
7043
|
-
if (cons_string->second()->length() == 0) {
|
7044
|
-
string_ = cons_string->first();
|
7045
|
-
}
|
7046
|
-
}
|
7266
|
+
// Attempt to flatten the string, so that symbols will most often
|
7267
|
+
// be flat strings.
|
7268
|
+
string_ = string_->TryFlattenGetString();
|
7047
7269
|
// Transform string to symbol if possible.
|
7048
7270
|
Map* map = Heap::SymbolMapForString(string_);
|
7049
7271
|
if (map != NULL) {
|
@@ -7118,6 +7340,46 @@ int HashTable<Shape, Key>::FindEntry(Key key) {
|
|
7118
7340
|
}
|
7119
7341
|
|
7120
7342
|
|
7343
|
+
// Find entry for key otherwise return kNotFound.
|
7344
|
+
int StringDictionary::FindEntry(String* key) {
|
7345
|
+
if (!key->IsSymbol()) {
|
7346
|
+
return HashTable<StringDictionaryShape, String*>::FindEntry(key);
|
7347
|
+
}
|
7348
|
+
|
7349
|
+
// Optimized for symbol key. Knowledge of the key type allows:
|
7350
|
+
// 1. Move the check if the key is a symbol out of the loop.
|
7351
|
+
// 2. Avoid comparing hash codes in symbol to symbol comparision.
|
7352
|
+
// 3. Detect a case when a dictionary key is not a symbol but the key is.
|
7353
|
+
// In case of positive result the dictionary key may be replaced by
|
7354
|
+
// the symbol with minimal performance penalty. It gives a chance to
|
7355
|
+
// perform further lookups in code stubs (and significant performance boost
|
7356
|
+
// a certain style of code).
|
7357
|
+
|
7358
|
+
// EnsureCapacity will guarantee the hash table is never full.
|
7359
|
+
uint32_t capacity = Capacity();
|
7360
|
+
uint32_t entry = FirstProbe(key->Hash(), capacity);
|
7361
|
+
uint32_t count = 1;
|
7362
|
+
|
7363
|
+
while (true) {
|
7364
|
+
int index = EntryToIndex(entry);
|
7365
|
+
Object* element = get(index);
|
7366
|
+
if (element->IsUndefined()) break; // Empty entry.
|
7367
|
+
if (key == element) return entry;
|
7368
|
+
if (!element->IsSymbol() &&
|
7369
|
+
!element->IsNull() &&
|
7370
|
+
String::cast(element)->Equals(key)) {
|
7371
|
+
// Replace a non-symbol key by the equivalent symbol for faster further
|
7372
|
+
// lookups.
|
7373
|
+
set(index, key);
|
7374
|
+
return entry;
|
7375
|
+
}
|
7376
|
+
ASSERT(element->IsNull() || !String::cast(element)->Equals(key));
|
7377
|
+
entry = NextProbe(entry, count++, capacity);
|
7378
|
+
}
|
7379
|
+
return kNotFound;
|
7380
|
+
}
|
7381
|
+
|
7382
|
+
|
7121
7383
|
template<typename Shape, typename Key>
|
7122
7384
|
Object* HashTable<Shape, Key>::EnsureCapacity(int n, Key key) {
|
7123
7385
|
int capacity = Capacity();
|
@@ -7348,14 +7610,18 @@ Object* JSObject::PrepareElementsForSort(uint32_t limit) {
|
|
7348
7610
|
}
|
7349
7611
|
// Convert to fast elements.
|
7350
7612
|
|
7613
|
+
Object* obj = map()->GetFastElementsMap();
|
7614
|
+
if (obj->IsFailure()) return obj;
|
7615
|
+
Map* new_map = Map::cast(obj);
|
7616
|
+
|
7351
7617
|
PretenureFlag tenure = Heap::InNewSpace(this) ? NOT_TENURED: TENURED;
|
7352
7618
|
Object* new_array =
|
7353
7619
|
Heap::AllocateFixedArray(dict->NumberOfElements(), tenure);
|
7354
|
-
if (new_array->IsFailure())
|
7355
|
-
return new_array;
|
7356
|
-
}
|
7620
|
+
if (new_array->IsFailure()) return new_array;
|
7357
7621
|
FixedArray* fast_elements = FixedArray::cast(new_array);
|
7358
7622
|
dict->CopyValuesTo(fast_elements);
|
7623
|
+
|
7624
|
+
set_map(new_map);
|
7359
7625
|
set_elements(fast_elements);
|
7360
7626
|
}
|
7361
7627
|
ASSERT(HasFastElements());
|
@@ -7977,7 +8243,7 @@ Object* Dictionary<Shape, Key>::DeleteProperty(int entry,
|
|
7977
8243
|
|
7978
8244
|
template<typename Shape, typename Key>
|
7979
8245
|
Object* Dictionary<Shape, Key>::AtPut(Key key, Object* value) {
|
7980
|
-
int entry = FindEntry(key);
|
8246
|
+
int entry = this->FindEntry(key);
|
7981
8247
|
|
7982
8248
|
// If the entry is present set the value;
|
7983
8249
|
if (entry != Dictionary<Shape, Key>::kNotFound) {
|
@@ -8002,7 +8268,7 @@ Object* Dictionary<Shape, Key>::Add(Key key,
|
|
8002
8268
|
Object* value,
|
8003
8269
|
PropertyDetails details) {
|
8004
8270
|
// Valdate key is absent.
|
8005
|
-
SLOW_ASSERT((FindEntry(key) == Dictionary<Shape, Key>::kNotFound));
|
8271
|
+
SLOW_ASSERT((this->FindEntry(key) == Dictionary<Shape, Key>::kNotFound));
|
8006
8272
|
// Check whether the dictionary should be extended.
|
8007
8273
|
Object* obj = EnsureCapacity(1, key);
|
8008
8274
|
if (obj->IsFailure()) return obj;
|
@@ -8061,7 +8327,7 @@ Object* NumberDictionary::AddNumberEntry(uint32_t key,
|
|
8061
8327
|
Object* value,
|
8062
8328
|
PropertyDetails details) {
|
8063
8329
|
UpdateMaxNumberKey(key);
|
8064
|
-
SLOW_ASSERT(FindEntry(key) == kNotFound);
|
8330
|
+
SLOW_ASSERT(this->FindEntry(key) == kNotFound);
|
8065
8331
|
return Add(key, value, details);
|
8066
8332
|
}
|
8067
8333
|
|