therubyracer 0.7.4 → 0.7.5
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of therubyracer might be problematic. Click here for more details.
- data/History.txt +11 -0
- data/Rakefile +1 -1
- data/ext/v8/extconf.rb +0 -18
- data/ext/v8/rr.cpp +2 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/AUTHORS +1 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/ChangeLog +239 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/LICENSE +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/SConstruct +29 -17
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/include/v8-debug.h +61 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/include/v8-profiler.h +182 -5
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/include/v8.h +458 -257
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/SConscript +2 -5
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/accessors.cc +2 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/accessors.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/allocation.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/allocation.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/api.cc +574 -30
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/api.h +12 -10
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/apinatives.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/apiutils.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arguments.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/assembler-arm-inl.h +38 -15
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/assembler-arm.cc +646 -101
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/assembler-arm.h +174 -15
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/builtins-arm.cc +56 -47
- data/ext/v8/upstream/2.3.3/src/arm/codegen-arm-inl.h +48 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/codegen-arm.cc +2957 -1448
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/codegen-arm.h +230 -74
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/constants-arm.cc +25 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/constants-arm.h +16 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/cpu-arm.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/debug-arm.cc +76 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/disasm-arm.cc +168 -20
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/fast-codegen-arm.cc +5 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/frames-arm.cc +4 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/frames-arm.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/full-codegen-arm.cc +1558 -248
- data/ext/v8/upstream/2.3.3/src/arm/ic-arm.cc +2258 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/jump-target-arm.cc +55 -103
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/macro-assembler-arm.cc +358 -185
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/macro-assembler-arm.h +136 -41
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/regexp-macro-assembler-arm.cc +26 -5
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/regexp-macro-assembler-arm.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/register-allocator-arm-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/register-allocator-arm.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/register-allocator-arm.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/simulator-arm.cc +203 -22
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/simulator-arm.h +7 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/stub-cache-arm.cc +531 -324
- data/ext/v8/upstream/2.3.3/src/arm/virtual-frame-arm-inl.h +59 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/virtual-frame-arm.cc +247 -81
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/virtual-frame-arm.h +99 -83
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/array.js +2 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/assembler.cc +6 -13
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/assembler.h +36 -10
- data/ext/v8/upstream/2.3.3/src/ast-inl.h +81 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ast.cc +14 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ast.h +20 -35
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/bootstrapper.cc +32 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/bootstrapper.h +0 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/builtins.cc +50 -33
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/builtins.h +2 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/bytecodes-irregexp.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cached-powers.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/char-predicates-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/char-predicates.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/checks.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/checks.h +8 -6
- data/ext/v8/upstream/2.3.3/src/circular-queue-inl.h +53 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/circular-queue.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/circular-queue.h +0 -26
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/code-stubs.cc +2 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/code-stubs.h +1 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/code.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/codegen-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/codegen.cc +44 -13
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/codegen.h +310 -31
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/compilation-cache.cc +28 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/compilation-cache.h +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/compiler.cc +45 -14
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/compiler.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/contexts.cc +11 -11
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/contexts.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/conversions-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/conversions.cc +25 -11
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/conversions.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/counters.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/counters.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cpu-profiler-inl.h +2 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cpu-profiler.cc +68 -24
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cpu-profiler.h +19 -11
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cpu.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-debug.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-debug.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-posix.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-readline.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-windows.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8.js +55 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/data-flow.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/data-flow.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/date.js +68 -137
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/dateparser-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/dateparser.cc +2 -8
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/dateparser.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug-agent.cc +3 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug-agent.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug-debugger.js +81 -23
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug.cc +275 -81
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug.h +85 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/disasm.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/disassembler.cc +1 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/disassembler.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/diy-fp.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/diy-fp.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/double.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/dtoa-config.c +0 -0
- data/ext/v8/upstream/2.3.3/src/dtoa.cc +77 -0
- data/ext/v8/upstream/2.3.3/src/dtoa.h +81 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/execution.cc +111 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/execution.h +12 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/factory.cc +25 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/factory.h +16 -9
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/fast-codegen.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/fast-codegen.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/fast-dtoa.cc +2 -9
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/fast-dtoa.h +1 -2
- data/ext/v8/upstream/2.3.3/src/fixed-dtoa.cc +405 -0
- data/ext/v8/upstream/{2.1.10/src/jump-target-light.cc → 2.3.3/src/fixed-dtoa.h} +22 -53
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flag-definitions.h +14 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flags.cc +5 -9
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flags.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flow-graph.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flow-graph.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frame-element.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frame-element.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frames-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frames.cc +5 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frames.h +1 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/full-codegen.cc +387 -20
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/full-codegen.h +102 -5
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/func-name-inferrer.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/func-name-inferrer.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/global-handles.cc +8 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/global-handles.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/globals.h +44 -7
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/handles-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/handles.cc +19 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/handles.h +8 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/hashmap.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/hashmap.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap-inl.h +56 -14
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap-profiler.cc +85 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap-profiler.h +45 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap.cc +994 -396
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap.h +220 -65
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/assembler-ia32-inl.h +41 -12
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/assembler-ia32.cc +94 -24
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/assembler-ia32.h +32 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/builtins-ia32.cc +42 -30
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/codegen-ia32-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/codegen-ia32.cc +1758 -916
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/codegen-ia32.h +67 -74
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/cpu-ia32.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/debug-ia32.cc +46 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/disasm-ia32.cc +37 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/fast-codegen-ia32.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/fast-codegen-ia32.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/frames-ia32.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/frames-ia32.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/full-codegen-ia32.cc +1465 -198
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/ic-ia32.cc +688 -367
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/jump-target-ia32.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/macro-assembler-ia32.cc +82 -180
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/macro-assembler-ia32.h +41 -25
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/regexp-macro-assembler-ia32.cc +68 -24
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/regexp-macro-assembler-ia32.h +1 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/register-allocator-ia32-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/register-allocator-ia32.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/register-allocator-ia32.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/simulator-ia32.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/simulator-ia32.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/stub-cache-ia32.cc +649 -302
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/virtual-frame-ia32.cc +23 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/virtual-frame-ia32.h +18 -27
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ic-inl.h +30 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ic.cc +384 -66
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ic.h +65 -24
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/interpreter-irregexp.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/interpreter-irregexp.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/json.js +3 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jsregexp.cc +20 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jsregexp.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target-heavy-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target-heavy.cc +79 -13
- data/ext/v8/upstream/{2.1.10/src/jump-target.h → 2.3.3/src/jump-target-heavy.h} +5 -47
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target-light-inl.h +16 -2
- data/ext/v8/upstream/2.3.3/src/jump-target-light.cc +110 -0
- data/ext/v8/upstream/2.3.3/src/jump-target-light.h +192 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target.cc +0 -64
- data/ext/v8/upstream/2.3.3/src/jump-target.h +90 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/list-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/list.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/liveedit-debugger.js +141 -28
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/liveedit.cc +19 -7
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/liveedit.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log-utils.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log-utils.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log.cc +12 -11
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log.h +12 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/macro-assembler.h +0 -16
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/macros.py +21 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mark-compact.cc +120 -109
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mark-compact.h +25 -37
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/math.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/memory.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/messages.cc +8 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/messages.h +2 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/messages.js +15 -7
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/assembler-mips-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/assembler-mips.cc +12 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/assembler-mips.h +4 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/builtins-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/codegen-mips-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/codegen-mips.cc +9 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/codegen-mips.h +1 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/constants-mips.cc +5 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/constants-mips.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/cpu-mips.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/debug-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/disasm-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/fast-codegen-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/frames-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/frames-mips.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/full-codegen-mips.cc +5 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/ic-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/jump-target-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/macro-assembler-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/macro-assembler-mips.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/register-allocator-mips-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/register-allocator-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/register-allocator-mips.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/simulator-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/simulator-mips.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/stub-cache-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/virtual-frame-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/virtual-frame-mips.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mirror-debugger.js +46 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mksnapshot.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/natives.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/objects-debug.cc +8 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/objects-inl.h +235 -62
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/objects.cc +497 -231
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/objects.h +355 -149
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/oprofile-agent.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/oprofile-agent.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/parser.cc +31 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/parser.h +1 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-freebsd.cc +9 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-linux.cc +26 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-macos.cc +11 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-nullos.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-openbsd.cc +6 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-posix.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-solaris.cc +69 -23
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-win32.cc +15 -11
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform.h +10 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/powers-ten.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/prettyprinter.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/prettyprinter.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/profile-generator-inl.h +26 -2
- data/ext/v8/upstream/2.3.3/src/profile-generator.cc +1830 -0
- data/ext/v8/upstream/2.3.3/src/profile-generator.h +853 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/property.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/property.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-irregexp-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-irregexp.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-irregexp.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-tracer.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-tracer.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler.cc +1 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-stack.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-stack.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp.js +25 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/register-allocator-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/register-allocator.cc +4 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/register-allocator.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/rewriter.cc +85 -8
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/rewriter.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/runtime.cc +547 -221
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/runtime.h +5 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/runtime.js +23 -31
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scanner.cc +12 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scanner.h +60 -53
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scopeinfo.cc +156 -168
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scopeinfo.h +58 -62
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scopes.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scopes.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/serialize.cc +320 -242
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/serialize.h +81 -48
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/shell.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/simulator.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/smart-pointer.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/snapshot-common.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/snapshot-empty.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/snapshot.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/spaces-inl.h +177 -74
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/spaces.cc +138 -315
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/spaces.h +155 -124
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/splay-tree-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/splay-tree.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/string-stream.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/string-stream.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/string.js +113 -119
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/stub-cache.cc +242 -97
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/stub-cache.h +118 -55
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/third_party/dtoa/COPYING +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/third_party/dtoa/dtoa.c +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/third_party/valgrind/valgrind.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/token.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/token.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/top.cc +107 -26
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/top.h +9 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/type-info.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/type-info.h +2 -2
- data/ext/v8/upstream/2.3.3/src/unbound-queue-inl.h +95 -0
- data/ext/v8/upstream/2.3.3/src/unbound-queue.h +67 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/unicode-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/unicode.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/unicode.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/uri.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/utils.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/utils.h +83 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8-counters.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8-counters.h +20 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8.cc +5 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8.h +0 -0
- data/ext/v8/upstream/2.3.3/src/v8dll-main.cc +39 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8natives.js +210 -33
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8threads.cc +1 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8threads.h +1 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/variables.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/variables.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/version.cc +3 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/version.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-heavy-inl.h +40 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-heavy.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-light-inl.h +106 -5
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-light.cc +4 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/vm-state-inl.h +6 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/vm-state.cc +1 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/vm-state.h +6 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/assembler-x64-inl.h +42 -5
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/assembler-x64.cc +285 -53
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/assembler-x64.h +54 -18
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/builtins-x64.cc +31 -33
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/codegen-x64-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/codegen-x64.cc +9787 -8722
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/codegen-x64.h +82 -47
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/cpu-x64.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/debug-x64.cc +55 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/disasm-x64.cc +42 -19
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/fast-codegen-x64.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/frames-x64.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/frames-x64.h +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/full-codegen-x64.cc +1487 -210
- data/ext/v8/upstream/2.3.3/src/x64/ic-x64.cc +1907 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/jump-target-x64.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/macro-assembler-x64.cc +366 -338
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/macro-assembler-x64.h +83 -38
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/regexp-macro-assembler-x64.cc +82 -23
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/regexp-macro-assembler-x64.h +1 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/register-allocator-x64-inl.h +6 -5
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/register-allocator-x64.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/register-allocator-x64.h +1 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/simulator-x64.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/simulator-x64.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/stub-cache-x64.cc +556 -377
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/virtual-frame-x64.cc +197 -98
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/virtual-frame-x64.h +37 -28
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/zone-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/zone.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/zone.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/codemap.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/consarray.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/csvparser.js +0 -0
- data/ext/v8/upstream/2.3.3/tools/gc-nvp-trace-processor.py +317 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/generate-ten-powers.scm +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/gyp/v8.gyp +87 -20
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/js2c.py +19 -15
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/jsmin.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/linux-tick-processor +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/linux-tick-processor.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/logreader.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/mac-nm +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/mac-tick-processor +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/annotate +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/common +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/dump +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/report +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/reset +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/run +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/shutdown +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/start +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/presubmit.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/process-heap-prof.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/profile.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/profile_view.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/run-valgrind.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/splaytree.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/splaytree.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/stats-viewer.py +25 -13
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/test.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/tickprocessor-driver.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/tickprocessor.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/tickprocessor.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/utils.py +0 -0
- data/ext/v8/upstream/2.3.3/tools/v8.xcodeproj/project.pbxproj +1855 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/README.txt +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/arm.vsprops +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/common.vsprops +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/d8.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/d8_arm.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/d8_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/d8js2c.cmd +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/debug.vsprops +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/ia32.vsprops +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/js2c.cmd +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/release.vsprops +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8.sln +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_arm.sln +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_arm.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_base.vcproj +40 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_base_arm.vcproj +20 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_base_x64.vcproj +16 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_cctest.vcproj +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_cctest_arm.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_cctest_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_mksnapshot.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_mksnapshot_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_process_sample.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_process_sample_arm.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_process_sample_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_shell_sample.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_shell_sample_arm.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_shell_sample_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_snapshot.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_snapshot_cc.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_snapshot_cc_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_snapshot_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_x64.sln +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/x64.vsprops +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/windows-tick-processor.bat +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/windows-tick-processor.py +0 -0
- data/ext/v8/upstream/Makefile +1 -1
- data/ext/v8/v8_template.cpp +94 -2
- data/ext/v8/v8_try_catch.cpp +2 -2
- data/lib/v8.rb +1 -1
- data/lib/v8/access.rb +93 -40
- data/lib/v8/cli.rb +1 -1
- data/lib/v8/function.rb +14 -2
- data/spec/redjs/jsapi_spec.rb +231 -42
- data/therubyracer.gemspec +3 -3
- metadata +463 -453
- data/ext/v8/upstream/2.1.10/src/arm/assembler-thumb2-inl.h +0 -263
- data/ext/v8/upstream/2.1.10/src/arm/assembler-thumb2.cc +0 -1878
- data/ext/v8/upstream/2.1.10/src/arm/assembler-thumb2.h +0 -1036
- data/ext/v8/upstream/2.1.10/src/arm/codegen-arm-inl.h +0 -72
- data/ext/v8/upstream/2.1.10/src/arm/ic-arm.cc +0 -1833
- data/ext/v8/upstream/2.1.10/src/circular-queue-inl.h +0 -101
- data/ext/v8/upstream/2.1.10/src/profile-generator.cc +0 -583
- data/ext/v8/upstream/2.1.10/src/profile-generator.h +0 -364
- data/ext/v8/upstream/2.1.10/src/x64/ic-x64.cc +0 -1621
@@ -37,7 +37,7 @@ namespace internal {
|
|
37
37
|
// Scope information represents information about a functions's
|
38
38
|
// scopes (currently only one, because we don't do any inlining)
|
39
39
|
// and the allocation of the scope's variables. Scope information
|
40
|
-
// is stored in a compressed form
|
40
|
+
// is stored in a compressed form in FixedArray objects and is used
|
41
41
|
// at runtime (stack dumps, deoptimization, etc.).
|
42
42
|
//
|
43
43
|
// Historical note: In other VMs built by this team, ScopeInfo was
|
@@ -54,23 +54,11 @@ class ScopeInfo BASE_EMBEDDED {
|
|
54
54
|
// Create a ScopeInfo instance from a scope.
|
55
55
|
explicit ScopeInfo(Scope* scope);
|
56
56
|
|
57
|
-
// Create a ScopeInfo instance from
|
58
|
-
explicit ScopeInfo(
|
59
|
-
|
60
|
-
// Write the ScopeInfo data into a Code object, and returns the
|
61
|
-
// amount of space that was needed. If no Code object is provided
|
62
|
-
// (NULL handle), Serialize() only returns the amount of space needed.
|
63
|
-
//
|
64
|
-
// This operations requires that the Code object has the correct amount
|
65
|
-
// of space for the ScopeInfo data; otherwise the operation fails (fatal
|
66
|
-
// error). Any existing scope info in the Code object is simply overwritten.
|
67
|
-
int Serialize(Code* code);
|
68
|
-
|
69
|
-
// Garbage collection support for scope info embedded in Code objects.
|
70
|
-
// This code is in ScopeInfo because only here we should have to know
|
71
|
-
// about the encoding.
|
72
|
-
static void IterateScopeInfo(Code* code, ObjectVisitor* v);
|
57
|
+
// Create a ScopeInfo instance from SerializedScopeInfo.
|
58
|
+
explicit ScopeInfo(SerializedScopeInfo* data);
|
73
59
|
|
60
|
+
// Creates a SerializedScopeInfo holding the serialized scope info.
|
61
|
+
Handle<SerializedScopeInfo> Serialize();
|
74
62
|
|
75
63
|
// --------------------------------------------------------------------------
|
76
64
|
// Lookup
|
@@ -95,89 +83,97 @@ class ScopeInfo BASE_EMBEDDED {
|
|
95
83
|
int NumberOfLocals() const;
|
96
84
|
|
97
85
|
// --------------------------------------------------------------------------
|
98
|
-
//
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
86
|
+
// Debugging support
|
87
|
+
|
88
|
+
#ifdef DEBUG
|
89
|
+
void Print();
|
90
|
+
#endif
|
91
|
+
|
92
|
+
private:
|
93
|
+
Handle<String> function_name_;
|
94
|
+
bool calls_eval_;
|
95
|
+
List<Handle<String>, Allocator > parameters_;
|
96
|
+
List<Handle<String>, Allocator > stack_slots_;
|
97
|
+
List<Handle<String>, Allocator > context_slots_;
|
98
|
+
List<Variable::Mode, Allocator > context_modes_;
|
99
|
+
};
|
100
|
+
|
101
|
+
|
102
|
+
// This object provides quick access to scope info details for runtime
|
103
|
+
// routines w/o the need to explicitly create a ScopeInfo object.
|
104
|
+
class SerializedScopeInfo : public FixedArray {
|
105
|
+
public :
|
106
|
+
|
107
|
+
static SerializedScopeInfo* cast(Object* object) {
|
108
|
+
ASSERT(object->IsFixedArray());
|
109
|
+
return reinterpret_cast<SerializedScopeInfo*>(object);
|
110
|
+
}
|
105
111
|
|
106
112
|
// Does this scope call eval.
|
107
|
-
|
113
|
+
bool CallsEval();
|
108
114
|
|
109
115
|
// Return the number of stack slots for code.
|
110
|
-
|
116
|
+
int NumberOfStackSlots();
|
111
117
|
|
112
118
|
// Return the number of context slots for code.
|
113
|
-
|
119
|
+
int NumberOfContextSlots();
|
120
|
+
|
121
|
+
// Return if this has context slots besides MIN_CONTEXT_SLOTS;
|
122
|
+
bool HasHeapAllocatedLocals();
|
114
123
|
|
115
|
-
// Lookup support for scope info
|
124
|
+
// Lookup support for serialized scope info. Returns the
|
116
125
|
// the stack slot index for a given slot name if the slot is
|
117
126
|
// present; otherwise returns a value < 0. The name must be a symbol
|
118
127
|
// (canonicalized).
|
119
|
-
|
128
|
+
int StackSlotIndex(String* name);
|
120
129
|
|
121
|
-
// Lookup support for scope info
|
130
|
+
// Lookup support for serialized scope info. Returns the
|
122
131
|
// context slot index for a given slot name if the slot is present; otherwise
|
123
132
|
// returns a value < 0. The name must be a symbol (canonicalized).
|
124
133
|
// If the slot is present and mode != NULL, sets *mode to the corresponding
|
125
134
|
// mode for that variable.
|
126
|
-
|
135
|
+
int ContextSlotIndex(String* name, Variable::Mode* mode);
|
127
136
|
|
128
|
-
// Lookup support for scope info
|
137
|
+
// Lookup support for serialized scope info. Returns the
|
129
138
|
// parameter index for a given parameter name if the parameter is present;
|
130
139
|
// otherwise returns a value < 0. The name must be a symbol (canonicalized).
|
131
|
-
|
140
|
+
int ParameterIndex(String* name);
|
132
141
|
|
133
|
-
// Lookup support for scope info
|
142
|
+
// Lookup support for serialized scope info. Returns the
|
134
143
|
// function context slot index if the function name is present (named
|
135
144
|
// function expressions, only), otherwise returns a value < 0. The name
|
136
145
|
// must be a symbol (canonicalized).
|
137
|
-
|
146
|
+
int FunctionContextSlotIndex(String* name);
|
138
147
|
|
139
|
-
|
140
|
-
// Debugging support
|
148
|
+
static Handle<SerializedScopeInfo> Create(Scope* scope);
|
141
149
|
|
142
|
-
|
143
|
-
|
144
|
-
#endif
|
150
|
+
// Serializes empty scope info.
|
151
|
+
static SerializedScopeInfo* Empty();
|
145
152
|
|
146
153
|
private:
|
147
|
-
Handle<String> function_name_;
|
148
|
-
bool calls_eval_;
|
149
|
-
List<Handle<String>, Allocator > parameters_;
|
150
|
-
List<Handle<String>, Allocator > stack_slots_;
|
151
|
-
List<Handle<String>, Allocator > context_slots_;
|
152
|
-
List<Variable::Mode, Allocator > context_modes_;
|
153
|
-
};
|
154
154
|
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
explicit ZoneScopeInfo(Scope* scope)
|
159
|
-
: ScopeInfo<ZoneListAllocationPolicy>(scope) {}
|
155
|
+
inline Object** ContextEntriesAddr();
|
156
|
+
|
157
|
+
inline Object** ParameterEntriesAddr();
|
160
158
|
|
161
|
-
|
162
|
-
explicit ZoneScopeInfo(Code* code)
|
163
|
-
: ScopeInfo<ZoneListAllocationPolicy>(code) {}
|
159
|
+
inline Object** StackSlotEntriesAddr();
|
164
160
|
};
|
165
161
|
|
166
162
|
|
167
|
-
// Cache for mapping (
|
163
|
+
// Cache for mapping (data, property name) into context slot index.
|
168
164
|
// The cache contains both positive and negative results.
|
169
165
|
// Slot index equals -1 means the property is absent.
|
170
166
|
// Cleared at startup and prior to mark sweep collection.
|
171
167
|
class ContextSlotCache {
|
172
168
|
public:
|
173
|
-
// Lookup context slot index for (
|
169
|
+
// Lookup context slot index for (data, name).
|
174
170
|
// If absent, kNotFound is returned.
|
175
|
-
static int Lookup(
|
171
|
+
static int Lookup(Object* data,
|
176
172
|
String* name,
|
177
173
|
Variable::Mode* mode);
|
178
174
|
|
179
175
|
// Update an element in the cache.
|
180
|
-
static void Update(
|
176
|
+
static void Update(Object* data,
|
181
177
|
String* name,
|
182
178
|
Variable::Mode mode,
|
183
179
|
int slot_index);
|
@@ -187,10 +183,10 @@ class ContextSlotCache {
|
|
187
183
|
|
188
184
|
static const int kNotFound = -2;
|
189
185
|
private:
|
190
|
-
inline static int Hash(
|
186
|
+
inline static int Hash(Object* data, String* name);
|
191
187
|
|
192
188
|
#ifdef DEBUG
|
193
|
-
static void ValidateEntry(
|
189
|
+
static void ValidateEntry(Object* data,
|
194
190
|
String* name,
|
195
191
|
Variable::Mode mode,
|
196
192
|
int slot_index);
|
@@ -198,7 +194,7 @@ class ContextSlotCache {
|
|
198
194
|
|
199
195
|
static const int kLength = 256;
|
200
196
|
struct Key {
|
201
|
-
|
197
|
+
Object* data;
|
202
198
|
String* name;
|
203
199
|
};
|
204
200
|
|
File without changes
|
File without changes
|
@@ -229,6 +229,10 @@ void ExternalReferenceTable::PopulateTable() {
|
|
229
229
|
DEBUG_ADDRESS,
|
230
230
|
Debug::k_after_break_target_address << kDebugIdShift,
|
231
231
|
"Debug::after_break_target_address()");
|
232
|
+
Add(Debug_Address(Debug::k_debug_break_slot_address).address(),
|
233
|
+
DEBUG_ADDRESS,
|
234
|
+
Debug::k_debug_break_slot_address << kDebugIdShift,
|
235
|
+
"Debug::debug_break_slot_address()");
|
232
236
|
Add(Debug_Address(Debug::k_debug_break_return_address).address(),
|
233
237
|
DEBUG_ADDRESS,
|
234
238
|
Debug::k_debug_break_return_address << kDebugIdShift,
|
@@ -356,102 +360,108 @@ void ExternalReferenceTable::PopulateTable() {
|
|
356
360
|
UNCLASSIFIED,
|
357
361
|
5,
|
358
362
|
"StackGuard::address_of_real_jslimit()");
|
363
|
+
#ifndef V8_INTERPRETED_REGEXP
|
359
364
|
Add(ExternalReference::address_of_regexp_stack_limit().address(),
|
360
365
|
UNCLASSIFIED,
|
361
366
|
6,
|
362
367
|
"RegExpStack::limit_address()");
|
363
|
-
Add(ExternalReference::
|
368
|
+
Add(ExternalReference::address_of_regexp_stack_memory_address().address(),
|
364
369
|
UNCLASSIFIED,
|
365
370
|
7,
|
371
|
+
"RegExpStack::memory_address()");
|
372
|
+
Add(ExternalReference::address_of_regexp_stack_memory_size().address(),
|
373
|
+
UNCLASSIFIED,
|
374
|
+
8,
|
375
|
+
"RegExpStack::memory_size()");
|
376
|
+
Add(ExternalReference::address_of_static_offsets_vector().address(),
|
377
|
+
UNCLASSIFIED,
|
378
|
+
9,
|
379
|
+
"OffsetsVector::static_offsets_vector");
|
380
|
+
#endif // V8_INTERPRETED_REGEXP
|
381
|
+
Add(ExternalReference::new_space_start().address(),
|
382
|
+
UNCLASSIFIED,
|
383
|
+
10,
|
366
384
|
"Heap::NewSpaceStart()");
|
367
385
|
Add(ExternalReference::new_space_mask().address(),
|
368
386
|
UNCLASSIFIED,
|
369
|
-
|
387
|
+
11,
|
370
388
|
"Heap::NewSpaceMask()");
|
371
389
|
Add(ExternalReference::heap_always_allocate_scope_depth().address(),
|
372
390
|
UNCLASSIFIED,
|
373
|
-
|
391
|
+
12,
|
374
392
|
"Heap::always_allocate_scope_depth()");
|
375
393
|
Add(ExternalReference::new_space_allocation_limit_address().address(),
|
376
394
|
UNCLASSIFIED,
|
377
|
-
|
395
|
+
13,
|
378
396
|
"Heap::NewSpaceAllocationLimitAddress()");
|
379
397
|
Add(ExternalReference::new_space_allocation_top_address().address(),
|
380
398
|
UNCLASSIFIED,
|
381
|
-
|
399
|
+
14,
|
382
400
|
"Heap::NewSpaceAllocationTopAddress()");
|
383
401
|
#ifdef ENABLE_DEBUGGER_SUPPORT
|
384
402
|
Add(ExternalReference::debug_break().address(),
|
385
403
|
UNCLASSIFIED,
|
386
|
-
|
404
|
+
15,
|
387
405
|
"Debug::Break()");
|
388
406
|
Add(ExternalReference::debug_step_in_fp_address().address(),
|
389
407
|
UNCLASSIFIED,
|
390
|
-
|
408
|
+
16,
|
391
409
|
"Debug::step_in_fp_addr()");
|
392
410
|
#endif
|
393
411
|
Add(ExternalReference::double_fp_operation(Token::ADD).address(),
|
394
412
|
UNCLASSIFIED,
|
395
|
-
|
413
|
+
17,
|
396
414
|
"add_two_doubles");
|
397
415
|
Add(ExternalReference::double_fp_operation(Token::SUB).address(),
|
398
416
|
UNCLASSIFIED,
|
399
|
-
|
417
|
+
18,
|
400
418
|
"sub_two_doubles");
|
401
419
|
Add(ExternalReference::double_fp_operation(Token::MUL).address(),
|
402
420
|
UNCLASSIFIED,
|
403
|
-
|
421
|
+
19,
|
404
422
|
"mul_two_doubles");
|
405
423
|
Add(ExternalReference::double_fp_operation(Token::DIV).address(),
|
406
424
|
UNCLASSIFIED,
|
407
|
-
|
425
|
+
20,
|
408
426
|
"div_two_doubles");
|
409
427
|
Add(ExternalReference::double_fp_operation(Token::MOD).address(),
|
410
428
|
UNCLASSIFIED,
|
411
|
-
|
429
|
+
21,
|
412
430
|
"mod_two_doubles");
|
413
431
|
Add(ExternalReference::compare_doubles().address(),
|
414
432
|
UNCLASSIFIED,
|
415
|
-
|
433
|
+
22,
|
416
434
|
"compare_doubles");
|
417
|
-
Add(ExternalReference::compile_array_pop_call().address(),
|
418
|
-
UNCLASSIFIED,
|
419
|
-
20,
|
420
|
-
"compile_array_pop");
|
421
|
-
Add(ExternalReference::compile_array_push_call().address(),
|
422
|
-
UNCLASSIFIED,
|
423
|
-
21,
|
424
|
-
"compile_array_push");
|
425
435
|
#ifndef V8_INTERPRETED_REGEXP
|
426
436
|
Add(ExternalReference::re_case_insensitive_compare_uc16().address(),
|
427
437
|
UNCLASSIFIED,
|
428
|
-
|
438
|
+
23,
|
429
439
|
"NativeRegExpMacroAssembler::CaseInsensitiveCompareUC16()");
|
430
440
|
Add(ExternalReference::re_check_stack_guard_state().address(),
|
431
441
|
UNCLASSIFIED,
|
432
|
-
|
442
|
+
24,
|
433
443
|
"RegExpMacroAssembler*::CheckStackGuardState()");
|
434
444
|
Add(ExternalReference::re_grow_stack().address(),
|
435
445
|
UNCLASSIFIED,
|
436
|
-
|
446
|
+
25,
|
437
447
|
"NativeRegExpMacroAssembler::GrowStack()");
|
438
448
|
Add(ExternalReference::re_word_character_map().address(),
|
439
449
|
UNCLASSIFIED,
|
440
|
-
|
450
|
+
26,
|
441
451
|
"NativeRegExpMacroAssembler::word_character_map");
|
442
452
|
#endif // V8_INTERPRETED_REGEXP
|
443
453
|
// Keyed lookup cache.
|
444
454
|
Add(ExternalReference::keyed_lookup_cache_keys().address(),
|
445
455
|
UNCLASSIFIED,
|
446
|
-
|
456
|
+
27,
|
447
457
|
"KeyedLookupCache::keys()");
|
448
458
|
Add(ExternalReference::keyed_lookup_cache_field_offsets().address(),
|
449
459
|
UNCLASSIFIED,
|
450
|
-
|
460
|
+
28,
|
451
461
|
"KeyedLookupCache::field_offsets()");
|
452
462
|
Add(ExternalReference::transcendental_cache_array_address().address(),
|
453
463
|
UNCLASSIFIED,
|
454
|
-
|
464
|
+
29,
|
455
465
|
"TranscendentalCache::caches()");
|
456
466
|
}
|
457
467
|
|
@@ -665,30 +675,175 @@ void Deserializer::ReadObject(int space_number,
|
|
665
675
|
LOG(SnapshotPositionEvent(address, source_->position()));
|
666
676
|
}
|
667
677
|
ReadChunk(current, limit, space_number, address);
|
678
|
+
|
679
|
+
if (space == Heap::map_space()) {
|
680
|
+
ASSERT(size == Map::kSize);
|
681
|
+
HeapObject* obj = HeapObject::FromAddress(address);
|
682
|
+
Map* map = reinterpret_cast<Map*>(obj);
|
683
|
+
map->set_scavenger(Heap::GetScavenger(map->instance_type(),
|
684
|
+
map->instance_size()));
|
685
|
+
}
|
668
686
|
}
|
669
687
|
|
670
688
|
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
689
|
+
// This macro is always used with a constant argument so it should all fold
|
690
|
+
// away to almost nothing in the generated code. It might be nicer to do this
|
691
|
+
// with the ternary operator but there are type issues with that.
|
692
|
+
#define ASSIGN_DEST_SPACE(space_number) \
|
693
|
+
Space* dest_space; \
|
694
|
+
if (space_number == NEW_SPACE) { \
|
695
|
+
dest_space = Heap::new_space(); \
|
696
|
+
} else if (space_number == OLD_POINTER_SPACE) { \
|
697
|
+
dest_space = Heap::old_pointer_space(); \
|
698
|
+
} else if (space_number == OLD_DATA_SPACE) { \
|
699
|
+
dest_space = Heap::old_data_space(); \
|
700
|
+
} else if (space_number == CODE_SPACE) { \
|
701
|
+
dest_space = Heap::code_space(); \
|
702
|
+
} else if (space_number == MAP_SPACE) { \
|
703
|
+
dest_space = Heap::map_space(); \
|
704
|
+
} else if (space_number == CELL_SPACE) { \
|
705
|
+
dest_space = Heap::cell_space(); \
|
706
|
+
} else { \
|
707
|
+
ASSERT(space_number >= LO_SPACE); \
|
708
|
+
dest_space = Heap::lo_space(); \
|
709
|
+
}
|
710
|
+
|
711
|
+
|
712
|
+
static const int kUnknownOffsetFromStart = -1;
|
681
713
|
|
682
714
|
|
683
715
|
void Deserializer::ReadChunk(Object** current,
|
684
716
|
Object** limit,
|
685
|
-
int
|
717
|
+
int source_space,
|
686
718
|
Address address) {
|
687
719
|
while (current < limit) {
|
688
720
|
int data = source_->Get();
|
689
721
|
switch (data) {
|
722
|
+
#define CASE_STATEMENT(where, how, within, space_number) \
|
723
|
+
case where + how + within + space_number: \
|
724
|
+
ASSERT((where & ~kPointedToMask) == 0); \
|
725
|
+
ASSERT((how & ~kHowToCodeMask) == 0); \
|
726
|
+
ASSERT((within & ~kWhereToPointMask) == 0); \
|
727
|
+
ASSERT((space_number & ~kSpaceMask) == 0);
|
728
|
+
|
729
|
+
#define CASE_BODY(where, how, within, space_number_if_any, offset_from_start) \
|
730
|
+
{ \
|
731
|
+
bool emit_write_barrier = false; \
|
732
|
+
bool current_was_incremented = false; \
|
733
|
+
int space_number = space_number_if_any == kAnyOldSpace ? \
|
734
|
+
(data & kSpaceMask) : space_number_if_any; \
|
735
|
+
if (where == kNewObject && how == kPlain && within == kStartOfObject) {\
|
736
|
+
ASSIGN_DEST_SPACE(space_number) \
|
737
|
+
ReadObject(space_number, dest_space, current); \
|
738
|
+
emit_write_barrier = \
|
739
|
+
(space_number == NEW_SPACE && source_space != NEW_SPACE); \
|
740
|
+
} else { \
|
741
|
+
Object* new_object = NULL; /* May not be a real Object pointer. */ \
|
742
|
+
if (where == kNewObject) { \
|
743
|
+
ASSIGN_DEST_SPACE(space_number) \
|
744
|
+
ReadObject(space_number, dest_space, &new_object); \
|
745
|
+
} else if (where == kRootArray) { \
|
746
|
+
int root_id = source_->GetInt(); \
|
747
|
+
new_object = Heap::roots_address()[root_id]; \
|
748
|
+
} else if (where == kPartialSnapshotCache) { \
|
749
|
+
int cache_index = source_->GetInt(); \
|
750
|
+
new_object = partial_snapshot_cache_[cache_index]; \
|
751
|
+
} else if (where == kExternalReference) { \
|
752
|
+
int reference_id = source_->GetInt(); \
|
753
|
+
Address address = \
|
754
|
+
external_reference_decoder_->Decode(reference_id); \
|
755
|
+
new_object = reinterpret_cast<Object*>(address); \
|
756
|
+
} else if (where == kBackref) { \
|
757
|
+
emit_write_barrier = \
|
758
|
+
(space_number == NEW_SPACE && source_space != NEW_SPACE); \
|
759
|
+
new_object = GetAddressFromEnd(data & kSpaceMask); \
|
760
|
+
} else { \
|
761
|
+
ASSERT(where == kFromStart); \
|
762
|
+
if (offset_from_start == kUnknownOffsetFromStart) { \
|
763
|
+
emit_write_barrier = \
|
764
|
+
(space_number == NEW_SPACE && source_space != NEW_SPACE); \
|
765
|
+
new_object = GetAddressFromStart(data & kSpaceMask); \
|
766
|
+
} else { \
|
767
|
+
Address object_address = pages_[space_number][0] + \
|
768
|
+
(offset_from_start << kObjectAlignmentBits); \
|
769
|
+
new_object = HeapObject::FromAddress(object_address); \
|
770
|
+
} \
|
771
|
+
} \
|
772
|
+
if (within == kFirstInstruction) { \
|
773
|
+
Code* new_code_object = reinterpret_cast<Code*>(new_object); \
|
774
|
+
new_object = reinterpret_cast<Object*>( \
|
775
|
+
new_code_object->instruction_start()); \
|
776
|
+
} \
|
777
|
+
if (how == kFromCode) { \
|
778
|
+
Address location_of_branch_data = \
|
779
|
+
reinterpret_cast<Address>(current); \
|
780
|
+
Assembler::set_target_at(location_of_branch_data, \
|
781
|
+
reinterpret_cast<Address>(new_object)); \
|
782
|
+
if (within == kFirstInstruction) { \
|
783
|
+
location_of_branch_data += Assembler::kCallTargetSize; \
|
784
|
+
current = reinterpret_cast<Object**>(location_of_branch_data); \
|
785
|
+
current_was_incremented = true; \
|
786
|
+
} \
|
787
|
+
} else { \
|
788
|
+
*current = new_object; \
|
789
|
+
} \
|
790
|
+
} \
|
791
|
+
if (emit_write_barrier) { \
|
792
|
+
Heap::RecordWrite(address, static_cast<int>( \
|
793
|
+
reinterpret_cast<Address>(current) - address)); \
|
794
|
+
} \
|
795
|
+
if (!current_was_incremented) { \
|
796
|
+
current++; /* Increment current if it wasn't done above. */ \
|
797
|
+
} \
|
798
|
+
break; \
|
799
|
+
} \
|
800
|
+
|
801
|
+
// This generates a case and a body for each space. The large object spaces are
|
802
|
+
// very rare in snapshots so they are grouped in one body.
|
803
|
+
#define ONE_PER_SPACE(where, how, within) \
|
804
|
+
CASE_STATEMENT(where, how, within, NEW_SPACE) \
|
805
|
+
CASE_BODY(where, how, within, NEW_SPACE, kUnknownOffsetFromStart) \
|
806
|
+
CASE_STATEMENT(where, how, within, OLD_DATA_SPACE) \
|
807
|
+
CASE_BODY(where, how, within, OLD_DATA_SPACE, kUnknownOffsetFromStart) \
|
808
|
+
CASE_STATEMENT(where, how, within, OLD_POINTER_SPACE) \
|
809
|
+
CASE_BODY(where, how, within, OLD_POINTER_SPACE, kUnknownOffsetFromStart) \
|
810
|
+
CASE_STATEMENT(where, how, within, CODE_SPACE) \
|
811
|
+
CASE_BODY(where, how, within, CODE_SPACE, kUnknownOffsetFromStart) \
|
812
|
+
CASE_STATEMENT(where, how, within, CELL_SPACE) \
|
813
|
+
CASE_BODY(where, how, within, CELL_SPACE, kUnknownOffsetFromStart) \
|
814
|
+
CASE_STATEMENT(where, how, within, MAP_SPACE) \
|
815
|
+
CASE_BODY(where, how, within, MAP_SPACE, kUnknownOffsetFromStart) \
|
816
|
+
CASE_STATEMENT(where, how, within, kLargeData) \
|
817
|
+
CASE_STATEMENT(where, how, within, kLargeCode) \
|
818
|
+
CASE_STATEMENT(where, how, within, kLargeFixedArray) \
|
819
|
+
CASE_BODY(where, how, within, kAnyOldSpace, kUnknownOffsetFromStart)
|
820
|
+
|
821
|
+
// This generates a case and a body for the new space (which has to do extra
|
822
|
+
// write barrier handling) and handles the other spaces with 8 fall-through
|
823
|
+
// cases and one body.
|
824
|
+
#define ALL_SPACES(where, how, within) \
|
825
|
+
CASE_STATEMENT(where, how, within, NEW_SPACE) \
|
826
|
+
CASE_BODY(where, how, within, NEW_SPACE, kUnknownOffsetFromStart) \
|
827
|
+
CASE_STATEMENT(where, how, within, OLD_DATA_SPACE) \
|
828
|
+
CASE_STATEMENT(where, how, within, OLD_POINTER_SPACE) \
|
829
|
+
CASE_STATEMENT(where, how, within, CODE_SPACE) \
|
830
|
+
CASE_STATEMENT(where, how, within, CELL_SPACE) \
|
831
|
+
CASE_STATEMENT(where, how, within, MAP_SPACE) \
|
832
|
+
CASE_STATEMENT(where, how, within, kLargeData) \
|
833
|
+
CASE_STATEMENT(where, how, within, kLargeCode) \
|
834
|
+
CASE_STATEMENT(where, how, within, kLargeFixedArray) \
|
835
|
+
CASE_BODY(where, how, within, kAnyOldSpace, kUnknownOffsetFromStart)
|
836
|
+
|
837
|
+
#define EMIT_COMMON_REFERENCE_PATTERNS(pseudo_space_number, \
|
838
|
+
space_number, \
|
839
|
+
offset_from_start) \
|
840
|
+
CASE_STATEMENT(kFromStart, kPlain, kStartOfObject, pseudo_space_number) \
|
841
|
+
CASE_BODY(kFromStart, kPlain, kStartOfObject, space_number, offset_from_start)
|
842
|
+
|
843
|
+
// We generate 15 cases and bodies that process special tags that combine
|
844
|
+
// the raw data tag and the length into one byte.
|
690
845
|
#define RAW_CASE(index, size) \
|
691
|
-
case
|
846
|
+
case kRawData + index: { \
|
692
847
|
byte* raw_data_out = reinterpret_cast<byte*>(current); \
|
693
848
|
source_->CopyRaw(raw_data_out, size); \
|
694
849
|
current = reinterpret_cast<Object**>(raw_data_out + size); \
|
@@ -696,144 +851,77 @@ void Deserializer::ReadChunk(Object** current,
|
|
696
851
|
}
|
697
852
|
COMMON_RAW_LENGTHS(RAW_CASE)
|
698
853
|
#undef RAW_CASE
|
699
|
-
|
854
|
+
|
855
|
+
// Deserialize a chunk of raw data that doesn't have one of the popular
|
856
|
+
// lengths.
|
857
|
+
case kRawData: {
|
700
858
|
int size = source_->GetInt();
|
701
859
|
byte* raw_data_out = reinterpret_cast<byte*>(current);
|
702
860
|
source_->CopyRaw(raw_data_out, size);
|
703
861
|
current = reinterpret_cast<Object**>(raw_data_out + size);
|
704
862
|
break;
|
705
863
|
}
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
|
742
|
-
|
743
|
-
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
|
753
|
-
|
754
|
-
|
755
|
-
|
756
|
-
|
757
|
-
|
758
|
-
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
|
763
|
-
|
764
|
-
|
765
|
-
|
766
|
-
|
767
|
-
Heap::RecordWrite(address, static_cast<int>(
|
768
|
-
reinterpret_cast<Address>(current) - address));
|
769
|
-
}
|
770
|
-
*current++ = GetAddressFromEnd(backref_space);
|
771
|
-
break;
|
772
|
-
}
|
773
|
-
ONE_CASE_PER_SPACE(REFERENCE_SERIALIZATION) {
|
774
|
-
// Write a reference to an object we unpacked earlier.
|
775
|
-
int reference_space = (data & kSpaceMask);
|
776
|
-
if (reference_space == NEW_SPACE && space != NEW_SPACE) {
|
777
|
-
Heap::RecordWrite(address, static_cast<int>(
|
778
|
-
reinterpret_cast<Address>(current) - address));
|
779
|
-
}
|
780
|
-
*current++ = GetAddressFromStart(reference_space);
|
781
|
-
break;
|
782
|
-
}
|
783
|
-
#define COMMON_REFS_CASE(index, reference_space, address) \
|
784
|
-
case REFERENCE_SERIALIZATION + index: { \
|
785
|
-
ASSERT(SpaceIsPaged(reference_space)); \
|
786
|
-
Address object_address = \
|
787
|
-
pages_[reference_space][0] + (address << kObjectAlignmentBits); \
|
788
|
-
*current++ = HeapObject::FromAddress(object_address); \
|
789
|
-
break; \
|
790
|
-
}
|
791
|
-
COMMON_REFERENCE_PATTERNS(COMMON_REFS_CASE)
|
792
|
-
#undef COMMON_REFS_CASE
|
793
|
-
ONE_CASE_PER_SPACE(CODE_BACKREF_SERIALIZATION) {
|
794
|
-
int backref_space = (data & kSpaceMask);
|
795
|
-
// Can't use Code::cast because heap is not set up yet and assertions
|
796
|
-
// will fail.
|
797
|
-
Code* code_object =
|
798
|
-
reinterpret_cast<Code*>(GetAddressFromEnd(backref_space));
|
799
|
-
// Setting a branch/call to previously decoded code object from code.
|
800
|
-
Address location_of_branch_data = reinterpret_cast<Address>(current);
|
801
|
-
Assembler::set_target_at(location_of_branch_data,
|
802
|
-
code_object->instruction_start());
|
803
|
-
location_of_branch_data += Assembler::kCallTargetSize;
|
804
|
-
current = reinterpret_cast<Object**>(location_of_branch_data);
|
805
|
-
break;
|
806
|
-
}
|
807
|
-
ONE_CASE_PER_SPACE(CODE_REFERENCE_SERIALIZATION) {
|
808
|
-
int backref_space = (data & kSpaceMask);
|
809
|
-
// Can't use Code::cast because heap is not set up yet and assertions
|
810
|
-
// will fail.
|
811
|
-
Code* code_object =
|
812
|
-
reinterpret_cast<Code*>(GetAddressFromStart(backref_space));
|
813
|
-
// Setting a branch/call to previously decoded code object from code.
|
814
|
-
Address location_of_branch_data = reinterpret_cast<Address>(current);
|
815
|
-
Assembler::set_target_at(location_of_branch_data,
|
816
|
-
code_object->instruction_start());
|
817
|
-
location_of_branch_data += Assembler::kCallTargetSize;
|
818
|
-
current = reinterpret_cast<Object**>(location_of_branch_data);
|
819
|
-
break;
|
820
|
-
}
|
821
|
-
case EXTERNAL_REFERENCE_SERIALIZATION: {
|
822
|
-
int reference_id = source_->GetInt();
|
823
|
-
Address address = external_reference_decoder_->Decode(reference_id);
|
824
|
-
*current++ = reinterpret_cast<Object*>(address);
|
825
|
-
break;
|
826
|
-
}
|
827
|
-
case EXTERNAL_BRANCH_TARGET_SERIALIZATION: {
|
828
|
-
int reference_id = source_->GetInt();
|
829
|
-
Address address = external_reference_decoder_->Decode(reference_id);
|
830
|
-
Address location_of_branch_data = reinterpret_cast<Address>(current);
|
831
|
-
Assembler::set_external_target_at(location_of_branch_data, address);
|
832
|
-
location_of_branch_data += Assembler::kExternalTargetSize;
|
833
|
-
current = reinterpret_cast<Object**>(location_of_branch_data);
|
834
|
-
break;
|
835
|
-
}
|
836
|
-
case START_NEW_PAGE_SERIALIZATION: {
|
864
|
+
|
865
|
+
// Deserialize a new object and write a pointer to it to the current
|
866
|
+
// object.
|
867
|
+
ONE_PER_SPACE(kNewObject, kPlain, kStartOfObject)
|
868
|
+
// Deserialize a new code object and write a pointer to its first
|
869
|
+
// instruction to the current code object.
|
870
|
+
ONE_PER_SPACE(kNewObject, kFromCode, kFirstInstruction)
|
871
|
+
// Find a recently deserialized object using its offset from the current
|
872
|
+
// allocation point and write a pointer to it to the current object.
|
873
|
+
ALL_SPACES(kBackref, kPlain, kStartOfObject)
|
874
|
+
// Find a recently deserialized code object using its offset from the
|
875
|
+
// current allocation point and write a pointer to its first instruction
|
876
|
+
// to the current code object.
|
877
|
+
ALL_SPACES(kBackref, kFromCode, kFirstInstruction)
|
878
|
+
// Find an already deserialized object using its offset from the start
|
879
|
+
// and write a pointer to it to the current object.
|
880
|
+
ALL_SPACES(kFromStart, kPlain, kStartOfObject)
|
881
|
+
// Find an already deserialized code object using its offset from the
|
882
|
+
// start and write a pointer to its first instruction to the current code
|
883
|
+
// object.
|
884
|
+
ALL_SPACES(kFromStart, kFromCode, kFirstInstruction)
|
885
|
+
// Find an already deserialized object at one of the predetermined popular
|
886
|
+
// offsets from the start and write a pointer to it in the current object.
|
887
|
+
COMMON_REFERENCE_PATTERNS(EMIT_COMMON_REFERENCE_PATTERNS)
|
888
|
+
// Find an object in the roots array and write a pointer to it to the
|
889
|
+
// current object.
|
890
|
+
CASE_STATEMENT(kRootArray, kPlain, kStartOfObject, 0)
|
891
|
+
CASE_BODY(kRootArray, kPlain, kStartOfObject, 0, kUnknownOffsetFromStart)
|
892
|
+
// Find an object in the partial snapshots cache and write a pointer to it
|
893
|
+
// to the current object.
|
894
|
+
CASE_STATEMENT(kPartialSnapshotCache, kPlain, kStartOfObject, 0)
|
895
|
+
CASE_BODY(kPartialSnapshotCache,
|
896
|
+
kPlain,
|
897
|
+
kStartOfObject,
|
898
|
+
0,
|
899
|
+
kUnknownOffsetFromStart)
|
900
|
+
// Find an external reference and write a pointer to it to the current
|
901
|
+
// object.
|
902
|
+
CASE_STATEMENT(kExternalReference, kPlain, kStartOfObject, 0)
|
903
|
+
CASE_BODY(kExternalReference,
|
904
|
+
kPlain,
|
905
|
+
kStartOfObject,
|
906
|
+
0,
|
907
|
+
kUnknownOffsetFromStart)
|
908
|
+
// Find an external reference and write a pointer to it in the current
|
909
|
+
// code object.
|
910
|
+
CASE_STATEMENT(kExternalReference, kFromCode, kStartOfObject, 0)
|
911
|
+
CASE_BODY(kExternalReference,
|
912
|
+
kFromCode,
|
913
|
+
kStartOfObject,
|
914
|
+
0,
|
915
|
+
kUnknownOffsetFromStart)
|
916
|
+
|
917
|
+
#undef CASE_STATEMENT
|
918
|
+
#undef CASE_BODY
|
919
|
+
#undef ONE_PER_SPACE
|
920
|
+
#undef ALL_SPACES
|
921
|
+
#undef EMIT_COMMON_REFERENCE_PATTERNS
|
922
|
+
#undef ASSIGN_DEST_SPACE
|
923
|
+
|
924
|
+
case kNewPage: {
|
837
925
|
int space = source_->Get();
|
838
926
|
pages_[space].Add(last_object_address_);
|
839
927
|
if (space == CODE_SPACE) {
|
@@ -841,7 +929,8 @@ void Deserializer::ReadChunk(Object** current,
|
|
841
929
|
}
|
842
930
|
break;
|
843
931
|
}
|
844
|
-
|
932
|
+
|
933
|
+
case kNativesStringResource: {
|
845
934
|
int index = source_->Get();
|
846
935
|
Vector<const char> source_vector = Natives::GetScriptSource(index);
|
847
936
|
NativesExternalStringResource* resource =
|
@@ -849,21 +938,13 @@ void Deserializer::ReadChunk(Object** current,
|
|
849
938
|
*current++ = reinterpret_cast<Object*>(resource);
|
850
939
|
break;
|
851
940
|
}
|
852
|
-
|
853
|
-
|
854
|
-
*current++ = Heap::roots_address()[root_id];
|
855
|
-
break;
|
856
|
-
}
|
857
|
-
case PARTIAL_SNAPSHOT_CACHE_ENTRY: {
|
858
|
-
int cache_index = source_->GetInt();
|
859
|
-
*current++ = partial_snapshot_cache_[cache_index];
|
860
|
-
break;
|
861
|
-
}
|
862
|
-
case SYNCHRONIZE: {
|
941
|
+
|
942
|
+
case kSynchronize: {
|
863
943
|
// If we get here then that indicates that you have a mismatch between
|
864
944
|
// the number of GC roots when serializing and deserializing.
|
865
945
|
UNREACHABLE();
|
866
946
|
}
|
947
|
+
|
867
948
|
default:
|
868
949
|
UNREACHABLE();
|
869
950
|
}
|
@@ -888,7 +969,7 @@ void Deserializer::Synchronize(const char* tag) {
|
|
888
969
|
int data = source_->Get();
|
889
970
|
// If this assert fails then that indicates that you have a mismatch between
|
890
971
|
// the number of GC roots when serializing and deserializing.
|
891
|
-
ASSERT_EQ(
|
972
|
+
ASSERT_EQ(kSynchronize, data);
|
892
973
|
do {
|
893
974
|
int character = source_->Get();
|
894
975
|
if (character == 0) break;
|
@@ -903,7 +984,7 @@ void Deserializer::Synchronize(const char* tag) {
|
|
903
984
|
|
904
985
|
|
905
986
|
void Serializer::Synchronize(const char* tag) {
|
906
|
-
sink_->Put(
|
987
|
+
sink_->Put(kSynchronize, tag);
|
907
988
|
int character;
|
908
989
|
do {
|
909
990
|
character = *tag++;
|
@@ -965,13 +1046,13 @@ void PartialSerializer::Serialize(Object** object) {
|
|
965
1046
|
void Serializer::VisitPointers(Object** start, Object** end) {
|
966
1047
|
for (Object** current = start; current < end; current++) {
|
967
1048
|
if ((*current)->IsSmi()) {
|
968
|
-
sink_->Put(
|
1049
|
+
sink_->Put(kRawData, "RawData");
|
969
1050
|
sink_->PutInt(kPointerSize, "length");
|
970
1051
|
for (int i = 0; i < kPointerSize; i++) {
|
971
1052
|
sink_->Put(reinterpret_cast<byte*>(current)[i], "Byte");
|
972
1053
|
}
|
973
1054
|
} else {
|
974
|
-
SerializeObject(*current,
|
1055
|
+
SerializeObject(*current, kPlain, kStartOfObject);
|
975
1056
|
}
|
976
1057
|
}
|
977
1058
|
}
|
@@ -1041,7 +1122,8 @@ int PartialSerializer::RootIndex(HeapObject* heap_object) {
|
|
1041
1122
|
void Serializer::SerializeReferenceToPreviousObject(
|
1042
1123
|
int space,
|
1043
1124
|
int address,
|
1044
|
-
|
1125
|
+
HowToCode how_to_code,
|
1126
|
+
WhereToPoint where_to_point) {
|
1045
1127
|
int offset = CurrentAllocationAddress(space) - address;
|
1046
1128
|
bool from_start = true;
|
1047
1129
|
if (SpaceIsPaged(space)) {
|
@@ -1062,43 +1144,30 @@ void Serializer::SerializeReferenceToPreviousObject(
|
|
1062
1144
|
// If we are actually dealing with real offsets (and not a numbering of
|
1063
1145
|
// all objects) then we should shift out the bits that are always 0.
|
1064
1146
|
if (!SpaceIsLarge(space)) address >>= kObjectAlignmentBits;
|
1065
|
-
|
1066
|
-
|
1067
|
-
|
1068
|
-
|
1069
|
-
|
1070
|
-
|
1071
|
-
|
1072
|
-
|
1073
|
-
sink_->Put(CODE_BACKREF_SERIALIZATION + space, "BackRefCodeSer");
|
1074
|
-
sink_->PutInt(address, "address");
|
1075
|
-
}
|
1076
|
-
} else {
|
1077
|
-
// Regular absolute references.
|
1078
|
-
CHECK_EQ(TAGGED_REPRESENTATION, reference_representation);
|
1079
|
-
if (from_start) {
|
1080
|
-
// There are some common offsets that have their own specialized encoding.
|
1081
|
-
#define COMMON_REFS_CASE(tag, common_space, common_offset) \
|
1082
|
-
if (space == common_space && address == common_offset) { \
|
1083
|
-
sink_->PutSection(tag + REFERENCE_SERIALIZATION, "RefSer"); \
|
1084
|
-
} else /* NOLINT */
|
1085
|
-
COMMON_REFERENCE_PATTERNS(COMMON_REFS_CASE)
|
1147
|
+
if (from_start) {
|
1148
|
+
#define COMMON_REFS_CASE(pseudo_space, actual_space, offset) \
|
1149
|
+
if (space == actual_space && address == offset && \
|
1150
|
+
how_to_code == kPlain && where_to_point == kStartOfObject) { \
|
1151
|
+
sink_->Put(kFromStart + how_to_code + where_to_point + \
|
1152
|
+
pseudo_space, "RefSer"); \
|
1153
|
+
} else /* NOLINT */
|
1154
|
+
COMMON_REFERENCE_PATTERNS(COMMON_REFS_CASE)
|
1086
1155
|
#undef COMMON_REFS_CASE
|
1087
|
-
|
1088
|
-
|
1089
|
-
sink_->PutInt(address, "address");
|
1090
|
-
}
|
1091
|
-
} else {
|
1092
|
-
sink_->Put(BACKREF_SERIALIZATION + space, "BackRefSer");
|
1156
|
+
{ /* NOLINT */
|
1157
|
+
sink_->Put(kFromStart + how_to_code + where_to_point + space, "RefSer");
|
1093
1158
|
sink_->PutInt(address, "address");
|
1094
1159
|
}
|
1160
|
+
} else {
|
1161
|
+
sink_->Put(kBackref + how_to_code + where_to_point + space, "BackRefSer");
|
1162
|
+
sink_->PutInt(address, "address");
|
1095
1163
|
}
|
1096
1164
|
}
|
1097
1165
|
|
1098
1166
|
|
1099
1167
|
void StartupSerializer::SerializeObject(
|
1100
1168
|
Object* o,
|
1101
|
-
|
1169
|
+
HowToCode how_to_code,
|
1170
|
+
WhereToPoint where_to_point) {
|
1102
1171
|
CHECK(o->IsHeapObject());
|
1103
1172
|
HeapObject* heap_object = HeapObject::cast(o);
|
1104
1173
|
|
@@ -1107,13 +1176,15 @@ void StartupSerializer::SerializeObject(
|
|
1107
1176
|
int address = address_mapper_.MappedTo(heap_object);
|
1108
1177
|
SerializeReferenceToPreviousObject(space,
|
1109
1178
|
address,
|
1110
|
-
|
1179
|
+
how_to_code,
|
1180
|
+
where_to_point);
|
1111
1181
|
} else {
|
1112
1182
|
// Object has not yet been serialized. Serialize it here.
|
1113
1183
|
ObjectSerializer object_serializer(this,
|
1114
1184
|
heap_object,
|
1115
1185
|
sink_,
|
1116
|
-
|
1186
|
+
how_to_code,
|
1187
|
+
where_to_point);
|
1117
1188
|
object_serializer.Serialize();
|
1118
1189
|
}
|
1119
1190
|
}
|
@@ -1123,7 +1194,7 @@ void StartupSerializer::SerializeWeakReferences() {
|
|
1123
1194
|
for (int i = partial_snapshot_cache_length_;
|
1124
1195
|
i < kPartialSnapshotCacheCapacity;
|
1125
1196
|
i++) {
|
1126
|
-
sink_->Put(
|
1197
|
+
sink_->Put(kRootArray + kPlain + kStartOfObject, "RootSerialization");
|
1127
1198
|
sink_->PutInt(Heap::kUndefinedValueRootIndex, "root_index");
|
1128
1199
|
}
|
1129
1200
|
Heap::IterateWeakRoots(this, VISIT_ALL);
|
@@ -1132,20 +1203,22 @@ void StartupSerializer::SerializeWeakReferences() {
|
|
1132
1203
|
|
1133
1204
|
void PartialSerializer::SerializeObject(
|
1134
1205
|
Object* o,
|
1135
|
-
|
1206
|
+
HowToCode how_to_code,
|
1207
|
+
WhereToPoint where_to_point) {
|
1136
1208
|
CHECK(o->IsHeapObject());
|
1137
1209
|
HeapObject* heap_object = HeapObject::cast(o);
|
1138
1210
|
|
1139
1211
|
int root_index;
|
1140
1212
|
if ((root_index = RootIndex(heap_object)) != kInvalidRootIndex) {
|
1141
|
-
sink_->Put(
|
1213
|
+
sink_->Put(kRootArray + how_to_code + where_to_point, "RootSerialization");
|
1142
1214
|
sink_->PutInt(root_index, "root_index");
|
1143
1215
|
return;
|
1144
1216
|
}
|
1145
1217
|
|
1146
1218
|
if (ShouldBeInThePartialSnapshotCache(heap_object)) {
|
1147
1219
|
int cache_index = PartialSnapshotCacheIndex(heap_object);
|
1148
|
-
sink_->Put(
|
1220
|
+
sink_->Put(kPartialSnapshotCache + how_to_code + where_to_point,
|
1221
|
+
"PartialSnapshotCache");
|
1149
1222
|
sink_->PutInt(cache_index, "partial_snapshot_cache_index");
|
1150
1223
|
return;
|
1151
1224
|
}
|
@@ -1163,13 +1236,15 @@ void PartialSerializer::SerializeObject(
|
|
1163
1236
|
int address = address_mapper_.MappedTo(heap_object);
|
1164
1237
|
SerializeReferenceToPreviousObject(space,
|
1165
1238
|
address,
|
1166
|
-
|
1239
|
+
how_to_code,
|
1240
|
+
where_to_point);
|
1167
1241
|
} else {
|
1168
1242
|
// Object has not yet been serialized. Serialize it here.
|
1169
1243
|
ObjectSerializer serializer(this,
|
1170
1244
|
heap_object,
|
1171
1245
|
sink_,
|
1172
|
-
|
1246
|
+
how_to_code,
|
1247
|
+
where_to_point);
|
1173
1248
|
serializer.Serialize();
|
1174
1249
|
}
|
1175
1250
|
}
|
@@ -1179,12 +1254,8 @@ void Serializer::ObjectSerializer::Serialize() {
|
|
1179
1254
|
int space = Serializer::SpaceOfObject(object_);
|
1180
1255
|
int size = object_->Size();
|
1181
1256
|
|
1182
|
-
|
1183
|
-
|
1184
|
-
} else {
|
1185
|
-
CHECK_EQ(CODE_TARGET_REPRESENTATION, reference_representation_);
|
1186
|
-
sink_->Put(CODE_OBJECT_SERIALIZATION + space, "ObjectSerialization");
|
1187
|
-
}
|
1257
|
+
sink_->Put(kNewObject + reference_representation_ + space,
|
1258
|
+
"ObjectSerialization");
|
1188
1259
|
sink_->PutInt(size >> kObjectAlignmentBits, "Size in words");
|
1189
1260
|
|
1190
1261
|
LOG(SnapshotPositionEvent(object_->address(), sink_->Position()));
|
@@ -1194,12 +1265,12 @@ void Serializer::ObjectSerializer::Serialize() {
|
|
1194
1265
|
int offset = serializer_->Allocate(space, size, &start_new_page);
|
1195
1266
|
serializer_->address_mapper()->AddMapping(object_, offset);
|
1196
1267
|
if (start_new_page) {
|
1197
|
-
sink_->Put(
|
1268
|
+
sink_->Put(kNewPage, "NewPage");
|
1198
1269
|
sink_->PutSection(space, "NewPageSpace");
|
1199
1270
|
}
|
1200
1271
|
|
1201
1272
|
// Serialize the map (first word of the object).
|
1202
|
-
serializer_->SerializeObject(object_->map(),
|
1273
|
+
serializer_->SerializeObject(object_->map(), kPlain, kStartOfObject);
|
1203
1274
|
|
1204
1275
|
// Serialize the rest of the object.
|
1205
1276
|
CHECK_EQ(0, bytes_processed_so_far_);
|
@@ -1217,7 +1288,7 @@ void Serializer::ObjectSerializer::VisitPointers(Object** start,
|
|
1217
1288
|
if (current < end) OutputRawData(reinterpret_cast<Address>(current));
|
1218
1289
|
|
1219
1290
|
while (current < end && !(*current)->IsSmi()) {
|
1220
|
-
serializer_->SerializeObject(*current,
|
1291
|
+
serializer_->SerializeObject(*current, kPlain, kStartOfObject);
|
1221
1292
|
bytes_processed_so_far_ += kPointerSize;
|
1222
1293
|
current++;
|
1223
1294
|
}
|
@@ -1231,7 +1302,7 @@ void Serializer::ObjectSerializer::VisitExternalReferences(Address* start,
|
|
1231
1302
|
OutputRawData(references_start);
|
1232
1303
|
|
1233
1304
|
for (Address* current = start; current < end; current++) {
|
1234
|
-
sink_->Put(
|
1305
|
+
sink_->Put(kExternalReference + kPlain + kStartOfObject, "ExternalRef");
|
1235
1306
|
int reference_id = serializer_->EncodeExternalReference(*current);
|
1236
1307
|
sink_->PutInt(reference_id, "reference id");
|
1237
1308
|
}
|
@@ -1245,9 +1316,16 @@ void Serializer::ObjectSerializer::VisitRuntimeEntry(RelocInfo* rinfo) {
|
|
1245
1316
|
Address target = rinfo->target_address();
|
1246
1317
|
uint32_t encoding = serializer_->EncodeExternalReference(target);
|
1247
1318
|
CHECK(target == NULL ? encoding == 0 : encoding != 0);
|
1248
|
-
|
1319
|
+
int representation;
|
1320
|
+
// Can't use a ternary operator because of gcc.
|
1321
|
+
if (rinfo->IsCodedSpecially()) {
|
1322
|
+
representation = kStartOfObject + kFromCode;
|
1323
|
+
} else {
|
1324
|
+
representation = kStartOfObject + kPlain;
|
1325
|
+
}
|
1326
|
+
sink_->Put(kExternalReference + representation, "ExternalReference");
|
1249
1327
|
sink_->PutInt(encoding, "reference id");
|
1250
|
-
bytes_processed_so_far_ +=
|
1328
|
+
bytes_processed_so_far_ += rinfo->target_address_size();
|
1251
1329
|
}
|
1252
1330
|
|
1253
1331
|
|
@@ -1256,8 +1334,8 @@ void Serializer::ObjectSerializer::VisitCodeTarget(RelocInfo* rinfo) {
|
|
1256
1334
|
Address target_start = rinfo->target_address_address();
|
1257
1335
|
OutputRawData(target_start);
|
1258
1336
|
Code* target = Code::GetCodeFromTargetAddress(rinfo->target_address());
|
1259
|
-
serializer_->SerializeObject(target,
|
1260
|
-
bytes_processed_so_far_ +=
|
1337
|
+
serializer_->SerializeObject(target, kFromCode, kFirstInstruction);
|
1338
|
+
bytes_processed_so_far_ += rinfo->target_address_size();
|
1261
1339
|
}
|
1262
1340
|
|
1263
1341
|
|
@@ -1272,7 +1350,7 @@ void Serializer::ObjectSerializer::VisitExternalAsciiString(
|
|
1272
1350
|
typedef v8::String::ExternalAsciiStringResource Resource;
|
1273
1351
|
Resource* resource = string->resource();
|
1274
1352
|
if (resource == *resource_pointer) {
|
1275
|
-
sink_->Put(
|
1353
|
+
sink_->Put(kNativesStringResource, "NativesStringResource");
|
1276
1354
|
sink_->PutSection(i, "NativesStringResourceEnd");
|
1277
1355
|
bytes_processed_so_far_ += sizeof(resource);
|
1278
1356
|
return;
|
@@ -1296,12 +1374,12 @@ void Serializer::ObjectSerializer::OutputRawData(Address up_to) {
|
|
1296
1374
|
Address base = object_start + bytes_processed_so_far_;
|
1297
1375
|
#define RAW_CASE(index, length) \
|
1298
1376
|
if (skipped == length) { \
|
1299
|
-
sink_->PutSection(
|
1377
|
+
sink_->PutSection(kRawData + index, "RawDataFixed"); \
|
1300
1378
|
} else /* NOLINT */
|
1301
1379
|
COMMON_RAW_LENGTHS(RAW_CASE)
|
1302
1380
|
#undef RAW_CASE
|
1303
1381
|
{ /* NOLINT */
|
1304
|
-
sink_->Put(
|
1382
|
+
sink_->Put(kRawData, "RawData");
|
1305
1383
|
sink_->PutInt(skipped, "length");
|
1306
1384
|
}
|
1307
1385
|
for (int i = 0; i < skipped; i++) {
|