therubyracer 0.4.9-x86-linux
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/.gitignore +11 -0
- data/.gitmodules +3 -0
- data/Doxyfile +1514 -0
- data/History.txt +43 -0
- data/README.rdoc +157 -0
- data/Rakefile +51 -0
- data/docs/data_conversion.txt +18 -0
- data/ext/v8/callbacks.cpp +160 -0
- data/ext/v8/callbacks.h +14 -0
- data/ext/v8/convert_ruby.cpp +8 -0
- data/ext/v8/convert_ruby.h +99 -0
- data/ext/v8/convert_string.cpp +10 -0
- data/ext/v8/convert_string.h +73 -0
- data/ext/v8/convert_v8.cpp +9 -0
- data/ext/v8/convert_v8.h +121 -0
- data/ext/v8/converters.cpp +83 -0
- data/ext/v8/converters.h +23 -0
- data/ext/v8/extconf.rb +36 -0
- data/ext/v8/upstream/2.0.6/.gitignore +26 -0
- data/ext/v8/upstream/2.0.6/AUTHORS +23 -0
- data/ext/v8/upstream/2.0.6/ChangeLog +1479 -0
- data/ext/v8/upstream/2.0.6/LICENSE +55 -0
- data/ext/v8/upstream/2.0.6/SConstruct +1028 -0
- data/ext/v8/upstream/2.0.6/include/v8-debug.h +275 -0
- data/ext/v8/upstream/2.0.6/include/v8.h +3236 -0
- data/ext/v8/upstream/2.0.6/src/SConscript +283 -0
- data/ext/v8/upstream/2.0.6/src/accessors.cc +695 -0
- data/ext/v8/upstream/2.0.6/src/accessors.h +114 -0
- data/ext/v8/upstream/2.0.6/src/allocation.cc +198 -0
- data/ext/v8/upstream/2.0.6/src/allocation.h +169 -0
- data/ext/v8/upstream/2.0.6/src/api.cc +3831 -0
- data/ext/v8/upstream/2.0.6/src/api.h +479 -0
- data/ext/v8/upstream/2.0.6/src/apinatives.js +110 -0
- data/ext/v8/upstream/2.0.6/src/apiutils.h +69 -0
- data/ext/v8/upstream/2.0.6/src/arguments.h +97 -0
- data/ext/v8/upstream/2.0.6/src/arm/assembler-arm-inl.h +277 -0
- data/ext/v8/upstream/2.0.6/src/arm/assembler-arm.cc +1821 -0
- data/ext/v8/upstream/2.0.6/src/arm/assembler-arm.h +1027 -0
- data/ext/v8/upstream/2.0.6/src/arm/assembler-thumb2-inl.h +267 -0
- data/ext/v8/upstream/2.0.6/src/arm/assembler-thumb2.cc +1821 -0
- data/ext/v8/upstream/2.0.6/src/arm/assembler-thumb2.h +1027 -0
- data/ext/v8/upstream/2.0.6/src/arm/builtins-arm.cc +1271 -0
- data/ext/v8/upstream/2.0.6/src/arm/codegen-arm-inl.h +74 -0
- data/ext/v8/upstream/2.0.6/src/arm/codegen-arm.cc +6682 -0
- data/ext/v8/upstream/2.0.6/src/arm/codegen-arm.h +535 -0
- data/ext/v8/upstream/2.0.6/src/arm/constants-arm.cc +112 -0
- data/ext/v8/upstream/2.0.6/src/arm/constants-arm.h +347 -0
- data/ext/v8/upstream/2.0.6/src/arm/cpu-arm.cc +132 -0
- data/ext/v8/upstream/2.0.6/src/arm/debug-arm.cc +213 -0
- data/ext/v8/upstream/2.0.6/src/arm/disasm-arm.cc +1166 -0
- data/ext/v8/upstream/2.0.6/src/arm/fast-codegen-arm.cc +1698 -0
- data/ext/v8/upstream/2.0.6/src/arm/frames-arm.cc +123 -0
- data/ext/v8/upstream/2.0.6/src/arm/frames-arm.h +162 -0
- data/ext/v8/upstream/2.0.6/src/arm/ic-arm.cc +849 -0
- data/ext/v8/upstream/2.0.6/src/arm/jump-target-arm.cc +238 -0
- data/ext/v8/upstream/2.0.6/src/arm/macro-assembler-arm.cc +1259 -0
- data/ext/v8/upstream/2.0.6/src/arm/macro-assembler-arm.h +423 -0
- data/ext/v8/upstream/2.0.6/src/arm/regexp-macro-assembler-arm.cc +1266 -0
- data/ext/v8/upstream/2.0.6/src/arm/regexp-macro-assembler-arm.h +282 -0
- data/ext/v8/upstream/2.0.6/src/arm/register-allocator-arm-inl.h +103 -0
- data/ext/v8/upstream/2.0.6/src/arm/register-allocator-arm.cc +59 -0
- data/ext/v8/upstream/2.0.6/src/arm/register-allocator-arm.h +43 -0
- data/ext/v8/upstream/2.0.6/src/arm/simulator-arm.cc +2264 -0
- data/ext/v8/upstream/2.0.6/src/arm/simulator-arm.h +306 -0
- data/ext/v8/upstream/2.0.6/src/arm/stub-cache-arm.cc +1516 -0
- data/ext/v8/upstream/2.0.6/src/arm/virtual-frame-arm.cc +412 -0
- data/ext/v8/upstream/2.0.6/src/arm/virtual-frame-arm.h +532 -0
- data/ext/v8/upstream/2.0.6/src/array.js +1154 -0
- data/ext/v8/upstream/2.0.6/src/assembler.cc +772 -0
- data/ext/v8/upstream/2.0.6/src/assembler.h +525 -0
- data/ext/v8/upstream/2.0.6/src/ast.cc +512 -0
- data/ext/v8/upstream/2.0.6/src/ast.h +1820 -0
- data/ext/v8/upstream/2.0.6/src/bootstrapper.cc +1680 -0
- data/ext/v8/upstream/2.0.6/src/bootstrapper.h +103 -0
- data/ext/v8/upstream/2.0.6/src/builtins.cc +851 -0
- data/ext/v8/upstream/2.0.6/src/builtins.h +245 -0
- data/ext/v8/upstream/2.0.6/src/bytecodes-irregexp.h +104 -0
- data/ext/v8/upstream/2.0.6/src/char-predicates-inl.h +86 -0
- data/ext/v8/upstream/2.0.6/src/char-predicates.h +65 -0
- data/ext/v8/upstream/2.0.6/src/checks.cc +100 -0
- data/ext/v8/upstream/2.0.6/src/checks.h +284 -0
- data/ext/v8/upstream/2.0.6/src/code-stubs.cc +164 -0
- data/ext/v8/upstream/2.0.6/src/code-stubs.h +164 -0
- data/ext/v8/upstream/2.0.6/src/code.h +68 -0
- data/ext/v8/upstream/2.0.6/src/codegen-inl.h +88 -0
- data/ext/v8/upstream/2.0.6/src/codegen.cc +504 -0
- data/ext/v8/upstream/2.0.6/src/codegen.h +522 -0
- data/ext/v8/upstream/2.0.6/src/compilation-cache.cc +490 -0
- data/ext/v8/upstream/2.0.6/src/compilation-cache.h +98 -0
- data/ext/v8/upstream/2.0.6/src/compiler.cc +1132 -0
- data/ext/v8/upstream/2.0.6/src/compiler.h +107 -0
- data/ext/v8/upstream/2.0.6/src/contexts.cc +256 -0
- data/ext/v8/upstream/2.0.6/src/contexts.h +345 -0
- data/ext/v8/upstream/2.0.6/src/conversions-inl.h +95 -0
- data/ext/v8/upstream/2.0.6/src/conversions.cc +709 -0
- data/ext/v8/upstream/2.0.6/src/conversions.h +118 -0
- data/ext/v8/upstream/2.0.6/src/counters.cc +78 -0
- data/ext/v8/upstream/2.0.6/src/counters.h +239 -0
- data/ext/v8/upstream/2.0.6/src/cpu.h +65 -0
- data/ext/v8/upstream/2.0.6/src/d8-debug.cc +345 -0
- data/ext/v8/upstream/2.0.6/src/d8-debug.h +155 -0
- data/ext/v8/upstream/2.0.6/src/d8-posix.cc +675 -0
- data/ext/v8/upstream/2.0.6/src/d8-readline.cc +128 -0
- data/ext/v8/upstream/2.0.6/src/d8-windows.cc +42 -0
- data/ext/v8/upstream/2.0.6/src/d8.cc +776 -0
- data/ext/v8/upstream/2.0.6/src/d8.h +225 -0
- data/ext/v8/upstream/2.0.6/src/d8.js +1625 -0
- data/ext/v8/upstream/2.0.6/src/date-delay.js +1138 -0
- data/ext/v8/upstream/2.0.6/src/dateparser-inl.h +114 -0
- data/ext/v8/upstream/2.0.6/src/dateparser.cc +186 -0
- data/ext/v8/upstream/2.0.6/src/dateparser.h +240 -0
- data/ext/v8/upstream/2.0.6/src/debug-agent.cc +425 -0
- data/ext/v8/upstream/2.0.6/src/debug-agent.h +129 -0
- data/ext/v8/upstream/2.0.6/src/debug-delay.js +2073 -0
- data/ext/v8/upstream/2.0.6/src/debug.cc +2751 -0
- data/ext/v8/upstream/2.0.6/src/debug.h +866 -0
- data/ext/v8/upstream/2.0.6/src/disasm.h +77 -0
- data/ext/v8/upstream/2.0.6/src/disassembler.cc +318 -0
- data/ext/v8/upstream/2.0.6/src/disassembler.h +56 -0
- data/ext/v8/upstream/2.0.6/src/dtoa-config.c +91 -0
- data/ext/v8/upstream/2.0.6/src/execution.cc +701 -0
- data/ext/v8/upstream/2.0.6/src/execution.h +312 -0
- data/ext/v8/upstream/2.0.6/src/factory.cc +957 -0
- data/ext/v8/upstream/2.0.6/src/factory.h +393 -0
- data/ext/v8/upstream/2.0.6/src/fast-codegen.cc +725 -0
- data/ext/v8/upstream/2.0.6/src/fast-codegen.h +371 -0
- data/ext/v8/upstream/2.0.6/src/flag-definitions.h +426 -0
- data/ext/v8/upstream/2.0.6/src/flags.cc +555 -0
- data/ext/v8/upstream/2.0.6/src/flags.h +81 -0
- data/ext/v8/upstream/2.0.6/src/frame-element.cc +45 -0
- data/ext/v8/upstream/2.0.6/src/frame-element.h +235 -0
- data/ext/v8/upstream/2.0.6/src/frames-inl.h +215 -0
- data/ext/v8/upstream/2.0.6/src/frames.cc +749 -0
- data/ext/v8/upstream/2.0.6/src/frames.h +659 -0
- data/ext/v8/upstream/2.0.6/src/func-name-inferrer.cc +76 -0
- data/ext/v8/upstream/2.0.6/src/func-name-inferrer.h +135 -0
- data/ext/v8/upstream/2.0.6/src/global-handles.cc +516 -0
- data/ext/v8/upstream/2.0.6/src/global-handles.h +180 -0
- data/ext/v8/upstream/2.0.6/src/globals.h +608 -0
- data/ext/v8/upstream/2.0.6/src/handles-inl.h +76 -0
- data/ext/v8/upstream/2.0.6/src/handles.cc +811 -0
- data/ext/v8/upstream/2.0.6/src/handles.h +367 -0
- data/ext/v8/upstream/2.0.6/src/hashmap.cc +226 -0
- data/ext/v8/upstream/2.0.6/src/hashmap.h +120 -0
- data/ext/v8/upstream/2.0.6/src/heap-inl.h +407 -0
- data/ext/v8/upstream/2.0.6/src/heap-profiler.cc +695 -0
- data/ext/v8/upstream/2.0.6/src/heap-profiler.h +277 -0
- data/ext/v8/upstream/2.0.6/src/heap.cc +4204 -0
- data/ext/v8/upstream/2.0.6/src/heap.h +1704 -0
- data/ext/v8/upstream/2.0.6/src/ia32/assembler-ia32-inl.h +325 -0
- data/ext/v8/upstream/2.0.6/src/ia32/assembler-ia32.cc +2375 -0
- data/ext/v8/upstream/2.0.6/src/ia32/assembler-ia32.h +914 -0
- data/ext/v8/upstream/2.0.6/src/ia32/builtins-ia32.cc +1222 -0
- data/ext/v8/upstream/2.0.6/src/ia32/codegen-ia32-inl.h +46 -0
- data/ext/v8/upstream/2.0.6/src/ia32/codegen-ia32.cc +9770 -0
- data/ext/v8/upstream/2.0.6/src/ia32/codegen-ia32.h +834 -0
- data/ext/v8/upstream/2.0.6/src/ia32/cpu-ia32.cc +79 -0
- data/ext/v8/upstream/2.0.6/src/ia32/debug-ia32.cc +208 -0
- data/ext/v8/upstream/2.0.6/src/ia32/disasm-ia32.cc +1357 -0
- data/ext/v8/upstream/2.0.6/src/ia32/fast-codegen-ia32.cc +1813 -0
- data/ext/v8/upstream/2.0.6/src/ia32/frames-ia32.cc +111 -0
- data/ext/v8/upstream/2.0.6/src/ia32/frames-ia32.h +135 -0
- data/ext/v8/upstream/2.0.6/src/ia32/ic-ia32.cc +1490 -0
- data/ext/v8/upstream/2.0.6/src/ia32/jump-target-ia32.cc +432 -0
- data/ext/v8/upstream/2.0.6/src/ia32/macro-assembler-ia32.cc +1517 -0
- data/ext/v8/upstream/2.0.6/src/ia32/macro-assembler-ia32.h +528 -0
- data/ext/v8/upstream/2.0.6/src/ia32/regexp-macro-assembler-ia32.cc +1219 -0
- data/ext/v8/upstream/2.0.6/src/ia32/regexp-macro-assembler-ia32.h +230 -0
- data/ext/v8/upstream/2.0.6/src/ia32/register-allocator-ia32-inl.h +82 -0
- data/ext/v8/upstream/2.0.6/src/ia32/register-allocator-ia32.cc +99 -0
- data/ext/v8/upstream/2.0.6/src/ia32/register-allocator-ia32.h +43 -0
- data/ext/v8/upstream/2.0.6/src/ia32/simulator-ia32.cc +30 -0
- data/ext/v8/upstream/2.0.6/src/ia32/simulator-ia32.h +62 -0
- data/ext/v8/upstream/2.0.6/src/ia32/stub-cache-ia32.cc +1961 -0
- data/ext/v8/upstream/2.0.6/src/ia32/virtual-frame-ia32.cc +1105 -0
- data/ext/v8/upstream/2.0.6/src/ia32/virtual-frame-ia32.h +580 -0
- data/ext/v8/upstream/2.0.6/src/ic-inl.h +93 -0
- data/ext/v8/upstream/2.0.6/src/ic.cc +1426 -0
- data/ext/v8/upstream/2.0.6/src/ic.h +443 -0
- data/ext/v8/upstream/2.0.6/src/interpreter-irregexp.cc +646 -0
- data/ext/v8/upstream/2.0.6/src/interpreter-irregexp.h +48 -0
- data/ext/v8/upstream/2.0.6/src/json-delay.js +254 -0
- data/ext/v8/upstream/2.0.6/src/jsregexp.cc +5234 -0
- data/ext/v8/upstream/2.0.6/src/jsregexp.h +1439 -0
- data/ext/v8/upstream/2.0.6/src/jump-target-inl.h +49 -0
- data/ext/v8/upstream/2.0.6/src/jump-target.cc +383 -0
- data/ext/v8/upstream/2.0.6/src/jump-target.h +280 -0
- data/ext/v8/upstream/2.0.6/src/list-inl.h +166 -0
- data/ext/v8/upstream/2.0.6/src/list.h +158 -0
- data/ext/v8/upstream/2.0.6/src/log-inl.h +126 -0
- data/ext/v8/upstream/2.0.6/src/log-utils.cc +503 -0
- data/ext/v8/upstream/2.0.6/src/log-utils.h +292 -0
- data/ext/v8/upstream/2.0.6/src/log.cc +1457 -0
- data/ext/v8/upstream/2.0.6/src/log.h +371 -0
- data/ext/v8/upstream/2.0.6/src/macro-assembler.h +93 -0
- data/ext/v8/upstream/2.0.6/src/macros.py +137 -0
- data/ext/v8/upstream/2.0.6/src/mark-compact.cc +2007 -0
- data/ext/v8/upstream/2.0.6/src/mark-compact.h +442 -0
- data/ext/v8/upstream/2.0.6/src/math.js +263 -0
- data/ext/v8/upstream/2.0.6/src/memory.h +74 -0
- data/ext/v8/upstream/2.0.6/src/messages.cc +177 -0
- data/ext/v8/upstream/2.0.6/src/messages.h +112 -0
- data/ext/v8/upstream/2.0.6/src/messages.js +937 -0
- data/ext/v8/upstream/2.0.6/src/mirror-delay.js +2332 -0
- data/ext/v8/upstream/2.0.6/src/mksnapshot.cc +169 -0
- data/ext/v8/upstream/2.0.6/src/natives.h +63 -0
- data/ext/v8/upstream/2.0.6/src/objects-debug.cc +1317 -0
- data/ext/v8/upstream/2.0.6/src/objects-inl.h +3044 -0
- data/ext/v8/upstream/2.0.6/src/objects.cc +8306 -0
- data/ext/v8/upstream/2.0.6/src/objects.h +4960 -0
- data/ext/v8/upstream/2.0.6/src/oprofile-agent.cc +116 -0
- data/ext/v8/upstream/2.0.6/src/oprofile-agent.h +69 -0
- data/ext/v8/upstream/2.0.6/src/parser.cc +4810 -0
- data/ext/v8/upstream/2.0.6/src/parser.h +195 -0
- data/ext/v8/upstream/2.0.6/src/platform-freebsd.cc +645 -0
- data/ext/v8/upstream/2.0.6/src/platform-linux.cc +808 -0
- data/ext/v8/upstream/2.0.6/src/platform-macos.cc +643 -0
- data/ext/v8/upstream/2.0.6/src/platform-nullos.cc +454 -0
- data/ext/v8/upstream/2.0.6/src/platform-openbsd.cc +597 -0
- data/ext/v8/upstream/2.0.6/src/platform-posix.cc +380 -0
- data/ext/v8/upstream/2.0.6/src/platform-win32.cc +1908 -0
- data/ext/v8/upstream/2.0.6/src/platform.h +556 -0
- data/ext/v8/upstream/2.0.6/src/prettyprinter.cc +1511 -0
- data/ext/v8/upstream/2.0.6/src/prettyprinter.h +219 -0
- data/ext/v8/upstream/2.0.6/src/property.cc +96 -0
- data/ext/v8/upstream/2.0.6/src/property.h +327 -0
- data/ext/v8/upstream/2.0.6/src/regexp-delay.js +406 -0
- data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-irregexp-inl.h +78 -0
- data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-irregexp.cc +464 -0
- data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-irregexp.h +141 -0
- data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-tracer.cc +356 -0
- data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-tracer.h +103 -0
- data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler.cc +240 -0
- data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler.h +220 -0
- data/ext/v8/upstream/2.0.6/src/regexp-stack.cc +103 -0
- data/ext/v8/upstream/2.0.6/src/regexp-stack.h +123 -0
- data/ext/v8/upstream/2.0.6/src/register-allocator-inl.h +74 -0
- data/ext/v8/upstream/2.0.6/src/register-allocator.cc +100 -0
- data/ext/v8/upstream/2.0.6/src/register-allocator.h +295 -0
- data/ext/v8/upstream/2.0.6/src/rewriter.cc +855 -0
- data/ext/v8/upstream/2.0.6/src/rewriter.h +54 -0
- data/ext/v8/upstream/2.0.6/src/runtime.cc +8163 -0
- data/ext/v8/upstream/2.0.6/src/runtime.h +432 -0
- data/ext/v8/upstream/2.0.6/src/runtime.js +626 -0
- data/ext/v8/upstream/2.0.6/src/scanner.cc +1098 -0
- data/ext/v8/upstream/2.0.6/src/scanner.h +425 -0
- data/ext/v8/upstream/2.0.6/src/scopeinfo.cc +649 -0
- data/ext/v8/upstream/2.0.6/src/scopeinfo.h +236 -0
- data/ext/v8/upstream/2.0.6/src/scopes.cc +963 -0
- data/ext/v8/upstream/2.0.6/src/scopes.h +401 -0
- data/ext/v8/upstream/2.0.6/src/serialize.cc +1260 -0
- data/ext/v8/upstream/2.0.6/src/serialize.h +404 -0
- data/ext/v8/upstream/2.0.6/src/shell.h +55 -0
- data/ext/v8/upstream/2.0.6/src/simulator.h +41 -0
- data/ext/v8/upstream/2.0.6/src/smart-pointer.h +109 -0
- data/ext/v8/upstream/2.0.6/src/snapshot-common.cc +97 -0
- data/ext/v8/upstream/2.0.6/src/snapshot-empty.cc +40 -0
- data/ext/v8/upstream/2.0.6/src/snapshot.h +59 -0
- data/ext/v8/upstream/2.0.6/src/spaces-inl.h +372 -0
- data/ext/v8/upstream/2.0.6/src/spaces.cc +2864 -0
- data/ext/v8/upstream/2.0.6/src/spaces.h +2072 -0
- data/ext/v8/upstream/2.0.6/src/string-stream.cc +584 -0
- data/ext/v8/upstream/2.0.6/src/string-stream.h +189 -0
- data/ext/v8/upstream/2.0.6/src/string.js +901 -0
- data/ext/v8/upstream/2.0.6/src/stub-cache.cc +1108 -0
- data/ext/v8/upstream/2.0.6/src/stub-cache.h +578 -0
- data/ext/v8/upstream/2.0.6/src/third_party/dtoa/COPYING +15 -0
- data/ext/v8/upstream/2.0.6/src/third_party/dtoa/dtoa.c +3330 -0
- data/ext/v8/upstream/2.0.6/src/third_party/valgrind/valgrind.h +3925 -0
- data/ext/v8/upstream/2.0.6/src/token.cc +56 -0
- data/ext/v8/upstream/2.0.6/src/token.h +270 -0
- data/ext/v8/upstream/2.0.6/src/top.cc +991 -0
- data/ext/v8/upstream/2.0.6/src/top.h +459 -0
- data/ext/v8/upstream/2.0.6/src/unicode-inl.h +238 -0
- data/ext/v8/upstream/2.0.6/src/unicode.cc +749 -0
- data/ext/v8/upstream/2.0.6/src/unicode.h +279 -0
- data/ext/v8/upstream/2.0.6/src/uri.js +415 -0
- data/ext/v8/upstream/2.0.6/src/usage-analyzer.cc +426 -0
- data/ext/v8/upstream/2.0.6/src/usage-analyzer.h +40 -0
- data/ext/v8/upstream/2.0.6/src/utils.cc +322 -0
- data/ext/v8/upstream/2.0.6/src/utils.h +592 -0
- data/ext/v8/upstream/2.0.6/src/v8-counters.cc +55 -0
- data/ext/v8/upstream/2.0.6/src/v8-counters.h +198 -0
- data/ext/v8/upstream/2.0.6/src/v8.cc +193 -0
- data/ext/v8/upstream/2.0.6/src/v8.h +119 -0
- data/ext/v8/upstream/2.0.6/src/v8natives.js +846 -0
- data/ext/v8/upstream/2.0.6/src/v8threads.cc +450 -0
- data/ext/v8/upstream/2.0.6/src/v8threads.h +144 -0
- data/ext/v8/upstream/2.0.6/src/variables.cc +163 -0
- data/ext/v8/upstream/2.0.6/src/variables.h +235 -0
- data/ext/v8/upstream/2.0.6/src/version.cc +88 -0
- data/ext/v8/upstream/2.0.6/src/version.h +64 -0
- data/ext/v8/upstream/2.0.6/src/virtual-frame.cc +381 -0
- data/ext/v8/upstream/2.0.6/src/virtual-frame.h +44 -0
- data/ext/v8/upstream/2.0.6/src/x64/assembler-x64-inl.h +352 -0
- data/ext/v8/upstream/2.0.6/src/x64/assembler-x64.cc +2539 -0
- data/ext/v8/upstream/2.0.6/src/x64/assembler-x64.h +1399 -0
- data/ext/v8/upstream/2.0.6/src/x64/builtins-x64.cc +1255 -0
- data/ext/v8/upstream/2.0.6/src/x64/codegen-x64-inl.h +46 -0
- data/ext/v8/upstream/2.0.6/src/x64/codegen-x64.cc +8223 -0
- data/ext/v8/upstream/2.0.6/src/x64/codegen-x64.h +785 -0
- data/ext/v8/upstream/2.0.6/src/x64/cpu-x64.cc +79 -0
- data/ext/v8/upstream/2.0.6/src/x64/debug-x64.cc +202 -0
- data/ext/v8/upstream/2.0.6/src/x64/disasm-x64.cc +1596 -0
- data/ext/v8/upstream/2.0.6/src/x64/fast-codegen-x64.cc +1820 -0
- data/ext/v8/upstream/2.0.6/src/x64/frames-x64.cc +109 -0
- data/ext/v8/upstream/2.0.6/src/x64/frames-x64.h +121 -0
- data/ext/v8/upstream/2.0.6/src/x64/ic-x64.cc +1392 -0
- data/ext/v8/upstream/2.0.6/src/x64/jump-target-x64.cc +432 -0
- data/ext/v8/upstream/2.0.6/src/x64/macro-assembler-x64.cc +2409 -0
- data/ext/v8/upstream/2.0.6/src/x64/macro-assembler-x64.h +765 -0
- data/ext/v8/upstream/2.0.6/src/x64/regexp-macro-assembler-x64.cc +1337 -0
- data/ext/v8/upstream/2.0.6/src/x64/regexp-macro-assembler-x64.h +295 -0
- data/ext/v8/upstream/2.0.6/src/x64/register-allocator-x64-inl.h +86 -0
- data/ext/v8/upstream/2.0.6/src/x64/register-allocator-x64.cc +84 -0
- data/ext/v8/upstream/2.0.6/src/x64/register-allocator-x64.h +43 -0
- data/ext/v8/upstream/2.0.6/src/x64/simulator-x64.cc +27 -0
- data/ext/v8/upstream/2.0.6/src/x64/simulator-x64.h +63 -0
- data/ext/v8/upstream/2.0.6/src/x64/stub-cache-x64.cc +1884 -0
- data/ext/v8/upstream/2.0.6/src/x64/virtual-frame-x64.cc +1089 -0
- data/ext/v8/upstream/2.0.6/src/x64/virtual-frame-x64.h +560 -0
- data/ext/v8/upstream/2.0.6/src/zone-inl.h +297 -0
- data/ext/v8/upstream/2.0.6/src/zone.cc +193 -0
- data/ext/v8/upstream/2.0.6/src/zone.h +305 -0
- data/ext/v8/upstream/2.0.6/tools/codemap.js +258 -0
- data/ext/v8/upstream/2.0.6/tools/consarray.js +93 -0
- data/ext/v8/upstream/2.0.6/tools/csvparser.js +98 -0
- data/ext/v8/upstream/2.0.6/tools/gyp/v8.gyp +620 -0
- data/ext/v8/upstream/2.0.6/tools/js2c.py +376 -0
- data/ext/v8/upstream/2.0.6/tools/jsmin.py +280 -0
- data/ext/v8/upstream/2.0.6/tools/linux-tick-processor +24 -0
- data/ext/v8/upstream/2.0.6/tools/linux-tick-processor.py +78 -0
- data/ext/v8/upstream/2.0.6/tools/logreader.js +320 -0
- data/ext/v8/upstream/2.0.6/tools/mac-nm +18 -0
- data/ext/v8/upstream/2.0.6/tools/mac-tick-processor +6 -0
- data/ext/v8/upstream/2.0.6/tools/oprofile/annotate +7 -0
- data/ext/v8/upstream/2.0.6/tools/oprofile/common +19 -0
- data/ext/v8/upstream/2.0.6/tools/oprofile/dump +7 -0
- data/ext/v8/upstream/2.0.6/tools/oprofile/report +7 -0
- data/ext/v8/upstream/2.0.6/tools/oprofile/reset +7 -0
- data/ext/v8/upstream/2.0.6/tools/oprofile/run +14 -0
- data/ext/v8/upstream/2.0.6/tools/oprofile/shutdown +7 -0
- data/ext/v8/upstream/2.0.6/tools/oprofile/start +7 -0
- data/ext/v8/upstream/2.0.6/tools/presubmit.py +299 -0
- data/ext/v8/upstream/2.0.6/tools/process-heap-prof.py +120 -0
- data/ext/v8/upstream/2.0.6/tools/profile.js +621 -0
- data/ext/v8/upstream/2.0.6/tools/profile_view.js +224 -0
- data/ext/v8/upstream/2.0.6/tools/run-valgrind.py +77 -0
- data/ext/v8/upstream/2.0.6/tools/splaytree.js +322 -0
- data/ext/v8/upstream/2.0.6/tools/splaytree.py +226 -0
- data/ext/v8/upstream/2.0.6/tools/stats-viewer.py +456 -0
- data/ext/v8/upstream/2.0.6/tools/test.py +1370 -0
- data/ext/v8/upstream/2.0.6/tools/tickprocessor-driver.js +53 -0
- data/ext/v8/upstream/2.0.6/tools/tickprocessor.js +731 -0
- data/ext/v8/upstream/2.0.6/tools/tickprocessor.py +535 -0
- data/ext/v8/upstream/2.0.6/tools/utils.py +82 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/README.txt +71 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/arm.vsprops +14 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/common.vsprops +35 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/d8.vcproj +199 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/d8_arm.vcproj +199 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/d8_x64.vcproj +201 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/d8js2c.cmd +6 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/debug.vsprops +17 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/ia32.vsprops +13 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/js2c.cmd +6 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/release.vsprops +24 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8.sln +101 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8.vcproj +223 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_arm.sln +74 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_arm.vcproj +223 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_base.vcproj +971 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_base_arm.vcproj +983 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_base_x64.vcproj +959 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_cctest.vcproj +255 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_cctest_arm.vcproj +243 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_cctest_x64.vcproj +257 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_mksnapshot.vcproj +151 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_mksnapshot_x64.vcproj +151 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_process_sample.vcproj +151 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_process_sample_arm.vcproj +151 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_process_sample_x64.vcproj +151 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_shell_sample.vcproj +151 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_shell_sample_arm.vcproj +151 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_shell_sample_x64.vcproj +153 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot.vcproj +142 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot_cc.vcproj +92 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot_cc_x64.vcproj +92 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot_x64.vcproj +142 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_x64.sln +101 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_x64.vcproj +223 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/x64.vsprops +13 -0
- data/ext/v8/upstream/2.0.6/tools/windows-tick-processor.bat +5 -0
- data/ext/v8/upstream/2.0.6/tools/windows-tick-processor.py +137 -0
- data/ext/v8/upstream/Makefile +31 -0
- data/ext/v8/upstream/no-strict-aliasing.patch +13 -0
- data/ext/v8/upstream/scons/CHANGES.txt +5183 -0
- data/ext/v8/upstream/scons/LICENSE.txt +20 -0
- data/ext/v8/upstream/scons/MANIFEST +202 -0
- data/ext/v8/upstream/scons/PKG-INFO +13 -0
- data/ext/v8/upstream/scons/README.txt +273 -0
- data/ext/v8/upstream/scons/RELEASE.txt +1040 -0
- data/ext/v8/upstream/scons/engine/SCons/Action.py +1256 -0
- data/ext/v8/upstream/scons/engine/SCons/Builder.py +868 -0
- data/ext/v8/upstream/scons/engine/SCons/CacheDir.py +217 -0
- data/ext/v8/upstream/scons/engine/SCons/Conftest.py +794 -0
- data/ext/v8/upstream/scons/engine/SCons/Debug.py +237 -0
- data/ext/v8/upstream/scons/engine/SCons/Defaults.py +485 -0
- data/ext/v8/upstream/scons/engine/SCons/Environment.py +2327 -0
- data/ext/v8/upstream/scons/engine/SCons/Errors.py +207 -0
- data/ext/v8/upstream/scons/engine/SCons/Executor.py +636 -0
- data/ext/v8/upstream/scons/engine/SCons/Job.py +435 -0
- data/ext/v8/upstream/scons/engine/SCons/Memoize.py +292 -0
- data/ext/v8/upstream/scons/engine/SCons/Node/Alias.py +153 -0
- data/ext/v8/upstream/scons/engine/SCons/Node/FS.py +3220 -0
- data/ext/v8/upstream/scons/engine/SCons/Node/Python.py +128 -0
- data/ext/v8/upstream/scons/engine/SCons/Node/__init__.py +1341 -0
- data/ext/v8/upstream/scons/engine/SCons/Options/BoolOption.py +50 -0
- data/ext/v8/upstream/scons/engine/SCons/Options/EnumOption.py +50 -0
- data/ext/v8/upstream/scons/engine/SCons/Options/ListOption.py +50 -0
- data/ext/v8/upstream/scons/engine/SCons/Options/PackageOption.py +50 -0
- data/ext/v8/upstream/scons/engine/SCons/Options/PathOption.py +76 -0
- data/ext/v8/upstream/scons/engine/SCons/Options/__init__.py +74 -0
- data/ext/v8/upstream/scons/engine/SCons/PathList.py +232 -0
- data/ext/v8/upstream/scons/engine/SCons/Platform/__init__.py +236 -0
- data/ext/v8/upstream/scons/engine/SCons/Platform/aix.py +70 -0
- data/ext/v8/upstream/scons/engine/SCons/Platform/cygwin.py +55 -0
- data/ext/v8/upstream/scons/engine/SCons/Platform/darwin.py +46 -0
- data/ext/v8/upstream/scons/engine/SCons/Platform/hpux.py +46 -0
- data/ext/v8/upstream/scons/engine/SCons/Platform/irix.py +44 -0
- data/ext/v8/upstream/scons/engine/SCons/Platform/os2.py +58 -0
- data/ext/v8/upstream/scons/engine/SCons/Platform/posix.py +264 -0
- data/ext/v8/upstream/scons/engine/SCons/Platform/sunos.py +50 -0
- data/ext/v8/upstream/scons/engine/SCons/Platform/win32.py +386 -0
- data/ext/v8/upstream/scons/engine/SCons/SConf.py +1038 -0
- data/ext/v8/upstream/scons/engine/SCons/SConsign.py +381 -0
- data/ext/v8/upstream/scons/engine/SCons/Scanner/C.py +132 -0
- data/ext/v8/upstream/scons/engine/SCons/Scanner/D.py +74 -0
- data/ext/v8/upstream/scons/engine/SCons/Scanner/Dir.py +111 -0
- data/ext/v8/upstream/scons/engine/SCons/Scanner/Fortran.py +320 -0
- data/ext/v8/upstream/scons/engine/SCons/Scanner/IDL.py +48 -0
- data/ext/v8/upstream/scons/engine/SCons/Scanner/LaTeX.py +378 -0
- data/ext/v8/upstream/scons/engine/SCons/Scanner/Prog.py +103 -0
- data/ext/v8/upstream/scons/engine/SCons/Scanner/RC.py +55 -0
- data/ext/v8/upstream/scons/engine/SCons/Scanner/__init__.py +415 -0
- data/ext/v8/upstream/scons/engine/SCons/Script/Interactive.py +386 -0
- data/ext/v8/upstream/scons/engine/SCons/Script/Main.py +1360 -0
- data/ext/v8/upstream/scons/engine/SCons/Script/SConsOptions.py +944 -0
- data/ext/v8/upstream/scons/engine/SCons/Script/SConscript.py +642 -0
- data/ext/v8/upstream/scons/engine/SCons/Script/__init__.py +414 -0
- data/ext/v8/upstream/scons/engine/SCons/Sig.py +63 -0
- data/ext/v8/upstream/scons/engine/SCons/Subst.py +911 -0
- data/ext/v8/upstream/scons/engine/SCons/Taskmaster.py +1030 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/386asm.py +61 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/BitKeeper.py +65 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/CVS.py +73 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/FortranCommon.py +247 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/JavaCommon.py +324 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/__init__.py +56 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/arch.py +61 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/common.py +210 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/netframework.py +84 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/sdk.py +321 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/vc.py +367 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/vs.py +497 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/Perforce.py +104 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/PharLapCommon.py +138 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/RCS.py +64 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/SCCS.py +64 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/Subversion.py +71 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/__init__.py +675 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/aixc++.py +82 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/aixcc.py +74 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/aixf77.py +80 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/aixlink.py +76 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/applelink.py +71 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/ar.py +63 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/as.py +78 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/bcc32.py +82 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/c++.py +99 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/cc.py +114 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/cvf.py +58 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/default.py +50 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/dmd.py +224 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/dvi.py +64 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/dvipdf.py +125 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/dvips.py +94 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/f77.py +62 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/f90.py +62 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/f95.py +63 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/filesystem.py +98 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/fortran.py +63 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/g++.py +90 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/g77.py +73 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/gas.py +53 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/gcc.py +80 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/gfortran.py +64 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/gnulink.py +63 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/gs.py +81 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/hpc++.py +85 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/hpcc.py +53 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/hplink.py +77 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/icc.py +59 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/icl.py +52 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/ifl.py +72 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/ifort.py +90 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/ilink.py +59 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/ilink32.py +60 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/install.py +229 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/intelc.py +490 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/ipkg.py +71 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/jar.py +110 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/javac.py +234 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/javah.py +138 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/latex.py +79 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/lex.py +99 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/link.py +121 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/linkloc.py +112 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/m4.py +63 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/masm.py +77 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/midl.py +90 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/mingw.py +159 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/mslib.py +64 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/mslink.py +266 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/mssdk.py +50 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/msvc.py +269 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/msvs.py +1439 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/mwcc.py +208 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/mwld.py +107 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/nasm.py +72 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/__init__.py +314 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/ipk.py +185 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/msi.py +526 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/rpm.py +367 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_tarbz2.py +43 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_targz.py +43 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_zip.py +43 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/tarbz2.py +44 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/targz.py +44 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/zip.py +44 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/pdf.py +78 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/pdflatex.py +83 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/pdftex.py +108 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/qt.py +336 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/rmic.py +121 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/rpcgen.py +70 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/rpm.py +132 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/sgiar.py +68 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/sgic++.py +58 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/sgicc.py +53 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/sgilink.py +63 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/sunar.py +67 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/sunc++.py +142 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/suncc.py +58 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/sunf77.py +63 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/sunf90.py +64 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/sunf95.py +64 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/sunlink.py +77 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/swig.py +186 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/tar.py +73 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/tex.py +805 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/textfile.py +175 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/tlib.py +53 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/wix.py +100 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/yacc.py +131 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/zip.py +100 -0
- data/ext/v8/upstream/scons/engine/SCons/Util.py +1645 -0
- data/ext/v8/upstream/scons/engine/SCons/Variables/BoolVariable.py +91 -0
- data/ext/v8/upstream/scons/engine/SCons/Variables/EnumVariable.py +107 -0
- data/ext/v8/upstream/scons/engine/SCons/Variables/ListVariable.py +139 -0
- data/ext/v8/upstream/scons/engine/SCons/Variables/PackageVariable.py +109 -0
- data/ext/v8/upstream/scons/engine/SCons/Variables/PathVariable.py +147 -0
- data/ext/v8/upstream/scons/engine/SCons/Variables/__init__.py +317 -0
- data/ext/v8/upstream/scons/engine/SCons/Warnings.py +228 -0
- data/ext/v8/upstream/scons/engine/SCons/__init__.py +49 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/__init__.py +302 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/_scons_UserString.py +98 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/_scons_hashlib.py +91 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/_scons_itertools.py +124 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/_scons_optparse.py +1725 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/_scons_sets.py +583 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/_scons_sets15.py +176 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/_scons_shlex.py +325 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/_scons_subprocess.py +1296 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/_scons_textwrap.py +382 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/builtins.py +187 -0
- data/ext/v8/upstream/scons/engine/SCons/cpp.py +598 -0
- data/ext/v8/upstream/scons/engine/SCons/dblite.py +248 -0
- data/ext/v8/upstream/scons/engine/SCons/exitfuncs.py +77 -0
- data/ext/v8/upstream/scons/os_spawnv_fix.diff +83 -0
- data/ext/v8/upstream/scons/scons-time.1 +1017 -0
- data/ext/v8/upstream/scons/scons.1 +15179 -0
- data/ext/v8/upstream/scons/sconsign.1 +208 -0
- data/ext/v8/upstream/scons/script/scons +184 -0
- data/ext/v8/upstream/scons/script/scons-time +1529 -0
- data/ext/v8/upstream/scons/script/scons.bat +31 -0
- data/ext/v8/upstream/scons/script/sconsign +508 -0
- data/ext/v8/upstream/scons/setup.cfg +6 -0
- data/ext/v8/upstream/scons/setup.py +427 -0
- data/ext/v8/v8.cpp +89 -0
- data/ext/v8/v8_cxt.cpp +92 -0
- data/ext/v8/v8_cxt.h +20 -0
- data/ext/v8/v8_func.cpp +10 -0
- data/ext/v8/v8_func.h +11 -0
- data/ext/v8/v8_msg.cpp +54 -0
- data/ext/v8/v8_msg.h +18 -0
- data/ext/v8/v8_obj.cpp +52 -0
- data/ext/v8/v8_obj.h +13 -0
- data/ext/v8/v8_ref.cpp +26 -0
- data/ext/v8/v8_ref.h +31 -0
- data/ext/v8/v8_script.cpp +20 -0
- data/ext/v8/v8_script.h +8 -0
- data/ext/v8/v8_standalone.cpp +69 -0
- data/ext/v8/v8_standalone.h +31 -0
- data/ext/v8/v8_str.cpp +17 -0
- data/ext/v8/v8_str.h +9 -0
- data/ext/v8/v8_template.cpp +53 -0
- data/ext/v8/v8_template.h +13 -0
- data/lib/v8.rb +10 -0
- data/lib/v8/context.rb +101 -0
- data/lib/v8/object.rb +38 -0
- data/lib/v8/to.rb +33 -0
- data/lib/v8/v8.so +0 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/spec/ext/cxt_spec.rb +25 -0
- data/spec/ext/obj_spec.rb +13 -0
- data/spec/redjs/jsapi_spec.rb +405 -0
- data/spec/redjs/tap.rb +8 -0
- data/spec/redjs_helper.rb +3 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +14 -0
- data/spec/v8/to_spec.rb +15 -0
- data/tasks/rspec.rake +21 -0
- data/therubyracer.gemspec +680 -0
- metadata +697 -0
@@ -0,0 +1,412 @@
|
|
1
|
+
// Copyright 2009 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 "v8.h"
|
29
|
+
|
30
|
+
#include "codegen-inl.h"
|
31
|
+
#include "register-allocator-inl.h"
|
32
|
+
#include "scopes.h"
|
33
|
+
|
34
|
+
namespace v8 {
|
35
|
+
namespace internal {
|
36
|
+
|
37
|
+
// -------------------------------------------------------------------------
|
38
|
+
// VirtualFrame implementation.
|
39
|
+
|
40
|
+
#define __ ACCESS_MASM(masm())
|
41
|
+
|
42
|
+
|
43
|
+
// On entry to a function, the virtual frame already contains the
|
44
|
+
// receiver and the parameters. All initial frame elements are in
|
45
|
+
// memory.
|
46
|
+
VirtualFrame::VirtualFrame()
|
47
|
+
: elements_(parameter_count() + local_count() + kPreallocatedElements),
|
48
|
+
stack_pointer_(parameter_count()) { // 0-based index of TOS.
|
49
|
+
for (int i = 0; i <= stack_pointer_; i++) {
|
50
|
+
elements_.Add(FrameElement::MemoryElement());
|
51
|
+
}
|
52
|
+
for (int i = 0; i < RegisterAllocator::kNumRegisters; i++) {
|
53
|
+
register_locations_[i] = kIllegalIndex;
|
54
|
+
}
|
55
|
+
}
|
56
|
+
|
57
|
+
|
58
|
+
void VirtualFrame::SyncElementBelowStackPointer(int index) {
|
59
|
+
UNREACHABLE();
|
60
|
+
}
|
61
|
+
|
62
|
+
|
63
|
+
void VirtualFrame::SyncElementByPushing(int index) {
|
64
|
+
UNREACHABLE();
|
65
|
+
}
|
66
|
+
|
67
|
+
|
68
|
+
void VirtualFrame::SyncRange(int begin, int end) {
|
69
|
+
// All elements are in memory on ARM (ie, synced).
|
70
|
+
#ifdef DEBUG
|
71
|
+
for (int i = begin; i <= end; i++) {
|
72
|
+
ASSERT(elements_[i].is_synced());
|
73
|
+
}
|
74
|
+
#endif
|
75
|
+
}
|
76
|
+
|
77
|
+
|
78
|
+
void VirtualFrame::MergeTo(VirtualFrame* expected) {
|
79
|
+
// ARM frames are currently always in memory.
|
80
|
+
ASSERT(Equals(expected));
|
81
|
+
}
|
82
|
+
|
83
|
+
|
84
|
+
void VirtualFrame::MergeMoveRegistersToMemory(VirtualFrame* expected) {
|
85
|
+
UNREACHABLE();
|
86
|
+
}
|
87
|
+
|
88
|
+
|
89
|
+
void VirtualFrame::MergeMoveRegistersToRegisters(VirtualFrame* expected) {
|
90
|
+
UNREACHABLE();
|
91
|
+
}
|
92
|
+
|
93
|
+
|
94
|
+
void VirtualFrame::MergeMoveMemoryToRegisters(VirtualFrame* expected) {
|
95
|
+
UNREACHABLE();
|
96
|
+
}
|
97
|
+
|
98
|
+
|
99
|
+
void VirtualFrame::Enter() {
|
100
|
+
Comment cmnt(masm(), "[ Enter JS frame");
|
101
|
+
|
102
|
+
#ifdef DEBUG
|
103
|
+
// Verify that r1 contains a JS function. The following code relies
|
104
|
+
// on r2 being available for use.
|
105
|
+
if (FLAG_debug_code) {
|
106
|
+
Label map_check, done;
|
107
|
+
__ tst(r1, Operand(kSmiTagMask));
|
108
|
+
__ b(ne, &map_check);
|
109
|
+
__ stop("VirtualFrame::Enter - r1 is not a function (smi check).");
|
110
|
+
__ bind(&map_check);
|
111
|
+
__ CompareObjectType(r1, r2, r2, JS_FUNCTION_TYPE);
|
112
|
+
__ b(eq, &done);
|
113
|
+
__ stop("VirtualFrame::Enter - r1 is not a function (map check).");
|
114
|
+
__ bind(&done);
|
115
|
+
}
|
116
|
+
#endif // DEBUG
|
117
|
+
|
118
|
+
// We are about to push four values to the frame.
|
119
|
+
Adjust(4);
|
120
|
+
__ stm(db_w, sp, r1.bit() | cp.bit() | fp.bit() | lr.bit());
|
121
|
+
// Adjust FP to point to saved FP.
|
122
|
+
__ add(fp, sp, Operand(2 * kPointerSize));
|
123
|
+
cgen()->allocator()->Unuse(r1);
|
124
|
+
cgen()->allocator()->Unuse(lr);
|
125
|
+
}
|
126
|
+
|
127
|
+
|
128
|
+
void VirtualFrame::Exit() {
|
129
|
+
Comment cmnt(masm(), "[ Exit JS frame");
|
130
|
+
// Record the location of the JS exit code for patching when setting
|
131
|
+
// break point.
|
132
|
+
__ RecordJSReturn();
|
133
|
+
|
134
|
+
// Drop the execution stack down to the frame pointer and restore the caller
|
135
|
+
// frame pointer and return address.
|
136
|
+
__ mov(sp, fp);
|
137
|
+
__ ldm(ia_w, sp, fp.bit() | lr.bit());
|
138
|
+
}
|
139
|
+
|
140
|
+
|
141
|
+
void VirtualFrame::AllocateStackSlots() {
|
142
|
+
int count = local_count();
|
143
|
+
if (count > 0) {
|
144
|
+
Comment cmnt(masm(), "[ Allocate space for locals");
|
145
|
+
Adjust(count);
|
146
|
+
// Initialize stack slots with 'undefined' value.
|
147
|
+
__ LoadRoot(ip, Heap::kUndefinedValueRootIndex);
|
148
|
+
__ LoadRoot(r2, Heap::kStackLimitRootIndex);
|
149
|
+
if (count < kLocalVarBound) {
|
150
|
+
// For less locals the unrolled loop is more compact.
|
151
|
+
for (int i = 0; i < count; i++) {
|
152
|
+
__ push(ip);
|
153
|
+
}
|
154
|
+
} else {
|
155
|
+
// For more locals a loop in generated code is more compact.
|
156
|
+
Label alloc_locals_loop;
|
157
|
+
__ mov(r1, Operand(count));
|
158
|
+
__ bind(&alloc_locals_loop);
|
159
|
+
__ push(ip);
|
160
|
+
__ sub(r1, r1, Operand(1), SetCC);
|
161
|
+
__ b(ne, &alloc_locals_loop);
|
162
|
+
}
|
163
|
+
} else {
|
164
|
+
__ LoadRoot(r2, Heap::kStackLimitRootIndex);
|
165
|
+
}
|
166
|
+
// Check the stack for overflow or a break request.
|
167
|
+
// Put the lr setup instruction in the delay slot. The kInstrSize is added
|
168
|
+
// to the implicit 8 byte offset that always applies to operations with pc
|
169
|
+
// and gives a return address 12 bytes down.
|
170
|
+
masm()->add(lr, pc, Operand(Assembler::kInstrSize));
|
171
|
+
masm()->cmp(sp, Operand(r2));
|
172
|
+
StackCheckStub stub;
|
173
|
+
// Call the stub if lower.
|
174
|
+
masm()->mov(pc,
|
175
|
+
Operand(reinterpret_cast<intptr_t>(stub.GetCode().location()),
|
176
|
+
RelocInfo::CODE_TARGET),
|
177
|
+
LeaveCC,
|
178
|
+
lo);
|
179
|
+
}
|
180
|
+
|
181
|
+
|
182
|
+
|
183
|
+
void VirtualFrame::SaveContextRegister() {
|
184
|
+
UNIMPLEMENTED();
|
185
|
+
}
|
186
|
+
|
187
|
+
|
188
|
+
void VirtualFrame::RestoreContextRegister() {
|
189
|
+
UNIMPLEMENTED();
|
190
|
+
}
|
191
|
+
|
192
|
+
|
193
|
+
void VirtualFrame::PushReceiverSlotAddress() {
|
194
|
+
UNIMPLEMENTED();
|
195
|
+
}
|
196
|
+
|
197
|
+
|
198
|
+
int VirtualFrame::InvalidateFrameSlotAt(int index) {
|
199
|
+
UNIMPLEMENTED();
|
200
|
+
return kIllegalIndex;
|
201
|
+
}
|
202
|
+
|
203
|
+
|
204
|
+
void VirtualFrame::TakeFrameSlotAt(int index) {
|
205
|
+
UNIMPLEMENTED();
|
206
|
+
}
|
207
|
+
|
208
|
+
|
209
|
+
void VirtualFrame::StoreToFrameSlotAt(int index) {
|
210
|
+
UNIMPLEMENTED();
|
211
|
+
}
|
212
|
+
|
213
|
+
|
214
|
+
void VirtualFrame::PushTryHandler(HandlerType type) {
|
215
|
+
// Grow the expression stack by handler size less one (the return
|
216
|
+
// address in lr is already counted by a call instruction).
|
217
|
+
Adjust(kHandlerSize - 1);
|
218
|
+
__ PushTryHandler(IN_JAVASCRIPT, type);
|
219
|
+
}
|
220
|
+
|
221
|
+
|
222
|
+
void VirtualFrame::RawCallStub(CodeStub* stub) {
|
223
|
+
ASSERT(cgen()->HasValidEntryRegisters());
|
224
|
+
__ CallStub(stub);
|
225
|
+
}
|
226
|
+
|
227
|
+
|
228
|
+
void VirtualFrame::CallStub(CodeStub* stub, Result* arg) {
|
229
|
+
PrepareForCall(0, 0);
|
230
|
+
arg->Unuse();
|
231
|
+
RawCallStub(stub);
|
232
|
+
}
|
233
|
+
|
234
|
+
|
235
|
+
void VirtualFrame::CallStub(CodeStub* stub, Result* arg0, Result* arg1) {
|
236
|
+
PrepareForCall(0, 0);
|
237
|
+
arg0->Unuse();
|
238
|
+
arg1->Unuse();
|
239
|
+
RawCallStub(stub);
|
240
|
+
}
|
241
|
+
|
242
|
+
|
243
|
+
void VirtualFrame::CallRuntime(Runtime::Function* f, int arg_count) {
|
244
|
+
PrepareForCall(arg_count, arg_count);
|
245
|
+
ASSERT(cgen()->HasValidEntryRegisters());
|
246
|
+
__ CallRuntime(f, arg_count);
|
247
|
+
}
|
248
|
+
|
249
|
+
|
250
|
+
void VirtualFrame::CallRuntime(Runtime::FunctionId id, int arg_count) {
|
251
|
+
PrepareForCall(arg_count, arg_count);
|
252
|
+
ASSERT(cgen()->HasValidEntryRegisters());
|
253
|
+
__ CallRuntime(id, arg_count);
|
254
|
+
}
|
255
|
+
|
256
|
+
|
257
|
+
void VirtualFrame::InvokeBuiltin(Builtins::JavaScript id,
|
258
|
+
InvokeJSFlags flags,
|
259
|
+
int arg_count) {
|
260
|
+
PrepareForCall(arg_count, arg_count);
|
261
|
+
__ InvokeBuiltin(id, flags);
|
262
|
+
}
|
263
|
+
|
264
|
+
|
265
|
+
void VirtualFrame::RawCallCodeObject(Handle<Code> code,
|
266
|
+
RelocInfo::Mode rmode) {
|
267
|
+
ASSERT(cgen()->HasValidEntryRegisters());
|
268
|
+
__ Call(code, rmode);
|
269
|
+
}
|
270
|
+
|
271
|
+
|
272
|
+
void VirtualFrame::CallCodeObject(Handle<Code> code,
|
273
|
+
RelocInfo::Mode rmode,
|
274
|
+
int dropped_args) {
|
275
|
+
int spilled_args = 0;
|
276
|
+
switch (code->kind()) {
|
277
|
+
case Code::CALL_IC:
|
278
|
+
spilled_args = dropped_args + 1;
|
279
|
+
break;
|
280
|
+
case Code::FUNCTION:
|
281
|
+
spilled_args = dropped_args + 1;
|
282
|
+
break;
|
283
|
+
case Code::KEYED_LOAD_IC:
|
284
|
+
ASSERT(dropped_args == 0);
|
285
|
+
spilled_args = 2;
|
286
|
+
break;
|
287
|
+
default:
|
288
|
+
// The other types of code objects are called with values
|
289
|
+
// in specific registers, and are handled in functions with
|
290
|
+
// a different signature.
|
291
|
+
UNREACHABLE();
|
292
|
+
break;
|
293
|
+
}
|
294
|
+
PrepareForCall(spilled_args, dropped_args);
|
295
|
+
RawCallCodeObject(code, rmode);
|
296
|
+
}
|
297
|
+
|
298
|
+
|
299
|
+
void VirtualFrame::CallCodeObject(Handle<Code> code,
|
300
|
+
RelocInfo::Mode rmode,
|
301
|
+
Result* arg,
|
302
|
+
int dropped_args) {
|
303
|
+
int spilled_args = 0;
|
304
|
+
switch (code->kind()) {
|
305
|
+
case Code::LOAD_IC:
|
306
|
+
ASSERT(arg->reg().is(r2));
|
307
|
+
ASSERT(dropped_args == 0);
|
308
|
+
spilled_args = 1;
|
309
|
+
break;
|
310
|
+
case Code::KEYED_STORE_IC:
|
311
|
+
ASSERT(arg->reg().is(r0));
|
312
|
+
ASSERT(dropped_args == 0);
|
313
|
+
spilled_args = 2;
|
314
|
+
break;
|
315
|
+
default:
|
316
|
+
// No other types of code objects are called with values
|
317
|
+
// in exactly one register.
|
318
|
+
UNREACHABLE();
|
319
|
+
break;
|
320
|
+
}
|
321
|
+
PrepareForCall(spilled_args, dropped_args);
|
322
|
+
arg->Unuse();
|
323
|
+
RawCallCodeObject(code, rmode);
|
324
|
+
}
|
325
|
+
|
326
|
+
|
327
|
+
void VirtualFrame::CallCodeObject(Handle<Code> code,
|
328
|
+
RelocInfo::Mode rmode,
|
329
|
+
Result* arg0,
|
330
|
+
Result* arg1,
|
331
|
+
int dropped_args) {
|
332
|
+
int spilled_args = 1;
|
333
|
+
switch (code->kind()) {
|
334
|
+
case Code::STORE_IC:
|
335
|
+
ASSERT(arg0->reg().is(r0));
|
336
|
+
ASSERT(arg1->reg().is(r2));
|
337
|
+
ASSERT(dropped_args == 0);
|
338
|
+
spilled_args = 1;
|
339
|
+
break;
|
340
|
+
case Code::BUILTIN:
|
341
|
+
ASSERT(*code == Builtins::builtin(Builtins::JSConstructCall));
|
342
|
+
ASSERT(arg0->reg().is(r0));
|
343
|
+
ASSERT(arg1->reg().is(r1));
|
344
|
+
spilled_args = dropped_args + 1;
|
345
|
+
break;
|
346
|
+
default:
|
347
|
+
// No other types of code objects are called with values
|
348
|
+
// in exactly two registers.
|
349
|
+
UNREACHABLE();
|
350
|
+
break;
|
351
|
+
}
|
352
|
+
PrepareForCall(spilled_args, dropped_args);
|
353
|
+
arg0->Unuse();
|
354
|
+
arg1->Unuse();
|
355
|
+
RawCallCodeObject(code, rmode);
|
356
|
+
}
|
357
|
+
|
358
|
+
|
359
|
+
void VirtualFrame::Drop(int count) {
|
360
|
+
ASSERT(count >= 0);
|
361
|
+
ASSERT(height() >= count);
|
362
|
+
int num_virtual_elements = (element_count() - 1) - stack_pointer_;
|
363
|
+
|
364
|
+
// Emit code to lower the stack pointer if necessary.
|
365
|
+
if (num_virtual_elements < count) {
|
366
|
+
int num_dropped = count - num_virtual_elements;
|
367
|
+
stack_pointer_ -= num_dropped;
|
368
|
+
__ add(sp, sp, Operand(num_dropped * kPointerSize));
|
369
|
+
}
|
370
|
+
|
371
|
+
// Discard elements from the virtual frame and free any registers.
|
372
|
+
for (int i = 0; i < count; i++) {
|
373
|
+
FrameElement dropped = elements_.RemoveLast();
|
374
|
+
if (dropped.is_register()) {
|
375
|
+
Unuse(dropped.reg());
|
376
|
+
}
|
377
|
+
}
|
378
|
+
}
|
379
|
+
|
380
|
+
|
381
|
+
Result VirtualFrame::Pop() {
|
382
|
+
UNIMPLEMENTED();
|
383
|
+
return Result();
|
384
|
+
}
|
385
|
+
|
386
|
+
|
387
|
+
void VirtualFrame::EmitPop(Register reg) {
|
388
|
+
ASSERT(stack_pointer_ == element_count() - 1);
|
389
|
+
stack_pointer_--;
|
390
|
+
elements_.RemoveLast();
|
391
|
+
__ pop(reg);
|
392
|
+
}
|
393
|
+
|
394
|
+
|
395
|
+
void VirtualFrame::EmitPush(Register reg) {
|
396
|
+
ASSERT(stack_pointer_ == element_count() - 1);
|
397
|
+
elements_.Add(FrameElement::MemoryElement());
|
398
|
+
stack_pointer_++;
|
399
|
+
__ push(reg);
|
400
|
+
}
|
401
|
+
|
402
|
+
|
403
|
+
void VirtualFrame::EmitPushMultiple(int count, int src_regs) {
|
404
|
+
ASSERT(stack_pointer_ == element_count() - 1);
|
405
|
+
Adjust(count);
|
406
|
+
__ stm(db_w, sp, src_regs);
|
407
|
+
}
|
408
|
+
|
409
|
+
|
410
|
+
#undef __
|
411
|
+
|
412
|
+
} } // namespace v8::internal
|
@@ -0,0 +1,532 @@
|
|
1
|
+
// Copyright 2009 the V8 project authors. All rights reserved.
|
2
|
+
// Redistribution and use in source and binary forms, with or without
|
3
|
+
// modification, are permitted provided that the following conditions are
|
4
|
+
// met:
|
5
|
+
//
|
6
|
+
// * Redistributions of source code must retain the above copyright
|
7
|
+
// notice, this list of conditions and the following disclaimer.
|
8
|
+
// * Redistributions in binary form must reproduce the above
|
9
|
+
// copyright notice, this list of conditions and the following
|
10
|
+
// disclaimer in the documentation and/or other materials provided
|
11
|
+
// with the distribution.
|
12
|
+
// * Neither the name of Google Inc. nor the names of its
|
13
|
+
// contributors may be used to endorse or promote products derived
|
14
|
+
// from this software without specific prior written permission.
|
15
|
+
//
|
16
|
+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
17
|
+
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
18
|
+
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
19
|
+
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
20
|
+
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21
|
+
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22
|
+
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
23
|
+
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
24
|
+
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
25
|
+
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
26
|
+
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
27
|
+
|
28
|
+
#ifndef V8_ARM_VIRTUAL_FRAME_ARM_H_
|
29
|
+
#define V8_ARM_VIRTUAL_FRAME_ARM_H_
|
30
|
+
|
31
|
+
#include "register-allocator.h"
|
32
|
+
#include "scopes.h"
|
33
|
+
|
34
|
+
namespace v8 {
|
35
|
+
namespace internal {
|
36
|
+
|
37
|
+
// -------------------------------------------------------------------------
|
38
|
+
// Virtual frames
|
39
|
+
//
|
40
|
+
// The virtual frame is an abstraction of the physical stack frame. It
|
41
|
+
// encapsulates the parameters, frame-allocated locals, and the expression
|
42
|
+
// stack. It supports push/pop operations on the expression stack, as well
|
43
|
+
// as random access to the expression stack elements, locals, and
|
44
|
+
// parameters.
|
45
|
+
|
46
|
+
class VirtualFrame : public ZoneObject {
|
47
|
+
public:
|
48
|
+
// A utility class to introduce a scope where the virtual frame is
|
49
|
+
// expected to remain spilled. The constructor spills the code
|
50
|
+
// generator's current frame, but no attempt is made to require it
|
51
|
+
// to stay spilled. It is intended as documentation while the code
|
52
|
+
// generator is being transformed.
|
53
|
+
class SpilledScope BASE_EMBEDDED {
|
54
|
+
public:
|
55
|
+
SpilledScope() {}
|
56
|
+
};
|
57
|
+
|
58
|
+
// An illegal index into the virtual frame.
|
59
|
+
static const int kIllegalIndex = -1;
|
60
|
+
|
61
|
+
// Construct an initial virtual frame on entry to a JS function.
|
62
|
+
VirtualFrame();
|
63
|
+
|
64
|
+
// Construct a virtual frame as a clone of an existing one.
|
65
|
+
explicit VirtualFrame(VirtualFrame* original);
|
66
|
+
|
67
|
+
CodeGenerator* cgen() { return CodeGeneratorScope::Current(); }
|
68
|
+
MacroAssembler* masm() { return cgen()->masm(); }
|
69
|
+
|
70
|
+
// Create a duplicate of an existing valid frame element.
|
71
|
+
FrameElement CopyElementAt(int index);
|
72
|
+
|
73
|
+
// The number of elements on the virtual frame.
|
74
|
+
int element_count() { return elements_.length(); }
|
75
|
+
|
76
|
+
// The height of the virtual expression stack.
|
77
|
+
int height() {
|
78
|
+
return element_count() - expression_base_index();
|
79
|
+
}
|
80
|
+
|
81
|
+
int register_location(int num) {
|
82
|
+
ASSERT(num >= 0 && num < RegisterAllocator::kNumRegisters);
|
83
|
+
return register_locations_[num];
|
84
|
+
}
|
85
|
+
|
86
|
+
int register_location(Register reg) {
|
87
|
+
return register_locations_[RegisterAllocator::ToNumber(reg)];
|
88
|
+
}
|
89
|
+
|
90
|
+
void set_register_location(Register reg, int index) {
|
91
|
+
register_locations_[RegisterAllocator::ToNumber(reg)] = index;
|
92
|
+
}
|
93
|
+
|
94
|
+
bool is_used(int num) {
|
95
|
+
ASSERT(num >= 0 && num < RegisterAllocator::kNumRegisters);
|
96
|
+
return register_locations_[num] != kIllegalIndex;
|
97
|
+
}
|
98
|
+
|
99
|
+
bool is_used(Register reg) {
|
100
|
+
return register_locations_[RegisterAllocator::ToNumber(reg)]
|
101
|
+
!= kIllegalIndex;
|
102
|
+
}
|
103
|
+
|
104
|
+
// Add extra in-memory elements to the top of the frame to match an actual
|
105
|
+
// frame (eg, the frame after an exception handler is pushed). No code is
|
106
|
+
// emitted.
|
107
|
+
void Adjust(int count);
|
108
|
+
|
109
|
+
// Forget elements from the top of the frame to match an actual frame (eg,
|
110
|
+
// the frame after a runtime call). No code is emitted.
|
111
|
+
void Forget(int count) {
|
112
|
+
ASSERT(count >= 0);
|
113
|
+
ASSERT(stack_pointer_ == element_count() - 1);
|
114
|
+
stack_pointer_ -= count;
|
115
|
+
// On ARM, all elements are in memory, so there is no extra bookkeeping
|
116
|
+
// (registers, copies, etc.) beyond dropping the elements.
|
117
|
+
elements_.Rewind(stack_pointer_ + 1);
|
118
|
+
}
|
119
|
+
|
120
|
+
// Forget count elements from the top of the frame and adjust the stack
|
121
|
+
// pointer downward. This is used, for example, before merging frames at
|
122
|
+
// break, continue, and return targets.
|
123
|
+
void ForgetElements(int count);
|
124
|
+
|
125
|
+
// Spill all values from the frame to memory.
|
126
|
+
void SpillAll();
|
127
|
+
|
128
|
+
// Spill all occurrences of a specific register from the frame.
|
129
|
+
void Spill(Register reg) {
|
130
|
+
if (is_used(reg)) SpillElementAt(register_location(reg));
|
131
|
+
}
|
132
|
+
|
133
|
+
// Spill all occurrences of an arbitrary register if possible. Return the
|
134
|
+
// register spilled or no_reg if it was not possible to free any register
|
135
|
+
// (ie, they all have frame-external references).
|
136
|
+
Register SpillAnyRegister();
|
137
|
+
|
138
|
+
// Prepare this virtual frame for merging to an expected frame by
|
139
|
+
// performing some state changes that do not require generating
|
140
|
+
// code. It is guaranteed that no code will be generated.
|
141
|
+
void PrepareMergeTo(VirtualFrame* expected);
|
142
|
+
|
143
|
+
// Make this virtual frame have a state identical to an expected virtual
|
144
|
+
// frame. As a side effect, code may be emitted to make this frame match
|
145
|
+
// the expected one.
|
146
|
+
void MergeTo(VirtualFrame* expected);
|
147
|
+
|
148
|
+
// Detach a frame from its code generator, perhaps temporarily. This
|
149
|
+
// tells the register allocator that it is free to use frame-internal
|
150
|
+
// registers. Used when the code generator's frame is switched from this
|
151
|
+
// one to NULL by an unconditional jump.
|
152
|
+
void DetachFromCodeGenerator() {
|
153
|
+
RegisterAllocator* cgen_allocator = cgen()->allocator();
|
154
|
+
for (int i = 0; i < RegisterAllocator::kNumRegisters; i++) {
|
155
|
+
if (is_used(i)) cgen_allocator->Unuse(i);
|
156
|
+
}
|
157
|
+
}
|
158
|
+
|
159
|
+
// (Re)attach a frame to its code generator. This informs the register
|
160
|
+
// allocator that the frame-internal register references are active again.
|
161
|
+
// Used when a code generator's frame is switched from NULL to this one by
|
162
|
+
// binding a label.
|
163
|
+
void AttachToCodeGenerator() {
|
164
|
+
RegisterAllocator* cgen_allocator = cgen()->allocator();
|
165
|
+
for (int i = 0; i < RegisterAllocator::kNumRegisters; i++) {
|
166
|
+
if (is_used(i)) cgen_allocator->Unuse(i);
|
167
|
+
}
|
168
|
+
}
|
169
|
+
|
170
|
+
// Emit code for the physical JS entry and exit frame sequences. After
|
171
|
+
// calling Enter, the virtual frame is ready for use; and after calling
|
172
|
+
// Exit it should not be used. Note that Enter does not allocate space in
|
173
|
+
// the physical frame for storing frame-allocated locals.
|
174
|
+
void Enter();
|
175
|
+
void Exit();
|
176
|
+
|
177
|
+
// Prepare for returning from the frame by spilling locals and
|
178
|
+
// dropping all non-locals elements in the virtual frame. This
|
179
|
+
// avoids generating unnecessary merge code when jumping to the
|
180
|
+
// shared return site. Emits code for spills.
|
181
|
+
void PrepareForReturn();
|
182
|
+
|
183
|
+
// Number of local variables after when we use a loop for allocating.
|
184
|
+
static const int kLocalVarBound = 5;
|
185
|
+
|
186
|
+
// Allocate and initialize the frame-allocated locals.
|
187
|
+
void AllocateStackSlots();
|
188
|
+
|
189
|
+
// The current top of the expression stack as an assembly operand.
|
190
|
+
MemOperand Top() { return MemOperand(sp, 0); }
|
191
|
+
|
192
|
+
// An element of the expression stack as an assembly operand.
|
193
|
+
MemOperand ElementAt(int index) {
|
194
|
+
return MemOperand(sp, index * kPointerSize);
|
195
|
+
}
|
196
|
+
|
197
|
+
// Random-access store to a frame-top relative frame element. The result
|
198
|
+
// becomes owned by the frame and is invalidated.
|
199
|
+
void SetElementAt(int index, Result* value);
|
200
|
+
|
201
|
+
// Set a frame element to a constant. The index is frame-top relative.
|
202
|
+
void SetElementAt(int index, Handle<Object> value) {
|
203
|
+
Result temp(value);
|
204
|
+
SetElementAt(index, &temp);
|
205
|
+
}
|
206
|
+
|
207
|
+
void PushElementAt(int index) {
|
208
|
+
PushFrameSlotAt(element_count() - index - 1);
|
209
|
+
}
|
210
|
+
|
211
|
+
// A frame-allocated local as an assembly operand.
|
212
|
+
MemOperand LocalAt(int index) {
|
213
|
+
ASSERT(0 <= index);
|
214
|
+
ASSERT(index < local_count());
|
215
|
+
return MemOperand(fp, kLocal0Offset - index * kPointerSize);
|
216
|
+
}
|
217
|
+
|
218
|
+
// Push a copy of the value of a local frame slot on top of the frame.
|
219
|
+
void PushLocalAt(int index) {
|
220
|
+
PushFrameSlotAt(local0_index() + index);
|
221
|
+
}
|
222
|
+
|
223
|
+
// Push the value of a local frame slot on top of the frame and invalidate
|
224
|
+
// the local slot. The slot should be written to before trying to read
|
225
|
+
// from it again.
|
226
|
+
void TakeLocalAt(int index) {
|
227
|
+
TakeFrameSlotAt(local0_index() + index);
|
228
|
+
}
|
229
|
+
|
230
|
+
// Store the top value on the virtual frame into a local frame slot. The
|
231
|
+
// value is left in place on top of the frame.
|
232
|
+
void StoreToLocalAt(int index) {
|
233
|
+
StoreToFrameSlotAt(local0_index() + index);
|
234
|
+
}
|
235
|
+
|
236
|
+
// Push the address of the receiver slot on the frame.
|
237
|
+
void PushReceiverSlotAddress();
|
238
|
+
|
239
|
+
// The function frame slot.
|
240
|
+
MemOperand Function() { return MemOperand(fp, kFunctionOffset); }
|
241
|
+
|
242
|
+
// Push the function on top of the frame.
|
243
|
+
void PushFunction() { PushFrameSlotAt(function_index()); }
|
244
|
+
|
245
|
+
// The context frame slot.
|
246
|
+
MemOperand Context() { return MemOperand(fp, kContextOffset); }
|
247
|
+
|
248
|
+
// Save the value of the esi register to the context frame slot.
|
249
|
+
void SaveContextRegister();
|
250
|
+
|
251
|
+
// Restore the esi register from the value of the context frame
|
252
|
+
// slot.
|
253
|
+
void RestoreContextRegister();
|
254
|
+
|
255
|
+
// A parameter as an assembly operand.
|
256
|
+
MemOperand ParameterAt(int index) {
|
257
|
+
// Index -1 corresponds to the receiver.
|
258
|
+
ASSERT(-1 <= index); // -1 is the receiver.
|
259
|
+
ASSERT(index <= parameter_count());
|
260
|
+
return MemOperand(fp, (1 + parameter_count() - index) * kPointerSize);
|
261
|
+
}
|
262
|
+
|
263
|
+
// Push a copy of the value of a parameter frame slot on top of the frame.
|
264
|
+
void PushParameterAt(int index) {
|
265
|
+
PushFrameSlotAt(param0_index() + index);
|
266
|
+
}
|
267
|
+
|
268
|
+
// Push the value of a paramter frame slot on top of the frame and
|
269
|
+
// invalidate the parameter slot. The slot should be written to before
|
270
|
+
// trying to read from it again.
|
271
|
+
void TakeParameterAt(int index) {
|
272
|
+
TakeFrameSlotAt(param0_index() + index);
|
273
|
+
}
|
274
|
+
|
275
|
+
// Store the top value on the virtual frame into a parameter frame slot.
|
276
|
+
// The value is left in place on top of the frame.
|
277
|
+
void StoreToParameterAt(int index) {
|
278
|
+
StoreToFrameSlotAt(param0_index() + index);
|
279
|
+
}
|
280
|
+
|
281
|
+
// The receiver frame slot.
|
282
|
+
MemOperand Receiver() { return ParameterAt(-1); }
|
283
|
+
|
284
|
+
// Push a try-catch or try-finally handler on top of the virtual frame.
|
285
|
+
void PushTryHandler(HandlerType type);
|
286
|
+
|
287
|
+
// Call stub given the number of arguments it expects on (and
|
288
|
+
// removes from) the stack.
|
289
|
+
void CallStub(CodeStub* stub, int arg_count) {
|
290
|
+
PrepareForCall(arg_count, arg_count);
|
291
|
+
RawCallStub(stub);
|
292
|
+
}
|
293
|
+
|
294
|
+
// Call stub that expects its argument in r0. The argument is given
|
295
|
+
// as a result which must be the register r0.
|
296
|
+
void CallStub(CodeStub* stub, Result* arg);
|
297
|
+
|
298
|
+
// Call stub that expects its arguments in r1 and r0. The arguments
|
299
|
+
// are given as results which must be the appropriate registers.
|
300
|
+
void CallStub(CodeStub* stub, Result* arg0, Result* arg1);
|
301
|
+
|
302
|
+
// Call runtime given the number of arguments expected on (and
|
303
|
+
// removed from) the stack.
|
304
|
+
void CallRuntime(Runtime::Function* f, int arg_count);
|
305
|
+
void CallRuntime(Runtime::FunctionId id, int arg_count);
|
306
|
+
|
307
|
+
// Invoke builtin given the number of arguments it expects on (and
|
308
|
+
// removes from) the stack.
|
309
|
+
void InvokeBuiltin(Builtins::JavaScript id,
|
310
|
+
InvokeJSFlags flag,
|
311
|
+
int arg_count);
|
312
|
+
|
313
|
+
// Call into an IC stub given the number of arguments it removes
|
314
|
+
// from the stack. Register arguments are passed as results and
|
315
|
+
// consumed by the call.
|
316
|
+
void CallCodeObject(Handle<Code> ic,
|
317
|
+
RelocInfo::Mode rmode,
|
318
|
+
int dropped_args);
|
319
|
+
void CallCodeObject(Handle<Code> ic,
|
320
|
+
RelocInfo::Mode rmode,
|
321
|
+
Result* arg,
|
322
|
+
int dropped_args);
|
323
|
+
void CallCodeObject(Handle<Code> ic,
|
324
|
+
RelocInfo::Mode rmode,
|
325
|
+
Result* arg0,
|
326
|
+
Result* arg1,
|
327
|
+
int dropped_args);
|
328
|
+
|
329
|
+
// Drop a number of elements from the top of the expression stack. May
|
330
|
+
// emit code to affect the physical frame. Does not clobber any registers
|
331
|
+
// excepting possibly the stack pointer.
|
332
|
+
void Drop(int count);
|
333
|
+
|
334
|
+
// Drop one element.
|
335
|
+
void Drop() { Drop(1); }
|
336
|
+
|
337
|
+
// Duplicate the top element of the frame.
|
338
|
+
void Dup() { PushFrameSlotAt(element_count() - 1); }
|
339
|
+
|
340
|
+
// Pop an element from the top of the expression stack. Returns a
|
341
|
+
// Result, which may be a constant or a register.
|
342
|
+
Result Pop();
|
343
|
+
|
344
|
+
// Pop and save an element from the top of the expression stack and
|
345
|
+
// emit a corresponding pop instruction.
|
346
|
+
void EmitPop(Register reg);
|
347
|
+
|
348
|
+
// Push an element on top of the expression stack and emit a
|
349
|
+
// corresponding push instruction.
|
350
|
+
void EmitPush(Register reg);
|
351
|
+
|
352
|
+
// Push multiple registers on the stack and the virtual frame
|
353
|
+
// Register are selected by setting bit in src_regs and
|
354
|
+
// are pushed in decreasing order: r15 .. r0.
|
355
|
+
void EmitPushMultiple(int count, int src_regs);
|
356
|
+
|
357
|
+
// Push an element on the virtual frame.
|
358
|
+
void Push(Register reg);
|
359
|
+
void Push(Handle<Object> value);
|
360
|
+
void Push(Smi* value) { Push(Handle<Object>(value)); }
|
361
|
+
|
362
|
+
// Pushing a result invalidates it (its contents become owned by the frame).
|
363
|
+
void Push(Result* result) {
|
364
|
+
if (result->is_register()) {
|
365
|
+
Push(result->reg());
|
366
|
+
} else {
|
367
|
+
ASSERT(result->is_constant());
|
368
|
+
Push(result->handle());
|
369
|
+
}
|
370
|
+
result->Unuse();
|
371
|
+
}
|
372
|
+
|
373
|
+
// Nip removes zero or more elements from immediately below the top
|
374
|
+
// of the frame, leaving the previous top-of-frame value on top of
|
375
|
+
// the frame. Nip(k) is equivalent to x = Pop(), Drop(k), Push(x).
|
376
|
+
void Nip(int num_dropped);
|
377
|
+
|
378
|
+
private:
|
379
|
+
static const int kLocal0Offset = JavaScriptFrameConstants::kLocal0Offset;
|
380
|
+
static const int kFunctionOffset = JavaScriptFrameConstants::kFunctionOffset;
|
381
|
+
static const int kContextOffset = StandardFrameConstants::kContextOffset;
|
382
|
+
|
383
|
+
static const int kHandlerSize = StackHandlerConstants::kSize / kPointerSize;
|
384
|
+
static const int kPreallocatedElements = 5 + 8; // 8 expression stack slots.
|
385
|
+
|
386
|
+
ZoneList<FrameElement> elements_;
|
387
|
+
|
388
|
+
// The index of the element that is at the processor's stack pointer
|
389
|
+
// (the sp register).
|
390
|
+
int stack_pointer_;
|
391
|
+
|
392
|
+
// The index of the register frame element using each register, or
|
393
|
+
// kIllegalIndex if a register is not on the frame.
|
394
|
+
int register_locations_[RegisterAllocator::kNumRegisters];
|
395
|
+
|
396
|
+
// The number of frame-allocated locals and parameters respectively.
|
397
|
+
int parameter_count() { return cgen()->scope()->num_parameters(); }
|
398
|
+
int local_count() { return cgen()->scope()->num_stack_slots(); }
|
399
|
+
|
400
|
+
// The index of the element that is at the processor's frame pointer
|
401
|
+
// (the fp register). The parameters, receiver, function, and context
|
402
|
+
// are below the frame pointer.
|
403
|
+
int frame_pointer() { return parameter_count() + 3; }
|
404
|
+
|
405
|
+
// The index of the first parameter. The receiver lies below the first
|
406
|
+
// parameter.
|
407
|
+
int param0_index() { return 1; }
|
408
|
+
|
409
|
+
// The index of the context slot in the frame. It is immediately
|
410
|
+
// below the frame pointer.
|
411
|
+
int context_index() { return frame_pointer() - 1; }
|
412
|
+
|
413
|
+
// The index of the function slot in the frame. It is below the frame
|
414
|
+
// pointer and context slot.
|
415
|
+
int function_index() { return frame_pointer() - 2; }
|
416
|
+
|
417
|
+
// The index of the first local. Between the frame pointer and the
|
418
|
+
// locals lies the return address.
|
419
|
+
int local0_index() { return frame_pointer() + 2; }
|
420
|
+
|
421
|
+
// The index of the base of the expression stack.
|
422
|
+
int expression_base_index() { return local0_index() + local_count(); }
|
423
|
+
|
424
|
+
// Convert a frame index into a frame pointer relative offset into the
|
425
|
+
// actual stack.
|
426
|
+
int fp_relative(int index) {
|
427
|
+
ASSERT(index < element_count());
|
428
|
+
ASSERT(frame_pointer() < element_count()); // FP is on the frame.
|
429
|
+
return (frame_pointer() - index) * kPointerSize;
|
430
|
+
}
|
431
|
+
|
432
|
+
// Record an occurrence of a register in the virtual frame. This has the
|
433
|
+
// effect of incrementing the register's external reference count and
|
434
|
+
// of updating the index of the register's location in the frame.
|
435
|
+
void Use(Register reg, int index) {
|
436
|
+
ASSERT(!is_used(reg));
|
437
|
+
set_register_location(reg, index);
|
438
|
+
cgen()->allocator()->Use(reg);
|
439
|
+
}
|
440
|
+
|
441
|
+
// Record that a register reference has been dropped from the frame. This
|
442
|
+
// decrements the register's external reference count and invalidates the
|
443
|
+
// index of the register's location in the frame.
|
444
|
+
void Unuse(Register reg) {
|
445
|
+
ASSERT(is_used(reg));
|
446
|
+
set_register_location(reg, kIllegalIndex);
|
447
|
+
cgen()->allocator()->Unuse(reg);
|
448
|
+
}
|
449
|
+
|
450
|
+
// Spill the element at a particular index---write it to memory if
|
451
|
+
// necessary, free any associated register, and forget its value if
|
452
|
+
// constant.
|
453
|
+
void SpillElementAt(int index);
|
454
|
+
|
455
|
+
// Sync the element at a particular index. If it is a register or
|
456
|
+
// constant that disagrees with the value on the stack, write it to memory.
|
457
|
+
// Keep the element type as register or constant, and clear the dirty bit.
|
458
|
+
void SyncElementAt(int index);
|
459
|
+
|
460
|
+
// Sync the range of elements in [begin, end] with memory.
|
461
|
+
void SyncRange(int begin, int end);
|
462
|
+
|
463
|
+
// Sync a single unsynced element that lies beneath or at the stack pointer.
|
464
|
+
void SyncElementBelowStackPointer(int index);
|
465
|
+
|
466
|
+
// Sync a single unsynced element that lies just above the stack pointer.
|
467
|
+
void SyncElementByPushing(int index);
|
468
|
+
|
469
|
+
// Push a copy of a frame slot (typically a local or parameter) on top of
|
470
|
+
// the frame.
|
471
|
+
void PushFrameSlotAt(int index);
|
472
|
+
|
473
|
+
// Push a the value of a frame slot (typically a local or parameter) on
|
474
|
+
// top of the frame and invalidate the slot.
|
475
|
+
void TakeFrameSlotAt(int index);
|
476
|
+
|
477
|
+
// Store the value on top of the frame to a frame slot (typically a local
|
478
|
+
// or parameter).
|
479
|
+
void StoreToFrameSlotAt(int index);
|
480
|
+
|
481
|
+
// Spill all elements in registers. Spill the top spilled_args elements
|
482
|
+
// on the frame. Sync all other frame elements.
|
483
|
+
// Then drop dropped_args elements from the virtual frame, to match
|
484
|
+
// the effect of an upcoming call that will drop them from the stack.
|
485
|
+
void PrepareForCall(int spilled_args, int dropped_args);
|
486
|
+
|
487
|
+
// Move frame elements currently in registers or constants, that
|
488
|
+
// should be in memory in the expected frame, to memory.
|
489
|
+
void MergeMoveRegistersToMemory(VirtualFrame* expected);
|
490
|
+
|
491
|
+
// Make the register-to-register moves necessary to
|
492
|
+
// merge this frame with the expected frame.
|
493
|
+
// Register to memory moves must already have been made,
|
494
|
+
// and memory to register moves must follow this call.
|
495
|
+
// This is because some new memory-to-register moves are
|
496
|
+
// created in order to break cycles of register moves.
|
497
|
+
// Used in the implementation of MergeTo().
|
498
|
+
void MergeMoveRegistersToRegisters(VirtualFrame* expected);
|
499
|
+
|
500
|
+
// Make the memory-to-register and constant-to-register moves
|
501
|
+
// needed to make this frame equal the expected frame.
|
502
|
+
// Called after all register-to-memory and register-to-register
|
503
|
+
// moves have been made. After this function returns, the frames
|
504
|
+
// should be equal.
|
505
|
+
void MergeMoveMemoryToRegisters(VirtualFrame* expected);
|
506
|
+
|
507
|
+
// Invalidates a frame slot (puts an invalid frame element in it).
|
508
|
+
// Copies on the frame are correctly handled, and if this slot was
|
509
|
+
// the backing store of copies, the index of the new backing store
|
510
|
+
// is returned. Otherwise, returns kIllegalIndex.
|
511
|
+
// Register counts are correctly updated.
|
512
|
+
int InvalidateFrameSlotAt(int index);
|
513
|
+
|
514
|
+
// Call a code stub that has already been prepared for calling (via
|
515
|
+
// PrepareForCall).
|
516
|
+
void RawCallStub(CodeStub* stub);
|
517
|
+
|
518
|
+
// Calls a code object which has already been prepared for calling
|
519
|
+
// (via PrepareForCall).
|
520
|
+
void RawCallCodeObject(Handle<Code> code, RelocInfo::Mode rmode);
|
521
|
+
|
522
|
+
bool Equals(VirtualFrame* other);
|
523
|
+
|
524
|
+
// Classes that need raw access to the elements_ array.
|
525
|
+
friend class DeferredCode;
|
526
|
+
friend class JumpTarget;
|
527
|
+
};
|
528
|
+
|
529
|
+
|
530
|
+
} } // namespace v8::internal
|
531
|
+
|
532
|
+
#endif // V8_ARM_VIRTUAL_FRAME_ARM_H_
|