therubyracer 0.6.3 → 0.7.0.pre
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/Rakefile +10 -9
- data/ext/v8/callbacks.cpp +15 -8
- data/ext/v8/converters.cpp +7 -8
- data/ext/v8/converters.h +0 -2
- data/ext/v8/extconf.rb +2 -0
- data/ext/v8/rr.cpp +169 -0
- data/ext/v8/rr.h +34 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/AUTHORS +8 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/ChangeLog +198 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/LICENSE +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/SConstruct +152 -38
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/include/v8-debug.h +52 -4
- data/ext/v8/upstream/2.1.10/include/v8-profiler.h +176 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/include/v8.h +227 -48
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/SConscript +60 -10
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/accessors.cc +5 -39
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/accessors.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/allocation.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/allocation.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/api.cc +477 -57
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/api.h +8 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/apinatives.js +1 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/apiutils.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arguments.h +5 -6
- data/ext/v8/upstream/{2.0.6/src/arm/assembler-thumb2-inl.h → 2.1.10/src/arm/assembler-arm-inl.h} +42 -27
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-arm.cc +430 -216
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-arm.h +199 -110
- data/ext/v8/upstream/{2.0.6/src/arm/assembler-arm-inl.h → 2.1.10/src/arm/assembler-thumb2-inl.h} +4 -18
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-thumb2.cc +142 -85
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-thumb2.h +18 -9
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/builtins-arm.cc +127 -87
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/codegen-arm-inl.h +3 -5
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/codegen-arm.cc +4634 -1427
- data/ext/v8/upstream/2.1.10/src/arm/codegen-arm.h +946 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/constants-arm.cc +21 -3
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/constants-arm.h +39 -13
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/cpu-arm.cc +9 -3
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/debug-arm.cc +34 -8
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/disasm-arm.cc +262 -117
- data/ext/v8/upstream/2.1.10/src/arm/fast-codegen-arm.cc +238 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/frames-arm.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/frames-arm.h +0 -0
- data/ext/v8/upstream/{2.0.6/src/arm/fast-codegen-arm.cc → 2.1.10/src/arm/full-codegen-arm.cc} +453 -283
- data/ext/v8/upstream/2.1.10/src/arm/ic-arm.cc +1833 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/jump-target-arm.cc +3 -29
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/macro-assembler-arm.cc +564 -104
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/macro-assembler-arm.h +255 -46
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/regexp-macro-assembler-arm.cc +78 -104
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/regexp-macro-assembler-arm.h +6 -22
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/register-allocator-arm-inl.h +0 -3
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/register-allocator-arm.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/register-allocator-arm.h +2 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/simulator-arm.cc +557 -180
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/simulator-arm.h +52 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/stub-cache-arm.cc +904 -240
- data/ext/v8/upstream/2.1.10/src/arm/virtual-frame-arm.cc +668 -0
- data/ext/v8/upstream/2.1.10/src/arm/virtual-frame-arm.h +503 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/array.js +82 -109
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/assembler.cc +49 -13
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/assembler.h +27 -5
- data/ext/v8/upstream/2.1.10/src/ast.cc +1138 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ast.h +354 -53
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/bootstrapper.cc +609 -501
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/bootstrapper.h +27 -8
- data/ext/v8/upstream/2.1.10/src/builtins.cc +1512 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/builtins.h +41 -25
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/bytecodes-irregexp.h +0 -0
- data/ext/v8/upstream/2.1.10/src/cached-powers.h +119 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/char-predicates-inl.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/char-predicates.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/checks.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/checks.h +25 -1
- data/ext/v8/upstream/2.1.10/src/circular-queue-inl.h +101 -0
- data/ext/v8/upstream/2.1.10/src/circular-queue.cc +121 -0
- data/ext/v8/upstream/2.1.10/src/circular-queue.h +129 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/code-stubs.cc +23 -8
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/code-stubs.h +16 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/code.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/codegen-inl.h +6 -34
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/codegen.cc +73 -92
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/codegen.h +164 -68
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/compilation-cache.cc +117 -73
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/compilation-cache.h +18 -17
- data/ext/v8/upstream/2.1.10/src/compiler.cc +623 -0
- data/ext/v8/upstream/2.1.10/src/compiler.h +299 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/contexts.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/contexts.h +8 -11
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/conversions-inl.h +28 -13
- data/ext/v8/upstream/2.1.10/src/conversions.cc +1105 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/conversions.h +9 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/counters.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/counters.h +1 -1
- data/ext/v8/upstream/2.1.10/src/cpu-profiler-inl.h +99 -0
- data/ext/v8/upstream/2.1.10/src/cpu-profiler.cc +494 -0
- data/ext/v8/upstream/2.1.10/src/cpu-profiler.h +277 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/cpu.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-debug.cc +15 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-debug.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-posix.cc +18 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-readline.cc +2 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-windows.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8.cc +10 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8.h +2 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8.js +43 -38
- data/ext/v8/upstream/2.1.10/src/data-flow.cc +755 -0
- data/ext/v8/upstream/2.1.10/src/data-flow.h +278 -0
- data/ext/v8/upstream/{2.0.6/src/date-delay.js → 2.1.10/src/date.js} +100 -110
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dateparser-inl.h +11 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dateparser.cc +24 -26
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dateparser.h +8 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug-agent.cc +3 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug-agent.h +0 -0
- data/ext/v8/upstream/{2.0.6/src/debug-delay.js → 2.1.10/src/debug-debugger.js} +111 -15
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug.cc +156 -96
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug.h +53 -5
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/disasm.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/disassembler.cc +2 -8
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/disassembler.h +0 -0
- data/ext/v8/upstream/2.1.10/src/diy-fp.cc +58 -0
- data/ext/v8/upstream/2.1.10/src/diy-fp.h +117 -0
- data/ext/v8/upstream/2.1.10/src/double.h +169 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dtoa-config.c +4 -3
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/execution.cc +22 -22
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/execution.h +17 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/factory.cc +70 -46
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/factory.h +27 -17
- data/ext/v8/upstream/2.1.10/src/fast-codegen.cc +746 -0
- data/ext/v8/upstream/2.1.10/src/fast-codegen.h +161 -0
- data/ext/v8/upstream/2.1.10/src/fast-dtoa.cc +512 -0
- data/ext/v8/upstream/2.1.10/src/fast-dtoa.h +59 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/flag-definitions.h +32 -11
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/flags.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/flags.h +0 -0
- data/ext/v8/upstream/2.1.10/src/flow-graph.cc +763 -0
- data/ext/v8/upstream/2.1.10/src/flow-graph.h +180 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frame-element.cc +1 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frame-element.h +49 -11
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frames-inl.h +2 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frames.cc +91 -17
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frames.h +24 -2
- data/ext/v8/upstream/{2.0.6/src/fast-codegen.cc → 2.1.10/src/full-codegen.cc} +549 -198
- data/ext/v8/upstream/{2.0.6/src/fast-codegen.h → 2.1.10/src/full-codegen.h} +109 -29
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/func-name-inferrer.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/func-name-inferrer.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/global-handles.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/global-handles.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/globals.h +67 -43
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/handles-inl.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/handles.cc +124 -129
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/handles.h +33 -15
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/hashmap.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/hashmap.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap-inl.h +56 -12
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap-profiler.cc +2 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap-profiler.h +2 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap.cc +413 -221
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap.h +192 -67
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/assembler-ia32-inl.h +6 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/assembler-ia32.cc +187 -32
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/assembler-ia32.h +31 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/builtins-ia32.cc +160 -133
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/codegen-ia32-inl.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/codegen-ia32.cc +5533 -2177
- data/ext/v8/upstream/{2.0.6/src/x64/codegen-x64.h → 2.1.10/src/ia32/codegen-ia32.h} +453 -134
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/cpu-ia32.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/debug-ia32.cc +63 -8
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/disasm-ia32.cc +99 -16
- data/ext/v8/upstream/2.1.10/src/ia32/fast-codegen-ia32.cc +950 -0
- data/ext/v8/upstream/2.1.10/src/ia32/fast-codegen-ia32.h +155 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/frames-ia32.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/frames-ia32.h +0 -0
- data/ext/v8/upstream/{2.0.6/src/ia32/fast-codegen-ia32.cc → 2.1.10/src/ia32/full-codegen-ia32.cc} +454 -253
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/ic-ia32.cc +545 -390
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/jump-target-ia32.cc +1 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/macro-assembler-ia32.cc +330 -139
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/macro-assembler-ia32.h +96 -30
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/regexp-macro-assembler-ia32.cc +73 -89
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/regexp-macro-assembler-ia32.h +6 -21
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/register-allocator-ia32-inl.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/register-allocator-ia32.cc +59 -5
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/register-allocator-ia32.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/simulator-ia32.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/simulator-ia32.h +2 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/stub-cache-ia32.cc +745 -303
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/virtual-frame-ia32.cc +278 -71
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/virtual-frame-ia32.h +78 -22
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ic-inl.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ic.cc +172 -89
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ic.h +51 -20
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/interpreter-irregexp.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/interpreter-irregexp.h +0 -0
- data/ext/v8/upstream/{2.0.6/src/json-delay.js → 2.1.10/src/json.js} +26 -12
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jsregexp.cc +151 -118
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jsregexp.h +31 -7
- data/ext/v8/upstream/2.1.10/src/jump-target-heavy-inl.h +51 -0
- data/ext/v8/upstream/{2.0.6/src/jump-target.cc → 2.1.10/src/jump-target-heavy.cc} +164 -184
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jump-target-inl.h +8 -9
- data/ext/v8/upstream/{2.0.6/src/usage-analyzer.h → 2.1.10/src/jump-target-light-inl.h} +9 -7
- data/ext/v8/upstream/2.1.10/src/jump-target-light.cc +86 -0
- data/ext/v8/upstream/2.1.10/src/jump-target.cc +155 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jump-target.h +6 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/list-inl.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/list.h +2 -1
- data/ext/v8/upstream/2.1.10/src/liveedit-debugger.js +944 -0
- data/ext/v8/upstream/2.1.10/src/liveedit.cc +1468 -0
- data/ext/v8/upstream/2.1.10/src/liveedit.h +170 -0
- data/ext/v8/upstream/2.1.10/src/log-inl.h +59 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log-utils.cc +3 -9
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log-utils.h +1 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log.cc +198 -95
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log.h +50 -49
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/macro-assembler.h +9 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/macros.py +30 -11
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/mark-compact.cc +464 -152
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/mark-compact.h +41 -20
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/math.js +9 -8
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/memory.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/messages.cc +1 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/messages.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/messages.js +46 -9
- data/ext/v8/upstream/2.1.10/src/mips/assembler-mips-inl.h +215 -0
- data/ext/v8/upstream/2.1.10/src/mips/assembler-mips.cc +1208 -0
- data/ext/v8/upstream/2.1.10/src/mips/assembler-mips.h +665 -0
- data/ext/v8/upstream/2.1.10/src/mips/builtins-mips.cc +202 -0
- data/ext/v8/upstream/2.1.10/src/mips/codegen-mips-inl.h +70 -0
- data/ext/v8/upstream/2.1.10/src/mips/codegen-mips.cc +1428 -0
- data/ext/v8/upstream/{2.0.6/src/arm/codegen-arm.h → 2.1.10/src/mips/codegen-mips.h} +103 -205
- data/ext/v8/upstream/2.1.10/src/mips/constants-mips.cc +323 -0
- data/ext/v8/upstream/2.1.10/src/mips/constants-mips.h +525 -0
- data/ext/v8/upstream/2.1.10/src/mips/cpu-mips.cc +69 -0
- data/ext/v8/upstream/2.1.10/src/mips/debug-mips.cc +128 -0
- data/ext/v8/upstream/2.1.10/src/mips/disasm-mips.cc +784 -0
- data/ext/v8/upstream/2.1.10/src/mips/fast-codegen-mips.cc +74 -0
- data/ext/v8/upstream/2.1.10/src/mips/frames-mips.cc +99 -0
- data/ext/v8/upstream/2.1.10/src/mips/frames-mips.h +164 -0
- data/ext/v8/upstream/2.1.10/src/mips/full-codegen-mips.cc +273 -0
- data/ext/v8/upstream/2.1.10/src/mips/ic-mips.cc +217 -0
- data/ext/v8/upstream/2.1.10/src/mips/jump-target-mips.cc +172 -0
- data/ext/v8/upstream/2.1.10/src/mips/macro-assembler-mips.cc +1323 -0
- data/ext/v8/upstream/2.1.10/src/mips/macro-assembler-mips.h +461 -0
- data/ext/v8/upstream/2.1.10/src/mips/register-allocator-mips-inl.h +137 -0
- data/ext/v8/upstream/2.1.10/src/mips/register-allocator-mips.cc +60 -0
- data/ext/v8/upstream/2.1.10/src/mips/register-allocator-mips.h +46 -0
- data/ext/v8/upstream/2.1.10/src/mips/simulator-mips.cc +1648 -0
- data/ext/v8/upstream/2.1.10/src/mips/simulator-mips.h +311 -0
- data/ext/v8/upstream/2.1.10/src/mips/stub-cache-mips.cc +400 -0
- data/ext/v8/upstream/2.1.10/src/mips/virtual-frame-mips.cc +316 -0
- data/ext/v8/upstream/{2.0.6/src/arm/virtual-frame-arm.h → 2.1.10/src/mips/virtual-frame-mips.h} +87 -71
- data/ext/v8/upstream/{2.0.6/src/mirror-delay.js → 2.1.10/src/mirror-debugger.js} +51 -45
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/mksnapshot.cc +97 -10
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/natives.h +6 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects-debug.cc +47 -5
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects-inl.h +154 -38
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects.cc +528 -280
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects.h +302 -95
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/oprofile-agent.cc +25 -33
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/oprofile-agent.h +9 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/parser.cc +444 -72
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/parser.h +4 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-freebsd.cc +32 -13
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-linux.cc +59 -25
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-macos.cc +30 -13
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-nullos.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-openbsd.cc +21 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-posix.cc +0 -18
- data/ext/v8/upstream/2.1.10/src/platform-solaris.cc +607 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-win32.cc +16 -17
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform.h +25 -8
- data/ext/v8/upstream/2.1.10/src/powers-ten.h +2461 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/prettyprinter.cc +49 -29
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/prettyprinter.h +3 -1
- data/ext/v8/upstream/2.1.10/src/profile-generator-inl.h +124 -0
- data/ext/v8/upstream/2.1.10/src/profile-generator.cc +583 -0
- data/ext/v8/upstream/2.1.10/src/profile-generator.h +364 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/property.cc +1 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/property.h +12 -24
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-irregexp-inl.h +2 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-irregexp.cc +2 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-irregexp.h +2 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-tracer.cc +2 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-tracer.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler.cc +33 -10
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler.h +12 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-stack.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-stack.h +0 -0
- data/ext/v8/upstream/{2.0.6/src/regexp-delay.js → 2.1.10/src/regexp.js} +180 -58
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/register-allocator-inl.h +68 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/register-allocator.cc +5 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/register-allocator.h +42 -17
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/rewriter.cc +110 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/rewriter.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/runtime.cc +2733 -623
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/runtime.h +43 -20
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/runtime.js +46 -35
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scanner.cc +278 -36
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scanner.h +97 -26
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopeinfo.cc +3 -3
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopeinfo.h +1 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopes.cc +11 -12
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopes.h +0 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/serialize.cc +298 -175
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/serialize.h +184 -40
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/shell.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/simulator.h +2 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/smart-pointer.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/snapshot-common.cc +16 -31
- data/ext/v8/upstream/2.1.10/src/snapshot-empty.cc +50 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/snapshot.h +13 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/spaces-inl.h +35 -27
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/spaces.cc +256 -42
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/spaces.h +136 -42
- data/ext/v8/upstream/{2.0.6/src/zone-inl.h → 2.1.10/src/splay-tree-inl.h} +102 -89
- data/ext/v8/upstream/2.1.10/src/splay-tree.h +203 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/string-stream.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/string-stream.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/string.js +260 -149
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/stub-cache.cc +195 -69
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/stub-cache.h +127 -12
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/third_party/dtoa/COPYING +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/third_party/dtoa/dtoa.c +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/third_party/valgrind/valgrind.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/token.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/token.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/top.cc +26 -31
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/top.h +3 -4
- data/ext/v8/upstream/2.1.10/src/type-info.cc +53 -0
- data/ext/v8/upstream/2.1.10/src/type-info.h +244 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/unicode-inl.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/unicode.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/unicode.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/uri.js +6 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/utils.cc +0 -37
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/utils.h +121 -50
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8-counters.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8-counters.h +130 -98
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8.cc +42 -11
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8.h +4 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8natives.js +202 -37
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8threads.cc +11 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8threads.h +15 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/variables.cc +7 -51
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/variables.h +5 -35
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/version.cc +3 -3
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/version.h +0 -0
- data/ext/v8/upstream/2.1.10/src/virtual-frame-heavy-inl.h +152 -0
- data/ext/v8/upstream/{2.0.6/src/virtual-frame.cc → 2.1.10/src/virtual-frame-heavy.cc} +107 -176
- data/ext/v8/upstream/2.1.10/src/virtual-frame-inl.h +39 -0
- data/ext/v8/upstream/2.1.10/src/virtual-frame-light-inl.h +69 -0
- data/ext/v8/upstream/2.1.10/src/virtual-frame-light.cc +49 -0
- data/ext/v8/upstream/2.1.10/src/virtual-frame.cc +49 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/virtual-frame.h +2 -0
- data/ext/v8/upstream/{2.0.6/src/log-inl.h → 2.1.10/src/vm-state-inl.h} +28 -20
- data/ext/v8/upstream/{2.0.6/src/snapshot-empty.cc → 2.1.10/src/vm-state.cc} +5 -6
- data/ext/v8/upstream/2.1.10/src/vm-state.h +75 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/assembler-x64-inl.h +11 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/assembler-x64.cc +285 -93
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/assembler-x64.h +81 -78
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/builtins-x64.cc +130 -87
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/codegen-x64-inl.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/codegen-x64.cc +4520 -1317
- data/ext/v8/upstream/{2.0.6/src/ia32/codegen-ia32.h → 2.1.10/src/x64/codegen-x64.h} +362 -141
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/cpu-x64.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/debug-x64.cc +20 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/disasm-x64.cc +121 -44
- data/ext/v8/upstream/2.1.10/src/x64/fast-codegen-x64.cc +246 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/frames-x64.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/frames-x64.h +0 -0
- data/ext/v8/upstream/{2.0.6/src/x64/fast-codegen-x64.cc → 2.1.10/src/x64/full-codegen-x64.cc} +404 -231
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/ic-x64.cc +346 -117
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/jump-target-x64.cc +1 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/macro-assembler-x64.cc +537 -181
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/macro-assembler-x64.h +140 -34
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/regexp-macro-assembler-x64.cc +74 -96
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/regexp-macro-assembler-x64.h +8 -25
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/register-allocator-x64-inl.h +1 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/register-allocator-x64.cc +3 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/register-allocator-x64.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/simulator-x64.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/simulator-x64.h +2 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/stub-cache-x64.cc +785 -288
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/virtual-frame-x64.cc +128 -52
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/virtual-frame-x64.h +40 -19
- data/ext/v8/upstream/2.1.10/src/zone-inl.h +82 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/zone.cc +1 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/zone.h +6 -90
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/codemap.js +12 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/consarray.js +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/csvparser.js +22 -37
- data/ext/v8/upstream/2.1.10/tools/generate-ten-powers.scm +286 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/gyp/v8.gyp +86 -24
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/js2c.py +22 -22
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/jsmin.py +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/linux-tick-processor +10 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/linux-tick-processor.py +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/logreader.js +34 -16
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/mac-nm +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/mac-tick-processor +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/annotate +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/common +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/dump +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/report +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/reset +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/run +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/shutdown +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/start +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/presubmit.py +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/process-heap-prof.py +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/profile.js +70 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/profile_view.js +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/run-valgrind.py +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/splaytree.js +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/splaytree.py +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/stats-viewer.py +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/test.py +7 -7
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/tickprocessor-driver.js +7 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/tickprocessor.js +140 -9
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/tickprocessor.py +40 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/utils.py +6 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/README.txt +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/arm.vsprops +1 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/common.vsprops +1 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8.vcproj +0 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8_arm.vcproj +193 -199
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8_x64.vcproj +16 -8
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8js2c.cmd +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/debug.vsprops +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/ia32.vsprops +5 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/js2c.cmd +1 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/release.vsprops +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8.sln +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8.vcproj +11 -7
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_arm.sln +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_arm.vcproj +227 -223
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_base.vcproj +137 -5
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_base_arm.vcproj +116 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_base_x64.vcproj +125 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_cctest.vcproj +12 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_cctest_arm.vcproj +12 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_cctest_x64.vcproj +11 -11
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_mksnapshot.vcproj +0 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_mksnapshot_x64.vcproj +0 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_process_sample.vcproj +0 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_process_sample_arm.vcproj +145 -151
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_process_sample_x64.vcproj +16 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_shell_sample.vcproj +0 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_shell_sample_arm.vcproj +145 -151
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_shell_sample_x64.vcproj +16 -8
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot.vcproj +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot_cc.vcproj +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot_cc_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_x64.sln +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_x64.vcproj +11 -7
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/x64.vsprops +5 -1
- data/ext/v8/upstream/2.1.10/tools/windows-tick-processor.bat +29 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/windows-tick-processor.py +0 -0
- data/ext/v8/upstream/Makefile +8 -2
- data/ext/v8/v8.cpp +21 -73
- data/ext/v8/v8_array.cpp +56 -0
- data/ext/v8/v8_array.h +8 -0
- data/ext/v8/v8_callbacks.cpp +121 -0
- data/ext/v8/v8_callbacks.h +8 -0
- data/ext/v8/v8_cxt.cpp +74 -77
- data/ext/v8/v8_cxt.h +2 -9
- data/ext/v8/v8_date.cpp +26 -0
- data/ext/v8/v8_date.h +6 -0
- data/ext/v8/v8_exception.cpp +55 -0
- data/ext/v8/v8_exception.h +6 -0
- data/ext/v8/v8_external.cpp +50 -0
- data/ext/v8/v8_external.h +8 -0
- data/ext/v8/v8_func.cpp +76 -18
- data/ext/v8/v8_func.h +5 -4
- data/ext/v8/v8_msg.cpp +55 -46
- data/ext/v8/v8_msg.h +3 -11
- data/ext/v8/v8_obj.cpp +67 -36
- data/ext/v8/v8_obj.h +6 -8
- data/ext/v8/v8_ref.cpp +25 -9
- data/ext/v8/v8_ref.h +3 -5
- data/ext/v8/v8_script.cpp +17 -10
- data/ext/v8/v8_script.h +3 -3
- data/ext/v8/v8_str.cpp +34 -6
- data/ext/v8/v8_str.h +4 -2
- data/ext/v8/v8_template.cpp +195 -33
- data/ext/v8/v8_template.h +4 -5
- data/ext/v8/v8_try_catch.cpp +99 -0
- data/ext/v8/v8_try_catch.h +5 -0
- data/ext/v8/v8_value.cpp +164 -0
- data/ext/v8/v8_value.h +10 -0
- data/lib/v8.rb +3 -1
- data/lib/v8/access.rb +60 -0
- data/lib/v8/array.rb +15 -0
- data/lib/v8/callbacks.rb +88 -0
- data/lib/v8/cli.rb +1 -1
- data/lib/v8/context.rb +55 -66
- data/lib/v8/function.rb +20 -2
- data/lib/v8/object.rb +14 -12
- data/lib/v8/ruby_error.rb +3 -0
- data/lib/v8/to.rb +59 -7
- data/spec/ext/cxt_spec.rb +2 -15
- data/spec/ext/func_spec.rb +17 -10
- data/spec/ext/try_catch_spec.rb +32 -0
- data/spec/foo.rb +17 -0
- data/spec/redjs/jsapi_spec.rb +173 -96
- data/spec/spec_helper.rb +7 -0
- data/spec/v8/to_spec.rb +0 -1
- data/therubyracer.gemspec +6 -6
- metadata +493 -386
- data/ext/v8/upstream/2.0.6/src/arm/ic-arm.cc +0 -849
- data/ext/v8/upstream/2.0.6/src/arm/virtual-frame-arm.cc +0 -412
- data/ext/v8/upstream/2.0.6/src/ast.cc +0 -512
- data/ext/v8/upstream/2.0.6/src/builtins.cc +0 -851
- data/ext/v8/upstream/2.0.6/src/compiler.cc +0 -1132
- data/ext/v8/upstream/2.0.6/src/compiler.h +0 -107
- data/ext/v8/upstream/2.0.6/src/conversions.cc +0 -709
- data/ext/v8/upstream/2.0.6/src/usage-analyzer.cc +0 -426
- data/ext/v8/upstream/2.0.6/tools/windows-tick-processor.bat +0 -5
- data/ext/v8/upstream/no-strict-aliasing.patch +0 -13
- data/ext/v8/v8_standalone.cpp +0 -69
- data/ext/v8/v8_standalone.h +0 -31
- data/spec/ext/obj_spec.rb +0 -13
@@ -28,6 +28,7 @@
|
|
28
28
|
#ifndef V8_IA32_VIRTUAL_FRAME_IA32_H_
|
29
29
|
#define V8_IA32_VIRTUAL_FRAME_IA32_H_
|
30
30
|
|
31
|
+
#include "type-info.h"
|
31
32
|
#include "register-allocator.h"
|
32
33
|
#include "scopes.h"
|
33
34
|
|
@@ -72,17 +73,18 @@ class VirtualFrame: public ZoneObject {
|
|
72
73
|
static const int kIllegalIndex = -1;
|
73
74
|
|
74
75
|
// Construct an initial virtual frame on entry to a JS function.
|
75
|
-
VirtualFrame();
|
76
|
+
inline VirtualFrame();
|
76
77
|
|
77
78
|
// Construct a virtual frame as a clone of an existing one.
|
78
|
-
explicit VirtualFrame(VirtualFrame* original);
|
79
|
+
explicit inline VirtualFrame(VirtualFrame* original);
|
79
80
|
|
80
81
|
CodeGenerator* cgen() { return CodeGeneratorScope::Current(); }
|
81
82
|
|
82
83
|
MacroAssembler* masm() { return cgen()->masm(); }
|
83
84
|
|
84
85
|
// Create a duplicate of an existing valid frame element.
|
85
|
-
FrameElement CopyElementAt(int index
|
86
|
+
FrameElement CopyElementAt(int index,
|
87
|
+
TypeInfo info = TypeInfo::Uninitialized());
|
86
88
|
|
87
89
|
// The number of elements on the virtual frame.
|
88
90
|
int element_count() { return elements_.length(); }
|
@@ -136,7 +138,7 @@ class VirtualFrame: public ZoneObject {
|
|
136
138
|
void ForgetElements(int count);
|
137
139
|
|
138
140
|
// Spill all values from the frame to memory.
|
139
|
-
void SpillAll();
|
141
|
+
inline void SpillAll();
|
140
142
|
|
141
143
|
// Spill all occurrences of a specific register from the frame.
|
142
144
|
void Spill(Register reg) {
|
@@ -197,7 +199,7 @@ class VirtualFrame: public ZoneObject {
|
|
197
199
|
// Prepare for returning from the frame by spilling locals. This
|
198
200
|
// avoids generating unnecessary merge code when jumping to the
|
199
201
|
// shared return site. Emits code for spills.
|
200
|
-
void PrepareForReturn();
|
202
|
+
inline void PrepareForReturn();
|
201
203
|
|
202
204
|
// Number of local variables after when we use a loop for allocating.
|
203
205
|
static const int kLocalVarBound = 10;
|
@@ -240,6 +242,11 @@ class VirtualFrame: public ZoneObject {
|
|
240
242
|
PushFrameSlotAt(local0_index() + index);
|
241
243
|
}
|
242
244
|
|
245
|
+
// Push a copy of the value of a local frame slot on top of the frame.
|
246
|
+
void UntaggedPushLocalAt(int index) {
|
247
|
+
UntaggedPushFrameSlotAt(local0_index() + index);
|
248
|
+
}
|
249
|
+
|
243
250
|
// Push the value of a local frame slot on top of the frame and invalidate
|
244
251
|
// the local slot. The slot should be written to before trying to read
|
245
252
|
// from it again.
|
@@ -280,6 +287,11 @@ class VirtualFrame: public ZoneObject {
|
|
280
287
|
PushFrameSlotAt(param0_index() + index);
|
281
288
|
}
|
282
289
|
|
290
|
+
// Push a copy of the value of a parameter frame slot on top of the frame.
|
291
|
+
void UntaggedPushParameterAt(int index) {
|
292
|
+
UntaggedPushFrameSlotAt(param0_index() + index);
|
293
|
+
}
|
294
|
+
|
283
295
|
// Push the value of a paramter frame slot on top of the frame and
|
284
296
|
// invalidate the parameter slot. The slot should be written to before
|
285
297
|
// trying to read from it again.
|
@@ -319,26 +331,34 @@ class VirtualFrame: public ZoneObject {
|
|
319
331
|
// arguments are consumed by the call.
|
320
332
|
Result CallStub(CodeStub* stub, Result* arg0, Result* arg1);
|
321
333
|
|
334
|
+
// Call JS function from top of the stack with arguments
|
335
|
+
// taken from the stack.
|
336
|
+
Result CallJSFunction(int arg_count);
|
337
|
+
|
322
338
|
// Call runtime given the number of arguments expected on (and
|
323
339
|
// removed from) the stack.
|
324
340
|
Result CallRuntime(Runtime::Function* f, int arg_count);
|
325
341
|
Result CallRuntime(Runtime::FunctionId id, int arg_count);
|
326
342
|
|
343
|
+
#ifdef ENABLE_DEBUGGER_SUPPORT
|
344
|
+
void DebugBreak();
|
345
|
+
#endif
|
346
|
+
|
327
347
|
// Invoke builtin given the number of arguments it expects on (and
|
328
348
|
// removes from) the stack.
|
329
349
|
Result InvokeBuiltin(Builtins::JavaScript id, InvokeFlag flag, int arg_count);
|
330
350
|
|
331
351
|
// Call load IC. Name and receiver are found on top of the frame.
|
332
|
-
//
|
352
|
+
// Both are dropped.
|
333
353
|
Result CallLoadIC(RelocInfo::Mode mode);
|
334
354
|
|
335
355
|
// Call keyed load IC. Key and receiver are found on top of the
|
336
|
-
// frame.
|
356
|
+
// frame. Both are dropped.
|
337
357
|
Result CallKeyedLoadIC(RelocInfo::Mode mode);
|
338
358
|
|
339
|
-
// Call store IC.
|
340
|
-
// frame.
|
341
|
-
Result CallStoreIC();
|
359
|
+
// Call store IC. If the load is contextual, value is found on top of the
|
360
|
+
// frame. If not, value and receiver are on the frame. Both are dropped.
|
361
|
+
Result CallStoreIC(Handle<String> name, bool is_contextual);
|
342
362
|
|
343
363
|
// Call keyed store IC. Value, key, and receiver are found on top
|
344
364
|
// of the frame. Key and receiver are not dropped.
|
@@ -381,16 +401,19 @@ class VirtualFrame: public ZoneObject {
|
|
381
401
|
|
382
402
|
// Push an element on top of the expression stack and emit a
|
383
403
|
// corresponding push instruction.
|
384
|
-
void EmitPush(Register reg
|
385
|
-
|
386
|
-
void EmitPush(
|
404
|
+
void EmitPush(Register reg,
|
405
|
+
TypeInfo info = TypeInfo::Unknown());
|
406
|
+
void EmitPush(Operand operand,
|
407
|
+
TypeInfo info = TypeInfo::Unknown());
|
408
|
+
void EmitPush(Immediate immediate,
|
409
|
+
TypeInfo info = TypeInfo::Unknown());
|
387
410
|
|
388
411
|
// Push an element on the virtual frame.
|
389
|
-
void Push(Register reg);
|
390
|
-
void Push(Handle<Object> value);
|
391
|
-
void Push(Smi* value)
|
392
|
-
|
393
|
-
|
412
|
+
inline void Push(Register reg, TypeInfo info = TypeInfo::Unknown());
|
413
|
+
inline void Push(Handle<Object> value);
|
414
|
+
inline void Push(Smi* value);
|
415
|
+
|
416
|
+
void PushUntaggedElement(Handle<Object> value);
|
394
417
|
|
395
418
|
// Pushing a result invalidates it (its contents become owned by the
|
396
419
|
// frame).
|
@@ -398,18 +421,38 @@ class VirtualFrame: public ZoneObject {
|
|
398
421
|
// This assert will trigger if you try to push the same value twice.
|
399
422
|
ASSERT(result->is_valid());
|
400
423
|
if (result->is_register()) {
|
401
|
-
Push(result->reg());
|
424
|
+
Push(result->reg(), result->type_info());
|
402
425
|
} else {
|
403
426
|
ASSERT(result->is_constant());
|
404
427
|
Push(result->handle());
|
405
428
|
}
|
429
|
+
if (cgen()->in_safe_int32_mode()) {
|
430
|
+
ASSERT(result->is_untagged_int32());
|
431
|
+
elements_[element_count() - 1].set_untagged_int32(true);
|
432
|
+
}
|
406
433
|
result->Unuse();
|
407
434
|
}
|
408
435
|
|
436
|
+
// Pushing an expression expects that the expression is trivial (according
|
437
|
+
// to Expression::IsTrivial).
|
438
|
+
void Push(Expression* expr);
|
439
|
+
|
409
440
|
// Nip removes zero or more elements from immediately below the top
|
410
441
|
// of the frame, leaving the previous top-of-frame value on top of
|
411
442
|
// the frame. Nip(k) is equivalent to x = Pop(), Drop(k), Push(x).
|
412
|
-
void Nip(int num_dropped);
|
443
|
+
inline void Nip(int num_dropped);
|
444
|
+
|
445
|
+
// Check that the frame has no elements containing untagged int32 elements.
|
446
|
+
bool HasNoUntaggedInt32Elements() {
|
447
|
+
for (int i = 0; i < element_count(); ++i) {
|
448
|
+
if (elements_[i].is_untagged_int32()) return false;
|
449
|
+
}
|
450
|
+
return true;
|
451
|
+
}
|
452
|
+
|
453
|
+
// Update the type information of a variable frame element directly.
|
454
|
+
inline void SetTypeForLocalAt(int index, TypeInfo info);
|
455
|
+
inline void SetTypeForParamAt(int index, TypeInfo info);
|
413
456
|
|
414
457
|
private:
|
415
458
|
static const int kLocal0Offset = JavaScriptFrameConstants::kLocal0Offset;
|
@@ -517,7 +560,12 @@ class VirtualFrame: public ZoneObject {
|
|
517
560
|
|
518
561
|
// Push a copy of a frame slot (typically a local or parameter) on top of
|
519
562
|
// the frame.
|
520
|
-
void PushFrameSlotAt(int index);
|
563
|
+
inline void PushFrameSlotAt(int index);
|
564
|
+
|
565
|
+
// Push a copy of a frame slot (typically a local or parameter) on top of
|
566
|
+
// the frame, at an untagged int32 value. Bails out if the value is not
|
567
|
+
// an int32.
|
568
|
+
void UntaggedPushFrameSlotAt(int index);
|
521
569
|
|
522
570
|
// Push a the value of a frame slot (typically a local or parameter) on
|
523
571
|
// top of the frame and invalidate the slot.
|
@@ -560,6 +608,14 @@ class VirtualFrame: public ZoneObject {
|
|
560
608
|
// Register counts are correctly updated.
|
561
609
|
int InvalidateFrameSlotAt(int index);
|
562
610
|
|
611
|
+
// This function assumes that a and b are the only results that could be in
|
612
|
+
// the registers a_reg or b_reg. Other results can be live, but must not
|
613
|
+
// be in the registers a_reg or b_reg. The results a and b are invalidated.
|
614
|
+
void MoveResultsToRegisters(Result* a,
|
615
|
+
Result* b,
|
616
|
+
Register a_reg,
|
617
|
+
Register b_reg);
|
618
|
+
|
563
619
|
// Call a code stub that has already been prepared for calling (via
|
564
620
|
// PrepareForCall).
|
565
621
|
Result RawCallStub(CodeStub* stub);
|
@@ -568,7 +624,7 @@ class VirtualFrame: public ZoneObject {
|
|
568
624
|
// (via PrepareForCall).
|
569
625
|
Result RawCallCodeObject(Handle<Code> code, RelocInfo::Mode rmode);
|
570
626
|
|
571
|
-
bool Equals(VirtualFrame* other);
|
627
|
+
inline bool Equals(VirtualFrame* other);
|
572
628
|
|
573
629
|
// Classes that need raw access to the elements_ array.
|
574
630
|
friend class DeferredCode;
|
File without changes
|
@@ -63,7 +63,9 @@ void IC::TraceIC(const char* type,
|
|
63
63
|
Code* new_target,
|
64
64
|
const char* extra_info) {
|
65
65
|
if (FLAG_trace_ic) {
|
66
|
-
State new_state = StateFrom(new_target,
|
66
|
+
State new_state = StateFrom(new_target,
|
67
|
+
Heap::undefined_value(),
|
68
|
+
Heap::undefined_value());
|
67
69
|
PrintF("[%s (%c->%c)%s", type,
|
68
70
|
TransitionMarkFromState(old_state),
|
69
71
|
TransitionMarkFromState(new_state),
|
@@ -132,7 +134,7 @@ Address IC::OriginalCodeAddress() {
|
|
132
134
|
}
|
133
135
|
#endif
|
134
136
|
|
135
|
-
IC::State IC::StateFrom(Code* target, Object* receiver) {
|
137
|
+
IC::State IC::StateFrom(Code* target, Object* receiver, Object* name) {
|
136
138
|
IC::State state = target->ic_state();
|
137
139
|
|
138
140
|
if (state != MONOMORPHIC) return state;
|
@@ -148,7 +150,7 @@ IC::State IC::StateFrom(Code* target, Object* receiver) {
|
|
148
150
|
// the receiver map's code cache. Therefore, if the current target
|
149
151
|
// is in the receiver map's code cache, the inline cache failed due
|
150
152
|
// to prototype check failure.
|
151
|
-
int index = map->IndexInCodeCache(target);
|
153
|
+
int index = map->IndexInCodeCache(name, target);
|
152
154
|
if (index >= 0) {
|
153
155
|
// For keyed load/store, the most likely cause of cache failure is
|
154
156
|
// that the key has changed. We do not distinguish between
|
@@ -160,7 +162,7 @@ IC::State IC::StateFrom(Code* target, Object* receiver) {
|
|
160
162
|
|
161
163
|
// Remove the target from the code cache to avoid hitting the same
|
162
164
|
// invalid stub again.
|
163
|
-
map->RemoveFromCodeCache(index);
|
165
|
+
map->RemoveFromCodeCache(String::cast(name), target, index);
|
164
166
|
|
165
167
|
return MONOMORPHIC_PROTOTYPE_FAILURE;
|
166
168
|
}
|
@@ -222,6 +224,8 @@ void IC::Clear(Address address) {
|
|
222
224
|
case Code::STORE_IC: return StoreIC::Clear(address, target);
|
223
225
|
case Code::KEYED_STORE_IC: return KeyedStoreIC::Clear(address, target);
|
224
226
|
case Code::CALL_IC: return CallIC::Clear(address, target);
|
227
|
+
case Code::BINARY_OP_IC: return; // Clearing these is tricky and does not
|
228
|
+
// make any performance difference.
|
225
229
|
default: UNREACHABLE();
|
226
230
|
}
|
227
231
|
}
|
@@ -330,10 +334,11 @@ static void LookupForRead(Object* object,
|
|
330
334
|
while (true) {
|
331
335
|
object->Lookup(name, lookup);
|
332
336
|
// Besides normal conditions (property not found or it's not
|
333
|
-
// an interceptor), bail out
|
337
|
+
// an interceptor), bail out if lookup is not cacheable: we won't
|
334
338
|
// be able to IC it anyway and regular lookup should work fine.
|
335
|
-
if (lookup->
|
336
|
-
|
339
|
+
if (!lookup->IsFound()
|
340
|
+
|| (lookup->type() != INTERCEPTOR)
|
341
|
+
|| !lookup->IsCacheable()) {
|
337
342
|
return;
|
338
343
|
}
|
339
344
|
|
@@ -343,7 +348,7 @@ static void LookupForRead(Object* object,
|
|
343
348
|
}
|
344
349
|
|
345
350
|
holder->LocalLookupRealNamedProperty(name, lookup);
|
346
|
-
if (lookup->
|
351
|
+
if (lookup->IsProperty()) {
|
347
352
|
ASSERT(lookup->type() != INTERCEPTOR);
|
348
353
|
return;
|
349
354
|
}
|
@@ -378,6 +383,18 @@ Object* CallIC::TryCallAsFunction(Object* object) {
|
|
378
383
|
return *delegate;
|
379
384
|
}
|
380
385
|
|
386
|
+
void CallIC::ReceiverToObject(Handle<Object> object) {
|
387
|
+
HandleScope scope;
|
388
|
+
Handle<Object> receiver(object);
|
389
|
+
|
390
|
+
// Change the receiver to the result of calling ToObject on it.
|
391
|
+
const int argc = this->target()->arguments_count();
|
392
|
+
StackFrameLocator locator;
|
393
|
+
JavaScriptFrame* frame = locator.FindJavaScriptFrame(0);
|
394
|
+
int index = frame->ComputeExpressionsCount() - (argc + 1);
|
395
|
+
frame->SetExpression(index, *Factory::ToObject(object));
|
396
|
+
}
|
397
|
+
|
381
398
|
|
382
399
|
Object* CallIC::LoadFunction(State state,
|
383
400
|
Handle<Object> object,
|
@@ -388,6 +405,10 @@ Object* CallIC::LoadFunction(State state,
|
|
388
405
|
return TypeError("non_object_property_call", object, name);
|
389
406
|
}
|
390
407
|
|
408
|
+
if (object->IsString() || object->IsNumber() || object->IsBoolean()) {
|
409
|
+
ReceiverToObject(object);
|
410
|
+
}
|
411
|
+
|
391
412
|
// Check if the name is trivially convertible to an index and get
|
392
413
|
// the element if so.
|
393
414
|
uint32_t index;
|
@@ -406,7 +427,7 @@ Object* CallIC::LoadFunction(State state,
|
|
406
427
|
LookupResult lookup;
|
407
428
|
LookupForRead(*object, *name, &lookup);
|
408
429
|
|
409
|
-
if (!lookup.
|
430
|
+
if (!lookup.IsProperty()) {
|
410
431
|
// If the object does not have the requested property, check which
|
411
432
|
// exception we need to throw.
|
412
433
|
if (IsContextual(object)) {
|
@@ -416,7 +437,7 @@ Object* CallIC::LoadFunction(State state,
|
|
416
437
|
}
|
417
438
|
|
418
439
|
// Lookup is valid: Update inline cache and stub cache.
|
419
|
-
if (FLAG_use_ic
|
440
|
+
if (FLAG_use_ic) {
|
420
441
|
UpdateCaches(&lookup, state, object, name);
|
421
442
|
}
|
422
443
|
|
@@ -438,17 +459,6 @@ Object* CallIC::LoadFunction(State state,
|
|
438
459
|
ASSERT(result != Heap::the_hole_value());
|
439
460
|
|
440
461
|
if (result->IsJSFunction()) {
|
441
|
-
// Check if there is an optimized (builtin) version of the function.
|
442
|
-
// Ignored this will degrade performance for Array.prototype.{push,pop}.
|
443
|
-
// Please note we only return the optimized function iff
|
444
|
-
// the JSObject has FastElements.
|
445
|
-
if (object->IsJSObject() && JSObject::cast(*object)->HasFastElements()) {
|
446
|
-
Object* opt = Top::LookupSpecialFunction(JSObject::cast(*object),
|
447
|
-
lookup.holder(),
|
448
|
-
JSFunction::cast(result));
|
449
|
-
if (opt->IsJSFunction()) return opt;
|
450
|
-
}
|
451
|
-
|
452
462
|
#ifdef ENABLE_DEBUGGER_SUPPORT
|
453
463
|
// Handle stepping into a function if step into is active.
|
454
464
|
if (Debug::StepInActive()) {
|
@@ -475,9 +485,8 @@ void CallIC::UpdateCaches(LookupResult* lookup,
|
|
475
485
|
State state,
|
476
486
|
Handle<Object> object,
|
477
487
|
Handle<String> name) {
|
478
|
-
ASSERT(lookup->IsLoaded());
|
479
488
|
// Bail out if we didn't find a result.
|
480
|
-
if (!lookup->
|
489
|
+
if (!lookup->IsProperty() || !lookup->IsCacheable()) return;
|
481
490
|
|
482
491
|
// Compute the number of arguments.
|
483
492
|
int argc = target()->arguments_count();
|
@@ -606,7 +615,8 @@ Object* LoadIC::Load(State state, Handle<Object> object, Handle<String> name) {
|
|
606
615
|
}
|
607
616
|
|
608
617
|
// Use specialized code for getting prototype of functions.
|
609
|
-
if (object->IsJSFunction() && name->Equals(Heap::prototype_symbol())
|
618
|
+
if (object->IsJSFunction() && name->Equals(Heap::prototype_symbol()) &&
|
619
|
+
JSFunction::cast(*object)->should_have_prototype()) {
|
610
620
|
#ifdef DEBUG
|
611
621
|
if (FLAG_trace_ic) PrintF("[LoadIC : +#prototype /function]\n");
|
612
622
|
#endif
|
@@ -626,8 +636,8 @@ Object* LoadIC::Load(State state, Handle<Object> object, Handle<String> name) {
|
|
626
636
|
LookupResult lookup;
|
627
637
|
LookupForRead(*object, *name, &lookup);
|
628
638
|
|
629
|
-
// If
|
630
|
-
if (!lookup.
|
639
|
+
// If we did not find a property, check if we need to throw an exception.
|
640
|
+
if (!lookup.IsProperty()) {
|
631
641
|
if (FLAG_strict || IsContextual(object)) {
|
632
642
|
return ReferenceError("not_defined", name);
|
633
643
|
}
|
@@ -637,8 +647,7 @@ Object* LoadIC::Load(State state, Handle<Object> object, Handle<String> name) {
|
|
637
647
|
bool can_be_inlined =
|
638
648
|
FLAG_use_ic &&
|
639
649
|
state == PREMONOMORPHIC &&
|
640
|
-
lookup.
|
641
|
-
lookup.IsLoaded() &&
|
650
|
+
lookup.IsProperty() &&
|
642
651
|
lookup.IsCacheable() &&
|
643
652
|
lookup.holder() == *object &&
|
644
653
|
lookup.type() == FIELD &&
|
@@ -660,12 +669,12 @@ Object* LoadIC::Load(State state, Handle<Object> object, Handle<String> name) {
|
|
660
669
|
}
|
661
670
|
|
662
671
|
// Update inline cache and stub cache.
|
663
|
-
if (FLAG_use_ic
|
672
|
+
if (FLAG_use_ic) {
|
664
673
|
UpdateCaches(&lookup, state, object, name);
|
665
674
|
}
|
666
675
|
|
667
676
|
PropertyAttributes attr;
|
668
|
-
if (lookup.
|
677
|
+
if (lookup.IsProperty() && lookup.type() == INTERCEPTOR) {
|
669
678
|
// Get the property.
|
670
679
|
Object* result = object->GetProperty(*object, &lookup, *name, &attr);
|
671
680
|
if (result->IsFailure()) return result;
|
@@ -686,9 +695,8 @@ void LoadIC::UpdateCaches(LookupResult* lookup,
|
|
686
695
|
State state,
|
687
696
|
Handle<Object> object,
|
688
697
|
Handle<String> name) {
|
689
|
-
|
690
|
-
|
691
|
-
if (!lookup->IsValid() || !lookup->IsCacheable()) return;
|
698
|
+
// Bail out if the result is not cacheable.
|
699
|
+
if (!lookup->IsCacheable()) return;
|
692
700
|
|
693
701
|
// Loading properties from values is not common, so don't try to
|
694
702
|
// deal with non-JS objects here.
|
@@ -702,6 +710,9 @@ void LoadIC::UpdateCaches(LookupResult* lookup,
|
|
702
710
|
// Set the target to the pre monomorphic stub to delay
|
703
711
|
// setting the monomorphic state.
|
704
712
|
code = pre_monomorphic_stub();
|
713
|
+
} else if (!lookup->IsProperty()) {
|
714
|
+
// Nonexistent property. The result is undefined.
|
715
|
+
code = StubCache::ComputeLoadNonexistent(*name, *receiver);
|
705
716
|
} else {
|
706
717
|
// Compute monomorphic stub.
|
707
718
|
switch (lookup->type()) {
|
@@ -814,7 +825,8 @@ Object* KeyedLoadIC::Load(State state,
|
|
814
825
|
}
|
815
826
|
|
816
827
|
// Use specialized code for getting prototype of functions.
|
817
|
-
if (object->IsJSFunction() && name->Equals(Heap::prototype_symbol())
|
828
|
+
if (object->IsJSFunction() && name->Equals(Heap::prototype_symbol()) &&
|
829
|
+
JSFunction::cast(*object)->should_have_prototype()) {
|
818
830
|
Handle<JSFunction> function = Handle<JSFunction>::cast(object);
|
819
831
|
Object* code =
|
820
832
|
StubCache::ComputeKeyedLoadFunctionPrototype(*name, *function);
|
@@ -841,19 +853,19 @@ Object* KeyedLoadIC::Load(State state,
|
|
841
853
|
LookupResult lookup;
|
842
854
|
LookupForRead(*object, *name, &lookup);
|
843
855
|
|
844
|
-
// If
|
845
|
-
if (!lookup.
|
856
|
+
// If we did not find a property, check if we need to throw an exception.
|
857
|
+
if (!lookup.IsProperty()) {
|
846
858
|
if (FLAG_strict || IsContextual(object)) {
|
847
859
|
return ReferenceError("not_defined", name);
|
848
860
|
}
|
849
861
|
}
|
850
862
|
|
851
|
-
if (FLAG_use_ic
|
863
|
+
if (FLAG_use_ic) {
|
852
864
|
UpdateCaches(&lookup, state, object, name);
|
853
865
|
}
|
854
866
|
|
855
867
|
PropertyAttributes attr;
|
856
|
-
if (lookup.
|
868
|
+
if (lookup.IsProperty() && lookup.type() == INTERCEPTOR) {
|
857
869
|
// Get the property.
|
858
870
|
Object* result = object->GetProperty(*object, &lookup, *name, &attr);
|
859
871
|
if (result->IsFailure()) return result;
|
@@ -880,6 +892,8 @@ Object* KeyedLoadIC::Load(State state,
|
|
880
892
|
Handle<JSObject> receiver = Handle<JSObject>::cast(object);
|
881
893
|
if (receiver->HasExternalArrayElements()) {
|
882
894
|
stub = external_array_stub(receiver->GetElementsKind());
|
895
|
+
} else if (receiver->HasIndexedInterceptor()) {
|
896
|
+
stub = indexed_interceptor_stub();
|
883
897
|
}
|
884
898
|
}
|
885
899
|
set_target(stub);
|
@@ -901,9 +915,8 @@ Object* KeyedLoadIC::Load(State state,
|
|
901
915
|
|
902
916
|
void KeyedLoadIC::UpdateCaches(LookupResult* lookup, State state,
|
903
917
|
Handle<Object> object, Handle<String> name) {
|
904
|
-
ASSERT(lookup->IsLoaded());
|
905
918
|
// Bail out if we didn't find a result.
|
906
|
-
if (!lookup->
|
919
|
+
if (!lookup->IsProperty() || !lookup->IsCacheable()) return;
|
907
920
|
|
908
921
|
if (!object->IsJSObject()) return;
|
909
922
|
Handle<JSObject> receiver = Handle<JSObject>::cast(object);
|
@@ -976,14 +989,12 @@ void KeyedLoadIC::UpdateCaches(LookupResult* lookup, State state,
|
|
976
989
|
|
977
990
|
static bool StoreICableLookup(LookupResult* lookup) {
|
978
991
|
// Bail out if we didn't find a result.
|
979
|
-
if (!lookup->
|
992
|
+
if (!lookup->IsPropertyOrTransition() || !lookup->IsCacheable()) return false;
|
980
993
|
|
981
994
|
// If the property is read-only, we leave the IC in its current
|
982
995
|
// state.
|
983
996
|
if (lookup->IsReadOnly()) return false;
|
984
997
|
|
985
|
-
if (!lookup->IsLoaded()) return false;
|
986
|
-
|
987
998
|
return true;
|
988
999
|
}
|
989
1000
|
|
@@ -1030,6 +1041,20 @@ Object* StoreIC::Store(State state,
|
|
1030
1041
|
return *value;
|
1031
1042
|
}
|
1032
1043
|
|
1044
|
+
|
1045
|
+
// Use specialized code for setting the length of arrays.
|
1046
|
+
if (receiver->IsJSArray()
|
1047
|
+
&& name->Equals(Heap::length_symbol())
|
1048
|
+
&& receiver->AllowsSetElementsLength()) {
|
1049
|
+
#ifdef DEBUG
|
1050
|
+
if (FLAG_trace_ic) PrintF("[StoreIC : +#length /array]\n");
|
1051
|
+
#endif
|
1052
|
+
Code* target = Builtins::builtin(Builtins::StoreIC_ArrayLength);
|
1053
|
+
set_target(target);
|
1054
|
+
StubCache::Set(*name, HeapObject::cast(*object)->map(), target);
|
1055
|
+
return receiver->SetProperty(*name, *value, NONE);
|
1056
|
+
}
|
1057
|
+
|
1033
1058
|
// Lookup the property locally in the receiver.
|
1034
1059
|
if (FLAG_use_ic && !receiver->IsJSGlobalProxy()) {
|
1035
1060
|
LookupResult lookup;
|
@@ -1048,7 +1073,6 @@ void StoreIC::UpdateCaches(LookupResult* lookup,
|
|
1048
1073
|
Handle<JSObject> receiver,
|
1049
1074
|
Handle<String> name,
|
1050
1075
|
Handle<Object> value) {
|
1051
|
-
ASSERT(lookup->IsLoaded());
|
1052
1076
|
// Skip JSGlobalProxy.
|
1053
1077
|
ASSERT(!receiver->IsJSGlobalProxy());
|
1054
1078
|
|
@@ -1156,7 +1180,7 @@ Object* KeyedStoreIC::Store(State state,
|
|
1156
1180
|
receiver->LocalLookup(*name, &lookup);
|
1157
1181
|
|
1158
1182
|
// Update inline cache and stub cache.
|
1159
|
-
if (FLAG_use_ic
|
1183
|
+
if (FLAG_use_ic) {
|
1160
1184
|
UpdateCaches(&lookup, state, receiver, name, value);
|
1161
1185
|
}
|
1162
1186
|
|
@@ -1190,13 +1214,11 @@ void KeyedStoreIC::UpdateCaches(LookupResult* lookup,
|
|
1190
1214
|
Handle<JSObject> receiver,
|
1191
1215
|
Handle<String> name,
|
1192
1216
|
Handle<Object> value) {
|
1193
|
-
ASSERT(lookup->IsLoaded());
|
1194
|
-
|
1195
1217
|
// Skip JSGlobalProxy.
|
1196
1218
|
if (receiver->IsJSGlobalProxy()) return;
|
1197
1219
|
|
1198
1220
|
// Bail out if we didn't find a result.
|
1199
|
-
if (!lookup->
|
1221
|
+
if (!lookup->IsPropertyOrTransition() || !lookup->IsCacheable()) return;
|
1200
1222
|
|
1201
1223
|
// If the property is read-only, we leave the IC in its current
|
1202
1224
|
// state.
|
@@ -1266,7 +1288,7 @@ Object* CallIC_Miss(Arguments args) {
|
|
1266
1288
|
NoHandleAllocation na;
|
1267
1289
|
ASSERT(args.length() == 2);
|
1268
1290
|
CallIC ic;
|
1269
|
-
IC::State state = IC::StateFrom(ic.target(), args[0]);
|
1291
|
+
IC::State state = IC::StateFrom(ic.target(), args[0], args[1]);
|
1270
1292
|
Object* result =
|
1271
1293
|
ic.LoadFunction(state, args.at<Object>(0), args.at<String>(1));
|
1272
1294
|
|
@@ -1286,9 +1308,9 @@ Object* CallIC_Miss(Arguments args) {
|
|
1286
1308
|
Handle<JSFunction> function = Handle<JSFunction>(JSFunction::cast(result));
|
1287
1309
|
InLoopFlag in_loop = ic.target()->ic_in_loop();
|
1288
1310
|
if (in_loop == IN_LOOP) {
|
1289
|
-
CompileLazyInLoop(function, CLEAR_EXCEPTION);
|
1311
|
+
CompileLazyInLoop(function, args.at<Object>(0), CLEAR_EXCEPTION);
|
1290
1312
|
} else {
|
1291
|
-
CompileLazy(function, CLEAR_EXCEPTION);
|
1313
|
+
CompileLazy(function, args.at<Object>(0), CLEAR_EXCEPTION);
|
1292
1314
|
}
|
1293
1315
|
return *function;
|
1294
1316
|
}
|
@@ -1299,52 +1321,45 @@ Object* LoadIC_Miss(Arguments args) {
|
|
1299
1321
|
NoHandleAllocation na;
|
1300
1322
|
ASSERT(args.length() == 2);
|
1301
1323
|
LoadIC ic;
|
1302
|
-
IC::State state = IC::StateFrom(ic.target(), args[0]);
|
1324
|
+
IC::State state = IC::StateFrom(ic.target(), args[0], args[1]);
|
1303
1325
|
return ic.Load(state, args.at<Object>(0), args.at<String>(1));
|
1304
1326
|
}
|
1305
1327
|
|
1306
1328
|
|
1307
|
-
void LoadIC::GenerateInitialize(MacroAssembler* masm) {
|
1308
|
-
Generate(masm, ExternalReference(IC_Utility(kLoadIC_Miss)));
|
1309
|
-
}
|
1310
|
-
|
1311
|
-
|
1312
|
-
void LoadIC::GeneratePreMonomorphic(MacroAssembler* masm) {
|
1313
|
-
Generate(masm, ExternalReference(IC_Utility(kLoadIC_Miss)));
|
1314
|
-
}
|
1315
|
-
|
1316
|
-
|
1317
1329
|
// Used from ic_<arch>.cc
|
1318
1330
|
Object* KeyedLoadIC_Miss(Arguments args) {
|
1319
1331
|
NoHandleAllocation na;
|
1320
1332
|
ASSERT(args.length() == 2);
|
1321
1333
|
KeyedLoadIC ic;
|
1322
|
-
IC::State state = IC::StateFrom(ic.target(), args[0]);
|
1334
|
+
IC::State state = IC::StateFrom(ic.target(), args[0], args[1]);
|
1323
1335
|
return ic.Load(state, args.at<Object>(0), args.at<Object>(1));
|
1324
1336
|
}
|
1325
1337
|
|
1326
1338
|
|
1327
|
-
void KeyedLoadIC::GenerateInitialize(MacroAssembler* masm) {
|
1328
|
-
Generate(masm, ExternalReference(IC_Utility(kKeyedLoadIC_Miss)));
|
1329
|
-
}
|
1330
|
-
|
1331
|
-
|
1332
|
-
void KeyedLoadIC::GeneratePreMonomorphic(MacroAssembler* masm) {
|
1333
|
-
Generate(masm, ExternalReference(IC_Utility(kKeyedLoadIC_Miss)));
|
1334
|
-
}
|
1335
|
-
|
1336
|
-
|
1337
1339
|
// Used from ic_<arch>.cc.
|
1338
1340
|
Object* StoreIC_Miss(Arguments args) {
|
1339
1341
|
NoHandleAllocation na;
|
1340
1342
|
ASSERT(args.length() == 3);
|
1341
1343
|
StoreIC ic;
|
1342
|
-
IC::State state = IC::StateFrom(ic.target(), args[0]);
|
1344
|
+
IC::State state = IC::StateFrom(ic.target(), args[0], args[1]);
|
1343
1345
|
return ic.Store(state, args.at<Object>(0), args.at<String>(1),
|
1344
1346
|
args.at<Object>(2));
|
1345
1347
|
}
|
1346
1348
|
|
1347
1349
|
|
1350
|
+
Object* StoreIC_ArrayLength(Arguments args) {
|
1351
|
+
NoHandleAllocation nha;
|
1352
|
+
|
1353
|
+
ASSERT(args.length() == 2);
|
1354
|
+
JSObject* receiver = JSObject::cast(args[0]);
|
1355
|
+
Object* len = args[1];
|
1356
|
+
|
1357
|
+
Object* result = receiver->SetElementsLength(len);
|
1358
|
+
if (result->IsFailure()) return result;
|
1359
|
+
return len;
|
1360
|
+
}
|
1361
|
+
|
1362
|
+
|
1348
1363
|
// Extend storage is called in a store inline cache when
|
1349
1364
|
// it is necessary to extend the properties array of a
|
1350
1365
|
// JSObject.
|
@@ -1379,34 +1394,102 @@ Object* SharedStoreIC_ExtendStorage(Arguments args) {
|
|
1379
1394
|
}
|
1380
1395
|
|
1381
1396
|
|
1382
|
-
void StoreIC::GenerateInitialize(MacroAssembler* masm) {
|
1383
|
-
Generate(masm, ExternalReference(IC_Utility(kStoreIC_Miss)));
|
1384
|
-
}
|
1385
|
-
|
1386
|
-
|
1387
|
-
void StoreIC::GenerateMiss(MacroAssembler* masm) {
|
1388
|
-
Generate(masm, ExternalReference(IC_Utility(kStoreIC_Miss)));
|
1389
|
-
}
|
1390
|
-
|
1391
|
-
|
1392
1397
|
// Used from ic_<arch>.cc.
|
1393
1398
|
Object* KeyedStoreIC_Miss(Arguments args) {
|
1394
1399
|
NoHandleAllocation na;
|
1395
1400
|
ASSERT(args.length() == 3);
|
1396
1401
|
KeyedStoreIC ic;
|
1397
|
-
IC::State state = IC::StateFrom(ic.target(), args[0]);
|
1402
|
+
IC::State state = IC::StateFrom(ic.target(), args[0], args[1]);
|
1398
1403
|
return ic.Store(state, args.at<Object>(0), args.at<Object>(1),
|
1399
1404
|
args.at<Object>(2));
|
1400
1405
|
}
|
1401
1406
|
|
1402
1407
|
|
1403
|
-
void
|
1404
|
-
|
1408
|
+
void BinaryOpIC::patch(Code* code) {
|
1409
|
+
set_target(code);
|
1405
1410
|
}
|
1406
1411
|
|
1407
1412
|
|
1408
|
-
|
1409
|
-
|
1413
|
+
const char* BinaryOpIC::GetName(TypeInfo type_info) {
|
1414
|
+
switch (type_info) {
|
1415
|
+
case DEFAULT: return "Default";
|
1416
|
+
case GENERIC: return "Generic";
|
1417
|
+
case HEAP_NUMBERS: return "HeapNumbers";
|
1418
|
+
case STRINGS: return "Strings";
|
1419
|
+
default: return "Invalid";
|
1420
|
+
}
|
1421
|
+
}
|
1422
|
+
|
1423
|
+
|
1424
|
+
BinaryOpIC::State BinaryOpIC::ToState(TypeInfo type_info) {
|
1425
|
+
switch (type_info) {
|
1426
|
+
// DEFAULT is mapped to UNINITIALIZED so that calls to DEFAULT stubs
|
1427
|
+
// are not cleared at GC.
|
1428
|
+
case DEFAULT: return UNINITIALIZED;
|
1429
|
+
|
1430
|
+
// Could have mapped GENERIC to MONOMORPHIC just as well but MEGAMORPHIC is
|
1431
|
+
// conceptually closer.
|
1432
|
+
case GENERIC: return MEGAMORPHIC;
|
1433
|
+
|
1434
|
+
default: return MONOMORPHIC;
|
1435
|
+
}
|
1436
|
+
}
|
1437
|
+
|
1438
|
+
|
1439
|
+
BinaryOpIC::TypeInfo BinaryOpIC::GetTypeInfo(Object* left,
|
1440
|
+
Object* right) {
|
1441
|
+
if (left->IsSmi() && right->IsSmi()) {
|
1442
|
+
return GENERIC;
|
1443
|
+
}
|
1444
|
+
|
1445
|
+
if (left->IsNumber() && right->IsNumber()) {
|
1446
|
+
return HEAP_NUMBERS;
|
1447
|
+
}
|
1448
|
+
|
1449
|
+
if (left->IsString() || right->IsString()) {
|
1450
|
+
// Patching for fast string ADD makes sense even if only one of the
|
1451
|
+
// arguments is a string.
|
1452
|
+
return STRINGS;
|
1453
|
+
}
|
1454
|
+
|
1455
|
+
return GENERIC;
|
1456
|
+
}
|
1457
|
+
|
1458
|
+
|
1459
|
+
// defined in codegen-<arch>.cc
|
1460
|
+
Handle<Code> GetBinaryOpStub(int key, BinaryOpIC::TypeInfo type_info);
|
1461
|
+
|
1462
|
+
|
1463
|
+
Object* BinaryOp_Patch(Arguments args) {
|
1464
|
+
ASSERT(args.length() == 6);
|
1465
|
+
|
1466
|
+
Handle<Object> left = args.at<Object>(0);
|
1467
|
+
Handle<Object> right = args.at<Object>(1);
|
1468
|
+
Handle<Object> result = args.at<Object>(2);
|
1469
|
+
int key = Smi::cast(args[3])->value();
|
1470
|
+
#ifdef DEBUG
|
1471
|
+
Token::Value op = static_cast<Token::Value>(Smi::cast(args[4])->value());
|
1472
|
+
BinaryOpIC::TypeInfo prev_type_info =
|
1473
|
+
static_cast<BinaryOpIC::TypeInfo>(Smi::cast(args[5])->value());
|
1474
|
+
#endif // DEBUG
|
1475
|
+
{ HandleScope scope;
|
1476
|
+
BinaryOpIC::TypeInfo type_info = BinaryOpIC::GetTypeInfo(*left, *right);
|
1477
|
+
Handle<Code> code = GetBinaryOpStub(key, type_info);
|
1478
|
+
if (!code.is_null()) {
|
1479
|
+
BinaryOpIC ic;
|
1480
|
+
ic.patch(*code);
|
1481
|
+
#ifdef DEBUG
|
1482
|
+
if (FLAG_trace_ic) {
|
1483
|
+
PrintF("[BinaryOpIC (%s->%s)#%s]\n",
|
1484
|
+
BinaryOpIC::GetName(prev_type_info),
|
1485
|
+
BinaryOpIC::GetName(type_info),
|
1486
|
+
Token::Name(op));
|
1487
|
+
}
|
1488
|
+
#endif // DEBUG
|
1489
|
+
}
|
1490
|
+
}
|
1491
|
+
|
1492
|
+
return *result;
|
1410
1493
|
}
|
1411
1494
|
|
1412
1495
|
|