therubyracer 0.7.4 → 0.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -41,6 +41,7 @@ namespace internal {
|
|
41
41
|
&& (info).top <= (space).high() \
|
42
42
|
&& (info).limit == (space).high())
|
43
43
|
|
44
|
+
intptr_t Page::watermark_invalidated_mark_ = Page::WATERMARK_INVALIDATED;
|
44
45
|
|
45
46
|
// ----------------------------------------------------------------------------
|
46
47
|
// HeapObjectIterator
|
@@ -138,13 +139,6 @@ PageIterator::PageIterator(PagedSpace* space, Mode mode) : space_(space) {
|
|
138
139
|
}
|
139
140
|
|
140
141
|
|
141
|
-
// -----------------------------------------------------------------------------
|
142
|
-
// Page
|
143
|
-
|
144
|
-
#ifdef DEBUG
|
145
|
-
Page::RSetState Page::rset_state_ = Page::IN_USE;
|
146
|
-
#endif
|
147
|
-
|
148
142
|
// -----------------------------------------------------------------------------
|
149
143
|
// CodeRange
|
150
144
|
|
@@ -348,7 +342,9 @@ void MemoryAllocator::TearDown() {
|
|
348
342
|
void* MemoryAllocator::AllocateRawMemory(const size_t requested,
|
349
343
|
size_t* allocated,
|
350
344
|
Executability executable) {
|
351
|
-
if (size_ + static_cast<
|
345
|
+
if (size_ + static_cast<size_t>(requested) > static_cast<size_t>(capacity_)) {
|
346
|
+
return NULL;
|
347
|
+
}
|
352
348
|
void* mem;
|
353
349
|
if (executable == EXECUTABLE && CodeRange::exists()) {
|
354
350
|
mem = CodeRange::AllocateRawMemory(requested, allocated);
|
@@ -524,7 +520,10 @@ Page* MemoryAllocator::InitializePagesInChunk(int chunk_id, int pages_in_chunk,
|
|
524
520
|
for (int i = 0; i < pages_in_chunk; i++) {
|
525
521
|
Page* p = Page::FromAddress(page_addr);
|
526
522
|
p->opaque_header = OffsetFrom(page_addr + Page::kPageSize) | chunk_id;
|
523
|
+
p->InvalidateWatermark(true);
|
527
524
|
p->SetIsLargeObjectPage(false);
|
525
|
+
p->SetAllocationWatermark(p->ObjectAreaStart());
|
526
|
+
p->SetCachedAllocationWatermark(p->ObjectAreaStart());
|
528
527
|
page_addr += Page::kPageSize;
|
529
528
|
}
|
530
529
|
|
@@ -681,6 +680,7 @@ Page* MemoryAllocator::RelinkPagesInChunk(int chunk_id,
|
|
681
680
|
p->opaque_header = OffsetFrom(page_addr + Page::kPageSize) | chunk_id;
|
682
681
|
page_addr += Page::kPageSize;
|
683
682
|
|
683
|
+
p->InvalidateWatermark(true);
|
684
684
|
if (p->WasInUseBeforeMC()) {
|
685
685
|
*last_page_in_use = p;
|
686
686
|
}
|
@@ -744,10 +744,10 @@ bool PagedSpace::Setup(Address start, size_t size) {
|
|
744
744
|
accounting_stats_.ExpandSpace(num_pages * Page::kObjectAreaSize);
|
745
745
|
ASSERT(Capacity() <= max_capacity_);
|
746
746
|
|
747
|
-
// Sequentially
|
747
|
+
// Sequentially clear region marks in the newly allocated
|
748
748
|
// pages and cache the current last page in the space.
|
749
749
|
for (Page* p = first_page_; p->is_valid(); p = p->next_page()) {
|
750
|
-
p->
|
750
|
+
p->SetRegionMarks(Page::kAllRegionsCleanMarks);
|
751
751
|
last_page_ = p;
|
752
752
|
}
|
753
753
|
|
@@ -794,10 +794,10 @@ void PagedSpace::Unprotect() {
|
|
794
794
|
#endif
|
795
795
|
|
796
796
|
|
797
|
-
void PagedSpace::
|
797
|
+
void PagedSpace::MarkAllPagesClean() {
|
798
798
|
PageIterator it(this, PageIterator::ALL_PAGES);
|
799
799
|
while (it.has_next()) {
|
800
|
-
it.next()->
|
800
|
+
it.next()->SetRegionMarks(Page::kAllRegionsCleanMarks);
|
801
801
|
}
|
802
802
|
}
|
803
803
|
|
@@ -900,7 +900,8 @@ HeapObject* PagedSpace::SlowMCAllocateRaw(int size_in_bytes) {
|
|
900
900
|
// of forwarding addresses is as an offset in terms of live bytes, so we
|
901
901
|
// need quick access to the allocation top of each page to decode
|
902
902
|
// forwarding addresses.
|
903
|
-
current_page->
|
903
|
+
current_page->SetAllocationWatermark(mc_forwarding_info_.top);
|
904
|
+
current_page->next_page()->InvalidateWatermark(true);
|
904
905
|
SetAllocationInfo(&mc_forwarding_info_, current_page->next_page());
|
905
906
|
return AllocateLinearly(&mc_forwarding_info_, size_in_bytes);
|
906
907
|
}
|
@@ -928,10 +929,10 @@ bool PagedSpace::Expand(Page* last_page) {
|
|
928
929
|
|
929
930
|
MemoryAllocator::SetNextPage(last_page, p);
|
930
931
|
|
931
|
-
// Sequentially clear
|
932
|
+
// Sequentially clear region marks of new pages and and cache the
|
932
933
|
// new last page in the space.
|
933
934
|
while (p->is_valid()) {
|
934
|
-
p->
|
935
|
+
p->SetRegionMarks(Page::kAllRegionsCleanMarks);
|
935
936
|
last_page_ = p;
|
936
937
|
p = p->next_page();
|
937
938
|
}
|
@@ -1030,16 +1031,11 @@ void PagedSpace::Verify(ObjectVisitor* visitor) {
|
|
1030
1031
|
if (above_allocation_top) {
|
1031
1032
|
// We don't care what's above the allocation top.
|
1032
1033
|
} else {
|
1033
|
-
// Unless this is the last page in the space containing allocated
|
1034
|
-
// objects, the allocation top should be at a constant offset from the
|
1035
|
-
// object area end.
|
1036
1034
|
Address top = current_page->AllocationTop();
|
1037
1035
|
if (current_page == top_page) {
|
1038
1036
|
ASSERT(top == allocation_info_.top);
|
1039
1037
|
// The next page will be above the allocation top.
|
1040
1038
|
above_allocation_top = true;
|
1041
|
-
} else {
|
1042
|
-
ASSERT(top == PageAllocationLimit(current_page));
|
1043
1039
|
}
|
1044
1040
|
|
1045
1041
|
// It should be packed with objects from the bottom to the top.
|
@@ -1060,8 +1056,8 @@ void PagedSpace::Verify(ObjectVisitor* visitor) {
|
|
1060
1056
|
object->Verify();
|
1061
1057
|
|
1062
1058
|
// All the interior pointers should be contained in the heap and
|
1063
|
-
// have
|
1064
|
-
//
|
1059
|
+
// have page regions covering intergenerational references should be
|
1060
|
+
// marked dirty.
|
1065
1061
|
int size = object->Size();
|
1066
1062
|
object->IterateBody(map->instance_type(), size, visitor);
|
1067
1063
|
|
@@ -1120,7 +1116,7 @@ bool NewSpace::Setup(Address start, int size) {
|
|
1120
1116
|
|
1121
1117
|
start_ = start;
|
1122
1118
|
address_mask_ = ~(size - 1);
|
1123
|
-
object_mask_ = address_mask_ |
|
1119
|
+
object_mask_ = address_mask_ | kHeapObjectTagMask;
|
1124
1120
|
object_expected_ = reinterpret_cast<uintptr_t>(start) | kHeapObjectTag;
|
1125
1121
|
|
1126
1122
|
allocation_info_.top = to_space_.low();
|
@@ -1324,7 +1320,7 @@ bool SemiSpace::Setup(Address start,
|
|
1324
1320
|
|
1325
1321
|
start_ = start;
|
1326
1322
|
address_mask_ = ~(maximum_capacity - 1);
|
1327
|
-
object_mask_ = address_mask_ |
|
1323
|
+
object_mask_ = address_mask_ | kHeapObjectTagMask;
|
1328
1324
|
object_expected_ = reinterpret_cast<uintptr_t>(start) | kHeapObjectTag;
|
1329
1325
|
age_mark_ = start_;
|
1330
1326
|
|
@@ -1463,6 +1459,7 @@ static void ReportCodeKindStatistics() {
|
|
1463
1459
|
CASE(STORE_IC);
|
1464
1460
|
CASE(KEYED_STORE_IC);
|
1465
1461
|
CASE(CALL_IC);
|
1462
|
+
CASE(KEYED_CALL_IC);
|
1466
1463
|
CASE(BINARY_OP_IC);
|
1467
1464
|
}
|
1468
1465
|
}
|
@@ -1634,7 +1631,7 @@ void FreeListNode::set_size(int size_in_bytes) {
|
|
1634
1631
|
// If the block is too small (eg, one or two words), to hold both a size
|
1635
1632
|
// field and a next pointer, we give it a filler map that gives it the
|
1636
1633
|
// correct size.
|
1637
|
-
if (size_in_bytes > ByteArray::
|
1634
|
+
if (size_in_bytes > ByteArray::kHeaderSize) {
|
1638
1635
|
set_map(Heap::raw_unchecked_byte_array_map());
|
1639
1636
|
// Can't use ByteArray::cast because it fails during deserialization.
|
1640
1637
|
ByteArray* this_as_byte_array = reinterpret_cast<ByteArray*>(this);
|
@@ -1831,7 +1828,7 @@ FixedSizeFreeList::FixedSizeFreeList(AllocationSpace owner, int object_size)
|
|
1831
1828
|
|
1832
1829
|
void FixedSizeFreeList::Reset() {
|
1833
1830
|
available_ = 0;
|
1834
|
-
head_ = NULL;
|
1831
|
+
head_ = tail_ = NULL;
|
1835
1832
|
}
|
1836
1833
|
|
1837
1834
|
|
@@ -1843,8 +1840,13 @@ void FixedSizeFreeList::Free(Address start) {
|
|
1843
1840
|
ASSERT(!MarkCompactCollector::IsCompacting());
|
1844
1841
|
FreeListNode* node = FreeListNode::FromAddress(start);
|
1845
1842
|
node->set_size(object_size_);
|
1846
|
-
node->set_next(
|
1847
|
-
head_
|
1843
|
+
node->set_next(NULL);
|
1844
|
+
if (head_ == NULL) {
|
1845
|
+
tail_ = head_ = node->address();
|
1846
|
+
} else {
|
1847
|
+
FreeListNode::FromAddress(tail_)->set_next(node->address());
|
1848
|
+
tail_ = node->address();
|
1849
|
+
}
|
1848
1850
|
available_ += object_size_;
|
1849
1851
|
}
|
1850
1852
|
|
@@ -1907,15 +1909,14 @@ void OldSpace::MCCommitRelocationInfo() {
|
|
1907
1909
|
Page* p = it.next();
|
1908
1910
|
// Space below the relocation pointer is allocated.
|
1909
1911
|
computed_size +=
|
1910
|
-
static_cast<int>(p->
|
1912
|
+
static_cast<int>(p->AllocationWatermark() - p->ObjectAreaStart());
|
1911
1913
|
if (it.has_next()) {
|
1912
|
-
// Free the space at the top of the page.
|
1913
|
-
// p->mc_relocation_top after the call to Free (because Free will clear
|
1914
|
-
// remembered set bits).
|
1914
|
+
// Free the space at the top of the page.
|
1915
1915
|
int extra_size =
|
1916
|
-
static_cast<int>(p->ObjectAreaEnd() - p->
|
1916
|
+
static_cast<int>(p->ObjectAreaEnd() - p->AllocationWatermark());
|
1917
1917
|
if (extra_size > 0) {
|
1918
|
-
int wasted_bytes = free_list_.Free(p->
|
1918
|
+
int wasted_bytes = free_list_.Free(p->AllocationWatermark(),
|
1919
|
+
extra_size);
|
1919
1920
|
// The bytes we have just "freed" to add to the free list were
|
1920
1921
|
// already accounted as available.
|
1921
1922
|
accounting_stats_.WasteBytes(wasted_bytes);
|
@@ -1963,7 +1964,10 @@ void PagedSpace::FreePages(Page* prev, Page* last) {
|
|
1963
1964
|
|
1964
1965
|
// Clean them up.
|
1965
1966
|
do {
|
1966
|
-
first->
|
1967
|
+
first->InvalidateWatermark(true);
|
1968
|
+
first->SetAllocationWatermark(first->ObjectAreaStart());
|
1969
|
+
first->SetCachedAllocationWatermark(first->ObjectAreaStart());
|
1970
|
+
first->SetRegionMarks(Page::kAllRegionsCleanMarks);
|
1967
1971
|
first = first->next_page();
|
1968
1972
|
} while (first != NULL);
|
1969
1973
|
|
@@ -2003,6 +2007,7 @@ void PagedSpace::PrepareForMarkCompact(bool will_compact) {
|
|
2003
2007
|
// Current allocation top points to a page which is now in the middle
|
2004
2008
|
// of page list. We should move allocation top forward to the new last
|
2005
2009
|
// used page so various object iterators will continue to work properly.
|
2010
|
+
last_in_use->SetAllocationWatermark(last_in_use->AllocationTop());
|
2006
2011
|
|
2007
2012
|
int size_in_bytes = static_cast<int>(PageAllocationLimit(last_in_use) -
|
2008
2013
|
last_in_use->AllocationTop());
|
@@ -2035,6 +2040,7 @@ void PagedSpace::PrepareForMarkCompact(bool will_compact) {
|
|
2035
2040
|
int size_in_bytes = static_cast<int>(PageAllocationLimit(p) -
|
2036
2041
|
p->ObjectAreaStart());
|
2037
2042
|
|
2043
|
+
p->SetAllocationWatermark(p->ObjectAreaStart());
|
2038
2044
|
Heap::CreateFillerObjectAt(p->ObjectAreaStart(), size_in_bytes);
|
2039
2045
|
}
|
2040
2046
|
}
|
@@ -2066,6 +2072,7 @@ bool PagedSpace::ReserveSpace(int bytes) {
|
|
2066
2072
|
if (!reserved_page->is_valid()) return false;
|
2067
2073
|
}
|
2068
2074
|
ASSERT(TopPageOf(allocation_info_)->next_page()->is_valid());
|
2075
|
+
TopPageOf(allocation_info_)->next_page()->InvalidateWatermark(true);
|
2069
2076
|
SetAllocationInfo(&allocation_info_,
|
2070
2077
|
TopPageOf(allocation_info_)->next_page());
|
2071
2078
|
return true;
|
@@ -2100,7 +2107,20 @@ HeapObject* OldSpace::SlowAllocateRaw(int size_in_bytes) {
|
|
2100
2107
|
accounting_stats_.WasteBytes(wasted_bytes);
|
2101
2108
|
if (!result->IsFailure()) {
|
2102
2109
|
accounting_stats_.AllocateBytes(size_in_bytes);
|
2103
|
-
|
2110
|
+
|
2111
|
+
HeapObject* obj = HeapObject::cast(result);
|
2112
|
+
Page* p = Page::FromAddress(obj->address());
|
2113
|
+
|
2114
|
+
if (obj->address() >= p->AllocationWatermark()) {
|
2115
|
+
// There should be no hole between the allocation watermark
|
2116
|
+
// and allocated object address.
|
2117
|
+
// Memory above the allocation watermark was not swept and
|
2118
|
+
// might contain garbage pointers to new space.
|
2119
|
+
ASSERT(obj->address() == p->AllocationWatermark());
|
2120
|
+
p->SetAllocationWatermark(obj->address() + size_in_bytes);
|
2121
|
+
}
|
2122
|
+
|
2123
|
+
return obj;
|
2104
2124
|
}
|
2105
2125
|
}
|
2106
2126
|
|
@@ -2123,6 +2143,7 @@ HeapObject* OldSpace::SlowAllocateRaw(int size_in_bytes) {
|
|
2123
2143
|
|
2124
2144
|
|
2125
2145
|
void OldSpace::PutRestOfCurrentPageOnFreeList(Page* current_page) {
|
2146
|
+
current_page->SetAllocationWatermark(allocation_info_.top);
|
2126
2147
|
int free_size =
|
2127
2148
|
static_cast<int>(current_page->ObjectAreaEnd() - allocation_info_.top);
|
2128
2149
|
if (free_size > 0) {
|
@@ -2133,6 +2154,7 @@ void OldSpace::PutRestOfCurrentPageOnFreeList(Page* current_page) {
|
|
2133
2154
|
|
2134
2155
|
|
2135
2156
|
void FixedSpace::PutRestOfCurrentPageOnFreeList(Page* current_page) {
|
2157
|
+
current_page->SetAllocationWatermark(allocation_info_.top);
|
2136
2158
|
int free_size =
|
2137
2159
|
static_cast<int>(current_page->ObjectAreaEnd() - allocation_info_.top);
|
2138
2160
|
// In the fixed space free list all the free list items have the right size.
|
@@ -2152,8 +2174,10 @@ void FixedSpace::PutRestOfCurrentPageOnFreeList(Page* current_page) {
|
|
2152
2174
|
HeapObject* OldSpace::AllocateInNextPage(Page* current_page,
|
2153
2175
|
int size_in_bytes) {
|
2154
2176
|
ASSERT(current_page->next_page()->is_valid());
|
2177
|
+
Page* next_page = current_page->next_page();
|
2178
|
+
next_page->ClearGCFields();
|
2155
2179
|
PutRestOfCurrentPageOnFreeList(current_page);
|
2156
|
-
SetAllocationInfo(&allocation_info_,
|
2180
|
+
SetAllocationInfo(&allocation_info_, next_page);
|
2157
2181
|
return AllocateLinearly(&allocation_info_, size_in_bytes);
|
2158
2182
|
}
|
2159
2183
|
|
@@ -2283,8 +2307,8 @@ void PagedSpace::CollectCodeStatistics() {
|
|
2283
2307
|
}
|
2284
2308
|
|
2285
2309
|
ASSERT(code->instruction_start() <= prev_pc &&
|
2286
|
-
prev_pc <= code->
|
2287
|
-
delta += static_cast<int>(code->
|
2310
|
+
prev_pc <= code->instruction_end());
|
2311
|
+
delta += static_cast<int>(code->instruction_end() - prev_pc);
|
2288
2312
|
EnterComment("NoComment", delta);
|
2289
2313
|
}
|
2290
2314
|
}
|
@@ -2296,160 +2320,12 @@ void OldSpace::ReportStatistics() {
|
|
2296
2320
|
PrintF(" capacity: %d, waste: %d, available: %d, %%%d\n",
|
2297
2321
|
Capacity(), Waste(), Available(), pct);
|
2298
2322
|
|
2299
|
-
// Report remembered set statistics.
|
2300
|
-
int rset_marked_pointers = 0;
|
2301
|
-
int rset_marked_arrays = 0;
|
2302
|
-
int rset_marked_array_elements = 0;
|
2303
|
-
int cross_gen_pointers = 0;
|
2304
|
-
int cross_gen_array_elements = 0;
|
2305
|
-
|
2306
|
-
PageIterator page_it(this, PageIterator::PAGES_IN_USE);
|
2307
|
-
while (page_it.has_next()) {
|
2308
|
-
Page* p = page_it.next();
|
2309
|
-
|
2310
|
-
for (Address rset_addr = p->RSetStart();
|
2311
|
-
rset_addr < p->RSetEnd();
|
2312
|
-
rset_addr += kIntSize) {
|
2313
|
-
int rset = Memory::int_at(rset_addr);
|
2314
|
-
if (rset != 0) {
|
2315
|
-
// Bits were set
|
2316
|
-
int intoff =
|
2317
|
-
static_cast<int>(rset_addr - p->address() - Page::kRSetOffset);
|
2318
|
-
int bitoff = 0;
|
2319
|
-
for (; bitoff < kBitsPerInt; ++bitoff) {
|
2320
|
-
if ((rset & (1 << bitoff)) != 0) {
|
2321
|
-
int bitpos = intoff*kBitsPerByte + bitoff;
|
2322
|
-
Address slot = p->OffsetToAddress(bitpos << kObjectAlignmentBits);
|
2323
|
-
Object** obj = reinterpret_cast<Object**>(slot);
|
2324
|
-
if (*obj == Heap::raw_unchecked_fixed_array_map()) {
|
2325
|
-
rset_marked_arrays++;
|
2326
|
-
FixedArray* fa = FixedArray::cast(HeapObject::FromAddress(slot));
|
2327
|
-
|
2328
|
-
rset_marked_array_elements += fa->length();
|
2329
|
-
// Manually inline FixedArray::IterateBody
|
2330
|
-
Address elm_start = slot + FixedArray::kHeaderSize;
|
2331
|
-
Address elm_stop = elm_start + fa->length() * kPointerSize;
|
2332
|
-
for (Address elm_addr = elm_start;
|
2333
|
-
elm_addr < elm_stop; elm_addr += kPointerSize) {
|
2334
|
-
// Filter non-heap-object pointers
|
2335
|
-
Object** elm_p = reinterpret_cast<Object**>(elm_addr);
|
2336
|
-
if (Heap::InNewSpace(*elm_p))
|
2337
|
-
cross_gen_array_elements++;
|
2338
|
-
}
|
2339
|
-
} else {
|
2340
|
-
rset_marked_pointers++;
|
2341
|
-
if (Heap::InNewSpace(*obj))
|
2342
|
-
cross_gen_pointers++;
|
2343
|
-
}
|
2344
|
-
}
|
2345
|
-
}
|
2346
|
-
}
|
2347
|
-
}
|
2348
|
-
}
|
2349
|
-
|
2350
|
-
pct = rset_marked_pointers == 0 ?
|
2351
|
-
0 : cross_gen_pointers * 100 / rset_marked_pointers;
|
2352
|
-
PrintF(" rset-marked pointers %d, to-new-space %d (%%%d)\n",
|
2353
|
-
rset_marked_pointers, cross_gen_pointers, pct);
|
2354
|
-
PrintF(" rset_marked arrays %d, ", rset_marked_arrays);
|
2355
|
-
PrintF(" elements %d, ", rset_marked_array_elements);
|
2356
|
-
pct = rset_marked_array_elements == 0 ? 0
|
2357
|
-
: cross_gen_array_elements * 100 / rset_marked_array_elements;
|
2358
|
-
PrintF(" pointers to new space %d (%%%d)\n", cross_gen_array_elements, pct);
|
2359
|
-
PrintF(" total rset-marked bits %d\n",
|
2360
|
-
(rset_marked_pointers + rset_marked_arrays));
|
2361
|
-
pct = (rset_marked_pointers + rset_marked_array_elements) == 0 ? 0
|
2362
|
-
: (cross_gen_pointers + cross_gen_array_elements) * 100 /
|
2363
|
-
(rset_marked_pointers + rset_marked_array_elements);
|
2364
|
-
PrintF(" total rset pointers %d, true cross generation ones %d (%%%d)\n",
|
2365
|
-
(rset_marked_pointers + rset_marked_array_elements),
|
2366
|
-
(cross_gen_pointers + cross_gen_array_elements),
|
2367
|
-
pct);
|
2368
|
-
|
2369
2323
|
ClearHistograms();
|
2370
2324
|
HeapObjectIterator obj_it(this);
|
2371
2325
|
for (HeapObject* obj = obj_it.next(); obj != NULL; obj = obj_it.next())
|
2372
2326
|
CollectHistogramInfo(obj);
|
2373
2327
|
ReportHistogram(true);
|
2374
2328
|
}
|
2375
|
-
|
2376
|
-
|
2377
|
-
// Dump the range of remembered set words between [start, end) corresponding
|
2378
|
-
// to the pointers starting at object_p. The allocation_top is an object
|
2379
|
-
// pointer which should not be read past. This is important for large object
|
2380
|
-
// pages, where some bits in the remembered set range do not correspond to
|
2381
|
-
// allocated addresses.
|
2382
|
-
static void PrintRSetRange(Address start, Address end, Object** object_p,
|
2383
|
-
Address allocation_top) {
|
2384
|
-
Address rset_address = start;
|
2385
|
-
|
2386
|
-
// If the range starts on on odd numbered word (eg, for large object extra
|
2387
|
-
// remembered set ranges), print some spaces.
|
2388
|
-
if ((reinterpret_cast<uintptr_t>(start) / kIntSize) % 2 == 1) {
|
2389
|
-
PrintF(" ");
|
2390
|
-
}
|
2391
|
-
|
2392
|
-
// Loop over all the words in the range.
|
2393
|
-
while (rset_address < end) {
|
2394
|
-
uint32_t rset_word = Memory::uint32_at(rset_address);
|
2395
|
-
int bit_position = 0;
|
2396
|
-
|
2397
|
-
// Loop over all the bits in the word.
|
2398
|
-
while (bit_position < kBitsPerInt) {
|
2399
|
-
if (object_p == reinterpret_cast<Object**>(allocation_top)) {
|
2400
|
-
// Print a bar at the allocation pointer.
|
2401
|
-
PrintF("|");
|
2402
|
-
} else if (object_p > reinterpret_cast<Object**>(allocation_top)) {
|
2403
|
-
// Do not dereference object_p past the allocation pointer.
|
2404
|
-
PrintF("#");
|
2405
|
-
} else if ((rset_word & (1 << bit_position)) == 0) {
|
2406
|
-
// Print a dot for zero bits.
|
2407
|
-
PrintF(".");
|
2408
|
-
} else if (Heap::InNewSpace(*object_p)) {
|
2409
|
-
// Print an X for one bits for pointers to new space.
|
2410
|
-
PrintF("X");
|
2411
|
-
} else {
|
2412
|
-
// Print a circle for one bits for pointers to old space.
|
2413
|
-
PrintF("o");
|
2414
|
-
}
|
2415
|
-
|
2416
|
-
// Print a space after every 8th bit except the last.
|
2417
|
-
if (bit_position % 8 == 7 && bit_position != (kBitsPerInt - 1)) {
|
2418
|
-
PrintF(" ");
|
2419
|
-
}
|
2420
|
-
|
2421
|
-
// Advance to next bit.
|
2422
|
-
bit_position++;
|
2423
|
-
object_p++;
|
2424
|
-
}
|
2425
|
-
|
2426
|
-
// Print a newline after every odd numbered word, otherwise a space.
|
2427
|
-
if ((reinterpret_cast<uintptr_t>(rset_address) / kIntSize) % 2 == 1) {
|
2428
|
-
PrintF("\n");
|
2429
|
-
} else {
|
2430
|
-
PrintF(" ");
|
2431
|
-
}
|
2432
|
-
|
2433
|
-
// Advance to next remembered set word.
|
2434
|
-
rset_address += kIntSize;
|
2435
|
-
}
|
2436
|
-
}
|
2437
|
-
|
2438
|
-
|
2439
|
-
void PagedSpace::DoPrintRSet(const char* space_name) {
|
2440
|
-
PageIterator it(this, PageIterator::PAGES_IN_USE);
|
2441
|
-
while (it.has_next()) {
|
2442
|
-
Page* p = it.next();
|
2443
|
-
PrintF("%s page 0x%x:\n", space_name, p);
|
2444
|
-
PrintRSetRange(p->RSetStart(), p->RSetEnd(),
|
2445
|
-
reinterpret_cast<Object**>(p->ObjectAreaStart()),
|
2446
|
-
p->AllocationTop());
|
2447
|
-
PrintF("\n");
|
2448
|
-
}
|
2449
|
-
}
|
2450
|
-
|
2451
|
-
|
2452
|
-
void OldSpace::PrintRSet() { DoPrintRSet("old"); }
|
2453
2329
|
#endif
|
2454
2330
|
|
2455
2331
|
// -----------------------------------------------------------------------------
|
@@ -2499,6 +2375,7 @@ void FixedSpace::MCCommitRelocationInfo() {
|
|
2499
2375
|
if (it.has_next()) {
|
2500
2376
|
accounting_stats_.WasteBytes(
|
2501
2377
|
static_cast<int>(page->ObjectAreaEnd() - page_top));
|
2378
|
+
page->SetAllocationWatermark(page_top);
|
2502
2379
|
}
|
2503
2380
|
}
|
2504
2381
|
|
@@ -2528,7 +2405,19 @@ HeapObject* FixedSpace::SlowAllocateRaw(int size_in_bytes) {
|
|
2528
2405
|
Object* result = free_list_.Allocate();
|
2529
2406
|
if (!result->IsFailure()) {
|
2530
2407
|
accounting_stats_.AllocateBytes(size_in_bytes);
|
2531
|
-
|
2408
|
+
HeapObject* obj = HeapObject::cast(result);
|
2409
|
+
Page* p = Page::FromAddress(obj->address());
|
2410
|
+
|
2411
|
+
if (obj->address() >= p->AllocationWatermark()) {
|
2412
|
+
// There should be no hole between the allocation watermark
|
2413
|
+
// and allocated object address.
|
2414
|
+
// Memory above the allocation watermark was not swept and
|
2415
|
+
// might contain garbage pointers to new space.
|
2416
|
+
ASSERT(obj->address() == p->AllocationWatermark());
|
2417
|
+
p->SetAllocationWatermark(obj->address() + size_in_bytes);
|
2418
|
+
}
|
2419
|
+
|
2420
|
+
return obj;
|
2532
2421
|
}
|
2533
2422
|
}
|
2534
2423
|
|
@@ -2558,8 +2447,11 @@ HeapObject* FixedSpace::AllocateInNextPage(Page* current_page,
|
|
2558
2447
|
ASSERT(current_page->next_page()->is_valid());
|
2559
2448
|
ASSERT(allocation_info_.top == PageAllocationLimit(current_page));
|
2560
2449
|
ASSERT_EQ(object_size_in_bytes_, size_in_bytes);
|
2450
|
+
Page* next_page = current_page->next_page();
|
2451
|
+
next_page->ClearGCFields();
|
2452
|
+
current_page->SetAllocationWatermark(allocation_info_.top);
|
2561
2453
|
accounting_stats_.WasteBytes(page_extra_);
|
2562
|
-
SetAllocationInfo(&allocation_info_,
|
2454
|
+
SetAllocationInfo(&allocation_info_, next_page);
|
2563
2455
|
return AllocateLinearly(&allocation_info_, size_in_bytes);
|
2564
2456
|
}
|
2565
2457
|
|
@@ -2570,51 +2462,12 @@ void FixedSpace::ReportStatistics() {
|
|
2570
2462
|
PrintF(" capacity: %d, waste: %d, available: %d, %%%d\n",
|
2571
2463
|
Capacity(), Waste(), Available(), pct);
|
2572
2464
|
|
2573
|
-
// Report remembered set statistics.
|
2574
|
-
int rset_marked_pointers = 0;
|
2575
|
-
int cross_gen_pointers = 0;
|
2576
|
-
|
2577
|
-
PageIterator page_it(this, PageIterator::PAGES_IN_USE);
|
2578
|
-
while (page_it.has_next()) {
|
2579
|
-
Page* p = page_it.next();
|
2580
|
-
|
2581
|
-
for (Address rset_addr = p->RSetStart();
|
2582
|
-
rset_addr < p->RSetEnd();
|
2583
|
-
rset_addr += kIntSize) {
|
2584
|
-
int rset = Memory::int_at(rset_addr);
|
2585
|
-
if (rset != 0) {
|
2586
|
-
// Bits were set
|
2587
|
-
int intoff =
|
2588
|
-
static_cast<int>(rset_addr - p->address() - Page::kRSetOffset);
|
2589
|
-
int bitoff = 0;
|
2590
|
-
for (; bitoff < kBitsPerInt; ++bitoff) {
|
2591
|
-
if ((rset & (1 << bitoff)) != 0) {
|
2592
|
-
int bitpos = intoff*kBitsPerByte + bitoff;
|
2593
|
-
Address slot = p->OffsetToAddress(bitpos << kObjectAlignmentBits);
|
2594
|
-
Object** obj = reinterpret_cast<Object**>(slot);
|
2595
|
-
rset_marked_pointers++;
|
2596
|
-
if (Heap::InNewSpace(*obj))
|
2597
|
-
cross_gen_pointers++;
|
2598
|
-
}
|
2599
|
-
}
|
2600
|
-
}
|
2601
|
-
}
|
2602
|
-
}
|
2603
|
-
|
2604
|
-
pct = rset_marked_pointers == 0 ?
|
2605
|
-
0 : cross_gen_pointers * 100 / rset_marked_pointers;
|
2606
|
-
PrintF(" rset-marked pointers %d, to-new-space %d (%%%d)\n",
|
2607
|
-
rset_marked_pointers, cross_gen_pointers, pct);
|
2608
|
-
|
2609
2465
|
ClearHistograms();
|
2610
2466
|
HeapObjectIterator obj_it(this);
|
2611
2467
|
for (HeapObject* obj = obj_it.next(); obj != NULL; obj = obj_it.next())
|
2612
2468
|
CollectHistogramInfo(obj);
|
2613
2469
|
ReportHistogram(false);
|
2614
2470
|
}
|
2615
|
-
|
2616
|
-
|
2617
|
-
void FixedSpace::PrintRSet() { DoPrintRSet(name_); }
|
2618
2471
|
#endif
|
2619
2472
|
|
2620
2473
|
|
@@ -2793,8 +2646,7 @@ Object* LargeObjectSpace::AllocateRawInternal(int requested_size,
|
|
2793
2646
|
chunk->set_size(chunk_size);
|
2794
2647
|
first_chunk_ = chunk;
|
2795
2648
|
|
2796
|
-
//
|
2797
|
-
// remembered set.
|
2649
|
+
// Initialize page header.
|
2798
2650
|
Page* page = Page::FromAddress(RoundUp(chunk->address(), Page::kPageSize));
|
2799
2651
|
Address object_address = page->ObjectAreaStart();
|
2800
2652
|
// Clear the low order bit of the second word in the page to flag it as a
|
@@ -2802,13 +2654,7 @@ Object* LargeObjectSpace::AllocateRawInternal(int requested_size,
|
|
2802
2654
|
// low order bit should already be clear.
|
2803
2655
|
ASSERT((chunk_size & 0x1) == 0);
|
2804
2656
|
page->SetIsLargeObjectPage(true);
|
2805
|
-
page->
|
2806
|
-
int extra_bytes = requested_size - object_size;
|
2807
|
-
if (extra_bytes > 0) {
|
2808
|
-
// The extra memory for the remembered set should be cleared.
|
2809
|
-
memset(object_address + object_size, 0, extra_bytes);
|
2810
|
-
}
|
2811
|
-
|
2657
|
+
page->SetRegionMarks(Page::kAllRegionsCleanMarks);
|
2812
2658
|
return HeapObject::FromAddress(object_address);
|
2813
2659
|
}
|
2814
2660
|
|
@@ -2823,8 +2669,7 @@ Object* LargeObjectSpace::AllocateRawCode(int size_in_bytes) {
|
|
2823
2669
|
|
2824
2670
|
Object* LargeObjectSpace::AllocateRawFixedArray(int size_in_bytes) {
|
2825
2671
|
ASSERT(0 < size_in_bytes);
|
2826
|
-
|
2827
|
-
return AllocateRawInternal(size_in_bytes + extra_rset_bytes,
|
2672
|
+
return AllocateRawInternal(size_in_bytes,
|
2828
2673
|
size_in_bytes,
|
2829
2674
|
NOT_EXECUTABLE);
|
2830
2675
|
}
|
@@ -2851,59 +2696,61 @@ Object* LargeObjectSpace::FindObject(Address a) {
|
|
2851
2696
|
return Failure::Exception();
|
2852
2697
|
}
|
2853
2698
|
|
2854
|
-
|
2855
|
-
void LargeObjectSpace::ClearRSet() {
|
2856
|
-
ASSERT(Page::is_rset_in_use());
|
2857
|
-
|
2858
|
-
LargeObjectIterator it(this);
|
2859
|
-
for (HeapObject* object = it.next(); object != NULL; object = it.next()) {
|
2860
|
-
// We only have code, sequential strings, or fixed arrays in large
|
2861
|
-
// object space, and only fixed arrays need remembered set support.
|
2862
|
-
if (object->IsFixedArray()) {
|
2863
|
-
// Clear the normal remembered set region of the page;
|
2864
|
-
Page* page = Page::FromAddress(object->address());
|
2865
|
-
page->ClearRSet();
|
2866
|
-
|
2867
|
-
// Clear the extra remembered set.
|
2868
|
-
int size = object->Size();
|
2869
|
-
int extra_rset_bytes = ExtraRSetBytesFor(size);
|
2870
|
-
memset(object->address() + size, 0, extra_rset_bytes);
|
2871
|
-
}
|
2872
|
-
}
|
2873
|
-
}
|
2874
|
-
|
2875
|
-
|
2876
|
-
void LargeObjectSpace::IterateRSet(ObjectSlotCallback copy_object_func) {
|
2877
|
-
ASSERT(Page::is_rset_in_use());
|
2878
|
-
|
2879
|
-
static void* lo_rset_histogram = StatsTable::CreateHistogram(
|
2880
|
-
"V8.RSetLO",
|
2881
|
-
0,
|
2882
|
-
// Keeping this histogram's buckets the same as the paged space histogram.
|
2883
|
-
Page::kObjectAreaSize / kPointerSize,
|
2884
|
-
30);
|
2885
|
-
|
2699
|
+
void LargeObjectSpace::IterateDirtyRegions(ObjectSlotCallback copy_object) {
|
2886
2700
|
LargeObjectIterator it(this);
|
2887
2701
|
for (HeapObject* object = it.next(); object != NULL; object = it.next()) {
|
2888
2702
|
// We only have code, sequential strings, or fixed arrays in large
|
2889
2703
|
// object space, and only fixed arrays can possibly contain pointers to
|
2890
2704
|
// the young generation.
|
2891
2705
|
if (object->IsFixedArray()) {
|
2892
|
-
// Iterate the normal page remembered set range.
|
2893
2706
|
Page* page = Page::FromAddress(object->address());
|
2894
|
-
|
2895
|
-
|
2896
|
-
|
2897
|
-
|
2898
|
-
|
2899
|
-
|
2900
|
-
|
2901
|
-
|
2902
|
-
|
2903
|
-
|
2904
|
-
|
2905
|
-
|
2906
|
-
|
2707
|
+
uint32_t marks = page->GetRegionMarks();
|
2708
|
+
uint32_t newmarks = Page::kAllRegionsCleanMarks;
|
2709
|
+
|
2710
|
+
if (marks != Page::kAllRegionsCleanMarks) {
|
2711
|
+
// For a large page a single dirty mark corresponds to several
|
2712
|
+
// regions (modulo 32). So we treat a large page as a sequence of
|
2713
|
+
// normal pages of size Page::kPageSize having same dirty marks
|
2714
|
+
// and subsequently iterate dirty regions on each of these pages.
|
2715
|
+
Address start = object->address();
|
2716
|
+
Address end = page->ObjectAreaEnd();
|
2717
|
+
Address object_end = start + object->Size();
|
2718
|
+
|
2719
|
+
// Iterate regions of the first normal page covering object.
|
2720
|
+
uint32_t first_region_number = page->GetRegionNumberForAddress(start);
|
2721
|
+
newmarks |=
|
2722
|
+
Heap::IterateDirtyRegions(marks >> first_region_number,
|
2723
|
+
start,
|
2724
|
+
end,
|
2725
|
+
&Heap::IteratePointersInDirtyRegion,
|
2726
|
+
copy_object) << first_region_number;
|
2727
|
+
|
2728
|
+
start = end;
|
2729
|
+
end = start + Page::kPageSize;
|
2730
|
+
while (end <= object_end) {
|
2731
|
+
// Iterate next 32 regions.
|
2732
|
+
newmarks |=
|
2733
|
+
Heap::IterateDirtyRegions(marks,
|
2734
|
+
start,
|
2735
|
+
end,
|
2736
|
+
&Heap::IteratePointersInDirtyRegion,
|
2737
|
+
copy_object);
|
2738
|
+
start = end;
|
2739
|
+
end = start + Page::kPageSize;
|
2740
|
+
}
|
2741
|
+
|
2742
|
+
if (start != object_end) {
|
2743
|
+
// Iterate the last piece of an object which is less than
|
2744
|
+
// Page::kPageSize.
|
2745
|
+
newmarks |=
|
2746
|
+
Heap::IterateDirtyRegions(marks,
|
2747
|
+
start,
|
2748
|
+
object_end,
|
2749
|
+
&Heap::IteratePointersInDirtyRegion,
|
2750
|
+
copy_object);
|
2751
|
+
}
|
2752
|
+
|
2753
|
+
page->SetRegionMarks(newmarks);
|
2907
2754
|
}
|
2908
2755
|
}
|
2909
2756
|
}
|
@@ -2995,7 +2842,7 @@ void LargeObjectSpace::Verify() {
|
|
2995
2842
|
} else if (object->IsFixedArray()) {
|
2996
2843
|
// We loop over fixed arrays ourselves, rather then using the visitor,
|
2997
2844
|
// because the visitor doesn't support the start/offset iteration
|
2998
|
-
// needed for
|
2845
|
+
// needed for IsRegionDirty.
|
2999
2846
|
FixedArray* array = FixedArray::cast(object);
|
3000
2847
|
for (int j = 0; j < array->length(); j++) {
|
3001
2848
|
Object* element = array->get(j);
|
@@ -3004,8 +2851,11 @@ void LargeObjectSpace::Verify() {
|
|
3004
2851
|
ASSERT(Heap::Contains(element_object));
|
3005
2852
|
ASSERT(element_object->map()->IsMap());
|
3006
2853
|
if (Heap::InNewSpace(element_object)) {
|
3007
|
-
|
3008
|
-
|
2854
|
+
Address array_addr = object->address();
|
2855
|
+
Address element_addr = array_addr + FixedArray::kHeaderSize +
|
2856
|
+
j * kPointerSize;
|
2857
|
+
|
2858
|
+
ASSERT(Page::FromAddress(array_addr)->IsRegionDirty(element_addr));
|
3009
2859
|
}
|
3010
2860
|
}
|
3011
2861
|
}
|
@@ -3046,33 +2896,6 @@ void LargeObjectSpace::CollectCodeStatistics() {
|
|
3046
2896
|
}
|
3047
2897
|
}
|
3048
2898
|
}
|
3049
|
-
|
3050
|
-
|
3051
|
-
void LargeObjectSpace::PrintRSet() {
|
3052
|
-
LargeObjectIterator it(this);
|
3053
|
-
for (HeapObject* object = it.next(); object != NULL; object = it.next()) {
|
3054
|
-
if (object->IsFixedArray()) {
|
3055
|
-
Page* page = Page::FromAddress(object->address());
|
3056
|
-
|
3057
|
-
Address allocation_top = object->address() + object->Size();
|
3058
|
-
PrintF("large page 0x%x:\n", page);
|
3059
|
-
PrintRSetRange(page->RSetStart(), page->RSetEnd(),
|
3060
|
-
reinterpret_cast<Object**>(object->address()),
|
3061
|
-
allocation_top);
|
3062
|
-
int extra_array_bytes = object->Size() - Page::kObjectAreaSize;
|
3063
|
-
int extra_rset_bits = RoundUp(extra_array_bytes / kPointerSize,
|
3064
|
-
kBitsPerInt);
|
3065
|
-
PrintF("------------------------------------------------------------"
|
3066
|
-
"-----------\n");
|
3067
|
-
PrintRSetRange(allocation_top,
|
3068
|
-
allocation_top + extra_rset_bits / kBitsPerByte,
|
3069
|
-
reinterpret_cast<Object**>(object->address()
|
3070
|
-
+ Page::kObjectAreaSize),
|
3071
|
-
allocation_top);
|
3072
|
-
PrintF("\n");
|
3073
|
-
}
|
3074
|
-
}
|
3075
|
-
}
|
3076
2899
|
#endif // DEBUG
|
3077
2900
|
|
3078
2901
|
} } // namespace v8::internal
|