therubyracer 0.9.0beta2 → 0.9.0beta3
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/.gitmodules +3 -0
- data/ext/v8/upstream/Makefile +1 -2
- data/ext/v8/upstream/v8/.gitignore +33 -0
- data/ext/v8/upstream/v8/AUTHORS +42 -0
- data/ext/v8/upstream/v8/ChangeLog +2663 -0
- data/ext/v8/upstream/{3.1.8 → v8}/LICENSE +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/LICENSE.strongtalk +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/LICENSE.v8 +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/LICENSE.valgrind +0 -0
- data/ext/v8/upstream/v8/SConstruct +1473 -0
- data/ext/v8/upstream/{3.1.8 → v8}/build/README.txt +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/build/all.gyp +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/build/armu.gypi +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/build/common.gypi +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/build/gyp_v8 +0 -0
- data/ext/v8/upstream/v8/include/v8-debug.h +394 -0
- data/ext/v8/upstream/v8/include/v8-preparser.h +116 -0
- data/ext/v8/upstream/v8/include/v8-profiler.h +505 -0
- data/ext/v8/upstream/v8/include/v8-testing.h +104 -0
- data/ext/v8/upstream/v8/include/v8.h +4000 -0
- data/ext/v8/upstream/{3.1.8 → v8}/include/v8stdint.h +0 -0
- data/ext/v8/upstream/v8/preparser/SConscript +38 -0
- data/ext/v8/upstream/v8/preparser/preparser-process.cc +169 -0
- data/ext/v8/upstream/v8/src/SConscript +380 -0
- data/ext/v8/upstream/v8/src/accessors.cc +766 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/accessors.h +0 -0
- data/ext/v8/upstream/v8/src/allocation-inl.h +49 -0
- data/ext/v8/upstream/v8/src/allocation.cc +122 -0
- data/ext/v8/upstream/v8/src/allocation.h +143 -0
- data/ext/v8/upstream/v8/src/api.cc +5678 -0
- data/ext/v8/upstream/v8/src/api.h +572 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/apinatives.js +0 -0
- data/ext/v8/upstream/v8/src/apiutils.h +73 -0
- data/ext/v8/upstream/v8/src/arguments.h +116 -0
- data/ext/v8/upstream/v8/src/arm/assembler-arm-inl.h +353 -0
- data/ext/v8/upstream/v8/src/arm/assembler-arm.cc +2877 -0
- data/ext/v8/upstream/v8/src/arm/assembler-arm.h +1382 -0
- data/ext/v8/upstream/v8/src/arm/builtins-arm.cc +1634 -0
- data/ext/v8/upstream/v8/src/arm/code-stubs-arm.cc +6917 -0
- data/ext/v8/upstream/v8/src/arm/code-stubs-arm.h +623 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/arm/codegen-arm-inl.h +0 -0
- data/ext/v8/upstream/v8/src/arm/codegen-arm.cc +7437 -0
- data/ext/v8/upstream/v8/src/arm/codegen-arm.h +595 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/arm/constants-arm.cc +0 -0
- data/ext/v8/upstream/v8/src/arm/constants-arm.h +778 -0
- data/ext/v8/upstream/v8/src/arm/cpu-arm.cc +149 -0
- data/ext/v8/upstream/v8/src/arm/debug-arm.cc +317 -0
- data/ext/v8/upstream/v8/src/arm/deoptimizer-arm.cc +737 -0
- data/ext/v8/upstream/v8/src/arm/disasm-arm.cc +1503 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/arm/frames-arm.cc +0 -0
- data/ext/v8/upstream/v8/src/arm/frames-arm.h +168 -0
- data/ext/v8/upstream/v8/src/arm/full-codegen-arm.cc +4374 -0
- data/ext/v8/upstream/v8/src/arm/ic-arm.cc +1793 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/arm/jump-target-arm.cc +0 -0
- data/ext/v8/upstream/v8/src/arm/lithium-arm.cc +2120 -0
- data/ext/v8/upstream/v8/src/arm/lithium-arm.h +2179 -0
- data/ext/v8/upstream/v8/src/arm/lithium-codegen-arm.cc +4132 -0
- data/ext/v8/upstream/v8/src/arm/lithium-codegen-arm.h +329 -0
- data/ext/v8/upstream/v8/src/arm/lithium-gap-resolver-arm.cc +305 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/arm/lithium-gap-resolver-arm.h +0 -0
- data/ext/v8/upstream/v8/src/arm/macro-assembler-arm.cc +2939 -0
- data/ext/v8/upstream/v8/src/arm/macro-assembler-arm.h +1071 -0
- data/ext/v8/upstream/v8/src/arm/regexp-macro-assembler-arm.cc +1287 -0
- data/ext/v8/upstream/v8/src/arm/regexp-macro-assembler-arm.h +253 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/arm/register-allocator-arm-inl.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/arm/register-allocator-arm.cc +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/arm/register-allocator-arm.h +0 -0
- data/ext/v8/upstream/v8/src/arm/simulator-arm.cc +3288 -0
- data/ext/v8/upstream/v8/src/arm/simulator-arm.h +413 -0
- data/ext/v8/upstream/v8/src/arm/stub-cache-arm.cc +4034 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/arm/virtual-frame-arm-inl.h +0 -0
- data/ext/v8/upstream/v8/src/arm/virtual-frame-arm.cc +843 -0
- data/ext/v8/upstream/v8/src/arm/virtual-frame-arm.h +523 -0
- data/ext/v8/upstream/v8/src/array.js +1249 -0
- data/ext/v8/upstream/v8/src/assembler.cc +1067 -0
- data/ext/v8/upstream/v8/src/assembler.h +823 -0
- data/ext/v8/upstream/v8/src/ast-inl.h +112 -0
- data/ext/v8/upstream/v8/src/ast.cc +1078 -0
- data/ext/v8/upstream/v8/src/ast.h +2234 -0
- data/ext/v8/upstream/v8/src/atomicops.h +167 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/atomicops_internals_arm_gcc.h +0 -0
- data/ext/v8/upstream/v8/src/atomicops_internals_mips_gcc.h +169 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/atomicops_internals_x86_gcc.cc +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/atomicops_internals_x86_gcc.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/atomicops_internals_x86_macosx.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/atomicops_internals_x86_msvc.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/bignum-dtoa.cc +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/bignum-dtoa.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/bignum.cc +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/bignum.h +0 -0
- data/ext/v8/upstream/v8/src/bootstrapper.cc +2138 -0
- data/ext/v8/upstream/v8/src/bootstrapper.h +185 -0
- data/ext/v8/upstream/v8/src/builtins.cc +1708 -0
- data/ext/v8/upstream/v8/src/builtins.h +368 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/bytecodes-irregexp.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/cached-powers.cc +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/cached-powers.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/char-predicates-inl.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/char-predicates.h +0 -0
- data/ext/v8/upstream/v8/src/checks.cc +110 -0
- data/ext/v8/upstream/v8/src/checks.h +296 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/circular-queue-inl.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/circular-queue.cc +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/circular-queue.h +0 -0
- data/ext/v8/upstream/v8/src/code-stubs.cc +240 -0
- data/ext/v8/upstream/v8/src/code-stubs.h +971 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/code.h +0 -0
- data/ext/v8/upstream/v8/src/codegen-inl.h +68 -0
- data/ext/v8/upstream/v8/src/codegen.cc +505 -0
- data/ext/v8/upstream/v8/src/codegen.h +245 -0
- data/ext/v8/upstream/v8/src/compilation-cache.cc +540 -0
- data/ext/v8/upstream/v8/src/compilation-cache.h +287 -0
- data/ext/v8/upstream/v8/src/compiler.cc +792 -0
- data/ext/v8/upstream/v8/src/compiler.h +307 -0
- data/ext/v8/upstream/v8/src/contexts.cc +327 -0
- data/ext/v8/upstream/v8/src/contexts.h +382 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/conversions-inl.h +0 -0
- data/ext/v8/upstream/v8/src/conversions.cc +1125 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/conversions.h +0 -0
- data/ext/v8/upstream/v8/src/counters.cc +93 -0
- data/ext/v8/upstream/v8/src/counters.h +254 -0
- data/ext/v8/upstream/v8/src/cpu-profiler-inl.h +101 -0
- data/ext/v8/upstream/v8/src/cpu-profiler.cc +606 -0
- data/ext/v8/upstream/v8/src/cpu-profiler.h +305 -0
- data/ext/v8/upstream/v8/src/cpu.h +67 -0
- data/ext/v8/upstream/v8/src/d8-debug.cc +367 -0
- data/ext/v8/upstream/v8/src/d8-debug.h +158 -0
- data/ext/v8/upstream/v8/src/d8-posix.cc +695 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/d8-readline.cc +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/d8-windows.cc +0 -0
- data/ext/v8/upstream/v8/src/d8.cc +796 -0
- data/ext/v8/upstream/v8/src/d8.gyp +88 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/d8.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/d8.js +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/data-flow.cc +0 -0
- data/ext/v8/upstream/v8/src/data-flow.h +379 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/date.js +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/dateparser-inl.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/dateparser.cc +0 -0
- data/ext/v8/upstream/v8/src/dateparser.h +265 -0
- data/ext/v8/upstream/v8/src/debug-agent.cc +447 -0
- data/ext/v8/upstream/v8/src/debug-agent.h +129 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/debug-debugger.js +0 -0
- data/ext/v8/upstream/v8/src/debug.cc +3188 -0
- data/ext/v8/upstream/v8/src/debug.h +1055 -0
- data/ext/v8/upstream/v8/src/deoptimizer.cc +1296 -0
- data/ext/v8/upstream/v8/src/deoptimizer.h +629 -0
- data/ext/v8/upstream/v8/src/disasm.h +80 -0
- data/ext/v8/upstream/v8/src/disassembler.cc +339 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/disassembler.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/diy-fp.cc +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/diy-fp.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/double.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/dtoa.cc +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/dtoa.h +0 -0
- data/ext/v8/upstream/v8/src/execution.cc +791 -0
- data/ext/v8/upstream/v8/src/execution.h +291 -0
- data/ext/v8/upstream/v8/src/extensions/experimental/break-iterator.cc +250 -0
- data/ext/v8/upstream/v8/src/extensions/experimental/break-iterator.h +89 -0
- data/ext/v8/upstream/v8/src/extensions/experimental/experimental.gyp +55 -0
- data/ext/v8/upstream/v8/src/extensions/experimental/i18n-extension.cc +284 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/extensions/experimental/i18n-extension.h +0 -0
- data/ext/v8/upstream/v8/src/extensions/externalize-string-extension.cc +141 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/extensions/externalize-string-extension.h +0 -0
- data/ext/v8/upstream/v8/src/extensions/gc-extension.cc +58 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/extensions/gc-extension.h +0 -0
- data/ext/v8/upstream/v8/src/factory.cc +1194 -0
- data/ext/v8/upstream/v8/src/factory.h +436 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/fast-dtoa.cc +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/fast-dtoa.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/fixed-dtoa.cc +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/fixed-dtoa.h +0 -0
- data/ext/v8/upstream/v8/src/flag-definitions.h +556 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/flags.cc +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/flags.h +0 -0
- data/ext/v8/upstream/v8/src/frame-element.cc +37 -0
- data/ext/v8/upstream/v8/src/frame-element.h +269 -0
- data/ext/v8/upstream/v8/src/frames-inl.h +236 -0
- data/ext/v8/upstream/v8/src/frames.cc +1273 -0
- data/ext/v8/upstream/v8/src/frames.h +854 -0
- data/ext/v8/upstream/v8/src/full-codegen.cc +1385 -0
- data/ext/v8/upstream/v8/src/full-codegen.h +753 -0
- data/ext/v8/upstream/v8/src/func-name-inferrer.cc +91 -0
- data/ext/v8/upstream/v8/src/func-name-inferrer.h +111 -0
- data/ext/v8/upstream/v8/src/gdb-jit.cc +1548 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/gdb-jit.h +0 -0
- data/ext/v8/upstream/v8/src/global-handles.cc +596 -0
- data/ext/v8/upstream/v8/src/global-handles.h +239 -0
- data/ext/v8/upstream/v8/src/globals.h +325 -0
- data/ext/v8/upstream/v8/src/handles-inl.h +177 -0
- data/ext/v8/upstream/v8/src/handles.cc +965 -0
- data/ext/v8/upstream/v8/src/handles.h +372 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/hashmap.cc +0 -0
- data/ext/v8/upstream/v8/src/hashmap.h +121 -0
- data/ext/v8/upstream/v8/src/heap-inl.h +703 -0
- data/ext/v8/upstream/v8/src/heap-profiler.cc +1173 -0
- data/ext/v8/upstream/v8/src/heap-profiler.h +396 -0
- data/ext/v8/upstream/v8/src/heap.cc +5856 -0
- data/ext/v8/upstream/v8/src/heap.h +2264 -0
- data/ext/v8/upstream/v8/src/hydrogen-instructions.cc +1639 -0
- data/ext/v8/upstream/v8/src/hydrogen-instructions.h +3657 -0
- data/ext/v8/upstream/v8/src/hydrogen.cc +6011 -0
- data/ext/v8/upstream/v8/src/hydrogen.h +1137 -0
- data/ext/v8/upstream/v8/src/ia32/assembler-ia32-inl.h +430 -0
- data/ext/v8/upstream/v8/src/ia32/assembler-ia32.cc +2846 -0
- data/ext/v8/upstream/v8/src/ia32/assembler-ia32.h +1159 -0
- data/ext/v8/upstream/v8/src/ia32/builtins-ia32.cc +1596 -0
- data/ext/v8/upstream/v8/src/ia32/code-stubs-ia32.cc +6549 -0
- data/ext/v8/upstream/v8/src/ia32/code-stubs-ia32.h +495 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/codegen-ia32-inl.h +0 -0
- data/ext/v8/upstream/v8/src/ia32/codegen-ia32.cc +10385 -0
- data/ext/v8/upstream/v8/src/ia32/codegen-ia32.h +801 -0
- data/ext/v8/upstream/v8/src/ia32/cpu-ia32.cc +88 -0
- data/ext/v8/upstream/v8/src/ia32/debug-ia32.cc +312 -0
- data/ext/v8/upstream/v8/src/ia32/deoptimizer-ia32.cc +774 -0
- data/ext/v8/upstream/v8/src/ia32/disasm-ia32.cc +1620 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/frames-ia32.cc +0 -0
- data/ext/v8/upstream/v8/src/ia32/frames-ia32.h +140 -0
- data/ext/v8/upstream/v8/src/ia32/full-codegen-ia32.cc +4357 -0
- data/ext/v8/upstream/v8/src/ia32/ic-ia32.cc +1779 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/jump-target-ia32.cc +0 -0
- data/ext/v8/upstream/v8/src/ia32/lithium-codegen-ia32.cc +4158 -0
- data/ext/v8/upstream/v8/src/ia32/lithium-codegen-ia32.h +318 -0
- data/ext/v8/upstream/v8/src/ia32/lithium-gap-resolver-ia32.cc +466 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/lithium-gap-resolver-ia32.h +0 -0
- data/ext/v8/upstream/v8/src/ia32/lithium-ia32.cc +2181 -0
- data/ext/v8/upstream/v8/src/ia32/lithium-ia32.h +2235 -0
- data/ext/v8/upstream/v8/src/ia32/macro-assembler-ia32.cc +2056 -0
- data/ext/v8/upstream/v8/src/ia32/macro-assembler-ia32.h +807 -0
- data/ext/v8/upstream/v8/src/ia32/regexp-macro-assembler-ia32.cc +1264 -0
- data/ext/v8/upstream/v8/src/ia32/regexp-macro-assembler-ia32.h +216 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/register-allocator-ia32-inl.h +0 -0
- data/ext/v8/upstream/v8/src/ia32/register-allocator-ia32.cc +157 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/register-allocator-ia32.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/simulator-ia32.cc +0 -0
- data/ext/v8/upstream/v8/src/ia32/simulator-ia32.h +72 -0
- data/ext/v8/upstream/v8/src/ia32/stub-cache-ia32.cc +3711 -0
- data/ext/v8/upstream/v8/src/ia32/virtual-frame-ia32.cc +1366 -0
- data/ext/v8/upstream/v8/src/ia32/virtual-frame-ia32.h +650 -0
- data/ext/v8/upstream/v8/src/ic-inl.h +130 -0
- data/ext/v8/upstream/v8/src/ic.cc +2389 -0
- data/ext/v8/upstream/v8/src/ic.h +675 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/inspector.cc +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/inspector.h +0 -0
- data/ext/v8/upstream/v8/src/interpreter-irregexp.cc +659 -0
- data/ext/v8/upstream/v8/src/interpreter-irregexp.h +49 -0
- data/ext/v8/upstream/v8/src/isolate.cc +883 -0
- data/ext/v8/upstream/v8/src/isolate.h +1306 -0
- data/ext/v8/upstream/v8/src/json.js +342 -0
- data/ext/v8/upstream/v8/src/jsregexp.cc +5371 -0
- data/ext/v8/upstream/v8/src/jsregexp.h +1483 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/jump-target-heavy-inl.h +0 -0
- data/ext/v8/upstream/v8/src/jump-target-heavy.cc +427 -0
- data/ext/v8/upstream/v8/src/jump-target-heavy.h +238 -0
- data/ext/v8/upstream/v8/src/jump-target-inl.h +48 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/jump-target-light-inl.h +0 -0
- data/ext/v8/upstream/v8/src/jump-target-light.cc +111 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/jump-target-light.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/jump-target.cc +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/jump-target.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/list-inl.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/list.h +0 -0
- data/ext/v8/upstream/v8/src/lithium-allocator-inl.h +142 -0
- data/ext/v8/upstream/v8/src/lithium-allocator.cc +2105 -0
- data/ext/v8/upstream/v8/src/lithium-allocator.h +630 -0
- data/ext/v8/upstream/v8/src/lithium.cc +169 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/lithium.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/liveedit-debugger.js +0 -0
- data/ext/v8/upstream/v8/src/liveedit.cc +1693 -0
- data/ext/v8/upstream/v8/src/liveedit.h +179 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/liveobjectlist-inl.h +0 -0
- data/ext/v8/upstream/v8/src/liveobjectlist.cc +2589 -0
- data/ext/v8/upstream/v8/src/liveobjectlist.h +322 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/log-inl.h +0 -0
- data/ext/v8/upstream/v8/src/log-utils.cc +423 -0
- data/ext/v8/upstream/v8/src/log-utils.h +229 -0
- data/ext/v8/upstream/v8/src/log.cc +1666 -0
- data/ext/v8/upstream/v8/src/log.h +446 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/macro-assembler.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/macros.py +0 -0
- data/ext/v8/upstream/v8/src/mark-compact.cc +3092 -0
- data/ext/v8/upstream/v8/src/mark-compact.h +506 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/math.js +0 -0
- data/ext/v8/upstream/v8/src/messages.cc +166 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/messages.h +0 -0
- data/ext/v8/upstream/v8/src/messages.js +1090 -0
- data/ext/v8/upstream/v8/src/mips/assembler-mips-inl.h +335 -0
- data/ext/v8/upstream/v8/src/mips/assembler-mips.cc +2093 -0
- data/ext/v8/upstream/v8/src/mips/assembler-mips.h +1066 -0
- data/ext/v8/upstream/v8/src/mips/builtins-mips.cc +148 -0
- data/ext/v8/upstream/v8/src/mips/code-stubs-mips.cc +752 -0
- data/ext/v8/upstream/v8/src/mips/code-stubs-mips.h +511 -0
- data/ext/v8/upstream/v8/src/mips/codegen-mips-inl.h +64 -0
- data/ext/v8/upstream/v8/src/mips/codegen-mips.cc +1213 -0
- data/ext/v8/upstream/v8/src/mips/codegen-mips.h +633 -0
- data/ext/v8/upstream/v8/src/mips/constants-mips.cc +352 -0
- data/ext/v8/upstream/v8/src/mips/constants-mips.h +723 -0
- data/ext/v8/upstream/v8/src/mips/cpu-mips.cc +90 -0
- data/ext/v8/upstream/v8/src/mips/debug-mips.cc +155 -0
- data/ext/v8/upstream/v8/src/mips/deoptimizer-mips.cc +91 -0
- data/ext/v8/upstream/v8/src/mips/disasm-mips.cc +1023 -0
- data/ext/v8/upstream/v8/src/mips/frames-mips.cc +48 -0
- data/ext/v8/upstream/v8/src/mips/frames-mips.h +179 -0
- data/ext/v8/upstream/v8/src/mips/full-codegen-mips.cc +727 -0
- data/ext/v8/upstream/v8/src/mips/ic-mips.cc +244 -0
- data/ext/v8/upstream/v8/src/mips/jump-target-mips.cc +80 -0
- data/ext/v8/upstream/v8/src/mips/lithium-codegen-mips.h +65 -0
- data/ext/v8/upstream/v8/src/mips/lithium-mips.h +304 -0
- data/ext/v8/upstream/v8/src/mips/macro-assembler-mips.cc +3327 -0
- data/ext/v8/upstream/v8/src/mips/macro-assembler-mips.h +1058 -0
- data/ext/v8/upstream/v8/src/mips/regexp-macro-assembler-mips.cc +478 -0
- data/ext/v8/upstream/v8/src/mips/regexp-macro-assembler-mips.h +250 -0
- data/ext/v8/upstream/v8/src/mips/register-allocator-mips-inl.h +134 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/mips/register-allocator-mips.cc +0 -0
- data/ext/v8/upstream/v8/src/mips/register-allocator-mips.h +47 -0
- data/ext/v8/upstream/v8/src/mips/simulator-mips.cc +2438 -0
- data/ext/v8/upstream/v8/src/mips/simulator-mips.h +394 -0
- data/ext/v8/upstream/v8/src/mips/stub-cache-mips.cc +601 -0
- data/ext/v8/upstream/v8/src/mips/virtual-frame-mips-inl.h +58 -0
- data/ext/v8/upstream/v8/src/mips/virtual-frame-mips.cc +307 -0
- data/ext/v8/upstream/v8/src/mips/virtual-frame-mips.h +530 -0
- data/ext/v8/upstream/v8/src/mirror-debugger.js +2381 -0
- data/ext/v8/upstream/v8/src/mksnapshot.cc +256 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/natives.h +0 -0
- data/ext/v8/upstream/v8/src/objects-debug.cc +722 -0
- data/ext/v8/upstream/v8/src/objects-inl.h +4166 -0
- data/ext/v8/upstream/v8/src/objects-printer.cc +801 -0
- data/ext/v8/upstream/v8/src/objects-visiting.cc +142 -0
- data/ext/v8/upstream/v8/src/objects-visiting.h +422 -0
- data/ext/v8/upstream/v8/src/objects.cc +10296 -0
- data/ext/v8/upstream/v8/src/objects.h +6662 -0
- data/ext/v8/upstream/v8/src/parser.cc +5168 -0
- data/ext/v8/upstream/v8/src/parser.h +823 -0
- data/ext/v8/upstream/v8/src/platform-cygwin.cc +811 -0
- data/ext/v8/upstream/v8/src/platform-freebsd.cc +854 -0
- data/ext/v8/upstream/v8/src/platform-linux.cc +1120 -0
- data/ext/v8/upstream/v8/src/platform-macos.cc +865 -0
- data/ext/v8/upstream/v8/src/platform-nullos.cc +504 -0
- data/ext/v8/upstream/v8/src/platform-openbsd.cc +672 -0
- data/ext/v8/upstream/v8/src/platform-posix.cc +424 -0
- data/ext/v8/upstream/v8/src/platform-solaris.cc +796 -0
- data/ext/v8/upstream/v8/src/platform-tls-mac.h +62 -0
- data/ext/v8/upstream/v8/src/platform-tls-win32.h +62 -0
- data/ext/v8/upstream/v8/src/platform-tls.h +50 -0
- data/ext/v8/upstream/v8/src/platform-win32.cc +2072 -0
- data/ext/v8/upstream/v8/src/platform.h +693 -0
- data/ext/v8/upstream/v8/src/preparse-data.cc +185 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/preparse-data.h +0 -0
- data/ext/v8/upstream/v8/src/preparser-api.cc +219 -0
- data/ext/v8/upstream/v8/src/preparser.cc +1205 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/preparser.h +0 -0
- data/ext/v8/upstream/v8/src/prettyprinter.cc +1530 -0
- data/ext/v8/upstream/v8/src/prettyprinter.h +223 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/profile-generator-inl.h +0 -0
- data/ext/v8/upstream/v8/src/profile-generator.cc +3095 -0
- data/ext/v8/upstream/v8/src/profile-generator.h +1125 -0
- data/ext/v8/upstream/v8/src/property.cc +102 -0
- data/ext/v8/upstream/v8/src/property.h +348 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/regexp-macro-assembler-irregexp-inl.h +0 -0
- data/ext/v8/upstream/v8/src/regexp-macro-assembler-irregexp.cc +470 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/regexp-macro-assembler-irregexp.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/regexp-macro-assembler-tracer.cc +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/regexp-macro-assembler-tracer.h +0 -0
- data/ext/v8/upstream/v8/src/regexp-macro-assembler.cc +266 -0
- data/ext/v8/upstream/v8/src/regexp-macro-assembler.h +236 -0
- data/ext/v8/upstream/v8/src/regexp-stack.cc +111 -0
- data/ext/v8/upstream/v8/src/regexp-stack.h +147 -0
- data/ext/v8/upstream/v8/src/regexp.js +483 -0
- data/ext/v8/upstream/v8/src/register-allocator-inl.h +141 -0
- data/ext/v8/upstream/v8/src/register-allocator.cc +98 -0
- data/ext/v8/upstream/v8/src/register-allocator.h +310 -0
- data/ext/v8/upstream/v8/src/rewriter.cc +1024 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/rewriter.h +0 -0
- data/ext/v8/upstream/v8/src/runtime-profiler.cc +478 -0
- data/ext/v8/upstream/v8/src/runtime-profiler.h +192 -0
- data/ext/v8/upstream/v8/src/runtime.cc +11949 -0
- data/ext/v8/upstream/v8/src/runtime.h +643 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/runtime.js +0 -0
- data/ext/v8/upstream/v8/src/safepoint-table.cc +256 -0
- data/ext/v8/upstream/v8/src/safepoint-table.h +269 -0
- data/ext/v8/upstream/v8/src/scanner-base.cc +964 -0
- data/ext/v8/upstream/v8/src/scanner-base.h +664 -0
- data/ext/v8/upstream/v8/src/scanner.cc +584 -0
- data/ext/v8/upstream/v8/src/scanner.h +196 -0
- data/ext/v8/upstream/v8/src/scopeinfo.cc +631 -0
- data/ext/v8/upstream/v8/src/scopeinfo.h +249 -0
- data/ext/v8/upstream/v8/src/scopes.cc +1093 -0
- data/ext/v8/upstream/v8/src/scopes.h +508 -0
- data/ext/v8/upstream/v8/src/serialize.cc +1574 -0
- data/ext/v8/upstream/v8/src/serialize.h +589 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/shell.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/simulator.h +0 -0
- data/ext/v8/upstream/v8/src/small-pointer-list.h +163 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/smart-pointer.h +0 -0
- data/ext/v8/upstream/v8/src/snapshot-common.cc +82 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/snapshot-empty.cc +0 -0
- data/ext/v8/upstream/v8/src/snapshot.h +73 -0
- data/ext/v8/upstream/v8/src/spaces-inl.h +529 -0
- data/ext/v8/upstream/v8/src/spaces.cc +3147 -0
- data/ext/v8/upstream/v8/src/spaces.h +2368 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/splay-tree-inl.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/splay-tree.h +0 -0
- data/ext/v8/upstream/v8/src/string-search.cc +41 -0
- data/ext/v8/upstream/v8/src/string-search.h +568 -0
- data/ext/v8/upstream/v8/src/string-stream.cc +592 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/string-stream.h +0 -0
- data/ext/v8/upstream/v8/src/string.js +915 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/strtod.cc +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/strtod.h +0 -0
- data/ext/v8/upstream/v8/src/stub-cache.cc +1940 -0
- data/ext/v8/upstream/v8/src/stub-cache.h +866 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/third_party/valgrind/valgrind.h +0 -0
- data/ext/v8/upstream/v8/src/token.cc +63 -0
- data/ext/v8/upstream/v8/src/token.h +288 -0
- data/ext/v8/upstream/v8/src/top.cc +983 -0
- data/ext/v8/upstream/v8/src/type-info.cc +472 -0
- data/ext/v8/upstream/v8/src/type-info.h +290 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/unbound-queue-inl.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/unbound-queue.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/unicode-inl.h +0 -0
- data/ext/v8/upstream/v8/src/unicode.cc +1624 -0
- data/ext/v8/upstream/v8/src/unicode.h +280 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/uri.js +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/utils.cc +0 -0
- data/ext/v8/upstream/v8/src/utils.h +796 -0
- data/ext/v8/upstream/v8/src/v8-counters.cc +62 -0
- data/ext/v8/upstream/v8/src/v8-counters.h +311 -0
- data/ext/v8/upstream/v8/src/v8.cc +215 -0
- data/ext/v8/upstream/v8/src/v8.h +130 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/v8checks.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/v8dll-main.cc +0 -0
- data/ext/v8/upstream/v8/src/v8globals.h +486 -0
- data/ext/v8/upstream/{3.1.8/src/memory.h → v8/src/v8memory.h} +0 -0
- data/ext/v8/upstream/v8/src/v8natives.js +1293 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/v8preparserdll-main.cc +0 -0
- data/ext/v8/upstream/v8/src/v8threads.cc +453 -0
- data/ext/v8/upstream/v8/src/v8threads.h +164 -0
- data/ext/v8/upstream/v8/src/v8utils.h +317 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/variables.cc +0 -0
- data/ext/v8/upstream/v8/src/variables.h +212 -0
- data/ext/v8/upstream/v8/src/version.cc +116 -0
- data/ext/v8/upstream/v8/src/version.h +68 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame-heavy-inl.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame-heavy.cc +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame-inl.h +0 -0
- data/ext/v8/upstream/v8/src/virtual-frame-light-inl.h +171 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame-light.cc +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame.cc +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame.h +0 -0
- data/ext/v8/upstream/v8/src/vm-state-inl.h +138 -0
- data/ext/v8/upstream/v8/src/vm-state.h +70 -0
- data/ext/v8/upstream/v8/src/win32-headers.h +96 -0
- data/ext/v8/upstream/v8/src/x64/assembler-x64-inl.h +456 -0
- data/ext/v8/upstream/v8/src/x64/assembler-x64.cc +2954 -0
- data/ext/v8/upstream/v8/src/x64/assembler-x64.h +1630 -0
- data/ext/v8/upstream/v8/src/x64/builtins-x64.cc +1493 -0
- data/ext/v8/upstream/v8/src/x64/code-stubs-x64.cc +5132 -0
- data/ext/v8/upstream/v8/src/x64/code-stubs-x64.h +477 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/x64/codegen-x64-inl.h +0 -0
- data/ext/v8/upstream/v8/src/x64/codegen-x64.cc +8843 -0
- data/ext/v8/upstream/v8/src/x64/codegen-x64.h +753 -0
- data/ext/v8/upstream/v8/src/x64/cpu-x64.cc +88 -0
- data/ext/v8/upstream/v8/src/x64/debug-x64.cc +318 -0
- data/ext/v8/upstream/v8/src/x64/deoptimizer-x64.cc +815 -0
- data/ext/v8/upstream/v8/src/x64/disasm-x64.cc +1752 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/x64/frames-x64.cc +0 -0
- data/ext/v8/upstream/v8/src/x64/frames-x64.h +130 -0
- data/ext/v8/upstream/v8/src/x64/full-codegen-x64.cc +4339 -0
- data/ext/v8/upstream/v8/src/x64/ic-x64.cc +1752 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/x64/jump-target-x64.cc +0 -0
- data/ext/v8/upstream/v8/src/x64/lithium-codegen-x64.cc +3970 -0
- data/ext/v8/upstream/v8/src/x64/lithium-codegen-x64.h +318 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/x64/lithium-gap-resolver-x64.cc +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/x64/lithium-gap-resolver-x64.h +0 -0
- data/ext/v8/upstream/v8/src/x64/lithium-x64.cc +2115 -0
- data/ext/v8/upstream/v8/src/x64/lithium-x64.h +2161 -0
- data/ext/v8/upstream/v8/src/x64/macro-assembler-x64.cc +2911 -0
- data/ext/v8/upstream/v8/src/x64/macro-assembler-x64.h +1984 -0
- data/ext/v8/upstream/v8/src/x64/regexp-macro-assembler-x64.cc +1398 -0
- data/ext/v8/upstream/v8/src/x64/regexp-macro-assembler-x64.h +282 -0
- data/ext/v8/upstream/v8/src/x64/register-allocator-x64-inl.h +87 -0
- data/ext/v8/upstream/v8/src/x64/register-allocator-x64.cc +95 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/x64/register-allocator-x64.h +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/src/x64/simulator-x64.cc +0 -0
- data/ext/v8/upstream/v8/src/x64/simulator-x64.h +71 -0
- data/ext/v8/upstream/v8/src/x64/stub-cache-x64.cc +3460 -0
- data/ext/v8/upstream/v8/src/x64/virtual-frame-x64.cc +1296 -0
- data/ext/v8/upstream/v8/src/x64/virtual-frame-x64.h +597 -0
- data/ext/v8/upstream/v8/src/zone-inl.h +129 -0
- data/ext/v8/upstream/v8/src/zone.cc +196 -0
- data/ext/v8/upstream/v8/src/zone.h +236 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/codemap.js +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/consarray.js +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/csvparser.js +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/disasm.py +0 -0
- data/ext/v8/upstream/v8/tools/freebsd-tick-processor +10 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/gc-nvp-trace-processor.py +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/generate-ten-powers.scm +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/grokdump.py +0 -0
- data/ext/v8/upstream/v8/tools/gyp/v8.gyp +844 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/js2c.py +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/jsmin.py +0 -0
- data/ext/v8/upstream/v8/tools/linux-tick-processor +35 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/ll_prof.py +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/logreader.js +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/mac-nm +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/mac-tick-processor +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/oom_dump/README +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/oom_dump/SConstruct +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/oom_dump/oom_dump.cc +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/presubmit.py +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/process-heap-prof.py +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/profile.js +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/profile_view.js +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/run-valgrind.py +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/splaytree.js +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/stats-viewer.py +0 -0
- data/ext/v8/upstream/v8/tools/test.py +1490 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/tickprocessor-driver.js +0 -0
- data/ext/v8/upstream/v8/tools/tickprocessor.js +877 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/utils.py +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/README.txt +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/arm.vsprops +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/common.vsprops +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/d8.vcproj +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/d8_arm.vcproj +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/d8_x64.vcproj +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/d8js2c.cmd +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/debug.vsprops +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/ia32.vsprops +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/js2c.cmd +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/release.vsprops +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8.sln +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8.vcproj +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_arm.sln +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_arm.vcproj +0 -0
- data/ext/v8/upstream/v8/tools/visual_studio/v8_base.vcproj +1308 -0
- data/ext/v8/upstream/v8/tools/visual_studio/v8_base_arm.vcproj +1238 -0
- data/ext/v8/upstream/v8/tools/visual_studio/v8_base_x64.vcproj +1300 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_cctest.vcproj +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_cctest_arm.vcproj +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_cctest_x64.vcproj +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_mksnapshot.vcproj +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_mksnapshot_x64.vcproj +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_process_sample.vcproj +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_process_sample_arm.vcproj +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_process_sample_x64.vcproj +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_shell_sample.vcproj +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_shell_sample_arm.vcproj +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_shell_sample_x64.vcproj +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_snapshot.vcproj +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_snapshot_cc.vcproj +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_snapshot_cc_x64.vcproj +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_snapshot_x64.vcproj +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_x64.sln +0 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_x64.vcproj +0 -0
- data/ext/v8/upstream/v8/tools/visual_studio/x64.vsprops +18 -0
- data/ext/v8/upstream/{3.1.8 → v8}/tools/windows-tick-processor.bat +0 -0
- data/ext/v8/v8_callbacks.cpp +52 -92
- data/ext/v8/v8_date.cpp +2 -3
- data/ext/v8/v8_object.cpp +4 -0
- data/ext/v8/v8_template.cpp +2 -2
- data/ext/v8/v8_try_catch.cpp +8 -38
- data/lib/v8/version.rb +1 -1
- data/spec/ext/ext_spec_helper.rb +2 -20
- data/spec/ext/object_spec.rb +0 -12
- data/spec/ext/try_catch_spec.rb +29 -1
- data/spec/spec_helper.rb +1 -0
- data/spec/v8/portal/proxies_spec.rb +1 -84
- data/specmem/handle_memspec.rb +41 -0
- data/specmem/object_memspec.rb +16 -0
- data/specmem/proxies_memspec.rb +86 -0
- data/specmem/spec_helper.rb +24 -0
- data/therubyracer.gemspec +7 -2
- metadata +564 -541
- data/ext/v8/upstream/3.1.8/.gitignore +0 -31
- data/ext/v8/upstream/3.1.8/AUTHORS +0 -40
- data/ext/v8/upstream/3.1.8/ChangeLog +0 -2566
- data/ext/v8/upstream/3.1.8/SConstruct +0 -1192
- data/ext/v8/upstream/3.1.8/include/v8-debug.h +0 -384
- data/ext/v8/upstream/3.1.8/include/v8-preparser.h +0 -116
- data/ext/v8/upstream/3.1.8/include/v8-profiler.h +0 -426
- data/ext/v8/upstream/3.1.8/include/v8-testing.h +0 -99
- data/ext/v8/upstream/3.1.8/include/v8.h +0 -3846
- data/ext/v8/upstream/3.1.8/preparser/preparser-process.cc +0 -206
- data/ext/v8/upstream/3.1.8/src/SConscript +0 -356
- data/ext/v8/upstream/3.1.8/src/accessors.cc +0 -907
- data/ext/v8/upstream/3.1.8/src/allocation.cc +0 -204
- data/ext/v8/upstream/3.1.8/src/allocation.h +0 -176
- data/ext/v8/upstream/3.1.8/src/api.cc +0 -5191
- data/ext/v8/upstream/3.1.8/src/api.h +0 -508
- data/ext/v8/upstream/3.1.8/src/apiutils.h +0 -80
- data/ext/v8/upstream/3.1.8/src/arguments.h +0 -105
- data/ext/v8/upstream/3.1.8/src/arm/assembler-arm-inl.h +0 -352
- data/ext/v8/upstream/3.1.8/src/arm/assembler-arm.cc +0 -2756
- data/ext/v8/upstream/3.1.8/src/arm/assembler-arm.h +0 -1294
- data/ext/v8/upstream/3.1.8/src/arm/builtins-arm.cc +0 -1628
- data/ext/v8/upstream/3.1.8/src/arm/code-stubs-arm.cc +0 -6783
- data/ext/v8/upstream/3.1.8/src/arm/code-stubs-arm.h +0 -657
- data/ext/v8/upstream/3.1.8/src/arm/codegen-arm.cc +0 -7403
- data/ext/v8/upstream/3.1.8/src/arm/codegen-arm.h +0 -595
- data/ext/v8/upstream/3.1.8/src/arm/constants-arm.h +0 -769
- data/ext/v8/upstream/3.1.8/src/arm/cpu-arm.cc +0 -147
- data/ext/v8/upstream/3.1.8/src/arm/debug-arm.cc +0 -315
- data/ext/v8/upstream/3.1.8/src/arm/deoptimizer-arm.cc +0 -700
- data/ext/v8/upstream/3.1.8/src/arm/disasm-arm.cc +0 -1439
- data/ext/v8/upstream/3.1.8/src/arm/frames-arm.h +0 -168
- data/ext/v8/upstream/3.1.8/src/arm/full-codegen-arm.cc +0 -4230
- data/ext/v8/upstream/3.1.8/src/arm/ic-arm.cc +0 -1799
- data/ext/v8/upstream/3.1.8/src/arm/lithium-arm.cc +0 -2041
- data/ext/v8/upstream/3.1.8/src/arm/lithium-arm.h +0 -2046
- data/ext/v8/upstream/3.1.8/src/arm/lithium-codegen-arm.cc +0 -3822
- data/ext/v8/upstream/3.1.8/src/arm/lithium-codegen-arm.h +0 -312
- data/ext/v8/upstream/3.1.8/src/arm/lithium-gap-resolver-arm.cc +0 -303
- data/ext/v8/upstream/3.1.8/src/arm/macro-assembler-arm.cc +0 -2701
- data/ext/v8/upstream/3.1.8/src/arm/macro-assembler-arm.h +0 -1015
- data/ext/v8/upstream/3.1.8/src/arm/regexp-macro-assembler-arm.cc +0 -1280
- data/ext/v8/upstream/3.1.8/src/arm/regexp-macro-assembler-arm.h +0 -252
- data/ext/v8/upstream/3.1.8/src/arm/simulator-arm.cc +0 -3165
- data/ext/v8/upstream/3.1.8/src/arm/simulator-arm.h +0 -402
- data/ext/v8/upstream/3.1.8/src/arm/stub-cache-arm.cc +0 -4077
- data/ext/v8/upstream/3.1.8/src/arm/virtual-frame-arm.cc +0 -843
- data/ext/v8/upstream/3.1.8/src/arm/virtual-frame-arm.h +0 -520
- data/ext/v8/upstream/3.1.8/src/array.js +0 -1231
- data/ext/v8/upstream/3.1.8/src/assembler.cc +0 -973
- data/ext/v8/upstream/3.1.8/src/assembler.h +0 -787
- data/ext/v8/upstream/3.1.8/src/ast-inl.h +0 -107
- data/ext/v8/upstream/3.1.8/src/ast.cc +0 -1067
- data/ext/v8/upstream/3.1.8/src/ast.h +0 -2177
- data/ext/v8/upstream/3.1.8/src/atomicops.h +0 -165
- data/ext/v8/upstream/3.1.8/src/bootstrapper.cc +0 -1888
- data/ext/v8/upstream/3.1.8/src/bootstrapper.h +0 -118
- data/ext/v8/upstream/3.1.8/src/builtins.cc +0 -1586
- data/ext/v8/upstream/3.1.8/src/builtins.h +0 -339
- data/ext/v8/upstream/3.1.8/src/checks.cc +0 -110
- data/ext/v8/upstream/3.1.8/src/checks.h +0 -292
- data/ext/v8/upstream/3.1.8/src/code-stubs.cc +0 -230
- data/ext/v8/upstream/3.1.8/src/code-stubs.h +0 -950
- data/ext/v8/upstream/3.1.8/src/codegen-inl.h +0 -64
- data/ext/v8/upstream/3.1.8/src/codegen.cc +0 -495
- data/ext/v8/upstream/3.1.8/src/codegen.h +0 -245
- data/ext/v8/upstream/3.1.8/src/compilation-cache.cc +0 -654
- data/ext/v8/upstream/3.1.8/src/compilation-cache.h +0 -112
- data/ext/v8/upstream/3.1.8/src/compiler.cc +0 -806
- data/ext/v8/upstream/3.1.8/src/compiler.h +0 -290
- data/ext/v8/upstream/3.1.8/src/contexts.cc +0 -320
- data/ext/v8/upstream/3.1.8/src/contexts.h +0 -376
- data/ext/v8/upstream/3.1.8/src/conversions.cc +0 -1069
- data/ext/v8/upstream/3.1.8/src/counters.cc +0 -78
- data/ext/v8/upstream/3.1.8/src/counters.h +0 -242
- data/ext/v8/upstream/3.1.8/src/cpu-profiler-inl.h +0 -100
- data/ext/v8/upstream/3.1.8/src/cpu-profiler.cc +0 -554
- data/ext/v8/upstream/3.1.8/src/cpu-profiler.h +0 -291
- data/ext/v8/upstream/3.1.8/src/cpu.h +0 -65
- data/ext/v8/upstream/3.1.8/src/d8-debug.cc +0 -367
- data/ext/v8/upstream/3.1.8/src/d8-debug.h +0 -157
- data/ext/v8/upstream/3.1.8/src/d8-posix.cc +0 -693
- data/ext/v8/upstream/3.1.8/src/d8.cc +0 -792
- data/ext/v8/upstream/3.1.8/src/d8.gyp +0 -85
- data/ext/v8/upstream/3.1.8/src/data-flow.h +0 -379
- data/ext/v8/upstream/3.1.8/src/dateparser.h +0 -263
- data/ext/v8/upstream/3.1.8/src/debug-agent.cc +0 -446
- data/ext/v8/upstream/3.1.8/src/debug-agent.h +0 -131
- data/ext/v8/upstream/3.1.8/src/debug.cc +0 -3085
- data/ext/v8/upstream/3.1.8/src/debug.h +0 -1025
- data/ext/v8/upstream/3.1.8/src/deoptimizer.cc +0 -1185
- data/ext/v8/upstream/3.1.8/src/deoptimizer.h +0 -529
- data/ext/v8/upstream/3.1.8/src/disasm.h +0 -77
- data/ext/v8/upstream/3.1.8/src/disassembler.cc +0 -338
- data/ext/v8/upstream/3.1.8/src/execution.cc +0 -735
- data/ext/v8/upstream/3.1.8/src/execution.h +0 -322
- data/ext/v8/upstream/3.1.8/src/extensions/experimental/experimental.gyp +0 -53
- data/ext/v8/upstream/3.1.8/src/extensions/experimental/i18n-extension.cc +0 -264
- data/ext/v8/upstream/3.1.8/src/extensions/externalize-string-extension.cc +0 -141
- data/ext/v8/upstream/3.1.8/src/extensions/gc-extension.cc +0 -58
- data/ext/v8/upstream/3.1.8/src/factory.cc +0 -1087
- data/ext/v8/upstream/3.1.8/src/factory.h +0 -432
- data/ext/v8/upstream/3.1.8/src/flag-definitions.h +0 -552
- data/ext/v8/upstream/3.1.8/src/frame-element.cc +0 -42
- data/ext/v8/upstream/3.1.8/src/frame-element.h +0 -277
- data/ext/v8/upstream/3.1.8/src/frames-inl.h +0 -210
- data/ext/v8/upstream/3.1.8/src/frames.cc +0 -1232
- data/ext/v8/upstream/3.1.8/src/frames.h +0 -826
- data/ext/v8/upstream/3.1.8/src/full-codegen.cc +0 -1382
- data/ext/v8/upstream/3.1.8/src/full-codegen.h +0 -751
- data/ext/v8/upstream/3.1.8/src/func-name-inferrer.cc +0 -90
- data/ext/v8/upstream/3.1.8/src/func-name-inferrer.h +0 -111
- data/ext/v8/upstream/3.1.8/src/gdb-jit.cc +0 -1547
- data/ext/v8/upstream/3.1.8/src/global-handles.cc +0 -534
- data/ext/v8/upstream/3.1.8/src/global-handles.h +0 -181
- data/ext/v8/upstream/3.1.8/src/globals.h +0 -325
- data/ext/v8/upstream/3.1.8/src/handles-inl.h +0 -80
- data/ext/v8/upstream/3.1.8/src/handles.cc +0 -910
- data/ext/v8/upstream/3.1.8/src/handles.h +0 -424
- data/ext/v8/upstream/3.1.8/src/hashmap.h +0 -121
- data/ext/v8/upstream/3.1.8/src/heap-inl.h +0 -587
- data/ext/v8/upstream/3.1.8/src/heap-profiler.cc +0 -1128
- data/ext/v8/upstream/3.1.8/src/heap-profiler.h +0 -381
- data/ext/v8/upstream/3.1.8/src/heap.cc +0 -5610
- data/ext/v8/upstream/3.1.8/src/heap.h +0 -2218
- data/ext/v8/upstream/3.1.8/src/hydrogen-instructions.cc +0 -1490
- data/ext/v8/upstream/3.1.8/src/hydrogen-instructions.h +0 -3493
- data/ext/v8/upstream/3.1.8/src/hydrogen.cc +0 -6056
- data/ext/v8/upstream/3.1.8/src/hydrogen.h +0 -1091
- data/ext/v8/upstream/3.1.8/src/ia32/assembler-ia32-inl.h +0 -429
- data/ext/v8/upstream/3.1.8/src/ia32/assembler-ia32.cc +0 -2800
- data/ext/v8/upstream/3.1.8/src/ia32/assembler-ia32.h +0 -1093
- data/ext/v8/upstream/3.1.8/src/ia32/builtins-ia32.cc +0 -1590
- data/ext/v8/upstream/3.1.8/src/ia32/code-stubs-ia32.cc +0 -6624
- data/ext/v8/upstream/3.1.8/src/ia32/code-stubs-ia32.h +0 -536
- data/ext/v8/upstream/3.1.8/src/ia32/codegen-ia32.cc +0 -10354
- data/ext/v8/upstream/3.1.8/src/ia32/codegen-ia32.h +0 -798
- data/ext/v8/upstream/3.1.8/src/ia32/cpu-ia32.cc +0 -87
- data/ext/v8/upstream/3.1.8/src/ia32/debug-ia32.cc +0 -309
- data/ext/v8/upstream/3.1.8/src/ia32/deoptimizer-ia32.cc +0 -664
- data/ext/v8/upstream/3.1.8/src/ia32/disasm-ia32.cc +0 -1597
- data/ext/v8/upstream/3.1.8/src/ia32/frames-ia32.h +0 -140
- data/ext/v8/upstream/3.1.8/src/ia32/full-codegen-ia32.cc +0 -4278
- data/ext/v8/upstream/3.1.8/src/ia32/ic-ia32.cc +0 -1786
- data/ext/v8/upstream/3.1.8/src/ia32/lithium-codegen-ia32.cc +0 -3880
- data/ext/v8/upstream/3.1.8/src/ia32/lithium-codegen-ia32.h +0 -309
- data/ext/v8/upstream/3.1.8/src/ia32/lithium-gap-resolver-ia32.cc +0 -460
- data/ext/v8/upstream/3.1.8/src/ia32/lithium-ia32.cc +0 -2095
- data/ext/v8/upstream/3.1.8/src/ia32/lithium-ia32.h +0 -2127
- data/ext/v8/upstream/3.1.8/src/ia32/macro-assembler-ia32.cc +0 -2031
- data/ext/v8/upstream/3.1.8/src/ia32/macro-assembler-ia32.h +0 -798
- data/ext/v8/upstream/3.1.8/src/ia32/regexp-macro-assembler-ia32.cc +0 -1253
- data/ext/v8/upstream/3.1.8/src/ia32/regexp-macro-assembler-ia32.h +0 -215
- data/ext/v8/upstream/3.1.8/src/ia32/register-allocator-ia32.cc +0 -157
- data/ext/v8/upstream/3.1.8/src/ia32/simulator-ia32.h +0 -72
- data/ext/v8/upstream/3.1.8/src/ia32/stub-cache-ia32.cc +0 -3732
- data/ext/v8/upstream/3.1.8/src/ia32/virtual-frame-ia32.cc +0 -1360
- data/ext/v8/upstream/3.1.8/src/ia32/virtual-frame-ia32.h +0 -646
- data/ext/v8/upstream/3.1.8/src/ic-inl.h +0 -129
- data/ext/v8/upstream/3.1.8/src/ic.cc +0 -2333
- data/ext/v8/upstream/3.1.8/src/ic.h +0 -639
- data/ext/v8/upstream/3.1.8/src/interpreter-irregexp.cc +0 -655
- data/ext/v8/upstream/3.1.8/src/interpreter-irregexp.h +0 -48
- data/ext/v8/upstream/3.1.8/src/json.js +0 -342
- data/ext/v8/upstream/3.1.8/src/jsregexp.cc +0 -5340
- data/ext/v8/upstream/3.1.8/src/jsregexp.h +0 -1484
- data/ext/v8/upstream/3.1.8/src/jump-target-heavy.cc +0 -430
- data/ext/v8/upstream/3.1.8/src/jump-target-heavy.h +0 -244
- data/ext/v8/upstream/3.1.8/src/jump-target-inl.h +0 -48
- data/ext/v8/upstream/3.1.8/src/jump-target-light.cc +0 -111
- data/ext/v8/upstream/3.1.8/src/lithium-allocator-inl.h +0 -140
- data/ext/v8/upstream/3.1.8/src/lithium-allocator.cc +0 -2093
- data/ext/v8/upstream/3.1.8/src/lithium-allocator.h +0 -644
- data/ext/v8/upstream/3.1.8/src/lithium.cc +0 -168
- data/ext/v8/upstream/3.1.8/src/liveedit.cc +0 -1650
- data/ext/v8/upstream/3.1.8/src/liveedit.h +0 -174
- data/ext/v8/upstream/3.1.8/src/liveobjectlist.cc +0 -2527
- data/ext/v8/upstream/3.1.8/src/liveobjectlist.h +0 -322
- data/ext/v8/upstream/3.1.8/src/log-utils.cc +0 -336
- data/ext/v8/upstream/3.1.8/src/log-utils.h +0 -232
- data/ext/v8/upstream/3.1.8/src/log.cc +0 -1608
- data/ext/v8/upstream/3.1.8/src/log.h +0 -379
- data/ext/v8/upstream/3.1.8/src/mark-compact.cc +0 -2957
- data/ext/v8/upstream/3.1.8/src/mark-compact.h +0 -433
- data/ext/v8/upstream/3.1.8/src/messages.cc +0 -164
- data/ext/v8/upstream/3.1.8/src/messages.js +0 -1071
- data/ext/v8/upstream/3.1.8/src/mips/assembler-mips-inl.h +0 -215
- data/ext/v8/upstream/3.1.8/src/mips/assembler-mips.cc +0 -1219
- data/ext/v8/upstream/3.1.8/src/mips/assembler-mips.h +0 -667
- data/ext/v8/upstream/3.1.8/src/mips/builtins-mips.cc +0 -205
- data/ext/v8/upstream/3.1.8/src/mips/codegen-mips-inl.h +0 -70
- data/ext/v8/upstream/3.1.8/src/mips/codegen-mips.cc +0 -1437
- data/ext/v8/upstream/3.1.8/src/mips/codegen-mips.h +0 -431
- data/ext/v8/upstream/3.1.8/src/mips/constants-mips.cc +0 -328
- data/ext/v8/upstream/3.1.8/src/mips/constants-mips.h +0 -525
- data/ext/v8/upstream/3.1.8/src/mips/cpu-mips.cc +0 -73
- data/ext/v8/upstream/3.1.8/src/mips/debug-mips.cc +0 -127
- data/ext/v8/upstream/3.1.8/src/mips/disasm-mips.cc +0 -787
- data/ext/v8/upstream/3.1.8/src/mips/fast-codegen-mips.cc +0 -77
- data/ext/v8/upstream/3.1.8/src/mips/frames-mips.cc +0 -96
- data/ext/v8/upstream/3.1.8/src/mips/frames-mips.h +0 -164
- data/ext/v8/upstream/3.1.8/src/mips/full-codegen-mips.cc +0 -277
- data/ext/v8/upstream/3.1.8/src/mips/ic-mips.cc +0 -208
- data/ext/v8/upstream/3.1.8/src/mips/jump-target-mips.cc +0 -175
- data/ext/v8/upstream/3.1.8/src/mips/macro-assembler-mips.cc +0 -1326
- data/ext/v8/upstream/3.1.8/src/mips/macro-assembler-mips.h +0 -461
- data/ext/v8/upstream/3.1.8/src/mips/register-allocator-mips-inl.h +0 -137
- data/ext/v8/upstream/3.1.8/src/mips/register-allocator-mips.h +0 -46
- data/ext/v8/upstream/3.1.8/src/mips/simulator-mips.cc +0 -1650
- data/ext/v8/upstream/3.1.8/src/mips/simulator-mips.h +0 -311
- data/ext/v8/upstream/3.1.8/src/mips/stub-cache-mips.cc +0 -418
- data/ext/v8/upstream/3.1.8/src/mips/virtual-frame-mips.cc +0 -319
- data/ext/v8/upstream/3.1.8/src/mips/virtual-frame-mips.h +0 -548
- data/ext/v8/upstream/3.1.8/src/mirror-debugger.js +0 -2380
- data/ext/v8/upstream/3.1.8/src/mksnapshot.cc +0 -256
- data/ext/v8/upstream/3.1.8/src/objects-debug.cc +0 -722
- data/ext/v8/upstream/3.1.8/src/objects-inl.h +0 -3946
- data/ext/v8/upstream/3.1.8/src/objects-printer.cc +0 -801
- data/ext/v8/upstream/3.1.8/src/objects-visiting.cc +0 -142
- data/ext/v8/upstream/3.1.8/src/objects-visiting.h +0 -401
- data/ext/v8/upstream/3.1.8/src/objects.cc +0 -10044
- data/ext/v8/upstream/3.1.8/src/objects.h +0 -6571
- data/ext/v8/upstream/3.1.8/src/parser.cc +0 -5165
- data/ext/v8/upstream/3.1.8/src/parser.h +0 -802
- data/ext/v8/upstream/3.1.8/src/platform-cygwin.cc +0 -745
- data/ext/v8/upstream/3.1.8/src/platform-freebsd.cc +0 -702
- data/ext/v8/upstream/3.1.8/src/platform-linux.cc +0 -981
- data/ext/v8/upstream/3.1.8/src/platform-macos.cc +0 -732
- data/ext/v8/upstream/3.1.8/src/platform-nullos.cc +0 -498
- data/ext/v8/upstream/3.1.8/src/platform-openbsd.cc +0 -657
- data/ext/v8/upstream/3.1.8/src/platform-posix.cc +0 -399
- data/ext/v8/upstream/3.1.8/src/platform-solaris.cc +0 -714
- data/ext/v8/upstream/3.1.8/src/platform-win32.cc +0 -1974
- data/ext/v8/upstream/3.1.8/src/platform.h +0 -636
- data/ext/v8/upstream/3.1.8/src/preparse-data.cc +0 -183
- data/ext/v8/upstream/3.1.8/src/preparser-api.cc +0 -213
- data/ext/v8/upstream/3.1.8/src/preparser.cc +0 -1205
- data/ext/v8/upstream/3.1.8/src/prettyprinter.cc +0 -1539
- data/ext/v8/upstream/3.1.8/src/prettyprinter.h +0 -223
- data/ext/v8/upstream/3.1.8/src/profile-generator.cc +0 -2899
- data/ext/v8/upstream/3.1.8/src/profile-generator.h +0 -1151
- data/ext/v8/upstream/3.1.8/src/property.cc +0 -96
- data/ext/v8/upstream/3.1.8/src/property.h +0 -337
- data/ext/v8/upstream/3.1.8/src/regexp-macro-assembler-irregexp.cc +0 -470
- data/ext/v8/upstream/3.1.8/src/regexp-macro-assembler.cc +0 -257
- data/ext/v8/upstream/3.1.8/src/regexp-macro-assembler.h +0 -231
- data/ext/v8/upstream/3.1.8/src/regexp-stack.cc +0 -103
- data/ext/v8/upstream/3.1.8/src/regexp-stack.h +0 -123
- data/ext/v8/upstream/3.1.8/src/regexp.js +0 -483
- data/ext/v8/upstream/3.1.8/src/register-allocator-inl.h +0 -141
- data/ext/v8/upstream/3.1.8/src/register-allocator.cc +0 -104
- data/ext/v8/upstream/3.1.8/src/register-allocator.h +0 -320
- data/ext/v8/upstream/3.1.8/src/rewriter.cc +0 -1023
- data/ext/v8/upstream/3.1.8/src/runtime-profiler.cc +0 -443
- data/ext/v8/upstream/3.1.8/src/runtime-profiler.h +0 -77
- data/ext/v8/upstream/3.1.8/src/runtime.cc +0 -11592
- data/ext/v8/upstream/3.1.8/src/runtime.h +0 -582
- data/ext/v8/upstream/3.1.8/src/safepoint-table.cc +0 -253
- data/ext/v8/upstream/3.1.8/src/safepoint-table.h +0 -263
- data/ext/v8/upstream/3.1.8/src/scanner-base.cc +0 -971
- data/ext/v8/upstream/3.1.8/src/scanner-base.h +0 -653
- data/ext/v8/upstream/3.1.8/src/scanner.cc +0 -586
- data/ext/v8/upstream/3.1.8/src/scanner.h +0 -194
- data/ext/v8/upstream/3.1.8/src/scopeinfo.cc +0 -636
- data/ext/v8/upstream/3.1.8/src/scopeinfo.h +0 -238
- data/ext/v8/upstream/3.1.8/src/scopes.cc +0 -1063
- data/ext/v8/upstream/3.1.8/src/scopes.h +0 -494
- data/ext/v8/upstream/3.1.8/src/serialize.cc +0 -1535
- data/ext/v8/upstream/3.1.8/src/serialize.h +0 -584
- data/ext/v8/upstream/3.1.8/src/snapshot-common.cc +0 -82
- data/ext/v8/upstream/3.1.8/src/snapshot.h +0 -71
- data/ext/v8/upstream/3.1.8/src/spaces-inl.h +0 -524
- data/ext/v8/upstream/3.1.8/src/spaces.cc +0 -3254
- data/ext/v8/upstream/3.1.8/src/spaces.h +0 -2362
- data/ext/v8/upstream/3.1.8/src/string-search.cc +0 -40
- data/ext/v8/upstream/3.1.8/src/string-search.h +0 -567
- data/ext/v8/upstream/3.1.8/src/string-stream.cc +0 -584
- data/ext/v8/upstream/3.1.8/src/string.js +0 -915
- data/ext/v8/upstream/3.1.8/src/stub-cache.cc +0 -1878
- data/ext/v8/upstream/3.1.8/src/stub-cache.h +0 -849
- data/ext/v8/upstream/3.1.8/src/token.cc +0 -63
- data/ext/v8/upstream/3.1.8/src/token.h +0 -288
- data/ext/v8/upstream/3.1.8/src/top.cc +0 -1152
- data/ext/v8/upstream/3.1.8/src/top.h +0 -608
- data/ext/v8/upstream/3.1.8/src/type-info.cc +0 -406
- data/ext/v8/upstream/3.1.8/src/type-info.h +0 -283
- data/ext/v8/upstream/3.1.8/src/unicode.cc +0 -1624
- data/ext/v8/upstream/3.1.8/src/unicode.h +0 -280
- data/ext/v8/upstream/3.1.8/src/utils.h +0 -793
- data/ext/v8/upstream/3.1.8/src/v8-counters.cc +0 -55
- data/ext/v8/upstream/3.1.8/src/v8-counters.h +0 -290
- data/ext/v8/upstream/3.1.8/src/v8.cc +0 -270
- data/ext/v8/upstream/3.1.8/src/v8.h +0 -127
- data/ext/v8/upstream/3.1.8/src/v8globals.h +0 -480
- data/ext/v8/upstream/3.1.8/src/v8natives.js +0 -1252
- data/ext/v8/upstream/3.1.8/src/v8threads.cc +0 -440
- data/ext/v8/upstream/3.1.8/src/v8threads.h +0 -157
- data/ext/v8/upstream/3.1.8/src/v8utils.h +0 -354
- data/ext/v8/upstream/3.1.8/src/variables.h +0 -212
- data/ext/v8/upstream/3.1.8/src/version.cc +0 -95
- data/ext/v8/upstream/3.1.8/src/version.h +0 -64
- data/ext/v8/upstream/3.1.8/src/virtual-frame-light-inl.h +0 -170
- data/ext/v8/upstream/3.1.8/src/vm-state-inl.h +0 -134
- data/ext/v8/upstream/3.1.8/src/vm-state.h +0 -68
- data/ext/v8/upstream/3.1.8/src/win32-headers.h +0 -95
- data/ext/v8/upstream/3.1.8/src/x64/assembler-x64-inl.h +0 -455
- data/ext/v8/upstream/3.1.8/src/x64/assembler-x64.cc +0 -3162
- data/ext/v8/upstream/3.1.8/src/x64/assembler-x64.h +0 -1584
- data/ext/v8/upstream/3.1.8/src/x64/builtins-x64.cc +0 -1492
- data/ext/v8/upstream/3.1.8/src/x64/code-stubs-x64.cc +0 -5150
- data/ext/v8/upstream/3.1.8/src/x64/code-stubs-x64.h +0 -519
- data/ext/v8/upstream/3.1.8/src/x64/codegen-x64.cc +0 -8835
- data/ext/v8/upstream/3.1.8/src/x64/codegen-x64.h +0 -750
- data/ext/v8/upstream/3.1.8/src/x64/cpu-x64.cc +0 -86
- data/ext/v8/upstream/3.1.8/src/x64/debug-x64.cc +0 -316
- data/ext/v8/upstream/3.1.8/src/x64/deoptimizer-x64.cc +0 -781
- data/ext/v8/upstream/3.1.8/src/x64/disasm-x64.cc +0 -1737
- data/ext/v8/upstream/3.1.8/src/x64/frames-x64.h +0 -130
- data/ext/v8/upstream/3.1.8/src/x64/full-codegen-x64.cc +0 -3984
- data/ext/v8/upstream/3.1.8/src/x64/ic-x64.cc +0 -1761
- data/ext/v8/upstream/3.1.8/src/x64/lithium-codegen-x64.cc +0 -3639
- data/ext/v8/upstream/3.1.8/src/x64/lithium-codegen-x64.h +0 -305
- data/ext/v8/upstream/3.1.8/src/x64/lithium-x64.cc +0 -2044
- data/ext/v8/upstream/3.1.8/src/x64/lithium-x64.h +0 -2052
- data/ext/v8/upstream/3.1.8/src/x64/macro-assembler-x64.cc +0 -2660
- data/ext/v8/upstream/3.1.8/src/x64/macro-assembler-x64.h +0 -1852
- data/ext/v8/upstream/3.1.8/src/x64/regexp-macro-assembler-x64.cc +0 -1382
- data/ext/v8/upstream/3.1.8/src/x64/regexp-macro-assembler-x64.h +0 -278
- data/ext/v8/upstream/3.1.8/src/x64/register-allocator-x64-inl.h +0 -87
- data/ext/v8/upstream/3.1.8/src/x64/register-allocator-x64.cc +0 -91
- data/ext/v8/upstream/3.1.8/src/x64/simulator-x64.h +0 -71
- data/ext/v8/upstream/3.1.8/src/x64/stub-cache-x64.cc +0 -3509
- data/ext/v8/upstream/3.1.8/src/x64/virtual-frame-x64.cc +0 -1292
- data/ext/v8/upstream/3.1.8/src/x64/virtual-frame-x64.h +0 -593
- data/ext/v8/upstream/3.1.8/src/zone-inl.h +0 -83
- data/ext/v8/upstream/3.1.8/src/zone.cc +0 -195
- data/ext/v8/upstream/3.1.8/src/zone.h +0 -233
- data/ext/v8/upstream/3.1.8/tools/gyp/v8.gyp +0 -869
- data/ext/v8/upstream/3.1.8/tools/linux-tick-processor +0 -33
- data/ext/v8/upstream/3.1.8/tools/tickprocessor.js +0 -863
- data/ext/v8/upstream/3.1.8/tools/visual_studio/v8_base.vcproj +0 -1296
- data/ext/v8/upstream/3.1.8/tools/visual_studio/v8_base_arm.vcproj +0 -1234
- data/ext/v8/upstream/3.1.8/tools/visual_studio/v8_base_x64.vcproj +0 -1296
- data/ext/v8/upstream/3.1.8/tools/visual_studio/x64.vsprops +0 -17
- data/spec/ext/mem_spec.rb +0 -42
@@ -1,183 +0,0 @@
|
|
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 "../include/v8stdint.h"
|
29
|
-
#include "globals.h"
|
30
|
-
#include "checks.h"
|
31
|
-
#include "allocation.h"
|
32
|
-
#include "utils.h"
|
33
|
-
#include "list-inl.h"
|
34
|
-
#include "hashmap.h"
|
35
|
-
#include "preparse-data.h"
|
36
|
-
|
37
|
-
namespace v8 {
|
38
|
-
namespace internal {
|
39
|
-
|
40
|
-
// ----------------------------------------------------------------------------
|
41
|
-
// FunctionLoggingParserRecorder
|
42
|
-
|
43
|
-
FunctionLoggingParserRecorder::FunctionLoggingParserRecorder()
|
44
|
-
: function_store_(0),
|
45
|
-
is_recording_(true),
|
46
|
-
pause_count_(0) {
|
47
|
-
preamble_[PreparseDataConstants::kMagicOffset] =
|
48
|
-
PreparseDataConstants::kMagicNumber;
|
49
|
-
preamble_[PreparseDataConstants::kVersionOffset] =
|
50
|
-
PreparseDataConstants::kCurrentVersion;
|
51
|
-
preamble_[PreparseDataConstants::kHasErrorOffset] = false;
|
52
|
-
preamble_[PreparseDataConstants::kFunctionsSizeOffset] = 0;
|
53
|
-
preamble_[PreparseDataConstants::kSymbolCountOffset] = 0;
|
54
|
-
preamble_[PreparseDataConstants::kSizeOffset] = 0;
|
55
|
-
ASSERT_EQ(6, PreparseDataConstants::kHeaderSize);
|
56
|
-
#ifdef DEBUG
|
57
|
-
prev_start_ = -1;
|
58
|
-
#endif
|
59
|
-
}
|
60
|
-
|
61
|
-
|
62
|
-
void FunctionLoggingParserRecorder::LogMessage(int start_pos,
|
63
|
-
int end_pos,
|
64
|
-
const char* message,
|
65
|
-
const char* arg_opt) {
|
66
|
-
if (has_error()) return;
|
67
|
-
preamble_[PreparseDataConstants::kHasErrorOffset] = true;
|
68
|
-
function_store_.Reset();
|
69
|
-
STATIC_ASSERT(PreparseDataConstants::kMessageStartPos == 0);
|
70
|
-
function_store_.Add(start_pos);
|
71
|
-
STATIC_ASSERT(PreparseDataConstants::kMessageEndPos == 1);
|
72
|
-
function_store_.Add(end_pos);
|
73
|
-
STATIC_ASSERT(PreparseDataConstants::kMessageArgCountPos == 2);
|
74
|
-
function_store_.Add((arg_opt == NULL) ? 0 : 1);
|
75
|
-
STATIC_ASSERT(PreparseDataConstants::kMessageTextPos == 3);
|
76
|
-
WriteString(CStrVector(message));
|
77
|
-
if (arg_opt) WriteString(CStrVector(arg_opt));
|
78
|
-
is_recording_ = false;
|
79
|
-
}
|
80
|
-
|
81
|
-
|
82
|
-
void FunctionLoggingParserRecorder::WriteString(Vector<const char> str) {
|
83
|
-
function_store_.Add(str.length());
|
84
|
-
for (int i = 0; i < str.length(); i++) {
|
85
|
-
function_store_.Add(str[i]);
|
86
|
-
}
|
87
|
-
}
|
88
|
-
|
89
|
-
// ----------------------------------------------------------------------------
|
90
|
-
// PartialParserRecorder - Record both function entries and symbols.
|
91
|
-
|
92
|
-
Vector<unsigned> PartialParserRecorder::ExtractData() {
|
93
|
-
int function_size = function_store_.size();
|
94
|
-
int total_size = PreparseDataConstants::kHeaderSize + function_size;
|
95
|
-
Vector<unsigned> data = Vector<unsigned>::New(total_size);
|
96
|
-
preamble_[PreparseDataConstants::kFunctionsSizeOffset] = function_size;
|
97
|
-
preamble_[PreparseDataConstants::kSymbolCountOffset] = 0;
|
98
|
-
memcpy(data.start(), preamble_, sizeof(preamble_));
|
99
|
-
int symbol_start = PreparseDataConstants::kHeaderSize + function_size;
|
100
|
-
if (function_size > 0) {
|
101
|
-
function_store_.WriteTo(data.SubVector(PreparseDataConstants::kHeaderSize,
|
102
|
-
symbol_start));
|
103
|
-
}
|
104
|
-
return data;
|
105
|
-
}
|
106
|
-
|
107
|
-
|
108
|
-
// ----------------------------------------------------------------------------
|
109
|
-
// CompleteParserRecorder - Record both function entries and symbols.
|
110
|
-
|
111
|
-
CompleteParserRecorder::CompleteParserRecorder()
|
112
|
-
: FunctionLoggingParserRecorder(),
|
113
|
-
literal_chars_(0),
|
114
|
-
symbol_store_(0),
|
115
|
-
symbol_keys_(0),
|
116
|
-
symbol_table_(vector_compare),
|
117
|
-
symbol_id_(0) {
|
118
|
-
}
|
119
|
-
|
120
|
-
|
121
|
-
void CompleteParserRecorder::LogSymbol(int start,
|
122
|
-
int hash,
|
123
|
-
bool is_ascii,
|
124
|
-
Vector<const byte> literal_bytes) {
|
125
|
-
Key key = { is_ascii, literal_bytes };
|
126
|
-
HashMap::Entry* entry = symbol_table_.Lookup(&key, hash, true);
|
127
|
-
int id = static_cast<int>(reinterpret_cast<intptr_t>(entry->value));
|
128
|
-
if (id == 0) {
|
129
|
-
// Copy literal contents for later comparison.
|
130
|
-
key.literal_bytes =
|
131
|
-
Vector<const byte>::cast(literal_chars_.AddBlock(literal_bytes));
|
132
|
-
// Put (symbol_id_ + 1) into entry and increment it.
|
133
|
-
id = ++symbol_id_;
|
134
|
-
entry->value = reinterpret_cast<void*>(id);
|
135
|
-
Vector<Key> symbol = symbol_keys_.AddBlock(1, key);
|
136
|
-
entry->key = &symbol[0];
|
137
|
-
}
|
138
|
-
WriteNumber(id - 1);
|
139
|
-
}
|
140
|
-
|
141
|
-
|
142
|
-
Vector<unsigned> CompleteParserRecorder::ExtractData() {
|
143
|
-
int function_size = function_store_.size();
|
144
|
-
// Add terminator to symbols, then pad to unsigned size.
|
145
|
-
int symbol_size = symbol_store_.size();
|
146
|
-
int padding = sizeof(unsigned) - (symbol_size % sizeof(unsigned));
|
147
|
-
symbol_store_.AddBlock(padding, PreparseDataConstants::kNumberTerminator);
|
148
|
-
symbol_size += padding;
|
149
|
-
int total_size = PreparseDataConstants::kHeaderSize + function_size
|
150
|
-
+ (symbol_size / sizeof(unsigned));
|
151
|
-
Vector<unsigned> data = Vector<unsigned>::New(total_size);
|
152
|
-
preamble_[PreparseDataConstants::kFunctionsSizeOffset] = function_size;
|
153
|
-
preamble_[PreparseDataConstants::kSymbolCountOffset] = symbol_id_;
|
154
|
-
memcpy(data.start(), preamble_, sizeof(preamble_));
|
155
|
-
int symbol_start = PreparseDataConstants::kHeaderSize + function_size;
|
156
|
-
if (function_size > 0) {
|
157
|
-
function_store_.WriteTo(data.SubVector(PreparseDataConstants::kHeaderSize,
|
158
|
-
symbol_start));
|
159
|
-
}
|
160
|
-
if (!has_error()) {
|
161
|
-
symbol_store_.WriteTo(
|
162
|
-
Vector<byte>::cast(data.SubVector(symbol_start, total_size)));
|
163
|
-
}
|
164
|
-
return data;
|
165
|
-
}
|
166
|
-
|
167
|
-
|
168
|
-
void CompleteParserRecorder::WriteNumber(int number) {
|
169
|
-
ASSERT(number >= 0);
|
170
|
-
|
171
|
-
int mask = (1 << 28) - 1;
|
172
|
-
for (int i = 28; i > 0; i -= 7) {
|
173
|
-
if (number > mask) {
|
174
|
-
symbol_store_.Add(static_cast<byte>(number >> i) | 0x80u);
|
175
|
-
number &= mask;
|
176
|
-
}
|
177
|
-
mask >>= 7;
|
178
|
-
}
|
179
|
-
symbol_store_.Add(static_cast<byte>(number));
|
180
|
-
}
|
181
|
-
|
182
|
-
|
183
|
-
} } // namespace v8::internal.
|
@@ -1,213 +0,0 @@
|
|
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 "../include/v8-preparser.h"
|
29
|
-
#include "globals.h"
|
30
|
-
#include "checks.h"
|
31
|
-
#include "allocation.h"
|
32
|
-
#include "utils.h"
|
33
|
-
#include "list.h"
|
34
|
-
#include "scanner-base.h"
|
35
|
-
#include "preparse-data.h"
|
36
|
-
#include "preparser.h"
|
37
|
-
|
38
|
-
namespace v8 {
|
39
|
-
namespace internal {
|
40
|
-
|
41
|
-
// UTF16Buffer based on a v8::UnicodeInputStream.
|
42
|
-
class InputStreamUTF16Buffer : public UC16CharacterStream {
|
43
|
-
public:
|
44
|
-
/* The InputStreamUTF16Buffer maintains an internal buffer
|
45
|
-
* that is filled in chunks from the UC16CharacterStream.
|
46
|
-
* It also maintains unlimited pushback capability, but optimized
|
47
|
-
* for small pushbacks.
|
48
|
-
* The pushback_buffer_ pointer points to the limit of pushbacks
|
49
|
-
* in the current buffer. There is room for a few pushback'ed chars before
|
50
|
-
* the buffer containing the most recently read chunk. If this is overflowed,
|
51
|
-
* an external buffer is allocated/reused to hold further pushbacks, and
|
52
|
-
* pushback_buffer_ and buffer_cursor_/buffer_end_ now points to the
|
53
|
-
* new buffer. When this buffer is read to the end again, the cursor is
|
54
|
-
* switched back to the internal buffer
|
55
|
-
*/
|
56
|
-
explicit InputStreamUTF16Buffer(v8::UnicodeInputStream* stream)
|
57
|
-
: UC16CharacterStream(),
|
58
|
-
stream_(stream),
|
59
|
-
pushback_buffer_(buffer_),
|
60
|
-
pushback_buffer_end_cache_(NULL),
|
61
|
-
pushback_buffer_backing_(NULL),
|
62
|
-
pushback_buffer_backing_size_(0) {
|
63
|
-
buffer_cursor_ = buffer_end_ = buffer_ + kPushBackSize;
|
64
|
-
}
|
65
|
-
|
66
|
-
virtual ~InputStreamUTF16Buffer() {
|
67
|
-
if (pushback_buffer_backing_ != NULL) {
|
68
|
-
DeleteArray(pushback_buffer_backing_);
|
69
|
-
}
|
70
|
-
}
|
71
|
-
|
72
|
-
virtual void PushBack(uc32 ch) {
|
73
|
-
ASSERT(pos_ > 0);
|
74
|
-
if (ch == kEndOfInput) {
|
75
|
-
pos_--;
|
76
|
-
return;
|
77
|
-
}
|
78
|
-
if (buffer_cursor_ <= pushback_buffer_) {
|
79
|
-
// No more room in the current buffer to do pushbacks.
|
80
|
-
if (pushback_buffer_end_cache_ == NULL) {
|
81
|
-
// We have overflowed the pushback space at the beginning of buffer_.
|
82
|
-
// Switch to using a separate allocated pushback buffer.
|
83
|
-
if (pushback_buffer_backing_ == NULL) {
|
84
|
-
// Allocate a buffer the first time we need it.
|
85
|
-
pushback_buffer_backing_ = NewArray<uc16>(kPushBackSize);
|
86
|
-
pushback_buffer_backing_size_ = kPushBackSize;
|
87
|
-
}
|
88
|
-
pushback_buffer_ = pushback_buffer_backing_;
|
89
|
-
pushback_buffer_end_cache_ = buffer_end_;
|
90
|
-
buffer_end_ = pushback_buffer_backing_ + pushback_buffer_backing_size_;
|
91
|
-
buffer_cursor_ = buffer_end_ - 1;
|
92
|
-
} else {
|
93
|
-
// Hit the bottom of the allocated pushback buffer.
|
94
|
-
// Double the buffer and continue.
|
95
|
-
uc16* new_buffer = NewArray<uc16>(pushback_buffer_backing_size_ * 2);
|
96
|
-
memcpy(new_buffer + pushback_buffer_backing_size_,
|
97
|
-
pushback_buffer_backing_,
|
98
|
-
pushback_buffer_backing_size_);
|
99
|
-
DeleteArray(pushback_buffer_backing_);
|
100
|
-
buffer_cursor_ = new_buffer + pushback_buffer_backing_size_;
|
101
|
-
pushback_buffer_backing_ = pushback_buffer_ = new_buffer;
|
102
|
-
buffer_end_ = pushback_buffer_backing_ + pushback_buffer_backing_size_;
|
103
|
-
}
|
104
|
-
}
|
105
|
-
pushback_buffer_[buffer_cursor_ - pushback_buffer_- 1] =
|
106
|
-
static_cast<uc16>(ch);
|
107
|
-
pos_--;
|
108
|
-
}
|
109
|
-
|
110
|
-
protected:
|
111
|
-
virtual bool ReadBlock() {
|
112
|
-
if (pushback_buffer_end_cache_ != NULL) {
|
113
|
-
buffer_cursor_ = buffer_;
|
114
|
-
buffer_end_ = pushback_buffer_end_cache_;
|
115
|
-
pushback_buffer_end_cache_ = NULL;
|
116
|
-
return buffer_end_ > buffer_cursor_;
|
117
|
-
}
|
118
|
-
// Copy the top of the buffer into the pushback area.
|
119
|
-
int32_t value;
|
120
|
-
uc16* buffer_start = buffer_ + kPushBackSize;
|
121
|
-
buffer_cursor_ = buffer_end_ = buffer_start;
|
122
|
-
while ((value = stream_->Next()) >= 0) {
|
123
|
-
if (value > static_cast<int32_t>(unibrow::Utf8::kMaxThreeByteChar)) {
|
124
|
-
value = unibrow::Utf8::kBadChar;
|
125
|
-
}
|
126
|
-
// buffer_end_ is a const pointer, but buffer_ is writable.
|
127
|
-
buffer_start[buffer_end_++ - buffer_start] = static_cast<uc16>(value);
|
128
|
-
if (buffer_end_ == buffer_ + kPushBackSize + kBufferSize) break;
|
129
|
-
}
|
130
|
-
return buffer_end_ > buffer_start;
|
131
|
-
}
|
132
|
-
|
133
|
-
virtual unsigned SlowSeekForward(unsigned pos) {
|
134
|
-
// Seeking in the input is not used by preparsing.
|
135
|
-
// It's only used by the real parser based on preparser data.
|
136
|
-
UNIMPLEMENTED();
|
137
|
-
return 0;
|
138
|
-
}
|
139
|
-
|
140
|
-
private:
|
141
|
-
static const unsigned kBufferSize = 512;
|
142
|
-
static const unsigned kPushBackSize = 16;
|
143
|
-
v8::UnicodeInputStream* const stream_;
|
144
|
-
// Buffer holding first kPushBackSize characters of pushback buffer,
|
145
|
-
// then kBufferSize chars of read-ahead.
|
146
|
-
// The pushback buffer is only used if pushing back characters past
|
147
|
-
// the start of a block.
|
148
|
-
uc16 buffer_[kPushBackSize + kBufferSize];
|
149
|
-
// Limit of pushbacks before new allocation is necessary.
|
150
|
-
uc16* pushback_buffer_;
|
151
|
-
// Only if that pushback buffer at the start of buffer_ isn't sufficient
|
152
|
-
// is the following used.
|
153
|
-
const uc16* pushback_buffer_end_cache_;
|
154
|
-
uc16* pushback_buffer_backing_;
|
155
|
-
unsigned pushback_buffer_backing_size_;
|
156
|
-
};
|
157
|
-
|
158
|
-
|
159
|
-
class StandAloneJavaScriptScanner : public JavaScriptScanner {
|
160
|
-
public:
|
161
|
-
void Initialize(UC16CharacterStream* source) {
|
162
|
-
source_ = source;
|
163
|
-
Init();
|
164
|
-
// Skip initial whitespace allowing HTML comment ends just like
|
165
|
-
// after a newline and scan first token.
|
166
|
-
has_line_terminator_before_next_ = true;
|
167
|
-
SkipWhiteSpace();
|
168
|
-
Scan();
|
169
|
-
}
|
170
|
-
};
|
171
|
-
|
172
|
-
|
173
|
-
// Functions declared by allocation.h
|
174
|
-
|
175
|
-
void FatalProcessOutOfMemory(const char* reason) {
|
176
|
-
V8_Fatal(__FILE__, __LINE__, reason);
|
177
|
-
}
|
178
|
-
|
179
|
-
bool EnableSlowAsserts() { return true; }
|
180
|
-
|
181
|
-
} // namespace internal.
|
182
|
-
|
183
|
-
|
184
|
-
UnicodeInputStream::~UnicodeInputStream() { }
|
185
|
-
|
186
|
-
|
187
|
-
PreParserData Preparse(UnicodeInputStream* input, size_t max_stack) {
|
188
|
-
internal::InputStreamUTF16Buffer buffer(input);
|
189
|
-
uintptr_t stack_limit = reinterpret_cast<uintptr_t>(&buffer) - max_stack;
|
190
|
-
internal::StandAloneJavaScriptScanner scanner;
|
191
|
-
scanner.Initialize(&buffer);
|
192
|
-
internal::CompleteParserRecorder recorder;
|
193
|
-
preparser::PreParser::PreParseResult result =
|
194
|
-
preparser::PreParser::PreParseProgram(&scanner,
|
195
|
-
&recorder,
|
196
|
-
true,
|
197
|
-
stack_limit);
|
198
|
-
if (result == preparser::PreParser::kPreParseStackOverflow) {
|
199
|
-
return PreParserData::StackOverflow();
|
200
|
-
}
|
201
|
-
internal::Vector<unsigned> pre_data = recorder.ExtractData();
|
202
|
-
size_t size = pre_data.length() * sizeof(pre_data[0]);
|
203
|
-
unsigned char* data = reinterpret_cast<unsigned char*>(pre_data.start());
|
204
|
-
return PreParserData(size, data);
|
205
|
-
}
|
206
|
-
|
207
|
-
} // namespace v8.
|
208
|
-
|
209
|
-
|
210
|
-
// Used by ASSERT macros and other immediate exits.
|
211
|
-
extern "C" void V8_Fatal(const char* file, int line, const char* format, ...) {
|
212
|
-
exit(EXIT_FAILURE);
|
213
|
-
}
|
@@ -1,1205 +0,0 @@
|
|
1
|
-
|
2
|
-
// Copyright 2010 the V8 project authors. All rights reserved.
|
3
|
-
// Redistribution and use in source and binary forms, with or without
|
4
|
-
// modification, are permitted provided that the following conditions are
|
5
|
-
// met:
|
6
|
-
//
|
7
|
-
// * Redistributions of source code must retain the above copyright
|
8
|
-
// notice, this list of conditions and the following disclaimer.
|
9
|
-
// * Redistributions in binary form must reproduce the above
|
10
|
-
// copyright notice, this list of conditions and the following
|
11
|
-
// disclaimer in the documentation and/or other materials provided
|
12
|
-
// with the distribution.
|
13
|
-
// * Neither the name of Google Inc. nor the names of its
|
14
|
-
// contributors may be used to endorse or promote products derived
|
15
|
-
// from this software without specific prior written permission.
|
16
|
-
//
|
17
|
-
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
18
|
-
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
19
|
-
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
20
|
-
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
21
|
-
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
22
|
-
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
23
|
-
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
24
|
-
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
25
|
-
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
26
|
-
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
27
|
-
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28
|
-
|
29
|
-
#include "../include/v8stdint.h"
|
30
|
-
#include "unicode.h"
|
31
|
-
#include "globals.h"
|
32
|
-
#include "checks.h"
|
33
|
-
#include "allocation.h"
|
34
|
-
#include "utils.h"
|
35
|
-
#include "list.h"
|
36
|
-
#include "scanner-base.h"
|
37
|
-
#include "preparse-data.h"
|
38
|
-
#include "preparser.h"
|
39
|
-
|
40
|
-
namespace v8 {
|
41
|
-
namespace preparser {
|
42
|
-
|
43
|
-
// Preparsing checks a JavaScript program and emits preparse-data that helps
|
44
|
-
// a later parsing to be faster.
|
45
|
-
// See preparser-data.h for the data.
|
46
|
-
|
47
|
-
// The PreParser checks that the syntax follows the grammar for JavaScript,
|
48
|
-
// and collects some information about the program along the way.
|
49
|
-
// The grammar check is only performed in order to understand the program
|
50
|
-
// sufficiently to deduce some information about it, that can be used
|
51
|
-
// to speed up later parsing. Finding errors is not the goal of pre-parsing,
|
52
|
-
// rather it is to speed up properly written and correct programs.
|
53
|
-
// That means that contextual checks (like a label being declared where
|
54
|
-
// it is used) are generally omitted.
|
55
|
-
|
56
|
-
namespace i = ::v8::internal;
|
57
|
-
|
58
|
-
#define CHECK_OK ok); \
|
59
|
-
if (!*ok) return -1; \
|
60
|
-
((void)0
|
61
|
-
#define DUMMY ) // to make indentation work
|
62
|
-
#undef DUMMY
|
63
|
-
|
64
|
-
|
65
|
-
void PreParser::ReportUnexpectedToken(i::Token::Value token) {
|
66
|
-
// We don't report stack overflows here, to avoid increasing the
|
67
|
-
// stack depth even further. Instead we report it after parsing is
|
68
|
-
// over, in ParseProgram.
|
69
|
-
if (token == i::Token::ILLEGAL && stack_overflow_) {
|
70
|
-
return;
|
71
|
-
}
|
72
|
-
i::JavaScriptScanner::Location source_location = scanner_->location();
|
73
|
-
|
74
|
-
// Four of the tokens are treated specially
|
75
|
-
switch (token) {
|
76
|
-
case i::Token::EOS:
|
77
|
-
return ReportMessageAt(source_location.beg_pos, source_location.end_pos,
|
78
|
-
"unexpected_eos", NULL);
|
79
|
-
case i::Token::NUMBER:
|
80
|
-
return ReportMessageAt(source_location.beg_pos, source_location.end_pos,
|
81
|
-
"unexpected_token_number", NULL);
|
82
|
-
case i::Token::STRING:
|
83
|
-
return ReportMessageAt(source_location.beg_pos, source_location.end_pos,
|
84
|
-
"unexpected_token_string", NULL);
|
85
|
-
case i::Token::IDENTIFIER:
|
86
|
-
case i::Token::FUTURE_RESERVED_WORD:
|
87
|
-
return ReportMessageAt(source_location.beg_pos, source_location.end_pos,
|
88
|
-
"unexpected_token_identifier", NULL);
|
89
|
-
default:
|
90
|
-
const char* name = i::Token::String(token);
|
91
|
-
ReportMessageAt(source_location.beg_pos, source_location.end_pos,
|
92
|
-
"unexpected_token", name);
|
93
|
-
}
|
94
|
-
}
|
95
|
-
|
96
|
-
|
97
|
-
PreParser::SourceElements PreParser::ParseSourceElements(int end_token,
|
98
|
-
bool* ok) {
|
99
|
-
// SourceElements ::
|
100
|
-
// (Statement)* <end_token>
|
101
|
-
|
102
|
-
while (peek() != end_token) {
|
103
|
-
ParseStatement(CHECK_OK);
|
104
|
-
}
|
105
|
-
return kUnknownSourceElements;
|
106
|
-
}
|
107
|
-
|
108
|
-
|
109
|
-
PreParser::Statement PreParser::ParseStatement(bool* ok) {
|
110
|
-
// Statement ::
|
111
|
-
// Block
|
112
|
-
// VariableStatement
|
113
|
-
// EmptyStatement
|
114
|
-
// ExpressionStatement
|
115
|
-
// IfStatement
|
116
|
-
// IterationStatement
|
117
|
-
// ContinueStatement
|
118
|
-
// BreakStatement
|
119
|
-
// ReturnStatement
|
120
|
-
// WithStatement
|
121
|
-
// LabelledStatement
|
122
|
-
// SwitchStatement
|
123
|
-
// ThrowStatement
|
124
|
-
// TryStatement
|
125
|
-
// DebuggerStatement
|
126
|
-
|
127
|
-
// Note: Since labels can only be used by 'break' and 'continue'
|
128
|
-
// statements, which themselves are only valid within blocks,
|
129
|
-
// iterations or 'switch' statements (i.e., BreakableStatements),
|
130
|
-
// labels can be simply ignored in all other cases; except for
|
131
|
-
// trivial labeled break statements 'label: break label' which is
|
132
|
-
// parsed into an empty statement.
|
133
|
-
|
134
|
-
// Keep the source position of the statement
|
135
|
-
switch (peek()) {
|
136
|
-
case i::Token::LBRACE:
|
137
|
-
return ParseBlock(ok);
|
138
|
-
|
139
|
-
case i::Token::CONST:
|
140
|
-
case i::Token::VAR:
|
141
|
-
return ParseVariableStatement(ok);
|
142
|
-
|
143
|
-
case i::Token::SEMICOLON:
|
144
|
-
Next();
|
145
|
-
return kUnknownStatement;
|
146
|
-
|
147
|
-
case i::Token::IF:
|
148
|
-
return ParseIfStatement(ok);
|
149
|
-
|
150
|
-
case i::Token::DO:
|
151
|
-
return ParseDoWhileStatement(ok);
|
152
|
-
|
153
|
-
case i::Token::WHILE:
|
154
|
-
return ParseWhileStatement(ok);
|
155
|
-
|
156
|
-
case i::Token::FOR:
|
157
|
-
return ParseForStatement(ok);
|
158
|
-
|
159
|
-
case i::Token::CONTINUE:
|
160
|
-
return ParseContinueStatement(ok);
|
161
|
-
|
162
|
-
case i::Token::BREAK:
|
163
|
-
return ParseBreakStatement(ok);
|
164
|
-
|
165
|
-
case i::Token::RETURN:
|
166
|
-
return ParseReturnStatement(ok);
|
167
|
-
|
168
|
-
case i::Token::WITH:
|
169
|
-
return ParseWithStatement(ok);
|
170
|
-
|
171
|
-
case i::Token::SWITCH:
|
172
|
-
return ParseSwitchStatement(ok);
|
173
|
-
|
174
|
-
case i::Token::THROW:
|
175
|
-
return ParseThrowStatement(ok);
|
176
|
-
|
177
|
-
case i::Token::TRY:
|
178
|
-
return ParseTryStatement(ok);
|
179
|
-
|
180
|
-
case i::Token::FUNCTION:
|
181
|
-
return ParseFunctionDeclaration(ok);
|
182
|
-
|
183
|
-
case i::Token::NATIVE:
|
184
|
-
return ParseNativeDeclaration(ok);
|
185
|
-
|
186
|
-
case i::Token::DEBUGGER:
|
187
|
-
return ParseDebuggerStatement(ok);
|
188
|
-
|
189
|
-
default:
|
190
|
-
return ParseExpressionOrLabelledStatement(ok);
|
191
|
-
}
|
192
|
-
}
|
193
|
-
|
194
|
-
|
195
|
-
PreParser::Statement PreParser::ParseFunctionDeclaration(bool* ok) {
|
196
|
-
// FunctionDeclaration ::
|
197
|
-
// 'function' Identifier '(' FormalParameterListopt ')' '{' FunctionBody '}'
|
198
|
-
Expect(i::Token::FUNCTION, CHECK_OK);
|
199
|
-
ParseIdentifier(CHECK_OK);
|
200
|
-
ParseFunctionLiteral(CHECK_OK);
|
201
|
-
return kUnknownStatement;
|
202
|
-
}
|
203
|
-
|
204
|
-
|
205
|
-
// Language extension which is only enabled for source files loaded
|
206
|
-
// through the API's extension mechanism. A native function
|
207
|
-
// declaration is resolved by looking up the function through a
|
208
|
-
// callback provided by the extension.
|
209
|
-
PreParser::Statement PreParser::ParseNativeDeclaration(bool* ok) {
|
210
|
-
Expect(i::Token::NATIVE, CHECK_OK);
|
211
|
-
Expect(i::Token::FUNCTION, CHECK_OK);
|
212
|
-
ParseIdentifier(CHECK_OK);
|
213
|
-
Expect(i::Token::LPAREN, CHECK_OK);
|
214
|
-
bool done = (peek() == i::Token::RPAREN);
|
215
|
-
while (!done) {
|
216
|
-
ParseIdentifier(CHECK_OK);
|
217
|
-
done = (peek() == i::Token::RPAREN);
|
218
|
-
if (!done) {
|
219
|
-
Expect(i::Token::COMMA, CHECK_OK);
|
220
|
-
}
|
221
|
-
}
|
222
|
-
Expect(i::Token::RPAREN, CHECK_OK);
|
223
|
-
Expect(i::Token::SEMICOLON, CHECK_OK);
|
224
|
-
return kUnknownStatement;
|
225
|
-
}
|
226
|
-
|
227
|
-
|
228
|
-
PreParser::Statement PreParser::ParseBlock(bool* ok) {
|
229
|
-
// Block ::
|
230
|
-
// '{' Statement* '}'
|
231
|
-
|
232
|
-
// Note that a Block does not introduce a new execution scope!
|
233
|
-
// (ECMA-262, 3rd, 12.2)
|
234
|
-
//
|
235
|
-
Expect(i::Token::LBRACE, CHECK_OK);
|
236
|
-
while (peek() != i::Token::RBRACE) {
|
237
|
-
ParseStatement(CHECK_OK);
|
238
|
-
}
|
239
|
-
Expect(i::Token::RBRACE, CHECK_OK);
|
240
|
-
return kUnknownStatement;
|
241
|
-
}
|
242
|
-
|
243
|
-
|
244
|
-
PreParser::Statement PreParser::ParseVariableStatement(bool* ok) {
|
245
|
-
// VariableStatement ::
|
246
|
-
// VariableDeclarations ';'
|
247
|
-
|
248
|
-
Statement result = ParseVariableDeclarations(true, NULL, CHECK_OK);
|
249
|
-
ExpectSemicolon(CHECK_OK);
|
250
|
-
return result;
|
251
|
-
}
|
252
|
-
|
253
|
-
|
254
|
-
// If the variable declaration declares exactly one non-const
|
255
|
-
// variable, then *var is set to that variable. In all other cases,
|
256
|
-
// *var is untouched; in particular, it is the caller's responsibility
|
257
|
-
// to initialize it properly. This mechanism is also used for the parsing
|
258
|
-
// of 'for-in' loops.
|
259
|
-
PreParser::Statement PreParser::ParseVariableDeclarations(bool accept_IN,
|
260
|
-
int* num_decl,
|
261
|
-
bool* ok) {
|
262
|
-
// VariableDeclarations ::
|
263
|
-
// ('var' | 'const') (Identifier ('=' AssignmentExpression)?)+[',']
|
264
|
-
|
265
|
-
if (peek() == i::Token::VAR) {
|
266
|
-
Consume(i::Token::VAR);
|
267
|
-
} else if (peek() == i::Token::CONST) {
|
268
|
-
Consume(i::Token::CONST);
|
269
|
-
} else {
|
270
|
-
*ok = false;
|
271
|
-
return 0;
|
272
|
-
}
|
273
|
-
|
274
|
-
// The scope of a variable/const declared anywhere inside a function
|
275
|
-
// is the entire function (ECMA-262, 3rd, 10.1.3, and 12.2). .
|
276
|
-
int nvars = 0; // the number of variables declared
|
277
|
-
do {
|
278
|
-
// Parse variable name.
|
279
|
-
if (nvars > 0) Consume(i::Token::COMMA);
|
280
|
-
ParseIdentifier(CHECK_OK);
|
281
|
-
nvars++;
|
282
|
-
if (peek() == i::Token::ASSIGN) {
|
283
|
-
Expect(i::Token::ASSIGN, CHECK_OK);
|
284
|
-
ParseAssignmentExpression(accept_IN, CHECK_OK);
|
285
|
-
}
|
286
|
-
} while (peek() == i::Token::COMMA);
|
287
|
-
|
288
|
-
if (num_decl != NULL) *num_decl = nvars;
|
289
|
-
return kUnknownStatement;
|
290
|
-
}
|
291
|
-
|
292
|
-
|
293
|
-
PreParser::Statement PreParser::ParseExpressionOrLabelledStatement(
|
294
|
-
bool* ok) {
|
295
|
-
// ExpressionStatement | LabelledStatement ::
|
296
|
-
// Expression ';'
|
297
|
-
// Identifier ':' Statement
|
298
|
-
|
299
|
-
Expression expr = ParseExpression(true, CHECK_OK);
|
300
|
-
if (peek() == i::Token::COLON && expr == kIdentifierExpression) {
|
301
|
-
Consume(i::Token::COLON);
|
302
|
-
return ParseStatement(ok);
|
303
|
-
}
|
304
|
-
// Parsed expression statement.
|
305
|
-
ExpectSemicolon(CHECK_OK);
|
306
|
-
return kUnknownStatement;
|
307
|
-
}
|
308
|
-
|
309
|
-
|
310
|
-
PreParser::Statement PreParser::ParseIfStatement(bool* ok) {
|
311
|
-
// IfStatement ::
|
312
|
-
// 'if' '(' Expression ')' Statement ('else' Statement)?
|
313
|
-
|
314
|
-
Expect(i::Token::IF, CHECK_OK);
|
315
|
-
Expect(i::Token::LPAREN, CHECK_OK);
|
316
|
-
ParseExpression(true, CHECK_OK);
|
317
|
-
Expect(i::Token::RPAREN, CHECK_OK);
|
318
|
-
ParseStatement(CHECK_OK);
|
319
|
-
if (peek() == i::Token::ELSE) {
|
320
|
-
Next();
|
321
|
-
ParseStatement(CHECK_OK);
|
322
|
-
}
|
323
|
-
return kUnknownStatement;
|
324
|
-
}
|
325
|
-
|
326
|
-
|
327
|
-
PreParser::Statement PreParser::ParseContinueStatement(bool* ok) {
|
328
|
-
// ContinueStatement ::
|
329
|
-
// 'continue' [no line terminator] Identifier? ';'
|
330
|
-
|
331
|
-
Expect(i::Token::CONTINUE, CHECK_OK);
|
332
|
-
i::Token::Value tok = peek();
|
333
|
-
if (!scanner_->has_line_terminator_before_next() &&
|
334
|
-
tok != i::Token::SEMICOLON &&
|
335
|
-
tok != i::Token::RBRACE &&
|
336
|
-
tok != i::Token::EOS) {
|
337
|
-
ParseIdentifier(CHECK_OK);
|
338
|
-
}
|
339
|
-
ExpectSemicolon(CHECK_OK);
|
340
|
-
return kUnknownStatement;
|
341
|
-
}
|
342
|
-
|
343
|
-
|
344
|
-
PreParser::Statement PreParser::ParseBreakStatement(bool* ok) {
|
345
|
-
// BreakStatement ::
|
346
|
-
// 'break' [no line terminator] Identifier? ';'
|
347
|
-
|
348
|
-
Expect(i::Token::BREAK, CHECK_OK);
|
349
|
-
i::Token::Value tok = peek();
|
350
|
-
if (!scanner_->has_line_terminator_before_next() &&
|
351
|
-
tok != i::Token::SEMICOLON &&
|
352
|
-
tok != i::Token::RBRACE &&
|
353
|
-
tok != i::Token::EOS) {
|
354
|
-
ParseIdentifier(CHECK_OK);
|
355
|
-
}
|
356
|
-
ExpectSemicolon(CHECK_OK);
|
357
|
-
return kUnknownStatement;
|
358
|
-
}
|
359
|
-
|
360
|
-
|
361
|
-
PreParser::Statement PreParser::ParseReturnStatement(bool* ok) {
|
362
|
-
// ReturnStatement ::
|
363
|
-
// 'return' [no line terminator] Expression? ';'
|
364
|
-
|
365
|
-
// Consume the return token. It is necessary to do the before
|
366
|
-
// reporting any errors on it, because of the way errors are
|
367
|
-
// reported (underlining).
|
368
|
-
Expect(i::Token::RETURN, CHECK_OK);
|
369
|
-
|
370
|
-
// An ECMAScript program is considered syntactically incorrect if it
|
371
|
-
// contains a return statement that is not within the body of a
|
372
|
-
// function. See ECMA-262, section 12.9, page 67.
|
373
|
-
// This is not handled during preparsing.
|
374
|
-
|
375
|
-
i::Token::Value tok = peek();
|
376
|
-
if (!scanner_->has_line_terminator_before_next() &&
|
377
|
-
tok != i::Token::SEMICOLON &&
|
378
|
-
tok != i::Token::RBRACE &&
|
379
|
-
tok != i::Token::EOS) {
|
380
|
-
ParseExpression(true, CHECK_OK);
|
381
|
-
}
|
382
|
-
ExpectSemicolon(CHECK_OK);
|
383
|
-
return kUnknownStatement;
|
384
|
-
}
|
385
|
-
|
386
|
-
|
387
|
-
PreParser::Statement PreParser::ParseWithStatement(bool* ok) {
|
388
|
-
// WithStatement ::
|
389
|
-
// 'with' '(' Expression ')' Statement
|
390
|
-
Expect(i::Token::WITH, CHECK_OK);
|
391
|
-
Expect(i::Token::LPAREN, CHECK_OK);
|
392
|
-
ParseExpression(true, CHECK_OK);
|
393
|
-
Expect(i::Token::RPAREN, CHECK_OK);
|
394
|
-
|
395
|
-
scope_->EnterWith();
|
396
|
-
ParseStatement(CHECK_OK);
|
397
|
-
scope_->LeaveWith();
|
398
|
-
return kUnknownStatement;
|
399
|
-
}
|
400
|
-
|
401
|
-
|
402
|
-
PreParser::Statement PreParser::ParseSwitchStatement(bool* ok) {
|
403
|
-
// SwitchStatement ::
|
404
|
-
// 'switch' '(' Expression ')' '{' CaseClause* '}'
|
405
|
-
|
406
|
-
Expect(i::Token::SWITCH, CHECK_OK);
|
407
|
-
Expect(i::Token::LPAREN, CHECK_OK);
|
408
|
-
ParseExpression(true, CHECK_OK);
|
409
|
-
Expect(i::Token::RPAREN, CHECK_OK);
|
410
|
-
|
411
|
-
Expect(i::Token::LBRACE, CHECK_OK);
|
412
|
-
i::Token::Value token = peek();
|
413
|
-
while (token != i::Token::RBRACE) {
|
414
|
-
if (token == i::Token::CASE) {
|
415
|
-
Expect(i::Token::CASE, CHECK_OK);
|
416
|
-
ParseExpression(true, CHECK_OK);
|
417
|
-
Expect(i::Token::COLON, CHECK_OK);
|
418
|
-
} else if (token == i::Token::DEFAULT) {
|
419
|
-
Expect(i::Token::DEFAULT, CHECK_OK);
|
420
|
-
Expect(i::Token::COLON, CHECK_OK);
|
421
|
-
} else {
|
422
|
-
ParseStatement(CHECK_OK);
|
423
|
-
}
|
424
|
-
token = peek();
|
425
|
-
}
|
426
|
-
Expect(i::Token::RBRACE, CHECK_OK);
|
427
|
-
|
428
|
-
return kUnknownStatement;
|
429
|
-
}
|
430
|
-
|
431
|
-
|
432
|
-
PreParser::Statement PreParser::ParseDoWhileStatement(bool* ok) {
|
433
|
-
// DoStatement ::
|
434
|
-
// 'do' Statement 'while' '(' Expression ')' ';'
|
435
|
-
|
436
|
-
Expect(i::Token::DO, CHECK_OK);
|
437
|
-
ParseStatement(CHECK_OK);
|
438
|
-
Expect(i::Token::WHILE, CHECK_OK);
|
439
|
-
Expect(i::Token::LPAREN, CHECK_OK);
|
440
|
-
ParseExpression(true, CHECK_OK);
|
441
|
-
Expect(i::Token::RPAREN, CHECK_OK);
|
442
|
-
return kUnknownStatement;
|
443
|
-
}
|
444
|
-
|
445
|
-
|
446
|
-
PreParser::Statement PreParser::ParseWhileStatement(bool* ok) {
|
447
|
-
// WhileStatement ::
|
448
|
-
// 'while' '(' Expression ')' Statement
|
449
|
-
|
450
|
-
Expect(i::Token::WHILE, CHECK_OK);
|
451
|
-
Expect(i::Token::LPAREN, CHECK_OK);
|
452
|
-
ParseExpression(true, CHECK_OK);
|
453
|
-
Expect(i::Token::RPAREN, CHECK_OK);
|
454
|
-
ParseStatement(CHECK_OK);
|
455
|
-
return kUnknownStatement;
|
456
|
-
}
|
457
|
-
|
458
|
-
|
459
|
-
PreParser::Statement PreParser::ParseForStatement(bool* ok) {
|
460
|
-
// ForStatement ::
|
461
|
-
// 'for' '(' Expression? ';' Expression? ';' Expression? ')' Statement
|
462
|
-
|
463
|
-
Expect(i::Token::FOR, CHECK_OK);
|
464
|
-
Expect(i::Token::LPAREN, CHECK_OK);
|
465
|
-
if (peek() != i::Token::SEMICOLON) {
|
466
|
-
if (peek() == i::Token::VAR || peek() == i::Token::CONST) {
|
467
|
-
int decl_count;
|
468
|
-
ParseVariableDeclarations(false, &decl_count, CHECK_OK);
|
469
|
-
if (peek() == i::Token::IN && decl_count == 1) {
|
470
|
-
Expect(i::Token::IN, CHECK_OK);
|
471
|
-
ParseExpression(true, CHECK_OK);
|
472
|
-
Expect(i::Token::RPAREN, CHECK_OK);
|
473
|
-
|
474
|
-
ParseStatement(CHECK_OK);
|
475
|
-
return kUnknownStatement;
|
476
|
-
}
|
477
|
-
} else {
|
478
|
-
ParseExpression(false, CHECK_OK);
|
479
|
-
if (peek() == i::Token::IN) {
|
480
|
-
Expect(i::Token::IN, CHECK_OK);
|
481
|
-
ParseExpression(true, CHECK_OK);
|
482
|
-
Expect(i::Token::RPAREN, CHECK_OK);
|
483
|
-
|
484
|
-
ParseStatement(CHECK_OK);
|
485
|
-
return kUnknownStatement;
|
486
|
-
}
|
487
|
-
}
|
488
|
-
}
|
489
|
-
|
490
|
-
// Parsed initializer at this point.
|
491
|
-
Expect(i::Token::SEMICOLON, CHECK_OK);
|
492
|
-
|
493
|
-
if (peek() != i::Token::SEMICOLON) {
|
494
|
-
ParseExpression(true, CHECK_OK);
|
495
|
-
}
|
496
|
-
Expect(i::Token::SEMICOLON, CHECK_OK);
|
497
|
-
|
498
|
-
if (peek() != i::Token::RPAREN) {
|
499
|
-
ParseExpression(true, CHECK_OK);
|
500
|
-
}
|
501
|
-
Expect(i::Token::RPAREN, CHECK_OK);
|
502
|
-
|
503
|
-
ParseStatement(CHECK_OK);
|
504
|
-
return kUnknownStatement;
|
505
|
-
}
|
506
|
-
|
507
|
-
|
508
|
-
PreParser::Statement PreParser::ParseThrowStatement(bool* ok) {
|
509
|
-
// ThrowStatement ::
|
510
|
-
// 'throw' [no line terminator] Expression ';'
|
511
|
-
|
512
|
-
Expect(i::Token::THROW, CHECK_OK);
|
513
|
-
if (scanner_->has_line_terminator_before_next()) {
|
514
|
-
i::JavaScriptScanner::Location pos = scanner_->location();
|
515
|
-
ReportMessageAt(pos.beg_pos, pos.end_pos,
|
516
|
-
"newline_after_throw", NULL);
|
517
|
-
*ok = false;
|
518
|
-
return kUnknownStatement;
|
519
|
-
}
|
520
|
-
ParseExpression(true, CHECK_OK);
|
521
|
-
ExpectSemicolon(CHECK_OK);
|
522
|
-
|
523
|
-
return kUnknownStatement;
|
524
|
-
}
|
525
|
-
|
526
|
-
|
527
|
-
PreParser::Statement PreParser::ParseTryStatement(bool* ok) {
|
528
|
-
// TryStatement ::
|
529
|
-
// 'try' Block Catch
|
530
|
-
// 'try' Block Finally
|
531
|
-
// 'try' Block Catch Finally
|
532
|
-
//
|
533
|
-
// Catch ::
|
534
|
-
// 'catch' '(' Identifier ')' Block
|
535
|
-
//
|
536
|
-
// Finally ::
|
537
|
-
// 'finally' Block
|
538
|
-
|
539
|
-
// In preparsing, allow any number of catch/finally blocks, including zero
|
540
|
-
// of both.
|
541
|
-
|
542
|
-
Expect(i::Token::TRY, CHECK_OK);
|
543
|
-
|
544
|
-
ParseBlock(CHECK_OK);
|
545
|
-
|
546
|
-
bool catch_or_finally_seen = false;
|
547
|
-
if (peek() == i::Token::CATCH) {
|
548
|
-
Consume(i::Token::CATCH);
|
549
|
-
Expect(i::Token::LPAREN, CHECK_OK);
|
550
|
-
ParseIdentifier(CHECK_OK);
|
551
|
-
Expect(i::Token::RPAREN, CHECK_OK);
|
552
|
-
scope_->EnterWith();
|
553
|
-
ParseBlock(ok);
|
554
|
-
scope_->LeaveWith();
|
555
|
-
if (!*ok) return kUnknownStatement;
|
556
|
-
catch_or_finally_seen = true;
|
557
|
-
}
|
558
|
-
if (peek() == i::Token::FINALLY) {
|
559
|
-
Consume(i::Token::FINALLY);
|
560
|
-
ParseBlock(CHECK_OK);
|
561
|
-
catch_or_finally_seen = true;
|
562
|
-
}
|
563
|
-
if (!catch_or_finally_seen) {
|
564
|
-
*ok = false;
|
565
|
-
}
|
566
|
-
return kUnknownStatement;
|
567
|
-
}
|
568
|
-
|
569
|
-
|
570
|
-
PreParser::Statement PreParser::ParseDebuggerStatement(bool* ok) {
|
571
|
-
// In ECMA-262 'debugger' is defined as a reserved keyword. In some browser
|
572
|
-
// contexts this is used as a statement which invokes the debugger as if a
|
573
|
-
// break point is present.
|
574
|
-
// DebuggerStatement ::
|
575
|
-
// 'debugger' ';'
|
576
|
-
|
577
|
-
Expect(i::Token::DEBUGGER, CHECK_OK);
|
578
|
-
ExpectSemicolon(CHECK_OK);
|
579
|
-
return kUnknownStatement;
|
580
|
-
}
|
581
|
-
|
582
|
-
|
583
|
-
// Precedence = 1
|
584
|
-
PreParser::Expression PreParser::ParseExpression(bool accept_IN, bool* ok) {
|
585
|
-
// Expression ::
|
586
|
-
// AssignmentExpression
|
587
|
-
// Expression ',' AssignmentExpression
|
588
|
-
|
589
|
-
Expression result = ParseAssignmentExpression(accept_IN, CHECK_OK);
|
590
|
-
while (peek() == i::Token::COMMA) {
|
591
|
-
Expect(i::Token::COMMA, CHECK_OK);
|
592
|
-
ParseAssignmentExpression(accept_IN, CHECK_OK);
|
593
|
-
result = kUnknownExpression;
|
594
|
-
}
|
595
|
-
return result;
|
596
|
-
}
|
597
|
-
|
598
|
-
|
599
|
-
// Precedence = 2
|
600
|
-
PreParser::Expression PreParser::ParseAssignmentExpression(bool accept_IN,
|
601
|
-
bool* ok) {
|
602
|
-
// AssignmentExpression ::
|
603
|
-
// ConditionalExpression
|
604
|
-
// LeftHandSideExpression AssignmentOperator AssignmentExpression
|
605
|
-
|
606
|
-
Expression expression = ParseConditionalExpression(accept_IN, CHECK_OK);
|
607
|
-
|
608
|
-
if (!i::Token::IsAssignmentOp(peek())) {
|
609
|
-
// Parsed conditional expression only (no assignment).
|
610
|
-
return expression;
|
611
|
-
}
|
612
|
-
|
613
|
-
i::Token::Value op = Next(); // Get assignment operator.
|
614
|
-
ParseAssignmentExpression(accept_IN, CHECK_OK);
|
615
|
-
|
616
|
-
if ((op == i::Token::ASSIGN) && (expression == kThisPropertyExpression)) {
|
617
|
-
scope_->AddProperty();
|
618
|
-
}
|
619
|
-
|
620
|
-
return kUnknownExpression;
|
621
|
-
}
|
622
|
-
|
623
|
-
|
624
|
-
// Precedence = 3
|
625
|
-
PreParser::Expression PreParser::ParseConditionalExpression(bool accept_IN,
|
626
|
-
bool* ok) {
|
627
|
-
// ConditionalExpression ::
|
628
|
-
// LogicalOrExpression
|
629
|
-
// LogicalOrExpression '?' AssignmentExpression ':' AssignmentExpression
|
630
|
-
|
631
|
-
// We start using the binary expression parser for prec >= 4 only!
|
632
|
-
Expression expression = ParseBinaryExpression(4, accept_IN, CHECK_OK);
|
633
|
-
if (peek() != i::Token::CONDITIONAL) return expression;
|
634
|
-
Consume(i::Token::CONDITIONAL);
|
635
|
-
// In parsing the first assignment expression in conditional
|
636
|
-
// expressions we always accept the 'in' keyword; see ECMA-262,
|
637
|
-
// section 11.12, page 58.
|
638
|
-
ParseAssignmentExpression(true, CHECK_OK);
|
639
|
-
Expect(i::Token::COLON, CHECK_OK);
|
640
|
-
ParseAssignmentExpression(accept_IN, CHECK_OK);
|
641
|
-
return kUnknownExpression;
|
642
|
-
}
|
643
|
-
|
644
|
-
|
645
|
-
int PreParser::Precedence(i::Token::Value tok, bool accept_IN) {
|
646
|
-
if (tok == i::Token::IN && !accept_IN)
|
647
|
-
return 0; // 0 precedence will terminate binary expression parsing
|
648
|
-
|
649
|
-
return i::Token::Precedence(tok);
|
650
|
-
}
|
651
|
-
|
652
|
-
|
653
|
-
// Precedence >= 4
|
654
|
-
PreParser::Expression PreParser::ParseBinaryExpression(int prec,
|
655
|
-
bool accept_IN,
|
656
|
-
bool* ok) {
|
657
|
-
Expression result = ParseUnaryExpression(CHECK_OK);
|
658
|
-
for (int prec1 = Precedence(peek(), accept_IN); prec1 >= prec; prec1--) {
|
659
|
-
// prec1 >= 4
|
660
|
-
while (Precedence(peek(), accept_IN) == prec1) {
|
661
|
-
Next();
|
662
|
-
ParseBinaryExpression(prec1 + 1, accept_IN, CHECK_OK);
|
663
|
-
result = kUnknownExpression;
|
664
|
-
}
|
665
|
-
}
|
666
|
-
return result;
|
667
|
-
}
|
668
|
-
|
669
|
-
|
670
|
-
PreParser::Expression PreParser::ParseUnaryExpression(bool* ok) {
|
671
|
-
// UnaryExpression ::
|
672
|
-
// PostfixExpression
|
673
|
-
// 'delete' UnaryExpression
|
674
|
-
// 'void' UnaryExpression
|
675
|
-
// 'typeof' UnaryExpression
|
676
|
-
// '++' UnaryExpression
|
677
|
-
// '--' UnaryExpression
|
678
|
-
// '+' UnaryExpression
|
679
|
-
// '-' UnaryExpression
|
680
|
-
// '~' UnaryExpression
|
681
|
-
// '!' UnaryExpression
|
682
|
-
|
683
|
-
i::Token::Value op = peek();
|
684
|
-
if (i::Token::IsUnaryOp(op) || i::Token::IsCountOp(op)) {
|
685
|
-
op = Next();
|
686
|
-
ParseUnaryExpression(ok);
|
687
|
-
return kUnknownExpression;
|
688
|
-
} else {
|
689
|
-
return ParsePostfixExpression(ok);
|
690
|
-
}
|
691
|
-
}
|
692
|
-
|
693
|
-
|
694
|
-
PreParser::Expression PreParser::ParsePostfixExpression(bool* ok) {
|
695
|
-
// PostfixExpression ::
|
696
|
-
// LeftHandSideExpression ('++' | '--')?
|
697
|
-
|
698
|
-
Expression expression = ParseLeftHandSideExpression(CHECK_OK);
|
699
|
-
if (!scanner_->has_line_terminator_before_next() &&
|
700
|
-
i::Token::IsCountOp(peek())) {
|
701
|
-
Next();
|
702
|
-
return kUnknownExpression;
|
703
|
-
}
|
704
|
-
return expression;
|
705
|
-
}
|
706
|
-
|
707
|
-
|
708
|
-
PreParser::Expression PreParser::ParseLeftHandSideExpression(bool* ok) {
|
709
|
-
// LeftHandSideExpression ::
|
710
|
-
// (NewExpression | MemberExpression) ...
|
711
|
-
|
712
|
-
Expression result;
|
713
|
-
if (peek() == i::Token::NEW) {
|
714
|
-
result = ParseNewExpression(CHECK_OK);
|
715
|
-
} else {
|
716
|
-
result = ParseMemberExpression(CHECK_OK);
|
717
|
-
}
|
718
|
-
|
719
|
-
while (true) {
|
720
|
-
switch (peek()) {
|
721
|
-
case i::Token::LBRACK: {
|
722
|
-
Consume(i::Token::LBRACK);
|
723
|
-
ParseExpression(true, CHECK_OK);
|
724
|
-
Expect(i::Token::RBRACK, CHECK_OK);
|
725
|
-
if (result == kThisExpression) {
|
726
|
-
result = kThisPropertyExpression;
|
727
|
-
} else {
|
728
|
-
result = kUnknownExpression;
|
729
|
-
}
|
730
|
-
break;
|
731
|
-
}
|
732
|
-
|
733
|
-
case i::Token::LPAREN: {
|
734
|
-
ParseArguments(CHECK_OK);
|
735
|
-
result = kUnknownExpression;
|
736
|
-
break;
|
737
|
-
}
|
738
|
-
|
739
|
-
case i::Token::PERIOD: {
|
740
|
-
Consume(i::Token::PERIOD);
|
741
|
-
ParseIdentifierName(CHECK_OK);
|
742
|
-
if (result == kThisExpression) {
|
743
|
-
result = kThisPropertyExpression;
|
744
|
-
} else {
|
745
|
-
result = kUnknownExpression;
|
746
|
-
}
|
747
|
-
break;
|
748
|
-
}
|
749
|
-
|
750
|
-
default:
|
751
|
-
return result;
|
752
|
-
}
|
753
|
-
}
|
754
|
-
}
|
755
|
-
|
756
|
-
|
757
|
-
PreParser::Expression PreParser::ParseNewExpression(bool* ok) {
|
758
|
-
// NewExpression ::
|
759
|
-
// ('new')+ MemberExpression
|
760
|
-
|
761
|
-
// The grammar for new expressions is pretty warped. The keyword
|
762
|
-
// 'new' can either be a part of the new expression (where it isn't
|
763
|
-
// followed by an argument list) or a part of the member expression,
|
764
|
-
// where it must be followed by an argument list. To accommodate
|
765
|
-
// this, we parse the 'new' keywords greedily and keep track of how
|
766
|
-
// many we have parsed. This information is then passed on to the
|
767
|
-
// member expression parser, which is only allowed to match argument
|
768
|
-
// lists as long as it has 'new' prefixes left
|
769
|
-
unsigned new_count = 0;
|
770
|
-
do {
|
771
|
-
Consume(i::Token::NEW);
|
772
|
-
new_count++;
|
773
|
-
} while (peek() == i::Token::NEW);
|
774
|
-
|
775
|
-
return ParseMemberWithNewPrefixesExpression(new_count, ok);
|
776
|
-
}
|
777
|
-
|
778
|
-
|
779
|
-
PreParser::Expression PreParser::ParseMemberExpression(bool* ok) {
|
780
|
-
return ParseMemberWithNewPrefixesExpression(0, ok);
|
781
|
-
}
|
782
|
-
|
783
|
-
|
784
|
-
PreParser::Expression PreParser::ParseMemberWithNewPrefixesExpression(
|
785
|
-
unsigned new_count, bool* ok) {
|
786
|
-
// MemberExpression ::
|
787
|
-
// (PrimaryExpression | FunctionLiteral)
|
788
|
-
// ('[' Expression ']' | '.' Identifier | Arguments)*
|
789
|
-
|
790
|
-
// Parse the initial primary or function expression.
|
791
|
-
Expression result = kUnknownExpression;
|
792
|
-
if (peek() == i::Token::FUNCTION) {
|
793
|
-
Consume(i::Token::FUNCTION);
|
794
|
-
if (peek_any_identifier()) {
|
795
|
-
ParseIdentifier(CHECK_OK);
|
796
|
-
}
|
797
|
-
result = ParseFunctionLiteral(CHECK_OK);
|
798
|
-
} else {
|
799
|
-
result = ParsePrimaryExpression(CHECK_OK);
|
800
|
-
}
|
801
|
-
|
802
|
-
while (true) {
|
803
|
-
switch (peek()) {
|
804
|
-
case i::Token::LBRACK: {
|
805
|
-
Consume(i::Token::LBRACK);
|
806
|
-
ParseExpression(true, CHECK_OK);
|
807
|
-
Expect(i::Token::RBRACK, CHECK_OK);
|
808
|
-
if (result == kThisExpression) {
|
809
|
-
result = kThisPropertyExpression;
|
810
|
-
} else {
|
811
|
-
result = kUnknownExpression;
|
812
|
-
}
|
813
|
-
break;
|
814
|
-
}
|
815
|
-
case i::Token::PERIOD: {
|
816
|
-
Consume(i::Token::PERIOD);
|
817
|
-
ParseIdentifierName(CHECK_OK);
|
818
|
-
if (result == kThisExpression) {
|
819
|
-
result = kThisPropertyExpression;
|
820
|
-
} else {
|
821
|
-
result = kUnknownExpression;
|
822
|
-
}
|
823
|
-
break;
|
824
|
-
}
|
825
|
-
case i::Token::LPAREN: {
|
826
|
-
if (new_count == 0) return result;
|
827
|
-
// Consume one of the new prefixes (already parsed).
|
828
|
-
ParseArguments(CHECK_OK);
|
829
|
-
new_count--;
|
830
|
-
result = kUnknownExpression;
|
831
|
-
break;
|
832
|
-
}
|
833
|
-
default:
|
834
|
-
return result;
|
835
|
-
}
|
836
|
-
}
|
837
|
-
}
|
838
|
-
|
839
|
-
|
840
|
-
PreParser::Expression PreParser::ParsePrimaryExpression(bool* ok) {
|
841
|
-
// PrimaryExpression ::
|
842
|
-
// 'this'
|
843
|
-
// 'null'
|
844
|
-
// 'true'
|
845
|
-
// 'false'
|
846
|
-
// Identifier
|
847
|
-
// Number
|
848
|
-
// String
|
849
|
-
// ArrayLiteral
|
850
|
-
// ObjectLiteral
|
851
|
-
// RegExpLiteral
|
852
|
-
// '(' Expression ')'
|
853
|
-
|
854
|
-
Expression result = kUnknownExpression;
|
855
|
-
switch (peek()) {
|
856
|
-
case i::Token::THIS: {
|
857
|
-
Next();
|
858
|
-
result = kThisExpression;
|
859
|
-
break;
|
860
|
-
}
|
861
|
-
|
862
|
-
case i::Token::IDENTIFIER:
|
863
|
-
case i::Token::FUTURE_RESERVED_WORD: {
|
864
|
-
ParseIdentifier(CHECK_OK);
|
865
|
-
result = kIdentifierExpression;
|
866
|
-
break;
|
867
|
-
}
|
868
|
-
|
869
|
-
case i::Token::NULL_LITERAL:
|
870
|
-
case i::Token::TRUE_LITERAL:
|
871
|
-
case i::Token::FALSE_LITERAL:
|
872
|
-
case i::Token::NUMBER: {
|
873
|
-
Next();
|
874
|
-
break;
|
875
|
-
}
|
876
|
-
case i::Token::STRING: {
|
877
|
-
Next();
|
878
|
-
result = GetStringSymbol();
|
879
|
-
break;
|
880
|
-
}
|
881
|
-
|
882
|
-
case i::Token::ASSIGN_DIV:
|
883
|
-
result = ParseRegExpLiteral(true, CHECK_OK);
|
884
|
-
break;
|
885
|
-
|
886
|
-
case i::Token::DIV:
|
887
|
-
result = ParseRegExpLiteral(false, CHECK_OK);
|
888
|
-
break;
|
889
|
-
|
890
|
-
case i::Token::LBRACK:
|
891
|
-
result = ParseArrayLiteral(CHECK_OK);
|
892
|
-
break;
|
893
|
-
|
894
|
-
case i::Token::LBRACE:
|
895
|
-
result = ParseObjectLiteral(CHECK_OK);
|
896
|
-
break;
|
897
|
-
|
898
|
-
case i::Token::LPAREN:
|
899
|
-
Consume(i::Token::LPAREN);
|
900
|
-
parenthesized_function_ = (peek() == i::Token::FUNCTION);
|
901
|
-
result = ParseExpression(true, CHECK_OK);
|
902
|
-
Expect(i::Token::RPAREN, CHECK_OK);
|
903
|
-
if (result == kIdentifierExpression) result = kUnknownExpression;
|
904
|
-
break;
|
905
|
-
|
906
|
-
case i::Token::MOD:
|
907
|
-
result = ParseV8Intrinsic(CHECK_OK);
|
908
|
-
break;
|
909
|
-
|
910
|
-
default: {
|
911
|
-
Next();
|
912
|
-
*ok = false;
|
913
|
-
return kUnknownExpression;
|
914
|
-
}
|
915
|
-
}
|
916
|
-
|
917
|
-
return result;
|
918
|
-
}
|
919
|
-
|
920
|
-
|
921
|
-
PreParser::Expression PreParser::ParseArrayLiteral(bool* ok) {
|
922
|
-
// ArrayLiteral ::
|
923
|
-
// '[' Expression? (',' Expression?)* ']'
|
924
|
-
Expect(i::Token::LBRACK, CHECK_OK);
|
925
|
-
while (peek() != i::Token::RBRACK) {
|
926
|
-
if (peek() != i::Token::COMMA) {
|
927
|
-
ParseAssignmentExpression(true, CHECK_OK);
|
928
|
-
}
|
929
|
-
if (peek() != i::Token::RBRACK) {
|
930
|
-
Expect(i::Token::COMMA, CHECK_OK);
|
931
|
-
}
|
932
|
-
}
|
933
|
-
Expect(i::Token::RBRACK, CHECK_OK);
|
934
|
-
|
935
|
-
scope_->NextMaterializedLiteralIndex();
|
936
|
-
return kUnknownExpression;
|
937
|
-
}
|
938
|
-
|
939
|
-
|
940
|
-
PreParser::Expression PreParser::ParseObjectLiteral(bool* ok) {
|
941
|
-
// ObjectLiteral ::
|
942
|
-
// '{' (
|
943
|
-
// ((IdentifierName | String | Number) ':' AssignmentExpression)
|
944
|
-
// | (('get' | 'set') (IdentifierName | String | Number) FunctionLiteral)
|
945
|
-
// )*[','] '}'
|
946
|
-
|
947
|
-
Expect(i::Token::LBRACE, CHECK_OK);
|
948
|
-
while (peek() != i::Token::RBRACE) {
|
949
|
-
i::Token::Value next = peek();
|
950
|
-
switch (next) {
|
951
|
-
case i::Token::IDENTIFIER:
|
952
|
-
case i::Token::FUTURE_RESERVED_WORD: {
|
953
|
-
bool is_getter = false;
|
954
|
-
bool is_setter = false;
|
955
|
-
ParseIdentifierOrGetOrSet(&is_getter, &is_setter, CHECK_OK);
|
956
|
-
if ((is_getter || is_setter) && peek() != i::Token::COLON) {
|
957
|
-
i::Token::Value name = Next();
|
958
|
-
bool is_keyword = i::Token::IsKeyword(name);
|
959
|
-
if (name != i::Token::IDENTIFIER &&
|
960
|
-
name != i::Token::FUTURE_RESERVED_WORD &&
|
961
|
-
name != i::Token::NUMBER &&
|
962
|
-
name != i::Token::STRING &&
|
963
|
-
!is_keyword) {
|
964
|
-
*ok = false;
|
965
|
-
return kUnknownExpression;
|
966
|
-
}
|
967
|
-
if (!is_keyword) {
|
968
|
-
LogSymbol();
|
969
|
-
}
|
970
|
-
ParseFunctionLiteral(CHECK_OK);
|
971
|
-
if (peek() != i::Token::RBRACE) {
|
972
|
-
Expect(i::Token::COMMA, CHECK_OK);
|
973
|
-
}
|
974
|
-
continue; // restart the while
|
975
|
-
}
|
976
|
-
break;
|
977
|
-
}
|
978
|
-
case i::Token::STRING:
|
979
|
-
Consume(next);
|
980
|
-
GetStringSymbol();
|
981
|
-
break;
|
982
|
-
case i::Token::NUMBER:
|
983
|
-
Consume(next);
|
984
|
-
break;
|
985
|
-
default:
|
986
|
-
if (i::Token::IsKeyword(next)) {
|
987
|
-
Consume(next);
|
988
|
-
} else {
|
989
|
-
// Unexpected token.
|
990
|
-
*ok = false;
|
991
|
-
return kUnknownExpression;
|
992
|
-
}
|
993
|
-
}
|
994
|
-
|
995
|
-
Expect(i::Token::COLON, CHECK_OK);
|
996
|
-
ParseAssignmentExpression(true, CHECK_OK);
|
997
|
-
|
998
|
-
// TODO(1240767): Consider allowing trailing comma.
|
999
|
-
if (peek() != i::Token::RBRACE) Expect(i::Token::COMMA, CHECK_OK);
|
1000
|
-
}
|
1001
|
-
Expect(i::Token::RBRACE, CHECK_OK);
|
1002
|
-
|
1003
|
-
scope_->NextMaterializedLiteralIndex();
|
1004
|
-
return kUnknownExpression;
|
1005
|
-
}
|
1006
|
-
|
1007
|
-
|
1008
|
-
PreParser::Expression PreParser::ParseRegExpLiteral(bool seen_equal,
|
1009
|
-
bool* ok) {
|
1010
|
-
if (!scanner_->ScanRegExpPattern(seen_equal)) {
|
1011
|
-
Next();
|
1012
|
-
i::JavaScriptScanner::Location location = scanner_->location();
|
1013
|
-
ReportMessageAt(location.beg_pos, location.end_pos,
|
1014
|
-
"unterminated_regexp", NULL);
|
1015
|
-
*ok = false;
|
1016
|
-
return kUnknownExpression;
|
1017
|
-
}
|
1018
|
-
|
1019
|
-
scope_->NextMaterializedLiteralIndex();
|
1020
|
-
|
1021
|
-
if (!scanner_->ScanRegExpFlags()) {
|
1022
|
-
Next();
|
1023
|
-
i::JavaScriptScanner::Location location = scanner_->location();
|
1024
|
-
ReportMessageAt(location.beg_pos, location.end_pos,
|
1025
|
-
"invalid_regexp_flags", NULL);
|
1026
|
-
*ok = false;
|
1027
|
-
return kUnknownExpression;
|
1028
|
-
}
|
1029
|
-
Next();
|
1030
|
-
return kUnknownExpression;
|
1031
|
-
}
|
1032
|
-
|
1033
|
-
|
1034
|
-
PreParser::Arguments PreParser::ParseArguments(bool* ok) {
|
1035
|
-
// Arguments ::
|
1036
|
-
// '(' (AssignmentExpression)*[','] ')'
|
1037
|
-
|
1038
|
-
Expect(i::Token::LPAREN, CHECK_OK);
|
1039
|
-
bool done = (peek() == i::Token::RPAREN);
|
1040
|
-
int argc = 0;
|
1041
|
-
while (!done) {
|
1042
|
-
ParseAssignmentExpression(true, CHECK_OK);
|
1043
|
-
argc++;
|
1044
|
-
done = (peek() == i::Token::RPAREN);
|
1045
|
-
if (!done) Expect(i::Token::COMMA, CHECK_OK);
|
1046
|
-
}
|
1047
|
-
Expect(i::Token::RPAREN, CHECK_OK);
|
1048
|
-
return argc;
|
1049
|
-
}
|
1050
|
-
|
1051
|
-
|
1052
|
-
PreParser::Expression PreParser::ParseFunctionLiteral(bool* ok) {
|
1053
|
-
// Function ::
|
1054
|
-
// '(' FormalParameterList? ')' '{' FunctionBody '}'
|
1055
|
-
|
1056
|
-
// Parse function body.
|
1057
|
-
ScopeType outer_scope_type = scope_->type();
|
1058
|
-
bool inside_with = scope_->IsInsideWith();
|
1059
|
-
Scope function_scope(&scope_, kFunctionScope);
|
1060
|
-
|
1061
|
-
// FormalParameterList ::
|
1062
|
-
// '(' (Identifier)*[','] ')'
|
1063
|
-
Expect(i::Token::LPAREN, CHECK_OK);
|
1064
|
-
bool done = (peek() == i::Token::RPAREN);
|
1065
|
-
while (!done) {
|
1066
|
-
ParseIdentifier(CHECK_OK);
|
1067
|
-
done = (peek() == i::Token::RPAREN);
|
1068
|
-
if (!done) {
|
1069
|
-
Expect(i::Token::COMMA, CHECK_OK);
|
1070
|
-
}
|
1071
|
-
}
|
1072
|
-
Expect(i::Token::RPAREN, CHECK_OK);
|
1073
|
-
|
1074
|
-
Expect(i::Token::LBRACE, CHECK_OK);
|
1075
|
-
int function_block_pos = scanner_->location().beg_pos;
|
1076
|
-
|
1077
|
-
// Determine if the function will be lazily compiled.
|
1078
|
-
// Currently only happens to top-level functions.
|
1079
|
-
// Optimistically assume that all top-level functions are lazily compiled.
|
1080
|
-
bool is_lazily_compiled = (outer_scope_type == kTopLevelScope &&
|
1081
|
-
!inside_with && allow_lazy_ &&
|
1082
|
-
!parenthesized_function_);
|
1083
|
-
parenthesized_function_ = false;
|
1084
|
-
|
1085
|
-
if (is_lazily_compiled) {
|
1086
|
-
log_->PauseRecording();
|
1087
|
-
ParseSourceElements(i::Token::RBRACE, ok);
|
1088
|
-
log_->ResumeRecording();
|
1089
|
-
if (!*ok) return kUnknownExpression;
|
1090
|
-
|
1091
|
-
Expect(i::Token::RBRACE, CHECK_OK);
|
1092
|
-
|
1093
|
-
// Position right after terminal '}'.
|
1094
|
-
int end_pos = scanner_->location().end_pos;
|
1095
|
-
log_->LogFunction(function_block_pos, end_pos,
|
1096
|
-
function_scope.materialized_literal_count(),
|
1097
|
-
function_scope.expected_properties());
|
1098
|
-
} else {
|
1099
|
-
ParseSourceElements(i::Token::RBRACE, CHECK_OK);
|
1100
|
-
Expect(i::Token::RBRACE, CHECK_OK);
|
1101
|
-
}
|
1102
|
-
return kUnknownExpression;
|
1103
|
-
}
|
1104
|
-
|
1105
|
-
|
1106
|
-
PreParser::Expression PreParser::ParseV8Intrinsic(bool* ok) {
|
1107
|
-
// CallRuntime ::
|
1108
|
-
// '%' Identifier Arguments
|
1109
|
-
|
1110
|
-
Expect(i::Token::MOD, CHECK_OK);
|
1111
|
-
ParseIdentifier(CHECK_OK);
|
1112
|
-
ParseArguments(CHECK_OK);
|
1113
|
-
|
1114
|
-
return kUnknownExpression;
|
1115
|
-
}
|
1116
|
-
|
1117
|
-
|
1118
|
-
void PreParser::ExpectSemicolon(bool* ok) {
|
1119
|
-
// Check for automatic semicolon insertion according to
|
1120
|
-
// the rules given in ECMA-262, section 7.9, page 21.
|
1121
|
-
i::Token::Value tok = peek();
|
1122
|
-
if (tok == i::Token::SEMICOLON) {
|
1123
|
-
Next();
|
1124
|
-
return;
|
1125
|
-
}
|
1126
|
-
if (scanner_->has_line_terminator_before_next() ||
|
1127
|
-
tok == i::Token::RBRACE ||
|
1128
|
-
tok == i::Token::EOS) {
|
1129
|
-
return;
|
1130
|
-
}
|
1131
|
-
Expect(i::Token::SEMICOLON, ok);
|
1132
|
-
}
|
1133
|
-
|
1134
|
-
|
1135
|
-
void PreParser::LogSymbol() {
|
1136
|
-
int identifier_pos = scanner_->location().beg_pos;
|
1137
|
-
if (scanner_->is_literal_ascii()) {
|
1138
|
-
log_->LogAsciiSymbol(identifier_pos, scanner_->literal_ascii_string());
|
1139
|
-
} else {
|
1140
|
-
log_->LogUC16Symbol(identifier_pos, scanner_->literal_uc16_string());
|
1141
|
-
}
|
1142
|
-
}
|
1143
|
-
|
1144
|
-
|
1145
|
-
PreParser::Identifier PreParser::GetIdentifierSymbol() {
|
1146
|
-
LogSymbol();
|
1147
|
-
return kUnknownIdentifier;
|
1148
|
-
}
|
1149
|
-
|
1150
|
-
|
1151
|
-
PreParser::Expression PreParser::GetStringSymbol() {
|
1152
|
-
LogSymbol();
|
1153
|
-
return kUnknownExpression;
|
1154
|
-
}
|
1155
|
-
|
1156
|
-
|
1157
|
-
PreParser::Identifier PreParser::ParseIdentifier(bool* ok) {
|
1158
|
-
if (!Check(i::Token::FUTURE_RESERVED_WORD)) {
|
1159
|
-
Expect(i::Token::IDENTIFIER, ok);
|
1160
|
-
}
|
1161
|
-
if (!*ok) return kUnknownIdentifier;
|
1162
|
-
return GetIdentifierSymbol();
|
1163
|
-
}
|
1164
|
-
|
1165
|
-
|
1166
|
-
PreParser::Identifier PreParser::ParseIdentifierName(bool* ok) {
|
1167
|
-
i::Token::Value next = Next();
|
1168
|
-
if (i::Token::IsKeyword(next)) {
|
1169
|
-
int pos = scanner_->location().beg_pos;
|
1170
|
-
const char* keyword = i::Token::String(next);
|
1171
|
-
log_->LogAsciiSymbol(pos, i::Vector<const char>(keyword,
|
1172
|
-
i::StrLength(keyword)));
|
1173
|
-
return kUnknownExpression;
|
1174
|
-
}
|
1175
|
-
if (next == i::Token::IDENTIFIER ||
|
1176
|
-
next == i::Token::FUTURE_RESERVED_WORD) {
|
1177
|
-
return GetIdentifierSymbol();
|
1178
|
-
}
|
1179
|
-
*ok = false;
|
1180
|
-
return kUnknownIdentifier;
|
1181
|
-
}
|
1182
|
-
|
1183
|
-
|
1184
|
-
// This function reads an identifier and determines whether or not it
|
1185
|
-
// is 'get' or 'set'.
|
1186
|
-
PreParser::Identifier PreParser::ParseIdentifierOrGetOrSet(bool* is_get,
|
1187
|
-
bool* is_set,
|
1188
|
-
bool* ok) {
|
1189
|
-
PreParser::Identifier result = ParseIdentifier(CHECK_OK);
|
1190
|
-
if (scanner_->is_literal_ascii() && scanner_->literal_length() == 3) {
|
1191
|
-
const char* token = scanner_->literal_ascii_string().start();
|
1192
|
-
*is_get = strncmp(token, "get", 3) == 0;
|
1193
|
-
*is_set = !*is_get && strncmp(token, "set", 3) == 0;
|
1194
|
-
}
|
1195
|
-
return result;
|
1196
|
-
}
|
1197
|
-
|
1198
|
-
bool PreParser::peek_any_identifier() {
|
1199
|
-
i::Token::Value next = peek();
|
1200
|
-
return next == i::Token::IDENTIFIER ||
|
1201
|
-
next == i::Token::FUTURE_RESERVED_WORD;
|
1202
|
-
}
|
1203
|
-
|
1204
|
-
#undef CHECK_OK
|
1205
|
-
} } // v8::preparser
|