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
@@ -0,0 +1,59 @@
|
|
1
|
+
// Copyright 2010 the V8 project authors. All rights reserved.
|
2
|
+
// Redistribution and use in source and binary forms, with or without
|
3
|
+
// modification, are permitted provided that the following conditions are
|
4
|
+
// met:
|
5
|
+
//
|
6
|
+
// * Redistributions of source code must retain the above copyright
|
7
|
+
// notice, this list of conditions and the following disclaimer.
|
8
|
+
// * Redistributions in binary form must reproduce the above
|
9
|
+
// copyright notice, this list of conditions and the following
|
10
|
+
// disclaimer in the documentation and/or other materials provided
|
11
|
+
// with the distribution.
|
12
|
+
// * Neither the name of Google Inc. nor the names of its
|
13
|
+
// contributors may be used to endorse or promote products derived
|
14
|
+
// from this software without specific prior written permission.
|
15
|
+
//
|
16
|
+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
17
|
+
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
18
|
+
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
19
|
+
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
20
|
+
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21
|
+
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22
|
+
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
23
|
+
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
24
|
+
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
25
|
+
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
26
|
+
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
27
|
+
|
28
|
+
#ifndef V8_FAST_DTOA_H_
|
29
|
+
#define V8_FAST_DTOA_H_
|
30
|
+
|
31
|
+
namespace v8 {
|
32
|
+
namespace internal {
|
33
|
+
|
34
|
+
// FastDtoa will produce at most kFastDtoaMaximalLength digits. This does not
|
35
|
+
// include the terminating '\0' character.
|
36
|
+
static const int kFastDtoaMaximalLength = 17;
|
37
|
+
|
38
|
+
// Provides a decimal representation of v.
|
39
|
+
// v must not be (positive or negative) zero and it must not be Infinity or NaN.
|
40
|
+
// Returns true if it succeeds, otherwise the result can not be trusted.
|
41
|
+
// There will be *length digits inside the buffer followed by a null terminator.
|
42
|
+
// If the function returns true then
|
43
|
+
// v == (double) (buffer * 10^(point - length)).
|
44
|
+
// The digits in the buffer are the shortest representation possible: no
|
45
|
+
// 0.099999999999 instead of 0.1.
|
46
|
+
// The last digit will be closest to the actual v. That is, even if several
|
47
|
+
// digits might correctly yield 'v' when read again, the buffer will contain the
|
48
|
+
// one closest to v.
|
49
|
+
// The variable 'sign' will be '0' if the given number is positive, and '1'
|
50
|
+
// otherwise.
|
51
|
+
bool FastDtoa(double d,
|
52
|
+
Vector<char> buffer,
|
53
|
+
int* sign,
|
54
|
+
int* length,
|
55
|
+
int* point);
|
56
|
+
|
57
|
+
} } // namespace v8::internal
|
58
|
+
|
59
|
+
#endif // V8_FAST_DTOA_H_
|
@@ -116,13 +116,15 @@ DEFINE_bool(enable_sahf, true,
|
|
116
116
|
"enable use of SAHF instruction if available (X64 only)")
|
117
117
|
DEFINE_bool(enable_vfp3, true,
|
118
118
|
"enable use of VFP3 instructions if available (ARM only)")
|
119
|
+
DEFINE_bool(enable_armv7, true,
|
120
|
+
"enable use of ARMv7 instructions if available (ARM only)")
|
119
121
|
|
120
122
|
// bootstrapper.cc
|
121
123
|
DEFINE_string(expose_natives_as, NULL, "expose natives in global object")
|
122
124
|
DEFINE_string(expose_debug_as, NULL, "expose debug in global object")
|
123
|
-
DEFINE_string(natives_file, NULL, "alternative natives file")
|
124
125
|
DEFINE_bool(expose_gc, false, "expose gc extension")
|
125
126
|
DEFINE_int(stack_trace_limit, 10, "number of stack frames to capture")
|
127
|
+
DEFINE_bool(disable_native_files, false, "disable builtin natives files")
|
126
128
|
|
127
129
|
// builtins-ia32.cc
|
128
130
|
DEFINE_bool(inline_new, true, "use fast inline allocation")
|
@@ -143,22 +145,31 @@ DEFINE_bool(debug_info, true, "add debug information to compiled functions")
|
|
143
145
|
DEFINE_bool(strict, false, "strict error checking")
|
144
146
|
DEFINE_int(min_preparse_length, 1024,
|
145
147
|
"minimum length for automatic enable preparsing")
|
146
|
-
DEFINE_bool(
|
147
|
-
|
148
|
-
DEFINE_bool(
|
149
|
-
"
|
148
|
+
DEFINE_bool(full_compiler, true, "enable dedicated backend for run-once code")
|
149
|
+
DEFINE_bool(fast_compiler, false, "enable speculative optimizing backend")
|
150
|
+
DEFINE_bool(always_full_compiler, false,
|
151
|
+
"try to use the dedicated run-once backend for all code")
|
150
152
|
DEFINE_bool(always_fast_compiler, false,
|
151
|
-
"
|
153
|
+
"try to use the speculative optimizing backend for all code")
|
154
|
+
DEFINE_bool(trace_bailout, false,
|
155
|
+
"print reasons for falling back to using the classic V8 backend")
|
156
|
+
DEFINE_bool(safe_int32_compiler, true,
|
157
|
+
"enable optimized side-effect-free int32 expressions.")
|
158
|
+
DEFINE_bool(use_flow_graph, false, "perform flow-graph based optimizations")
|
152
159
|
|
153
160
|
// compilation-cache.cc
|
154
161
|
DEFINE_bool(compilation_cache, true, "enable compilation cache")
|
155
162
|
|
163
|
+
// data-flow.cc
|
164
|
+
DEFINE_bool(loop_peeling, false, "Peel off the first iteration of loops.")
|
165
|
+
|
156
166
|
// debug.cc
|
157
167
|
DEFINE_bool(remote_debugging, false, "enable remote debugging")
|
158
168
|
DEFINE_bool(trace_debug_json, false, "trace debugging JSON request/response")
|
159
169
|
DEFINE_bool(debugger_auto_break, true,
|
160
170
|
"automatically set the debug break flag when debugger commands are "
|
161
171
|
"in the queue")
|
172
|
+
DEFINE_bool(enable_liveedit, true, "enable liveedit experimental feature")
|
162
173
|
|
163
174
|
// frames.cc
|
164
175
|
DEFINE_int(max_stack_trace_source_length, 300,
|
@@ -194,6 +205,9 @@ DEFINE_bool(cleanup_ics_at_gc, true,
|
|
194
205
|
"Flush inline caches prior to mark compact collection.")
|
195
206
|
DEFINE_bool(cleanup_caches_in_maps_at_gc, true,
|
196
207
|
"Flush code caches in maps during mark compact cycle.")
|
208
|
+
DEFINE_int(random_seed, 0,
|
209
|
+
"Default seed for initializing random generator "
|
210
|
+
"(0, the default, means to use system random).")
|
197
211
|
|
198
212
|
DEFINE_bool(canonicalize_object_literal_maps, true,
|
199
213
|
"Canonicalize maps for object literals.")
|
@@ -216,9 +230,12 @@ DEFINE_bool(allow_natives_syntax, false, "allow natives syntax")
|
|
216
230
|
// rewriter.cc
|
217
231
|
DEFINE_bool(optimize_ast, true, "optimize the ast")
|
218
232
|
|
219
|
-
// simulator-arm.cc
|
220
|
-
DEFINE_bool(trace_sim, false, "
|
233
|
+
// simulator-arm.cc and simulator-mips.cc
|
234
|
+
DEFINE_bool(trace_sim, false, "Trace simulator execution")
|
235
|
+
DEFINE_bool(check_icache, false, "Check icache flushes in ARM simulator")
|
221
236
|
DEFINE_int(stop_sim_at, 0, "Simulator stop after x number of instructions")
|
237
|
+
DEFINE_int(sim_stack_alignment, 8,
|
238
|
+
"Stack alingment in bytes in simulator (4 or 8, 8 is default)")
|
222
239
|
|
223
240
|
// top.cc
|
224
241
|
DEFINE_bool(trace_exception, false,
|
@@ -226,9 +243,6 @@ DEFINE_bool(trace_exception, false,
|
|
226
243
|
DEFINE_bool(preallocate_message_memory, false,
|
227
244
|
"preallocate some memory to build stack traces.")
|
228
245
|
|
229
|
-
// usage-analyzer.cc
|
230
|
-
DEFINE_bool(usage_computation, true, "compute variable usage counts")
|
231
|
-
|
232
246
|
// v8.cc
|
233
247
|
DEFINE_bool(preemption, false,
|
234
248
|
"activate a 100ms timer that switches between V8 threads")
|
@@ -299,6 +313,9 @@ DEFINE_string(stop_at, "", "function name where to insert a breakpoint")
|
|
299
313
|
// compiler.cc
|
300
314
|
DEFINE_bool(print_builtin_scopes, false, "print scopes for builtins")
|
301
315
|
DEFINE_bool(print_scopes, false, "print scopes")
|
316
|
+
DEFINE_bool(print_ir, false, "print the AST as seen by the backend")
|
317
|
+
DEFINE_bool(print_graph_text, false,
|
318
|
+
"print a text representation of the flow graph")
|
302
319
|
|
303
320
|
// contexts.cc
|
304
321
|
DEFINE_bool(trace_contexts, false, "trace contexts operations")
|
@@ -363,6 +380,8 @@ DEFINE_bool(log_code, false,
|
|
363
380
|
DEFINE_bool(log_gc, false,
|
364
381
|
"Log heap samples on garbage collection for the hp2ps tool.")
|
365
382
|
DEFINE_bool(log_handles, false, "Log global handle events.")
|
383
|
+
DEFINE_bool(log_snapshot_positions, false,
|
384
|
+
"log positions of (de)serialized objects in the snapshot.")
|
366
385
|
DEFINE_bool(log_state_changes, false, "Log state changes.")
|
367
386
|
DEFINE_bool(log_suspect, false, "Log suspect operations.")
|
368
387
|
DEFINE_bool(log_producers, false, "Log stack traces of JS objects allocations.")
|
@@ -375,6 +394,8 @@ DEFINE_bool(prof_auto, true,
|
|
375
394
|
DEFINE_bool(prof_lazy, false,
|
376
395
|
"Used with --prof, only does sampling and logging"
|
377
396
|
" when profiler is active (implies --noprof_auto).")
|
397
|
+
DEFINE_bool(prof_browser_mode, true,
|
398
|
+
"Used with --prof, turns on browser-compatible mode for profiling.")
|
378
399
|
DEFINE_bool(log_regexp, false, "Log regular expression execution.")
|
379
400
|
DEFINE_bool(sliding_state_window, false,
|
380
401
|
"Update sliding state window counters.")
|
File without changes
|
File without changes
|
@@ -0,0 +1,763 @@
|
|
1
|
+
// Copyright 2010 the V8 project authors. All rights reserved.
|
2
|
+
// Redistribution and use in source and binary forms, with or without
|
3
|
+
// modification, are permitted provided that the following conditions are
|
4
|
+
// met:
|
5
|
+
//
|
6
|
+
// * Redistributions of source code must retain the above copyright
|
7
|
+
// notice, this list of conditions and the following disclaimer.
|
8
|
+
// * Redistributions in binary form must reproduce the above
|
9
|
+
// copyright notice, this list of conditions and the following
|
10
|
+
// disclaimer in the documentation and/or other materials provided
|
11
|
+
// with the distribution.
|
12
|
+
// * Neither the name of Google Inc. nor the names of its
|
13
|
+
// contributors may be used to endorse or promote products derived
|
14
|
+
// from this software without specific prior written permission.
|
15
|
+
//
|
16
|
+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
17
|
+
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
18
|
+
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
19
|
+
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
20
|
+
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21
|
+
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22
|
+
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
23
|
+
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
24
|
+
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
25
|
+
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
26
|
+
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
27
|
+
|
28
|
+
#include "flow-graph.h"
|
29
|
+
#include "scopes.h"
|
30
|
+
|
31
|
+
namespace v8 {
|
32
|
+
namespace internal {
|
33
|
+
|
34
|
+
void BasicBlock::BuildTraversalOrder(ZoneList<BasicBlock*>* preorder,
|
35
|
+
ZoneList<BasicBlock*>* postorder,
|
36
|
+
bool mark) {
|
37
|
+
if (mark_ == mark) return;
|
38
|
+
mark_ = mark;
|
39
|
+
preorder->Add(this);
|
40
|
+
if (right_successor_ != NULL) {
|
41
|
+
right_successor_->BuildTraversalOrder(preorder, postorder, mark);
|
42
|
+
}
|
43
|
+
if (left_successor_ != NULL) {
|
44
|
+
left_successor_->BuildTraversalOrder(preorder, postorder, mark);
|
45
|
+
}
|
46
|
+
postorder->Add(this);
|
47
|
+
}
|
48
|
+
|
49
|
+
|
50
|
+
FlowGraph* FlowGraphBuilder::Build(FunctionLiteral* lit) {
|
51
|
+
// Create new entry and exit nodes. These will not change during
|
52
|
+
// construction.
|
53
|
+
entry_ = new BasicBlock(NULL);
|
54
|
+
exit_ = new BasicBlock(NULL);
|
55
|
+
// Begin accumulating instructions in the entry block.
|
56
|
+
current_ = entry_;
|
57
|
+
|
58
|
+
VisitDeclarations(lit->scope()->declarations());
|
59
|
+
VisitStatements(lit->body());
|
60
|
+
// In the event of stack overflow or failure to handle a syntactic
|
61
|
+
// construct, return an invalid flow graph.
|
62
|
+
if (HasStackOverflow()) return new FlowGraph(NULL, NULL);
|
63
|
+
|
64
|
+
// If current is not the exit, add a link to the exit.
|
65
|
+
if (current_ != exit_) {
|
66
|
+
// If current already has a successor (i.e., will be a branch node) and
|
67
|
+
// if the exit already has a predecessor, insert an empty block to
|
68
|
+
// maintain edge split form.
|
69
|
+
if (current_->HasSuccessor() && exit_->HasPredecessor()) {
|
70
|
+
current_ = new BasicBlock(current_);
|
71
|
+
}
|
72
|
+
Literal* undefined = new Literal(Factory::undefined_value());
|
73
|
+
current_->AddInstruction(new ReturnStatement(undefined));
|
74
|
+
exit_->AddPredecessor(current_);
|
75
|
+
}
|
76
|
+
|
77
|
+
FlowGraph* graph = new FlowGraph(entry_, exit_);
|
78
|
+
bool mark = !entry_->GetMark();
|
79
|
+
entry_->BuildTraversalOrder(graph->preorder(), graph->postorder(), mark);
|
80
|
+
|
81
|
+
#ifdef DEBUG
|
82
|
+
// Number the nodes in reverse postorder.
|
83
|
+
int n = 0;
|
84
|
+
for (int i = graph->postorder()->length() - 1; i >= 0; --i) {
|
85
|
+
graph->postorder()->at(i)->set_number(n++);
|
86
|
+
}
|
87
|
+
#endif
|
88
|
+
|
89
|
+
return graph;
|
90
|
+
}
|
91
|
+
|
92
|
+
|
93
|
+
void FlowGraphBuilder::VisitDeclaration(Declaration* decl) {
|
94
|
+
Variable* var = decl->proxy()->AsVariable();
|
95
|
+
Slot* slot = var->slot();
|
96
|
+
// We allow only declarations that do not require code generation.
|
97
|
+
// The following all require code generation: global variables and
|
98
|
+
// functions, variables with slot type LOOKUP, declarations with
|
99
|
+
// mode CONST, and functions.
|
100
|
+
|
101
|
+
if (var->is_global() ||
|
102
|
+
(slot != NULL && slot->type() == Slot::LOOKUP) ||
|
103
|
+
decl->mode() == Variable::CONST ||
|
104
|
+
decl->fun() != NULL) {
|
105
|
+
// Here and in the rest of the flow graph builder we indicate an
|
106
|
+
// unsupported syntactic construct by setting the stack overflow
|
107
|
+
// flag on the visitor. This causes bailout of the visitor.
|
108
|
+
SetStackOverflow();
|
109
|
+
}
|
110
|
+
}
|
111
|
+
|
112
|
+
|
113
|
+
void FlowGraphBuilder::VisitBlock(Block* stmt) {
|
114
|
+
VisitStatements(stmt->statements());
|
115
|
+
}
|
116
|
+
|
117
|
+
|
118
|
+
void FlowGraphBuilder::VisitExpressionStatement(ExpressionStatement* stmt) {
|
119
|
+
Visit(stmt->expression());
|
120
|
+
}
|
121
|
+
|
122
|
+
|
123
|
+
void FlowGraphBuilder::VisitEmptyStatement(EmptyStatement* stmt) {
|
124
|
+
// Nothing to do.
|
125
|
+
}
|
126
|
+
|
127
|
+
|
128
|
+
void FlowGraphBuilder::VisitIfStatement(IfStatement* stmt) {
|
129
|
+
// Build a diamond in the flow graph. First accumulate the instructions
|
130
|
+
// of the test in the current basic block.
|
131
|
+
Visit(stmt->condition());
|
132
|
+
|
133
|
+
// Remember the branch node and accumulate the true branch as its left
|
134
|
+
// successor. This relies on the successors being added left to right.
|
135
|
+
BasicBlock* branch = current_;
|
136
|
+
current_ = new BasicBlock(branch);
|
137
|
+
Visit(stmt->then_statement());
|
138
|
+
|
139
|
+
// Construct a join node and then accumulate the false branch in a fresh
|
140
|
+
// successor of the branch node.
|
141
|
+
BasicBlock* join = new BasicBlock(current_);
|
142
|
+
current_ = new BasicBlock(branch);
|
143
|
+
Visit(stmt->else_statement());
|
144
|
+
join->AddPredecessor(current_);
|
145
|
+
|
146
|
+
current_ = join;
|
147
|
+
}
|
148
|
+
|
149
|
+
|
150
|
+
void FlowGraphBuilder::VisitContinueStatement(ContinueStatement* stmt) {
|
151
|
+
SetStackOverflow();
|
152
|
+
}
|
153
|
+
|
154
|
+
|
155
|
+
void FlowGraphBuilder::VisitBreakStatement(BreakStatement* stmt) {
|
156
|
+
SetStackOverflow();
|
157
|
+
}
|
158
|
+
|
159
|
+
|
160
|
+
void FlowGraphBuilder::VisitReturnStatement(ReturnStatement* stmt) {
|
161
|
+
SetStackOverflow();
|
162
|
+
}
|
163
|
+
|
164
|
+
|
165
|
+
void FlowGraphBuilder::VisitWithEnterStatement(WithEnterStatement* stmt) {
|
166
|
+
SetStackOverflow();
|
167
|
+
}
|
168
|
+
|
169
|
+
|
170
|
+
void FlowGraphBuilder::VisitWithExitStatement(WithExitStatement* stmt) {
|
171
|
+
SetStackOverflow();
|
172
|
+
}
|
173
|
+
|
174
|
+
|
175
|
+
void FlowGraphBuilder::VisitSwitchStatement(SwitchStatement* stmt) {
|
176
|
+
SetStackOverflow();
|
177
|
+
}
|
178
|
+
|
179
|
+
|
180
|
+
void FlowGraphBuilder::VisitDoWhileStatement(DoWhileStatement* stmt) {
|
181
|
+
SetStackOverflow();
|
182
|
+
}
|
183
|
+
|
184
|
+
|
185
|
+
void FlowGraphBuilder::VisitWhileStatement(WhileStatement* stmt) {
|
186
|
+
SetStackOverflow();
|
187
|
+
}
|
188
|
+
|
189
|
+
|
190
|
+
void FlowGraphBuilder::VisitForStatement(ForStatement* stmt) {
|
191
|
+
// Build a loop in the flow graph. First accumulate the instructions of
|
192
|
+
// the initializer in the current basic block.
|
193
|
+
if (stmt->init() != NULL) Visit(stmt->init());
|
194
|
+
|
195
|
+
// Create a new basic block for the test. This will be the join node.
|
196
|
+
BasicBlock* join = new BasicBlock(current_);
|
197
|
+
current_ = join;
|
198
|
+
if (stmt->cond() != NULL) Visit(stmt->cond());
|
199
|
+
|
200
|
+
// The current node is the branch node. Create a new basic block to begin
|
201
|
+
// the body.
|
202
|
+
BasicBlock* branch = current_;
|
203
|
+
current_ = new BasicBlock(branch);
|
204
|
+
Visit(stmt->body());
|
205
|
+
if (stmt->next() != NULL) Visit(stmt->next());
|
206
|
+
|
207
|
+
// Add the backward edge from the end of the body and continue with the
|
208
|
+
// false arm of the branch.
|
209
|
+
join->AddPredecessor(current_);
|
210
|
+
current_ = new BasicBlock(branch);
|
211
|
+
}
|
212
|
+
|
213
|
+
|
214
|
+
void FlowGraphBuilder::VisitForInStatement(ForInStatement* stmt) {
|
215
|
+
SetStackOverflow();
|
216
|
+
}
|
217
|
+
|
218
|
+
|
219
|
+
void FlowGraphBuilder::VisitTryCatchStatement(TryCatchStatement* stmt) {
|
220
|
+
SetStackOverflow();
|
221
|
+
}
|
222
|
+
|
223
|
+
|
224
|
+
void FlowGraphBuilder::VisitTryFinallyStatement(TryFinallyStatement* stmt) {
|
225
|
+
SetStackOverflow();
|
226
|
+
}
|
227
|
+
|
228
|
+
|
229
|
+
void FlowGraphBuilder::VisitDebuggerStatement(DebuggerStatement* stmt) {
|
230
|
+
SetStackOverflow();
|
231
|
+
}
|
232
|
+
|
233
|
+
|
234
|
+
void FlowGraphBuilder::VisitFunctionLiteral(FunctionLiteral* expr) {
|
235
|
+
SetStackOverflow();
|
236
|
+
}
|
237
|
+
|
238
|
+
|
239
|
+
void FlowGraphBuilder::VisitSharedFunctionInfoLiteral(
|
240
|
+
SharedFunctionInfoLiteral* expr) {
|
241
|
+
SetStackOverflow();
|
242
|
+
}
|
243
|
+
|
244
|
+
|
245
|
+
void FlowGraphBuilder::VisitConditional(Conditional* expr) {
|
246
|
+
SetStackOverflow();
|
247
|
+
}
|
248
|
+
|
249
|
+
|
250
|
+
void FlowGraphBuilder::VisitSlot(Slot* expr) {
|
251
|
+
// Slots do not appear in the AST.
|
252
|
+
UNREACHABLE();
|
253
|
+
}
|
254
|
+
|
255
|
+
|
256
|
+
void FlowGraphBuilder::VisitVariableProxy(VariableProxy* expr) {
|
257
|
+
current_->AddInstruction(expr);
|
258
|
+
}
|
259
|
+
|
260
|
+
|
261
|
+
void FlowGraphBuilder::VisitLiteral(Literal* expr) {
|
262
|
+
current_->AddInstruction(expr);
|
263
|
+
}
|
264
|
+
|
265
|
+
|
266
|
+
void FlowGraphBuilder::VisitRegExpLiteral(RegExpLiteral* expr) {
|
267
|
+
SetStackOverflow();
|
268
|
+
}
|
269
|
+
|
270
|
+
|
271
|
+
void FlowGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
|
272
|
+
SetStackOverflow();
|
273
|
+
}
|
274
|
+
|
275
|
+
|
276
|
+
void FlowGraphBuilder::VisitArrayLiteral(ArrayLiteral* expr) {
|
277
|
+
SetStackOverflow();
|
278
|
+
}
|
279
|
+
|
280
|
+
|
281
|
+
void FlowGraphBuilder::VisitCatchExtensionObject(CatchExtensionObject* expr) {
|
282
|
+
SetStackOverflow();
|
283
|
+
}
|
284
|
+
|
285
|
+
|
286
|
+
void FlowGraphBuilder::VisitAssignment(Assignment* expr) {
|
287
|
+
// There are three basic kinds of assignment: variable assignments,
|
288
|
+
// property assignments, and invalid left-hand sides (which are translated
|
289
|
+
// to "throw ReferenceError" by the parser).
|
290
|
+
Variable* var = expr->target()->AsVariableProxy()->AsVariable();
|
291
|
+
Property* prop = expr->target()->AsProperty();
|
292
|
+
ASSERT(var == NULL || prop == NULL);
|
293
|
+
if (var != NULL) {
|
294
|
+
if (expr->is_compound() && !expr->target()->IsTrivial()) {
|
295
|
+
Visit(expr->target());
|
296
|
+
}
|
297
|
+
if (!expr->value()->IsTrivial()) Visit(expr->value());
|
298
|
+
current_->AddInstruction(expr);
|
299
|
+
|
300
|
+
} else if (prop != NULL) {
|
301
|
+
if (!prop->obj()->IsTrivial()) Visit(prop->obj());
|
302
|
+
if (!prop->key()->IsPropertyName() && !prop->key()->IsTrivial()) {
|
303
|
+
Visit(prop->key());
|
304
|
+
}
|
305
|
+
if (!expr->value()->IsTrivial()) Visit(expr->value());
|
306
|
+
current_->AddInstruction(expr);
|
307
|
+
|
308
|
+
} else {
|
309
|
+
Visit(expr->target());
|
310
|
+
}
|
311
|
+
}
|
312
|
+
|
313
|
+
|
314
|
+
void FlowGraphBuilder::VisitThrow(Throw* expr) {
|
315
|
+
SetStackOverflow();
|
316
|
+
}
|
317
|
+
|
318
|
+
|
319
|
+
void FlowGraphBuilder::VisitProperty(Property* expr) {
|
320
|
+
if (!expr->obj()->IsTrivial()) Visit(expr->obj());
|
321
|
+
if (!expr->key()->IsPropertyName() && !expr->key()->IsTrivial()) {
|
322
|
+
Visit(expr->key());
|
323
|
+
}
|
324
|
+
current_->AddInstruction(expr);
|
325
|
+
}
|
326
|
+
|
327
|
+
|
328
|
+
void FlowGraphBuilder::VisitCall(Call* expr) {
|
329
|
+
Visit(expr->expression());
|
330
|
+
VisitExpressions(expr->arguments());
|
331
|
+
current_->AddInstruction(expr);
|
332
|
+
}
|
333
|
+
|
334
|
+
|
335
|
+
void FlowGraphBuilder::VisitCallNew(CallNew* expr) {
|
336
|
+
SetStackOverflow();
|
337
|
+
}
|
338
|
+
|
339
|
+
|
340
|
+
void FlowGraphBuilder::VisitCallRuntime(CallRuntime* expr) {
|
341
|
+
SetStackOverflow();
|
342
|
+
}
|
343
|
+
|
344
|
+
|
345
|
+
void FlowGraphBuilder::VisitUnaryOperation(UnaryOperation* expr) {
|
346
|
+
switch (expr->op()) {
|
347
|
+
case Token::NOT:
|
348
|
+
case Token::BIT_NOT:
|
349
|
+
case Token::DELETE:
|
350
|
+
case Token::TYPEOF:
|
351
|
+
case Token::VOID:
|
352
|
+
SetStackOverflow();
|
353
|
+
break;
|
354
|
+
|
355
|
+
case Token::ADD:
|
356
|
+
case Token::SUB:
|
357
|
+
Visit(expr->expression());
|
358
|
+
current_->AddInstruction(expr);
|
359
|
+
break;
|
360
|
+
|
361
|
+
default:
|
362
|
+
UNREACHABLE();
|
363
|
+
}
|
364
|
+
}
|
365
|
+
|
366
|
+
|
367
|
+
void FlowGraphBuilder::VisitCountOperation(CountOperation* expr) {
|
368
|
+
Visit(expr->expression());
|
369
|
+
current_->AddInstruction(expr);
|
370
|
+
}
|
371
|
+
|
372
|
+
|
373
|
+
void FlowGraphBuilder::VisitBinaryOperation(BinaryOperation* expr) {
|
374
|
+
switch (expr->op()) {
|
375
|
+
case Token::COMMA:
|
376
|
+
case Token::OR:
|
377
|
+
case Token::AND:
|
378
|
+
SetStackOverflow();
|
379
|
+
break;
|
380
|
+
|
381
|
+
case Token::BIT_OR:
|
382
|
+
case Token::BIT_XOR:
|
383
|
+
case Token::BIT_AND:
|
384
|
+
case Token::SHL:
|
385
|
+
case Token::SAR:
|
386
|
+
case Token::SHR:
|
387
|
+
case Token::ADD:
|
388
|
+
case Token::SUB:
|
389
|
+
case Token::MUL:
|
390
|
+
case Token::DIV:
|
391
|
+
case Token::MOD:
|
392
|
+
if (!expr->left()->IsTrivial()) Visit(expr->left());
|
393
|
+
if (!expr->right()->IsTrivial()) Visit(expr->right());
|
394
|
+
current_->AddInstruction(expr);
|
395
|
+
break;
|
396
|
+
|
397
|
+
default:
|
398
|
+
UNREACHABLE();
|
399
|
+
}
|
400
|
+
}
|
401
|
+
|
402
|
+
|
403
|
+
void FlowGraphBuilder::VisitCompareOperation(CompareOperation* expr) {
|
404
|
+
switch (expr->op()) {
|
405
|
+
case Token::EQ:
|
406
|
+
case Token::NE:
|
407
|
+
case Token::EQ_STRICT:
|
408
|
+
case Token::NE_STRICT:
|
409
|
+
case Token::INSTANCEOF:
|
410
|
+
case Token::IN:
|
411
|
+
SetStackOverflow();
|
412
|
+
break;
|
413
|
+
|
414
|
+
case Token::LT:
|
415
|
+
case Token::GT:
|
416
|
+
case Token::LTE:
|
417
|
+
case Token::GTE:
|
418
|
+
if (!expr->left()->IsTrivial()) Visit(expr->left());
|
419
|
+
if (!expr->right()->IsTrivial()) Visit(expr->right());
|
420
|
+
current_->AddInstruction(expr);
|
421
|
+
break;
|
422
|
+
|
423
|
+
default:
|
424
|
+
UNREACHABLE();
|
425
|
+
}
|
426
|
+
}
|
427
|
+
|
428
|
+
|
429
|
+
void FlowGraphBuilder::VisitThisFunction(ThisFunction* expr) {
|
430
|
+
SetStackOverflow();
|
431
|
+
}
|
432
|
+
|
433
|
+
|
434
|
+
#ifdef DEBUG
|
435
|
+
|
436
|
+
// Print a textual representation of an instruction in a flow graph.
|
437
|
+
class InstructionPrinter: public AstVisitor {
|
438
|
+
public:
|
439
|
+
InstructionPrinter() {}
|
440
|
+
|
441
|
+
private:
|
442
|
+
// Overridden from the base class.
|
443
|
+
virtual void VisitExpressions(ZoneList<Expression*>* exprs);
|
444
|
+
|
445
|
+
// AST node visit functions.
|
446
|
+
#define DECLARE_VISIT(type) virtual void Visit##type(type* node);
|
447
|
+
AST_NODE_LIST(DECLARE_VISIT)
|
448
|
+
#undef DECLARE_VISIT
|
449
|
+
|
450
|
+
DISALLOW_COPY_AND_ASSIGN(InstructionPrinter);
|
451
|
+
};
|
452
|
+
|
453
|
+
|
454
|
+
static void PrintSubexpression(Expression* expr) {
|
455
|
+
if (!expr->IsTrivial()) {
|
456
|
+
PrintF("@%d", expr->num());
|
457
|
+
} else if (expr->AsLiteral() != NULL) {
|
458
|
+
expr->AsLiteral()->handle()->Print();
|
459
|
+
} else if (expr->AsVariableProxy() != NULL) {
|
460
|
+
PrintF("%s", *expr->AsVariableProxy()->name()->ToCString());
|
461
|
+
} else {
|
462
|
+
UNREACHABLE();
|
463
|
+
}
|
464
|
+
}
|
465
|
+
|
466
|
+
|
467
|
+
void InstructionPrinter::VisitExpressions(ZoneList<Expression*>* exprs) {
|
468
|
+
for (int i = 0; i < exprs->length(); ++i) {
|
469
|
+
if (i != 0) PrintF(", ");
|
470
|
+
PrintF("@%d", exprs->at(i)->num());
|
471
|
+
}
|
472
|
+
}
|
473
|
+
|
474
|
+
|
475
|
+
// We only define printing functions for the node types that can occur as
|
476
|
+
// instructions in a flow graph. The rest are unreachable.
|
477
|
+
void InstructionPrinter::VisitDeclaration(Declaration* decl) {
|
478
|
+
UNREACHABLE();
|
479
|
+
}
|
480
|
+
|
481
|
+
|
482
|
+
void InstructionPrinter::VisitBlock(Block* stmt) {
|
483
|
+
UNREACHABLE();
|
484
|
+
}
|
485
|
+
|
486
|
+
|
487
|
+
void InstructionPrinter::VisitExpressionStatement(ExpressionStatement* stmt) {
|
488
|
+
UNREACHABLE();
|
489
|
+
}
|
490
|
+
|
491
|
+
|
492
|
+
void InstructionPrinter::VisitEmptyStatement(EmptyStatement* stmt) {
|
493
|
+
UNREACHABLE();
|
494
|
+
}
|
495
|
+
|
496
|
+
|
497
|
+
void InstructionPrinter::VisitIfStatement(IfStatement* stmt) {
|
498
|
+
UNREACHABLE();
|
499
|
+
}
|
500
|
+
|
501
|
+
|
502
|
+
void InstructionPrinter::VisitContinueStatement(ContinueStatement* stmt) {
|
503
|
+
UNREACHABLE();
|
504
|
+
}
|
505
|
+
|
506
|
+
|
507
|
+
void InstructionPrinter::VisitBreakStatement(BreakStatement* stmt) {
|
508
|
+
UNREACHABLE();
|
509
|
+
}
|
510
|
+
|
511
|
+
|
512
|
+
void InstructionPrinter::VisitReturnStatement(ReturnStatement* stmt) {
|
513
|
+
PrintF("return ");
|
514
|
+
PrintSubexpression(stmt->expression());
|
515
|
+
}
|
516
|
+
|
517
|
+
|
518
|
+
void InstructionPrinter::VisitWithEnterStatement(WithEnterStatement* stmt) {
|
519
|
+
UNREACHABLE();
|
520
|
+
}
|
521
|
+
|
522
|
+
|
523
|
+
void InstructionPrinter::VisitWithExitStatement(WithExitStatement* stmt) {
|
524
|
+
UNREACHABLE();
|
525
|
+
}
|
526
|
+
|
527
|
+
|
528
|
+
void InstructionPrinter::VisitSwitchStatement(SwitchStatement* stmt) {
|
529
|
+
UNREACHABLE();
|
530
|
+
}
|
531
|
+
|
532
|
+
|
533
|
+
void InstructionPrinter::VisitDoWhileStatement(DoWhileStatement* stmt) {
|
534
|
+
UNREACHABLE();
|
535
|
+
}
|
536
|
+
|
537
|
+
|
538
|
+
void InstructionPrinter::VisitWhileStatement(WhileStatement* stmt) {
|
539
|
+
UNREACHABLE();
|
540
|
+
}
|
541
|
+
|
542
|
+
|
543
|
+
void InstructionPrinter::VisitForStatement(ForStatement* stmt) {
|
544
|
+
UNREACHABLE();
|
545
|
+
}
|
546
|
+
|
547
|
+
|
548
|
+
void InstructionPrinter::VisitForInStatement(ForInStatement* stmt) {
|
549
|
+
UNREACHABLE();
|
550
|
+
}
|
551
|
+
|
552
|
+
|
553
|
+
void InstructionPrinter::VisitTryCatchStatement(TryCatchStatement* stmt) {
|
554
|
+
UNREACHABLE();
|
555
|
+
}
|
556
|
+
|
557
|
+
|
558
|
+
void InstructionPrinter::VisitTryFinallyStatement(TryFinallyStatement* stmt) {
|
559
|
+
UNREACHABLE();
|
560
|
+
}
|
561
|
+
|
562
|
+
|
563
|
+
void InstructionPrinter::VisitDebuggerStatement(DebuggerStatement* stmt) {
|
564
|
+
UNREACHABLE();
|
565
|
+
}
|
566
|
+
|
567
|
+
|
568
|
+
void InstructionPrinter::VisitFunctionLiteral(FunctionLiteral* expr) {
|
569
|
+
UNREACHABLE();
|
570
|
+
}
|
571
|
+
|
572
|
+
|
573
|
+
void InstructionPrinter::VisitSharedFunctionInfoLiteral(
|
574
|
+
SharedFunctionInfoLiteral* expr) {
|
575
|
+
UNREACHABLE();
|
576
|
+
}
|
577
|
+
|
578
|
+
|
579
|
+
void InstructionPrinter::VisitConditional(Conditional* expr) {
|
580
|
+
UNREACHABLE();
|
581
|
+
}
|
582
|
+
|
583
|
+
|
584
|
+
void InstructionPrinter::VisitSlot(Slot* expr) {
|
585
|
+
UNREACHABLE();
|
586
|
+
}
|
587
|
+
|
588
|
+
|
589
|
+
void InstructionPrinter::VisitVariableProxy(VariableProxy* expr) {
|
590
|
+
Variable* var = expr->AsVariable();
|
591
|
+
if (var != NULL) {
|
592
|
+
PrintF("%s", *var->name()->ToCString());
|
593
|
+
} else {
|
594
|
+
ASSERT(expr->AsProperty() != NULL);
|
595
|
+
Visit(expr->AsProperty());
|
596
|
+
}
|
597
|
+
}
|
598
|
+
|
599
|
+
|
600
|
+
void InstructionPrinter::VisitLiteral(Literal* expr) {
|
601
|
+
expr->handle()->Print();
|
602
|
+
}
|
603
|
+
|
604
|
+
|
605
|
+
void InstructionPrinter::VisitRegExpLiteral(RegExpLiteral* expr) {
|
606
|
+
UNREACHABLE();
|
607
|
+
}
|
608
|
+
|
609
|
+
|
610
|
+
void InstructionPrinter::VisitObjectLiteral(ObjectLiteral* expr) {
|
611
|
+
UNREACHABLE();
|
612
|
+
}
|
613
|
+
|
614
|
+
|
615
|
+
void InstructionPrinter::VisitArrayLiteral(ArrayLiteral* expr) {
|
616
|
+
UNREACHABLE();
|
617
|
+
}
|
618
|
+
|
619
|
+
|
620
|
+
void InstructionPrinter::VisitCatchExtensionObject(
|
621
|
+
CatchExtensionObject* expr) {
|
622
|
+
UNREACHABLE();
|
623
|
+
}
|
624
|
+
|
625
|
+
|
626
|
+
void InstructionPrinter::VisitAssignment(Assignment* expr) {
|
627
|
+
Variable* var = expr->target()->AsVariableProxy()->AsVariable();
|
628
|
+
Property* prop = expr->target()->AsProperty();
|
629
|
+
|
630
|
+
// Print the left-hand side.
|
631
|
+
Visit(expr->target());
|
632
|
+
if (var == NULL && prop == NULL) return; // Throw reference error.
|
633
|
+
PrintF(" = ");
|
634
|
+
// For compound assignments, print the left-hand side again and the
|
635
|
+
// corresponding binary operator.
|
636
|
+
if (expr->is_compound()) {
|
637
|
+
PrintSubexpression(expr->target());
|
638
|
+
PrintF(" %s ", Token::String(expr->binary_op()));
|
639
|
+
}
|
640
|
+
|
641
|
+
// Print the right-hand side.
|
642
|
+
PrintSubexpression(expr->value());
|
643
|
+
}
|
644
|
+
|
645
|
+
|
646
|
+
void InstructionPrinter::VisitThrow(Throw* expr) {
|
647
|
+
UNREACHABLE();
|
648
|
+
}
|
649
|
+
|
650
|
+
|
651
|
+
void InstructionPrinter::VisitProperty(Property* expr) {
|
652
|
+
PrintSubexpression(expr->obj());
|
653
|
+
if (expr->key()->IsPropertyName()) {
|
654
|
+
PrintF(".");
|
655
|
+
ASSERT(expr->key()->AsLiteral() != NULL);
|
656
|
+
expr->key()->AsLiteral()->handle()->Print();
|
657
|
+
} else {
|
658
|
+
PrintF("[");
|
659
|
+
PrintSubexpression(expr->key());
|
660
|
+
PrintF("]");
|
661
|
+
}
|
662
|
+
}
|
663
|
+
|
664
|
+
|
665
|
+
void InstructionPrinter::VisitCall(Call* expr) {
|
666
|
+
PrintF("@%d(", expr->expression()->num());
|
667
|
+
VisitExpressions(expr->arguments());
|
668
|
+
PrintF(")");
|
669
|
+
}
|
670
|
+
|
671
|
+
|
672
|
+
void InstructionPrinter::VisitCallNew(CallNew* expr) {
|
673
|
+
UNREACHABLE();
|
674
|
+
}
|
675
|
+
|
676
|
+
|
677
|
+
void InstructionPrinter::VisitCallRuntime(CallRuntime* expr) {
|
678
|
+
UNREACHABLE();
|
679
|
+
}
|
680
|
+
|
681
|
+
|
682
|
+
void InstructionPrinter::VisitUnaryOperation(UnaryOperation* expr) {
|
683
|
+
PrintF("%s(@%d)", Token::String(expr->op()), expr->expression()->num());
|
684
|
+
}
|
685
|
+
|
686
|
+
|
687
|
+
void InstructionPrinter::VisitCountOperation(CountOperation* expr) {
|
688
|
+
if (expr->is_prefix()) {
|
689
|
+
PrintF("%s@%d", Token::String(expr->op()), expr->expression()->num());
|
690
|
+
} else {
|
691
|
+
PrintF("@%d%s", expr->expression()->num(), Token::String(expr->op()));
|
692
|
+
}
|
693
|
+
}
|
694
|
+
|
695
|
+
|
696
|
+
void InstructionPrinter::VisitBinaryOperation(BinaryOperation* expr) {
|
697
|
+
PrintSubexpression(expr->left());
|
698
|
+
PrintF(" %s ", Token::String(expr->op()));
|
699
|
+
PrintSubexpression(expr->right());
|
700
|
+
}
|
701
|
+
|
702
|
+
|
703
|
+
void InstructionPrinter::VisitCompareOperation(CompareOperation* expr) {
|
704
|
+
PrintSubexpression(expr->left());
|
705
|
+
PrintF(" %s ", Token::String(expr->op()));
|
706
|
+
PrintSubexpression(expr->right());
|
707
|
+
}
|
708
|
+
|
709
|
+
|
710
|
+
void InstructionPrinter::VisitThisFunction(ThisFunction* expr) {
|
711
|
+
UNREACHABLE();
|
712
|
+
}
|
713
|
+
|
714
|
+
|
715
|
+
int BasicBlock::PrintAsText(int instruction_number) {
|
716
|
+
// Print a label for all blocks except the entry.
|
717
|
+
if (HasPredecessor()) {
|
718
|
+
PrintF("L%d:", number());
|
719
|
+
}
|
720
|
+
|
721
|
+
// Number and print the instructions. Since AST child nodes are visited
|
722
|
+
// before their parents, the parent nodes can refer to them by number.
|
723
|
+
InstructionPrinter printer;
|
724
|
+
for (int i = 0; i < instructions_.length(); ++i) {
|
725
|
+
PrintF("\n%d ", instruction_number);
|
726
|
+
instructions_[i]->set_num(instruction_number++);
|
727
|
+
instructions_[i]->Accept(&printer);
|
728
|
+
}
|
729
|
+
|
730
|
+
// If this is the exit, print "exit". If there is a single successor,
|
731
|
+
// print "goto" successor on a separate line. If there are two
|
732
|
+
// successors, print "goto" successor on the same line as the last
|
733
|
+
// instruction in the block. There is a blank line between blocks (and
|
734
|
+
// after the last one).
|
735
|
+
if (left_successor_ == NULL) {
|
736
|
+
PrintF("\nexit\n\n");
|
737
|
+
} else if (right_successor_ == NULL) {
|
738
|
+
PrintF("\ngoto L%d\n\n", left_successor_->number());
|
739
|
+
} else {
|
740
|
+
PrintF(", goto (L%d, L%d)\n\n",
|
741
|
+
left_successor_->number(),
|
742
|
+
right_successor_->number());
|
743
|
+
}
|
744
|
+
|
745
|
+
return instruction_number;
|
746
|
+
}
|
747
|
+
|
748
|
+
|
749
|
+
void FlowGraph::PrintAsText(Handle<String> name) {
|
750
|
+
PrintF("\n==== name = \"%s\" ====\n", *name->ToCString());
|
751
|
+
// Print nodes in reverse postorder. Note that AST node numbers are used
|
752
|
+
// during printing of instructions and thus their current values are
|
753
|
+
// destroyed.
|
754
|
+
int number = 0;
|
755
|
+
for (int i = postorder_.length() - 1; i >= 0; --i) {
|
756
|
+
number = postorder_[i]->PrintAsText(number);
|
757
|
+
}
|
758
|
+
}
|
759
|
+
|
760
|
+
#endif // DEBUG
|
761
|
+
|
762
|
+
|
763
|
+
} } // namespace v8::internal
|