mustang 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.rspec +1 -0
- data/Isolate +9 -0
- data/README.md +6 -12
- data/Rakefile +30 -4
- data/TODO.md +9 -0
- data/ext/v8/extconf.rb +56 -0
- data/ext/v8/v8.cpp +37 -0
- data/ext/v8/v8_array.cpp +161 -0
- data/ext/v8/v8_array.h +17 -0
- data/ext/v8/v8_base.cpp +147 -0
- data/ext/v8/v8_base.h +23 -0
- data/ext/v8/v8_cast.cpp +151 -0
- data/ext/v8/v8_cast.h +64 -0
- data/ext/v8/v8_context.cpp +174 -0
- data/ext/v8/v8_context.h +12 -0
- data/ext/v8/v8_date.cpp +61 -0
- data/ext/v8/v8_date.h +16 -0
- data/ext/v8/v8_errors.cpp +147 -0
- data/ext/v8/v8_errors.h +19 -0
- data/ext/v8/v8_external.cpp +66 -0
- data/ext/v8/v8_external.h +16 -0
- data/ext/v8/v8_function.cpp +182 -0
- data/ext/v8/v8_function.h +14 -0
- data/ext/v8/v8_integer.cpp +70 -0
- data/ext/v8/v8_integer.h +16 -0
- data/ext/v8/v8_macros.h +30 -0
- data/ext/v8/v8_main.cpp +53 -0
- data/ext/v8/v8_main.h +13 -0
- data/ext/v8/v8_number.cpp +62 -0
- data/ext/v8/v8_number.h +16 -0
- data/ext/v8/v8_object.cpp +172 -0
- data/ext/v8/v8_object.h +17 -0
- data/ext/v8/v8_ref.cpp +72 -0
- data/ext/v8/v8_ref.h +43 -0
- data/ext/v8/v8_regexp.cpp +148 -0
- data/ext/v8/v8_regexp.h +16 -0
- data/ext/v8/v8_string.cpp +78 -0
- data/ext/v8/v8_string.h +16 -0
- data/ext/v8/v8_value.cpp +370 -0
- data/ext/v8/v8_value.h +19 -0
- data/gemspec.yml +2 -1
- data/lib/core_ext/class.rb +14 -0
- data/lib/core_ext/object.rb +12 -0
- data/lib/core_ext/symbol.rb +23 -0
- data/lib/mustang.rb +44 -0
- data/lib/mustang/context.rb +69 -0
- data/lib/mustang/errors.rb +36 -0
- data/lib/support/delegated.rb +25 -0
- data/lib/v8/array.rb +21 -0
- data/lib/v8/context.rb +13 -0
- data/lib/v8/date.rb +20 -0
- data/lib/v8/error.rb +15 -0
- data/lib/v8/external.rb +16 -0
- data/lib/v8/function.rb +11 -0
- data/lib/v8/integer.rb +16 -0
- data/lib/v8/number.rb +16 -0
- data/lib/v8/object.rb +66 -0
- data/lib/v8/regexp.rb +23 -0
- data/lib/v8/string.rb +27 -0
- data/mustang.gemspec +3 -0
- data/spec/core_ext/class_spec.rb +19 -0
- data/spec/core_ext/object_spec.rb +19 -0
- data/spec/core_ext/symbol_spec.rb +27 -0
- data/spec/fixtures/test1.js +2 -0
- data/spec/fixtures/test2.js +2 -0
- data/spec/spec_helper.rb +20 -0
- data/spec/v8/array_spec.rb +88 -0
- data/spec/v8/cast_spec.rb +151 -0
- data/spec/v8/context_spec.rb +78 -0
- data/spec/v8/data_spec.rb +39 -0
- data/spec/v8/date_spec.rb +45 -0
- data/spec/v8/empty_spec.rb +27 -0
- data/spec/v8/errors_spec.rb +142 -0
- data/spec/v8/external_spec.rb +44 -0
- data/spec/v8/function_spec.rb +170 -0
- data/spec/v8/integer_spec.rb +41 -0
- data/spec/v8/main_spec.rb +18 -0
- data/spec/v8/null_spec.rb +27 -0
- data/spec/v8/number_spec.rb +40 -0
- data/spec/v8/object_spec.rb +79 -0
- data/spec/v8/primitive_spec.rb +9 -0
- data/spec/v8/regexp_spec.rb +65 -0
- data/spec/v8/string_spec.rb +48 -0
- data/spec/v8/undefined_spec.rb +27 -0
- data/spec/v8/value_spec.rb +215 -0
- data/vendor/v8/.gitignore +2 -0
- data/vendor/v8/AUTHORS +3 -1
- data/vendor/v8/ChangeLog +117 -0
- data/vendor/v8/SConstruct +334 -53
- data/vendor/v8/include/v8-debug.h +21 -11
- data/vendor/v8/include/v8-preparser.h +1 -1
- data/vendor/v8/include/v8-profiler.h +122 -43
- data/vendor/v8/include/v8-testing.h +5 -0
- data/vendor/v8/include/v8.h +171 -17
- data/vendor/v8/preparser/SConscript +38 -0
- data/vendor/v8/preparser/preparser-process.cc +77 -114
- data/vendor/v8/samples/shell.cc +232 -46
- data/vendor/v8/src/SConscript +29 -5
- data/vendor/v8/src/accessors.cc +70 -211
- data/vendor/v8/{test/cctest/test-mips.cc → src/allocation-inl.h} +15 -18
- data/vendor/v8/src/allocation.cc +0 -82
- data/vendor/v8/src/allocation.h +9 -42
- data/vendor/v8/src/api.cc +1645 -1156
- data/vendor/v8/src/api.h +76 -12
- data/vendor/v8/src/apiutils.h +0 -7
- data/vendor/v8/src/arguments.h +15 -4
- data/vendor/v8/src/arm/assembler-arm-inl.h +10 -9
- data/vendor/v8/src/arm/assembler-arm.cc +62 -23
- data/vendor/v8/src/arm/assembler-arm.h +76 -11
- data/vendor/v8/src/arm/builtins-arm.cc +39 -33
- data/vendor/v8/src/arm/code-stubs-arm.cc +1182 -402
- data/vendor/v8/src/arm/code-stubs-arm.h +20 -54
- data/vendor/v8/src/arm/codegen-arm.cc +159 -106
- data/vendor/v8/src/arm/codegen-arm.h +6 -6
- data/vendor/v8/src/arm/constants-arm.h +16 -1
- data/vendor/v8/src/arm/cpu-arm.cc +7 -5
- data/vendor/v8/src/arm/debug-arm.cc +6 -4
- data/vendor/v8/src/arm/deoptimizer-arm.cc +51 -14
- data/vendor/v8/src/arm/disasm-arm.cc +47 -15
- data/vendor/v8/src/arm/frames-arm.h +1 -1
- data/vendor/v8/src/arm/full-codegen-arm.cc +724 -408
- data/vendor/v8/src/arm/ic-arm.cc +90 -85
- data/vendor/v8/src/arm/lithium-arm.cc +140 -69
- data/vendor/v8/src/arm/lithium-arm.h +161 -46
- data/vendor/v8/src/arm/lithium-codegen-arm.cc +567 -297
- data/vendor/v8/src/arm/lithium-codegen-arm.h +21 -9
- data/vendor/v8/src/arm/lithium-gap-resolver-arm.cc +2 -0
- data/vendor/v8/src/arm/macro-assembler-arm.cc +457 -96
- data/vendor/v8/src/arm/macro-assembler-arm.h +115 -18
- data/vendor/v8/src/arm/regexp-macro-assembler-arm.cc +20 -13
- data/vendor/v8/src/arm/regexp-macro-assembler-arm.h +1 -0
- data/vendor/v8/src/arm/simulator-arm.cc +184 -101
- data/vendor/v8/src/arm/simulator-arm.h +26 -21
- data/vendor/v8/src/arm/stub-cache-arm.cc +450 -467
- data/vendor/v8/src/arm/virtual-frame-arm.cc +14 -12
- data/vendor/v8/src/arm/virtual-frame-arm.h +11 -8
- data/vendor/v8/src/array.js +35 -18
- data/vendor/v8/src/assembler.cc +186 -92
- data/vendor/v8/src/assembler.h +106 -69
- data/vendor/v8/src/ast-inl.h +5 -0
- data/vendor/v8/src/ast.cc +46 -35
- data/vendor/v8/src/ast.h +107 -50
- data/vendor/v8/src/atomicops.h +2 -0
- data/vendor/v8/src/atomicops_internals_mips_gcc.h +169 -0
- data/vendor/v8/src/bootstrapper.cc +649 -399
- data/vendor/v8/src/bootstrapper.h +94 -27
- data/vendor/v8/src/builtins.cc +359 -227
- data/vendor/v8/src/builtins.h +157 -123
- data/vendor/v8/src/checks.cc +2 -2
- data/vendor/v8/src/checks.h +4 -0
- data/vendor/v8/src/code-stubs.cc +27 -17
- data/vendor/v8/src/code-stubs.h +38 -17
- data/vendor/v8/src/codegen-inl.h +5 -1
- data/vendor/v8/src/codegen.cc +27 -17
- data/vendor/v8/src/codegen.h +9 -9
- data/vendor/v8/src/compilation-cache.cc +92 -206
- data/vendor/v8/src/compilation-cache.h +205 -30
- data/vendor/v8/src/compiler.cc +107 -120
- data/vendor/v8/src/compiler.h +17 -2
- data/vendor/v8/src/contexts.cc +22 -15
- data/vendor/v8/src/contexts.h +14 -8
- data/vendor/v8/src/conversions.cc +86 -30
- data/vendor/v8/src/counters.cc +19 -4
- data/vendor/v8/src/counters.h +28 -16
- data/vendor/v8/src/cpu-profiler-inl.h +4 -3
- data/vendor/v8/src/cpu-profiler.cc +123 -72
- data/vendor/v8/src/cpu-profiler.h +33 -19
- data/vendor/v8/src/cpu.h +2 -0
- data/vendor/v8/src/d8-debug.cc +3 -3
- data/vendor/v8/src/d8-debug.h +7 -6
- data/vendor/v8/src/d8-posix.cc +2 -0
- data/vendor/v8/src/d8.cc +22 -12
- data/vendor/v8/src/d8.gyp +3 -0
- data/vendor/v8/src/d8.js +618 -0
- data/vendor/v8/src/data-flow.h +3 -3
- data/vendor/v8/src/dateparser.h +4 -2
- data/vendor/v8/src/debug-agent.cc +10 -9
- data/vendor/v8/src/debug-agent.h +9 -11
- data/vendor/v8/src/debug-debugger.js +121 -0
- data/vendor/v8/src/debug.cc +331 -227
- data/vendor/v8/src/debug.h +248 -219
- data/vendor/v8/src/deoptimizer.cc +173 -62
- data/vendor/v8/src/deoptimizer.h +119 -19
- data/vendor/v8/src/disasm.h +3 -0
- data/vendor/v8/src/disassembler.cc +10 -9
- data/vendor/v8/src/execution.cc +185 -129
- data/vendor/v8/src/execution.h +47 -78
- data/vendor/v8/src/extensions/experimental/break-iterator.cc +250 -0
- data/vendor/v8/src/extensions/experimental/break-iterator.h +89 -0
- data/vendor/v8/src/extensions/experimental/experimental.gyp +2 -0
- data/vendor/v8/src/extensions/experimental/i18n-extension.cc +22 -2
- data/vendor/v8/src/extensions/externalize-string-extension.cc +2 -2
- data/vendor/v8/src/extensions/gc-extension.cc +1 -1
- data/vendor/v8/src/factory.cc +261 -154
- data/vendor/v8/src/factory.h +162 -158
- data/vendor/v8/src/flag-definitions.h +17 -11
- data/vendor/v8/src/frame-element.cc +0 -5
- data/vendor/v8/src/frame-element.h +9 -13
- data/vendor/v8/src/frames-inl.h +7 -0
- data/vendor/v8/src/frames.cc +56 -46
- data/vendor/v8/src/frames.h +36 -25
- data/vendor/v8/src/full-codegen.cc +15 -24
- data/vendor/v8/src/full-codegen.h +13 -41
- data/vendor/v8/src/func-name-inferrer.cc +7 -6
- data/vendor/v8/src/func-name-inferrer.h +1 -1
- data/vendor/v8/src/gdb-jit.cc +1 -0
- data/vendor/v8/src/global-handles.cc +118 -56
- data/vendor/v8/src/global-handles.h +98 -40
- data/vendor/v8/src/globals.h +2 -2
- data/vendor/v8/src/handles-inl.h +106 -9
- data/vendor/v8/src/handles.cc +220 -157
- data/vendor/v8/src/handles.h +38 -59
- data/vendor/v8/src/hashmap.h +3 -3
- data/vendor/v8/src/heap-inl.h +141 -25
- data/vendor/v8/src/heap-profiler.cc +117 -63
- data/vendor/v8/src/heap-profiler.h +38 -21
- data/vendor/v8/src/heap.cc +805 -564
- data/vendor/v8/src/heap.h +640 -594
- data/vendor/v8/src/hydrogen-instructions.cc +216 -73
- data/vendor/v8/src/hydrogen-instructions.h +259 -124
- data/vendor/v8/src/hydrogen.cc +996 -1171
- data/vendor/v8/src/hydrogen.h +163 -144
- data/vendor/v8/src/ia32/assembler-ia32-inl.h +12 -11
- data/vendor/v8/src/ia32/assembler-ia32.cc +85 -39
- data/vendor/v8/src/ia32/assembler-ia32.h +82 -16
- data/vendor/v8/src/ia32/builtins-ia32.cc +64 -58
- data/vendor/v8/src/ia32/code-stubs-ia32.cc +248 -324
- data/vendor/v8/src/ia32/code-stubs-ia32.h +3 -44
- data/vendor/v8/src/ia32/codegen-ia32.cc +217 -165
- data/vendor/v8/src/ia32/codegen-ia32.h +3 -0
- data/vendor/v8/src/ia32/cpu-ia32.cc +6 -5
- data/vendor/v8/src/ia32/debug-ia32.cc +8 -5
- data/vendor/v8/src/ia32/deoptimizer-ia32.cc +124 -14
- data/vendor/v8/src/ia32/disasm-ia32.cc +85 -62
- data/vendor/v8/src/ia32/frames-ia32.h +1 -1
- data/vendor/v8/src/ia32/full-codegen-ia32.cc +348 -435
- data/vendor/v8/src/ia32/ic-ia32.cc +91 -91
- data/vendor/v8/src/ia32/lithium-codegen-ia32.cc +500 -255
- data/vendor/v8/src/ia32/lithium-codegen-ia32.h +13 -4
- data/vendor/v8/src/ia32/lithium-gap-resolver-ia32.cc +6 -0
- data/vendor/v8/src/ia32/lithium-ia32.cc +122 -45
- data/vendor/v8/src/ia32/lithium-ia32.h +128 -41
- data/vendor/v8/src/ia32/macro-assembler-ia32.cc +109 -84
- data/vendor/v8/src/ia32/macro-assembler-ia32.h +18 -9
- data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.cc +26 -15
- data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.h +1 -0
- data/vendor/v8/src/ia32/register-allocator-ia32.cc +30 -30
- data/vendor/v8/src/ia32/simulator-ia32.h +4 -4
- data/vendor/v8/src/ia32/stub-cache-ia32.cc +383 -400
- data/vendor/v8/src/ia32/virtual-frame-ia32.cc +36 -13
- data/vendor/v8/src/ia32/virtual-frame-ia32.h +11 -5
- data/vendor/v8/src/ic-inl.h +12 -2
- data/vendor/v8/src/ic.cc +304 -221
- data/vendor/v8/src/ic.h +115 -58
- data/vendor/v8/src/interpreter-irregexp.cc +25 -21
- data/vendor/v8/src/interpreter-irregexp.h +2 -1
- data/vendor/v8/src/isolate.cc +883 -0
- data/vendor/v8/src/isolate.h +1304 -0
- data/vendor/v8/src/json.js +10 -10
- data/vendor/v8/src/jsregexp.cc +111 -80
- data/vendor/v8/src/jsregexp.h +6 -7
- data/vendor/v8/src/jump-target-heavy.cc +5 -8
- data/vendor/v8/src/jump-target-heavy.h +0 -6
- data/vendor/v8/src/jump-target-inl.h +1 -1
- data/vendor/v8/src/jump-target-light.cc +3 -3
- data/vendor/v8/src/lithium-allocator-inl.h +2 -0
- data/vendor/v8/src/lithium-allocator.cc +42 -30
- data/vendor/v8/src/lithium-allocator.h +8 -22
- data/vendor/v8/src/lithium.cc +1 -0
- data/vendor/v8/src/liveedit.cc +141 -99
- data/vendor/v8/src/liveedit.h +7 -2
- data/vendor/v8/src/liveobjectlist-inl.h +90 -0
- data/vendor/v8/src/liveobjectlist.cc +2537 -1
- data/vendor/v8/src/liveobjectlist.h +245 -35
- data/vendor/v8/src/log-utils.cc +122 -35
- data/vendor/v8/src/log-utils.h +33 -36
- data/vendor/v8/src/log.cc +299 -241
- data/vendor/v8/src/log.h +177 -110
- data/vendor/v8/src/mark-compact.cc +612 -470
- data/vendor/v8/src/mark-compact.h +153 -80
- data/vendor/v8/src/messages.cc +16 -14
- data/vendor/v8/src/messages.js +30 -7
- data/vendor/v8/src/mips/assembler-mips-inl.h +155 -35
- data/vendor/v8/src/mips/assembler-mips.cc +1093 -219
- data/vendor/v8/src/mips/assembler-mips.h +552 -153
- data/vendor/v8/src/mips/builtins-mips.cc +43 -100
- data/vendor/v8/src/mips/code-stubs-mips.cc +752 -0
- data/vendor/v8/src/mips/code-stubs-mips.h +511 -0
- data/vendor/v8/src/mips/codegen-mips-inl.h +8 -14
- data/vendor/v8/src/mips/codegen-mips.cc +672 -896
- data/vendor/v8/src/mips/codegen-mips.h +271 -69
- data/vendor/v8/src/mips/constants-mips.cc +44 -20
- data/vendor/v8/src/mips/constants-mips.h +238 -40
- data/vendor/v8/src/mips/cpu-mips.cc +20 -3
- data/vendor/v8/src/mips/debug-mips.cc +35 -7
- data/vendor/v8/src/mips/deoptimizer-mips.cc +91 -0
- data/vendor/v8/src/mips/disasm-mips.cc +329 -93
- data/vendor/v8/src/mips/frames-mips.cc +2 -50
- data/vendor/v8/src/mips/frames-mips.h +24 -9
- data/vendor/v8/src/mips/full-codegen-mips.cc +473 -23
- data/vendor/v8/src/mips/ic-mips.cc +81 -45
- data/vendor/v8/src/mips/jump-target-mips.cc +11 -106
- data/vendor/v8/src/mips/lithium-codegen-mips.h +65 -0
- data/vendor/v8/src/mips/lithium-mips.h +304 -0
- data/vendor/v8/src/mips/macro-assembler-mips.cc +2391 -390
- data/vendor/v8/src/mips/macro-assembler-mips.h +718 -121
- data/vendor/v8/src/mips/regexp-macro-assembler-mips.cc +478 -0
- data/vendor/v8/src/mips/regexp-macro-assembler-mips.h +250 -0
- data/vendor/v8/src/mips/register-allocator-mips-inl.h +0 -3
- data/vendor/v8/src/mips/register-allocator-mips.h +3 -2
- data/vendor/v8/src/mips/simulator-mips.cc +1009 -221
- data/vendor/v8/src/mips/simulator-mips.h +119 -36
- data/vendor/v8/src/mips/stub-cache-mips.cc +331 -148
- data/vendor/v8/src/mips/{fast-codegen-mips.cc → virtual-frame-mips-inl.h} +11 -30
- data/vendor/v8/src/mips/virtual-frame-mips.cc +137 -149
- data/vendor/v8/src/mips/virtual-frame-mips.h +294 -312
- data/vendor/v8/src/mirror-debugger.js +9 -8
- data/vendor/v8/src/mksnapshot.cc +2 -2
- data/vendor/v8/src/objects-debug.cc +16 -16
- data/vendor/v8/src/objects-inl.h +421 -195
- data/vendor/v8/src/objects-printer.cc +7 -7
- data/vendor/v8/src/objects-visiting.cc +1 -1
- data/vendor/v8/src/objects-visiting.h +33 -12
- data/vendor/v8/src/objects.cc +935 -658
- data/vendor/v8/src/objects.h +234 -139
- data/vendor/v8/src/parser.cc +484 -439
- data/vendor/v8/src/parser.h +35 -14
- data/vendor/v8/src/platform-cygwin.cc +173 -107
- data/vendor/v8/src/platform-freebsd.cc +224 -72
- data/vendor/v8/src/platform-linux.cc +234 -95
- data/vendor/v8/src/platform-macos.cc +215 -82
- data/vendor/v8/src/platform-nullos.cc +9 -3
- data/vendor/v8/src/platform-openbsd.cc +22 -7
- data/vendor/v8/src/platform-posix.cc +30 -5
- data/vendor/v8/src/platform-solaris.cc +120 -38
- data/vendor/v8/src/platform-tls-mac.h +62 -0
- data/vendor/v8/src/platform-tls-win32.h +62 -0
- data/vendor/v8/src/platform-tls.h +50 -0
- data/vendor/v8/src/platform-win32.cc +195 -97
- data/vendor/v8/src/platform.h +72 -15
- data/vendor/v8/src/preparse-data.cc +2 -0
- data/vendor/v8/src/preparser-api.cc +8 -2
- data/vendor/v8/src/preparser.cc +1 -1
- data/vendor/v8/src/prettyprinter.cc +43 -52
- data/vendor/v8/src/prettyprinter.h +1 -1
- data/vendor/v8/src/profile-generator-inl.h +0 -28
- data/vendor/v8/src/profile-generator.cc +942 -685
- data/vendor/v8/src/profile-generator.h +210 -176
- data/vendor/v8/src/property.cc +6 -0
- data/vendor/v8/src/property.h +14 -3
- data/vendor/v8/src/regexp-macro-assembler-irregexp.cc +1 -1
- data/vendor/v8/src/regexp-macro-assembler.cc +28 -19
- data/vendor/v8/src/regexp-macro-assembler.h +11 -6
- data/vendor/v8/src/regexp-stack.cc +18 -10
- data/vendor/v8/src/regexp-stack.h +45 -21
- data/vendor/v8/src/regexp.js +3 -3
- data/vendor/v8/src/register-allocator-inl.h +3 -3
- data/vendor/v8/src/register-allocator.cc +1 -7
- data/vendor/v8/src/register-allocator.h +5 -15
- data/vendor/v8/src/rewriter.cc +2 -1
- data/vendor/v8/src/runtime-profiler.cc +158 -128
- data/vendor/v8/src/runtime-profiler.h +131 -15
- data/vendor/v8/src/runtime.cc +2409 -1692
- data/vendor/v8/src/runtime.h +93 -17
- data/vendor/v8/src/safepoint-table.cc +3 -0
- data/vendor/v8/src/safepoint-table.h +9 -3
- data/vendor/v8/src/scanner-base.cc +21 -28
- data/vendor/v8/src/scanner-base.h +22 -11
- data/vendor/v8/src/scanner.cc +3 -5
- data/vendor/v8/src/scanner.h +4 -2
- data/vendor/v8/src/scopeinfo.cc +11 -16
- data/vendor/v8/src/scopeinfo.h +26 -15
- data/vendor/v8/src/scopes.cc +67 -37
- data/vendor/v8/src/scopes.h +26 -12
- data/vendor/v8/src/serialize.cc +193 -154
- data/vendor/v8/src/serialize.h +41 -36
- data/vendor/v8/src/small-pointer-list.h +163 -0
- data/vendor/v8/src/snapshot-common.cc +1 -1
- data/vendor/v8/src/snapshot.h +3 -1
- data/vendor/v8/src/spaces-inl.h +30 -25
- data/vendor/v8/src/spaces.cc +263 -370
- data/vendor/v8/src/spaces.h +178 -166
- data/vendor/v8/src/string-search.cc +4 -3
- data/vendor/v8/src/string-search.h +21 -20
- data/vendor/v8/src/string-stream.cc +32 -24
- data/vendor/v8/src/string.js +7 -7
- data/vendor/v8/src/stub-cache.cc +324 -248
- data/vendor/v8/src/stub-cache.h +181 -155
- data/vendor/v8/src/token.cc +3 -3
- data/vendor/v8/src/token.h +3 -3
- data/vendor/v8/src/top.cc +218 -390
- data/vendor/v8/src/type-info.cc +98 -32
- data/vendor/v8/src/type-info.h +10 -3
- data/vendor/v8/src/unicode.cc +1 -1
- data/vendor/v8/src/unicode.h +1 -1
- data/vendor/v8/src/utils.h +3 -0
- data/vendor/v8/src/v8-counters.cc +18 -11
- data/vendor/v8/src/v8-counters.h +34 -13
- data/vendor/v8/src/v8.cc +66 -121
- data/vendor/v8/src/v8.h +7 -4
- data/vendor/v8/src/v8globals.h +18 -12
- data/vendor/v8/src/{memory.h → v8memory.h} +0 -0
- data/vendor/v8/src/v8natives.js +59 -18
- data/vendor/v8/src/v8threads.cc +127 -114
- data/vendor/v8/src/v8threads.h +42 -35
- data/vendor/v8/src/v8utils.h +2 -39
- data/vendor/v8/src/variables.h +1 -1
- data/vendor/v8/src/version.cc +26 -5
- data/vendor/v8/src/version.h +4 -0
- data/vendor/v8/src/virtual-frame-heavy-inl.h +2 -4
- data/vendor/v8/src/virtual-frame-light-inl.h +5 -4
- data/vendor/v8/src/vm-state-inl.h +21 -17
- data/vendor/v8/src/vm-state.h +7 -5
- data/vendor/v8/src/win32-headers.h +1 -0
- data/vendor/v8/src/x64/assembler-x64-inl.h +12 -11
- data/vendor/v8/src/x64/assembler-x64.cc +80 -40
- data/vendor/v8/src/x64/assembler-x64.h +67 -17
- data/vendor/v8/src/x64/builtins-x64.cc +34 -33
- data/vendor/v8/src/x64/code-stubs-x64.cc +636 -377
- data/vendor/v8/src/x64/code-stubs-x64.h +14 -48
- data/vendor/v8/src/x64/codegen-x64-inl.h +1 -1
- data/vendor/v8/src/x64/codegen-x64.cc +158 -136
- data/vendor/v8/src/x64/codegen-x64.h +4 -1
- data/vendor/v8/src/x64/cpu-x64.cc +7 -5
- data/vendor/v8/src/x64/debug-x64.cc +8 -6
- data/vendor/v8/src/x64/deoptimizer-x64.cc +195 -20
- data/vendor/v8/src/x64/disasm-x64.cc +42 -23
- data/vendor/v8/src/x64/frames-x64.cc +1 -1
- data/vendor/v8/src/x64/frames-x64.h +2 -2
- data/vendor/v8/src/x64/full-codegen-x64.cc +780 -218
- data/vendor/v8/src/x64/ic-x64.cc +77 -79
- data/vendor/v8/src/x64/jump-target-x64.cc +1 -1
- data/vendor/v8/src/x64/lithium-codegen-x64.cc +698 -181
- data/vendor/v8/src/x64/lithium-codegen-x64.h +31 -6
- data/vendor/v8/src/x64/lithium-x64.cc +136 -54
- data/vendor/v8/src/x64/lithium-x64.h +142 -51
- data/vendor/v8/src/x64/macro-assembler-x64.cc +456 -187
- data/vendor/v8/src/x64/macro-assembler-x64.h +166 -34
- data/vendor/v8/src/x64/regexp-macro-assembler-x64.cc +44 -28
- data/vendor/v8/src/x64/regexp-macro-assembler-x64.h +8 -4
- data/vendor/v8/src/x64/register-allocator-x64-inl.h +3 -3
- data/vendor/v8/src/x64/register-allocator-x64.cc +12 -8
- data/vendor/v8/src/x64/simulator-x64.h +5 -5
- data/vendor/v8/src/x64/stub-cache-x64.cc +299 -344
- data/vendor/v8/src/x64/virtual-frame-x64.cc +37 -13
- data/vendor/v8/src/x64/virtual-frame-x64.h +13 -7
- data/vendor/v8/src/zone-inl.h +49 -3
- data/vendor/v8/src/zone.cc +42 -41
- data/vendor/v8/src/zone.h +37 -34
- data/vendor/v8/test/benchmarks/testcfg.py +100 -0
- data/vendor/v8/test/cctest/SConscript +5 -4
- data/vendor/v8/test/cctest/cctest.h +3 -2
- data/vendor/v8/test/cctest/cctest.status +6 -11
- data/vendor/v8/test/cctest/test-accessors.cc +3 -3
- data/vendor/v8/test/cctest/test-alloc.cc +39 -33
- data/vendor/v8/test/cctest/test-api.cc +1092 -205
- data/vendor/v8/test/cctest/test-assembler-arm.cc +39 -25
- data/vendor/v8/test/cctest/test-assembler-ia32.cc +36 -37
- data/vendor/v8/test/cctest/test-assembler-mips.cc +1098 -40
- data/vendor/v8/test/cctest/test-assembler-x64.cc +32 -25
- data/vendor/v8/test/cctest/test-ast.cc +1 -0
- data/vendor/v8/test/cctest/test-circular-queue.cc +8 -5
- data/vendor/v8/test/cctest/test-compiler.cc +24 -24
- data/vendor/v8/test/cctest/test-cpu-profiler.cc +140 -5
- data/vendor/v8/test/cctest/test-dataflow.cc +1 -0
- data/vendor/v8/test/cctest/test-debug.cc +136 -77
- data/vendor/v8/test/cctest/test-decls.cc +1 -1
- data/vendor/v8/test/cctest/test-deoptimization.cc +25 -24
- data/vendor/v8/test/cctest/test-disasm-arm.cc +9 -4
- data/vendor/v8/test/cctest/test-disasm-ia32.cc +10 -8
- data/vendor/v8/test/cctest/test-func-name-inference.cc +10 -4
- data/vendor/v8/test/cctest/test-heap-profiler.cc +226 -164
- data/vendor/v8/test/cctest/test-heap.cc +240 -217
- data/vendor/v8/test/cctest/test-liveedit.cc +1 -0
- data/vendor/v8/test/cctest/test-log-stack-tracer.cc +18 -20
- data/vendor/v8/test/cctest/test-log.cc +114 -108
- data/vendor/v8/test/cctest/test-macro-assembler-x64.cc +247 -177
- data/vendor/v8/test/cctest/test-mark-compact.cc +129 -90
- data/vendor/v8/test/cctest/test-parsing.cc +15 -14
- data/vendor/v8/test/cctest/test-platform-linux.cc +1 -0
- data/vendor/v8/test/cctest/test-platform-tls.cc +66 -0
- data/vendor/v8/test/cctest/test-platform-win32.cc +1 -0
- data/vendor/v8/test/cctest/test-profile-generator.cc +1 -1
- data/vendor/v8/test/cctest/test-regexp.cc +53 -41
- data/vendor/v8/test/cctest/test-reloc-info.cc +18 -11
- data/vendor/v8/test/cctest/test-serialize.cc +44 -43
- data/vendor/v8/test/cctest/test-sockets.cc +8 -3
- data/vendor/v8/test/cctest/test-spaces.cc +47 -29
- data/vendor/v8/test/cctest/test-strings.cc +20 -20
- data/vendor/v8/test/cctest/test-thread-termination.cc +8 -3
- data/vendor/v8/test/cctest/test-threads.cc +5 -3
- data/vendor/v8/test/cctest/test-utils.cc +5 -4
- data/vendor/v8/test/cctest/testcfg.py +7 -3
- data/vendor/v8/test/es5conform/es5conform.status +2 -77
- data/vendor/v8/test/es5conform/testcfg.py +1 -1
- data/vendor/v8/test/message/testcfg.py +1 -1
- data/vendor/v8/test/mjsunit/accessors-on-global-object.js +3 -3
- data/vendor/v8/test/mjsunit/array-concat.js +43 -1
- data/vendor/v8/test/mjsunit/array-join.js +25 -0
- data/vendor/v8/test/mjsunit/bitops-info.js +7 -1
- data/vendor/v8/test/mjsunit/compiler/array-length.js +2 -2
- data/vendor/v8/test/mjsunit/compiler/global-accessors.js +47 -0
- data/vendor/v8/test/mjsunit/compiler/pic.js +1 -1
- data/vendor/v8/test/mjsunit/compiler/regress-loadfield.js +65 -0
- data/vendor/v8/test/mjsunit/math-sqrt.js +5 -1
- data/vendor/v8/test/mjsunit/mjsunit.js +59 -8
- data/vendor/v8/test/mjsunit/mjsunit.status +0 -12
- data/vendor/v8/test/mjsunit/mul-exhaustive.js +129 -11
- data/vendor/v8/test/mjsunit/negate-zero.js +1 -1
- data/vendor/v8/test/mjsunit/object-freeze.js +5 -13
- data/vendor/v8/test/mjsunit/object-prevent-extensions.js +9 -50
- data/vendor/v8/test/mjsunit/object-seal.js +4 -13
- data/vendor/v8/test/mjsunit/override-eval-with-non-function.js +36 -0
- data/vendor/v8/test/mjsunit/regress/regress-1145.js +54 -0
- data/vendor/v8/test/mjsunit/regress/regress-1172-bis.js +37 -0
- data/vendor/v8/test/mjsunit/regress/regress-1181.js +54 -0
- data/vendor/v8/test/mjsunit/regress/regress-1207.js +35 -0
- data/vendor/v8/test/mjsunit/regress/regress-1209.js +34 -0
- data/vendor/v8/test/mjsunit/regress/regress-1210.js +48 -0
- data/vendor/v8/test/mjsunit/regress/regress-1213.js +43 -0
- data/vendor/v8/test/mjsunit/regress/regress-1218.js +29 -0
- data/vendor/v8/test/mjsunit/regress/regress-1229.js +79 -0
- data/vendor/v8/test/mjsunit/regress/regress-1233.js +47 -0
- data/vendor/v8/test/mjsunit/regress/regress-1236.js +34 -0
- data/vendor/v8/test/mjsunit/regress/regress-1237.js +36 -0
- data/vendor/v8/test/mjsunit/regress/regress-1240.js +39 -0
- data/vendor/v8/test/mjsunit/regress/regress-1257.js +58 -0
- data/vendor/v8/test/mjsunit/regress/regress-1278.js +69 -0
- data/vendor/v8/test/mjsunit/regress/regress-create-exception.js +1 -0
- data/vendor/v8/test/mjsunit/regress/regress-lazy-deopt-reloc.js +52 -0
- data/vendor/v8/test/mjsunit/sin-cos.js +15 -10
- data/vendor/v8/test/mjsunit/smi-negative-zero.js +2 -2
- data/vendor/v8/test/mjsunit/str-to-num.js +1 -1
- data/vendor/v8/test/mjsunit/strict-mode.js +435 -0
- data/vendor/v8/test/mjsunit/testcfg.py +23 -6
- data/vendor/v8/test/mozilla/mozilla.status +0 -2
- data/vendor/v8/test/mozilla/testcfg.py +1 -1
- data/vendor/v8/test/preparser/empty.js +28 -0
- data/vendor/v8/test/preparser/functions-only.js +38 -0
- data/vendor/v8/test/preparser/non-alphanum.js +34 -0
- data/vendor/v8/test/preparser/symbols-only.js +49 -0
- data/vendor/v8/test/preparser/testcfg.py +90 -0
- data/vendor/v8/test/sputnik/testcfg.py +1 -1
- data/vendor/v8/test/test262/README +16 -0
- data/vendor/v8/test/test262/harness-adapt.js +80 -0
- data/vendor/v8/test/test262/test262.status +1506 -0
- data/vendor/v8/test/test262/testcfg.py +123 -0
- data/vendor/v8/tools/freebsd-tick-processor +10 -0
- data/vendor/v8/tools/gyp/v8.gyp +8 -33
- data/vendor/v8/tools/linux-tick-processor +5 -3
- data/vendor/v8/tools/test.py +37 -14
- data/vendor/v8/tools/tickprocessor.js +22 -8
- data/vendor/v8/tools/visual_studio/v8_base.vcproj +13 -1
- data/vendor/v8/tools/visual_studio/v8_base_arm.vcproj +5 -1
- data/vendor/v8/tools/visual_studio/v8_base_x64.vcproj +5 -1
- data/vendor/v8/tools/visual_studio/x64.vsprops +1 -0
- metadata +1495 -1341
- data/ext/extconf.rb +0 -22
- data/ext/mustang.cpp +0 -58
- data/vendor/v8/src/top.h +0 -608
@@ -66,6 +66,9 @@ class StringsStorage {
|
|
66
66
|
StringsStorage();
|
67
67
|
~StringsStorage();
|
68
68
|
|
69
|
+
const char* GetCopy(const char* src);
|
70
|
+
const char* GetFormatted(const char* format, ...);
|
71
|
+
const char* GetVFormatted(const char* format, va_list args);
|
69
72
|
const char* GetName(String* name);
|
70
73
|
const char* GetName(int index);
|
71
74
|
inline const char* GetFunctionName(String* name);
|
@@ -76,11 +79,10 @@ class StringsStorage {
|
|
76
79
|
return strcmp(reinterpret_cast<char*>(key1),
|
77
80
|
reinterpret_cast<char*>(key2)) == 0;
|
78
81
|
}
|
82
|
+
const char* AddOrDisposeString(char* str, uint32_t hash);
|
79
83
|
|
80
84
|
// Mapping of strings by String::Hash to const char* strings.
|
81
85
|
HashMap names_;
|
82
|
-
// Mapping from ints to char* strings.
|
83
|
-
List<char*> index_names_;
|
84
86
|
|
85
87
|
DISALLOW_COPY_AND_ASSIGN(StringsStorage);
|
86
88
|
};
|
@@ -112,7 +114,7 @@ class CodeEntry {
|
|
112
114
|
uint32_t GetCallUid() const;
|
113
115
|
bool IsSameAs(CodeEntry* entry) const;
|
114
116
|
|
115
|
-
static const char* kEmptyNamePrefix;
|
117
|
+
static const char* const kEmptyNamePrefix;
|
116
118
|
|
117
119
|
private:
|
118
120
|
Logger::LogEventsAndTags tag_;
|
@@ -236,12 +238,12 @@ class CpuProfile {
|
|
236
238
|
|
237
239
|
class CodeMap {
|
238
240
|
public:
|
239
|
-
CodeMap() :
|
241
|
+
CodeMap() : next_shared_id_(1) { }
|
240
242
|
INLINE(void AddCode(Address addr, CodeEntry* entry, unsigned size));
|
241
243
|
INLINE(void MoveCode(Address from, Address to));
|
242
244
|
INLINE(void DeleteCode(Address addr));
|
243
245
|
CodeEntry* FindEntry(Address addr);
|
244
|
-
int
|
246
|
+
int GetSharedId(Address addr);
|
245
247
|
|
246
248
|
void Print();
|
247
249
|
|
@@ -269,11 +271,11 @@ class CodeMap {
|
|
269
271
|
void Call(const Address& key, const CodeEntryInfo& value);
|
270
272
|
};
|
271
273
|
|
272
|
-
// Fake CodeEntry pointer to distinguish
|
273
|
-
static CodeEntry* const
|
274
|
+
// Fake CodeEntry pointer to distinguish shared function entries.
|
275
|
+
static CodeEntry* const kSharedFunctionCodeEntry;
|
274
276
|
|
275
277
|
CodeTree tree_;
|
276
|
-
int
|
278
|
+
int next_shared_id_;
|
277
279
|
|
278
280
|
DISALLOW_COPY_AND_ASSIGN(CodeMap);
|
279
281
|
};
|
@@ -298,6 +300,8 @@ class CpuProfilesCollection {
|
|
298
300
|
}
|
299
301
|
CpuProfile* GetProfile(int security_token_id, unsigned uid);
|
300
302
|
bool IsLastProfile(const char* title);
|
303
|
+
void RemoveProfile(CpuProfile* profile);
|
304
|
+
bool HasDetachedProfiles() { return detached_profiles_.length() > 0; }
|
301
305
|
|
302
306
|
CodeEntry* NewCodeEntry(Logger::LogEventsAndTags tag,
|
303
307
|
String* name, String* resource_name, int line_number);
|
@@ -320,6 +324,7 @@ class CpuProfilesCollection {
|
|
320
324
|
const char* GetFunctionName(const char* name) {
|
321
325
|
return function_and_resource_names_.GetFunctionName(name);
|
322
326
|
}
|
327
|
+
int GetProfileIndex(unsigned uid);
|
323
328
|
List<CpuProfile*>* GetProfilesList(int security_token_id);
|
324
329
|
int TokenToIndex(int security_token_id);
|
325
330
|
|
@@ -333,6 +338,7 @@ class CpuProfilesCollection {
|
|
333
338
|
// Mapping from profiles' uids to indexes in the second nested list
|
334
339
|
// of profiles_by_token_.
|
335
340
|
HashMap profiles_uids_;
|
341
|
+
List<CpuProfile*> detached_profiles_;
|
336
342
|
|
337
343
|
// Accessed by VM thread and profile generator thread.
|
338
344
|
List<CpuProfile*> current_profiles_;
|
@@ -420,9 +426,9 @@ class ProfileGenerator {
|
|
420
426
|
return sample_rate_calc_.ticks_per_ms();
|
421
427
|
}
|
422
428
|
|
423
|
-
static const char* kAnonymousFunctionName;
|
424
|
-
static const char* kProgramEntryName;
|
425
|
-
static const char* kGarbageCollectorEntryName;
|
429
|
+
static const char* const kAnonymousFunctionName;
|
430
|
+
static const char* const kProgramEntryName;
|
431
|
+
static const char* const kGarbageCollectorEntryName;
|
426
432
|
|
427
433
|
private:
|
428
434
|
INLINE(CodeEntry* EntryForVMState(StateTag tag));
|
@@ -484,8 +490,6 @@ class HeapGraphEdge BASE_EMBEDDED {
|
|
484
490
|
};
|
485
491
|
|
486
492
|
|
487
|
-
class CachedHeapGraphPath;
|
488
|
-
class HeapGraphPath;
|
489
493
|
class HeapSnapshot;
|
490
494
|
|
491
495
|
// HeapEntry instances represent an entity from the heap (or a special
|
@@ -517,7 +521,8 @@ class HeapEntry BASE_EMBEDDED {
|
|
517
521
|
kCode = v8::HeapGraphNode::kCode,
|
518
522
|
kClosure = v8::HeapGraphNode::kClosure,
|
519
523
|
kRegExp = v8::HeapGraphNode::kRegExp,
|
520
|
-
kHeapNumber = v8::HeapGraphNode::kHeapNumber
|
524
|
+
kHeapNumber = v8::HeapGraphNode::kHeapNumber,
|
525
|
+
kNative = v8::HeapGraphNode::kNative
|
521
526
|
};
|
522
527
|
|
523
528
|
HeapEntry() { }
|
@@ -544,7 +549,6 @@ class HeapEntry BASE_EMBEDDED {
|
|
544
549
|
return Vector<HeapGraphEdge>(children_arr(), children_count_); }
|
545
550
|
Vector<HeapGraphEdge*> retainers() {
|
546
551
|
return Vector<HeapGraphEdge*>(retainers_arr(), retainers_count_); }
|
547
|
-
List<HeapGraphPath*>* GetRetainingPaths();
|
548
552
|
HeapEntry* dominator() { return dominator_; }
|
549
553
|
void set_dominator(HeapEntry* entry) { dominator_ = entry; }
|
550
554
|
|
@@ -578,18 +582,12 @@ class HeapEntry BASE_EMBEDDED {
|
|
578
582
|
|
579
583
|
int EntrySize() { return EntriesSize(1, children_count_, retainers_count_); }
|
580
584
|
int RetainedSize(bool exact);
|
581
|
-
List<HeapGraphPath*>* CalculateRetainingPaths();
|
582
585
|
|
583
586
|
void Print(int max_depth, int indent);
|
584
587
|
|
585
588
|
static int EntriesSize(int entries_count,
|
586
589
|
int children_count,
|
587
590
|
int retainers_count);
|
588
|
-
static uint32_t Hash(HeapEntry* entry) {
|
589
|
-
return ComputeIntegerHash(
|
590
|
-
static_cast<uint32_t>(reinterpret_cast<uintptr_t>(entry)));
|
591
|
-
}
|
592
|
-
static bool Match(void* entry1, void* entry2) { return entry1 == entry2; }
|
593
591
|
|
594
592
|
private:
|
595
593
|
HeapGraphEdge* children_arr() {
|
@@ -599,13 +597,11 @@ class HeapEntry BASE_EMBEDDED {
|
|
599
597
|
return reinterpret_cast<HeapGraphEdge**>(children_arr() + children_count_);
|
600
598
|
}
|
601
599
|
void CalculateExactRetainedSize();
|
602
|
-
void FindRetainingPaths(CachedHeapGraphPath* prev_path,
|
603
|
-
List<HeapGraphPath*>* retaining_paths);
|
604
600
|
const char* TypeAsString();
|
605
601
|
|
606
602
|
unsigned painted_: 2;
|
607
|
-
unsigned type_:
|
608
|
-
int children_count_:
|
603
|
+
unsigned type_: 4;
|
604
|
+
int children_count_: 26;
|
609
605
|
int retainers_count_;
|
610
606
|
int self_size_;
|
611
607
|
union {
|
@@ -631,27 +627,7 @@ class HeapEntry BASE_EMBEDDED {
|
|
631
627
|
};
|
632
628
|
|
633
629
|
|
634
|
-
class HeapGraphPath {
|
635
|
-
public:
|
636
|
-
HeapGraphPath()
|
637
|
-
: path_(8) { }
|
638
|
-
explicit HeapGraphPath(const List<HeapGraphEdge*>& path);
|
639
|
-
|
640
|
-
void Add(HeapGraphEdge* edge) { path_.Add(edge); }
|
641
|
-
void Set(int index, HeapGraphEdge* edge) { path_[index] = edge; }
|
642
|
-
const List<HeapGraphEdge*>* path() { return &path_; }
|
643
|
-
|
644
|
-
void Print();
|
645
|
-
|
646
|
-
private:
|
647
|
-
List<HeapGraphEdge*> path_;
|
648
|
-
|
649
|
-
DISALLOW_COPY_AND_ASSIGN(HeapGraphPath);
|
650
|
-
};
|
651
|
-
|
652
|
-
|
653
630
|
class HeapSnapshotsCollection;
|
654
|
-
class HeapSnapshotsDiff;
|
655
631
|
|
656
632
|
// HeapSnapshot represents a single heap snapshot. It is stored in
|
657
633
|
// HeapSnapshotsCollection, which is also a factory for
|
@@ -670,6 +646,7 @@ class HeapSnapshot {
|
|
670
646
|
const char* title,
|
671
647
|
unsigned uid);
|
672
648
|
~HeapSnapshot();
|
649
|
+
void Delete();
|
673
650
|
|
674
651
|
HeapSnapshotsCollection* collection() { return collection_; }
|
675
652
|
Type type() { return type_; }
|
@@ -677,22 +654,22 @@ class HeapSnapshot {
|
|
677
654
|
unsigned uid() { return uid_; }
|
678
655
|
HeapEntry* root() { return root_entry_; }
|
679
656
|
HeapEntry* gc_roots() { return gc_roots_entry_; }
|
657
|
+
HeapEntry* natives_root() { return natives_root_entry_; }
|
680
658
|
List<HeapEntry*>* entries() { return &entries_; }
|
681
659
|
|
682
660
|
void AllocateEntries(
|
683
661
|
int entries_count, int children_count, int retainers_count);
|
684
|
-
HeapEntry* AddEntry(
|
685
|
-
HeapObject* object, int children_count, int retainers_count);
|
686
662
|
HeapEntry* AddEntry(HeapEntry::Type type,
|
687
663
|
const char* name,
|
688
664
|
uint64_t id,
|
689
665
|
int size,
|
690
666
|
int children_count,
|
691
667
|
int retainers_count);
|
668
|
+
HeapEntry* AddRootEntry(int children_count);
|
669
|
+
HeapEntry* AddGcRootsEntry(int children_count, int retainers_count);
|
670
|
+
HeapEntry* AddNativesRootEntry(int children_count, int retainers_count);
|
692
671
|
void ClearPaint();
|
693
|
-
HeapSnapshotsDiff* CompareWith(HeapSnapshot* snapshot);
|
694
672
|
HeapEntry* GetEntryById(uint64_t id);
|
695
|
-
List<HeapGraphPath*>* GetRetainingPaths(HeapEntry* entry);
|
696
673
|
List<HeapEntry*>* GetSortedEntriesList();
|
697
674
|
template<class Visitor>
|
698
675
|
void IterateEntries(Visitor* visitor) { entries_.Iterate(visitor); }
|
@@ -701,15 +678,7 @@ class HeapSnapshot {
|
|
701
678
|
void Print(int max_depth);
|
702
679
|
void PrintEntriesSize();
|
703
680
|
|
704
|
-
static HeapObject* const kInternalRootObject;
|
705
|
-
static HeapObject* const kGcRootsObject;
|
706
|
-
|
707
681
|
private:
|
708
|
-
HeapEntry* AddEntry(HeapObject* object,
|
709
|
-
HeapEntry::Type type,
|
710
|
-
const char* name,
|
711
|
-
int children_count,
|
712
|
-
int retainers_count);
|
713
682
|
HeapEntry* GetNextEntryToInit();
|
714
683
|
|
715
684
|
HeapSnapshotsCollection* collection_;
|
@@ -718,10 +687,10 @@ class HeapSnapshot {
|
|
718
687
|
unsigned uid_;
|
719
688
|
HeapEntry* root_entry_;
|
720
689
|
HeapEntry* gc_roots_entry_;
|
690
|
+
HeapEntry* natives_root_entry_;
|
721
691
|
char* raw_entries_;
|
722
692
|
List<HeapEntry*> entries_;
|
723
693
|
bool entries_sorted_;
|
724
|
-
HashMap retaining_paths_;
|
725
694
|
#ifdef DEBUG
|
726
695
|
int raw_entries_size_;
|
727
696
|
#endif
|
@@ -741,8 +710,11 @@ class HeapObjectsMap {
|
|
741
710
|
uint64_t FindObject(Address addr);
|
742
711
|
void MoveObject(Address from, Address to);
|
743
712
|
|
713
|
+
static uint64_t GenerateId(v8::RetainedObjectInfo* info);
|
714
|
+
|
744
715
|
static const uint64_t kInternalRootObjectId;
|
745
716
|
static const uint64_t kGcRootsObjectId;
|
717
|
+
static const uint64_t kNativesRootObjectId;
|
746
718
|
static const uint64_t kFirstAvailableObjectId;
|
747
719
|
|
748
720
|
private:
|
@@ -775,58 +747,6 @@ class HeapObjectsMap {
|
|
775
747
|
};
|
776
748
|
|
777
749
|
|
778
|
-
class HeapSnapshotsDiff {
|
779
|
-
public:
|
780
|
-
HeapSnapshotsDiff(HeapSnapshot* snapshot1, HeapSnapshot* snapshot2)
|
781
|
-
: snapshot1_(snapshot1),
|
782
|
-
snapshot2_(snapshot2),
|
783
|
-
raw_additions_root_(NULL),
|
784
|
-
raw_deletions_root_(NULL) { }
|
785
|
-
|
786
|
-
~HeapSnapshotsDiff() {
|
787
|
-
DeleteArray(raw_deletions_root_);
|
788
|
-
DeleteArray(raw_additions_root_);
|
789
|
-
}
|
790
|
-
|
791
|
-
void AddAddedEntry(int child_index, int index, HeapEntry* entry) {
|
792
|
-
additions_root()->SetUnidirElementReference(child_index, index, entry);
|
793
|
-
}
|
794
|
-
|
795
|
-
void AddDeletedEntry(int child_index, int index, HeapEntry* entry) {
|
796
|
-
deletions_root()->SetUnidirElementReference(child_index, index, entry);
|
797
|
-
}
|
798
|
-
|
799
|
-
void CreateRoots(int additions_count, int deletions_count);
|
800
|
-
|
801
|
-
HeapEntry* additions_root() {
|
802
|
-
return reinterpret_cast<HeapEntry*>(raw_additions_root_);
|
803
|
-
}
|
804
|
-
HeapEntry* deletions_root() {
|
805
|
-
return reinterpret_cast<HeapEntry*>(raw_deletions_root_);
|
806
|
-
}
|
807
|
-
|
808
|
-
private:
|
809
|
-
HeapSnapshot* snapshot1_;
|
810
|
-
HeapSnapshot* snapshot2_;
|
811
|
-
char* raw_additions_root_;
|
812
|
-
char* raw_deletions_root_;
|
813
|
-
|
814
|
-
DISALLOW_COPY_AND_ASSIGN(HeapSnapshotsDiff);
|
815
|
-
};
|
816
|
-
|
817
|
-
|
818
|
-
class HeapSnapshotsComparator {
|
819
|
-
public:
|
820
|
-
HeapSnapshotsComparator() { }
|
821
|
-
~HeapSnapshotsComparator();
|
822
|
-
HeapSnapshotsDiff* Compare(HeapSnapshot* snapshot1, HeapSnapshot* snapshot2);
|
823
|
-
private:
|
824
|
-
List<HeapSnapshotsDiff*> diffs_;
|
825
|
-
|
826
|
-
DISALLOW_COPY_AND_ASSIGN(HeapSnapshotsComparator);
|
827
|
-
};
|
828
|
-
|
829
|
-
|
830
750
|
class HeapSnapshotsCollection {
|
831
751
|
public:
|
832
752
|
HeapSnapshotsCollection();
|
@@ -839,21 +759,14 @@ class HeapSnapshotsCollection {
|
|
839
759
|
void SnapshotGenerationFinished(HeapSnapshot* snapshot);
|
840
760
|
List<HeapSnapshot*>* snapshots() { return &snapshots_; }
|
841
761
|
HeapSnapshot* GetSnapshot(unsigned uid);
|
762
|
+
void RemoveSnapshot(HeapSnapshot* snapshot);
|
842
763
|
|
843
|
-
|
844
|
-
const char* GetName(int index) { return names_.GetName(index); }
|
845
|
-
const char* GetFunctionName(String* name) {
|
846
|
-
return names_.GetFunctionName(name);
|
847
|
-
}
|
848
|
-
|
764
|
+
StringsStorage* names() { return &names_; }
|
849
765
|
TokenEnumerator* token_enumerator() { return token_enumerator_; }
|
850
766
|
|
851
767
|
uint64_t GetObjectId(Address addr) { return ids_.FindObject(addr); }
|
852
768
|
void ObjectMoveEvent(Address from, Address to) { ids_.MoveObject(from, to); }
|
853
769
|
|
854
|
-
HeapSnapshotsDiff* CompareSnapshots(HeapSnapshot* snapshot1,
|
855
|
-
HeapSnapshot* snapshot2);
|
856
|
-
|
857
770
|
private:
|
858
771
|
INLINE(static bool HeapSnapshotsMatch(void* key1, void* key2)) {
|
859
772
|
return key1 == key2;
|
@@ -867,12 +780,25 @@ class HeapSnapshotsCollection {
|
|
867
780
|
TokenEnumerator* token_enumerator_;
|
868
781
|
// Mapping from HeapObject addresses to objects' uids.
|
869
782
|
HeapObjectsMap ids_;
|
870
|
-
HeapSnapshotsComparator comparator_;
|
871
783
|
|
872
784
|
DISALLOW_COPY_AND_ASSIGN(HeapSnapshotsCollection);
|
873
785
|
};
|
874
786
|
|
875
787
|
|
788
|
+
// A typedef for referencing anything that can be snapshotted living
|
789
|
+
// in any kind of heap memory.
|
790
|
+
typedef void* HeapThing;
|
791
|
+
|
792
|
+
|
793
|
+
// An interface that creates HeapEntries by HeapThings.
|
794
|
+
class HeapEntriesAllocator {
|
795
|
+
public:
|
796
|
+
virtual ~HeapEntriesAllocator() { }
|
797
|
+
virtual HeapEntry* AllocateEntry(
|
798
|
+
HeapThing ptr, int children_count, int retainers_count) = 0;
|
799
|
+
};
|
800
|
+
|
801
|
+
|
876
802
|
// The HeapEntriesMap instance is used to track a mapping between
|
877
803
|
// real heap objects and their representations in heap snapshots.
|
878
804
|
class HeapEntriesMap {
|
@@ -880,13 +806,12 @@ class HeapEntriesMap {
|
|
880
806
|
HeapEntriesMap();
|
881
807
|
~HeapEntriesMap();
|
882
808
|
|
883
|
-
|
884
|
-
|
885
|
-
void
|
809
|
+
void AllocateEntries();
|
810
|
+
HeapEntry* Map(HeapThing thing);
|
811
|
+
void Pair(HeapThing thing, HeapEntriesAllocator* allocator, HeapEntry* entry);
|
812
|
+
void CountReference(HeapThing from, HeapThing to,
|
886
813
|
int* prev_children_count = NULL,
|
887
814
|
int* prev_retainers_count = NULL);
|
888
|
-
template<class Visitor>
|
889
|
-
void UpdateEntries(Visitor* visitor);
|
890
815
|
|
891
816
|
int entries_count() { return entries_count_; }
|
892
817
|
int total_children_count() { return total_children_count_; }
|
@@ -896,18 +821,25 @@ class HeapEntriesMap {
|
|
896
821
|
|
897
822
|
private:
|
898
823
|
struct EntryInfo {
|
899
|
-
|
900
|
-
: entry(entry),
|
824
|
+
EntryInfo(HeapEntry* entry, HeapEntriesAllocator* allocator)
|
825
|
+
: entry(entry),
|
826
|
+
allocator(allocator),
|
827
|
+
children_count(0),
|
828
|
+
retainers_count(0) {
|
829
|
+
}
|
901
830
|
HeapEntry* entry;
|
831
|
+
HeapEntriesAllocator* allocator;
|
902
832
|
int children_count;
|
903
833
|
int retainers_count;
|
904
834
|
};
|
905
835
|
|
906
|
-
static uint32_t Hash(
|
836
|
+
static uint32_t Hash(HeapThing thing) {
|
907
837
|
return ComputeIntegerHash(
|
908
|
-
static_cast<uint32_t>(reinterpret_cast<uintptr_t>(
|
838
|
+
static_cast<uint32_t>(reinterpret_cast<uintptr_t>(thing)));
|
839
|
+
}
|
840
|
+
static bool HeapThingsMatch(HeapThing key1, HeapThing key2) {
|
841
|
+
return key1 == key2;
|
909
842
|
}
|
910
|
-
static bool HeapObjectsMatch(void* key1, void* key2) { return key1 == key2; }
|
911
843
|
|
912
844
|
HashMap entries_;
|
913
845
|
int entries_count_;
|
@@ -934,52 +866,76 @@ class HeapObjectsSet {
|
|
934
866
|
};
|
935
867
|
|
936
868
|
|
937
|
-
|
869
|
+
// An interface used to populate a snapshot with nodes and edges.
|
870
|
+
class SnapshotFillerInterface {
|
938
871
|
public:
|
939
|
-
|
940
|
-
|
941
|
-
|
942
|
-
|
943
|
-
|
944
|
-
|
945
|
-
|
946
|
-
|
947
|
-
Object* child_obj,
|
948
|
-
HeapEntry* child_entry) = 0;
|
949
|
-
virtual void SetNamedReference(HeapGraphEdge::Type type,
|
950
|
-
HeapObject* parent_obj,
|
872
|
+
virtual ~SnapshotFillerInterface() { }
|
873
|
+
virtual HeapEntry* AddEntry(HeapThing ptr,
|
874
|
+
HeapEntriesAllocator* allocator) = 0;
|
875
|
+
virtual HeapEntry* FindEntry(HeapThing ptr) = 0;
|
876
|
+
virtual HeapEntry* FindOrAddEntry(HeapThing ptr,
|
877
|
+
HeapEntriesAllocator* allocator) = 0;
|
878
|
+
virtual void SetIndexedReference(HeapGraphEdge::Type type,
|
879
|
+
HeapThing parent_ptr,
|
951
880
|
HeapEntry* parent_entry,
|
952
|
-
|
953
|
-
|
881
|
+
int index,
|
882
|
+
HeapThing child_ptr,
|
954
883
|
HeapEntry* child_entry) = 0;
|
955
|
-
|
956
|
-
|
884
|
+
virtual void SetIndexedAutoIndexReference(HeapGraphEdge::Type type,
|
885
|
+
HeapThing parent_ptr,
|
886
|
+
HeapEntry* parent_entry,
|
887
|
+
HeapThing child_ptr,
|
888
|
+
HeapEntry* child_entry) = 0;
|
889
|
+
virtual void SetNamedReference(HeapGraphEdge::Type type,
|
890
|
+
HeapThing parent_ptr,
|
891
|
+
HeapEntry* parent_entry,
|
892
|
+
const char* reference_name,
|
893
|
+
HeapThing child_ptr,
|
894
|
+
HeapEntry* child_entry) = 0;
|
895
|
+
virtual void SetNamedAutoIndexReference(HeapGraphEdge::Type type,
|
896
|
+
HeapThing parent_ptr,
|
897
|
+
HeapEntry* parent_entry,
|
898
|
+
HeapThing child_ptr,
|
957
899
|
HeapEntry* child_entry) = 0;
|
958
|
-
|
959
|
-
HeapEntry* child_entry) = 0;
|
960
|
-
};
|
900
|
+
};
|
961
901
|
|
962
|
-
|
963
|
-
|
964
|
-
|
902
|
+
|
903
|
+
class SnapshottingProgressReportingInterface {
|
904
|
+
public:
|
905
|
+
virtual ~SnapshottingProgressReportingInterface() { }
|
906
|
+
virtual void ProgressStep() = 0;
|
907
|
+
virtual bool ProgressReport(bool force) = 0;
|
908
|
+
};
|
909
|
+
|
910
|
+
|
911
|
+
// An implementation of V8 heap graph extractor.
|
912
|
+
class V8HeapExplorer : public HeapEntriesAllocator {
|
913
|
+
public:
|
914
|
+
V8HeapExplorer(HeapSnapshot* snapshot,
|
915
|
+
SnapshottingProgressReportingInterface* progress);
|
916
|
+
virtual ~V8HeapExplorer();
|
917
|
+
virtual HeapEntry* AllocateEntry(
|
918
|
+
HeapThing ptr, int children_count, int retainers_count);
|
919
|
+
void AddRootEntries(SnapshotFillerInterface* filler);
|
920
|
+
int EstimateObjectsCount();
|
921
|
+
bool IterateAndExtractReferences(SnapshotFillerInterface* filler);
|
922
|
+
|
923
|
+
static HeapObject* const kInternalRootObject;
|
965
924
|
|
966
925
|
private:
|
967
|
-
|
968
|
-
|
969
|
-
|
970
|
-
|
971
|
-
|
972
|
-
|
926
|
+
HeapEntry* AddEntry(
|
927
|
+
HeapObject* object, int children_count, int retainers_count);
|
928
|
+
HeapEntry* AddEntry(HeapObject* object,
|
929
|
+
HeapEntry::Type type,
|
930
|
+
const char* name,
|
931
|
+
int children_count,
|
932
|
+
int retainers_count);
|
933
|
+
const char* GetSystemEntryName(HeapObject* object);
|
973
934
|
void ExtractReferences(HeapObject* obj);
|
974
935
|
void ExtractClosureReferences(JSObject* js_obj, HeapEntry* entry);
|
975
936
|
void ExtractPropertyReferences(JSObject* js_obj, HeapEntry* entry);
|
976
937
|
void ExtractElementReferences(JSObject* js_obj, HeapEntry* entry);
|
977
938
|
void ExtractInternalReferences(JSObject* js_obj, HeapEntry* entry);
|
978
|
-
bool FillReferences();
|
979
|
-
void FillReversePostorderIndexes(Vector<HeapEntry*>* entries);
|
980
|
-
bool IterateAndExtractReferences();
|
981
|
-
inline bool ReportProgress(bool force = false);
|
982
|
-
bool SetEntriesDominators();
|
983
939
|
void SetClosureReference(HeapObject* parent_obj,
|
984
940
|
HeapEntry* parent,
|
985
941
|
String* reference_name,
|
@@ -991,11 +947,13 @@ class HeapSnapshotGenerator {
|
|
991
947
|
void SetInternalReference(HeapObject* parent_obj,
|
992
948
|
HeapEntry* parent,
|
993
949
|
const char* reference_name,
|
994
|
-
Object* child
|
950
|
+
Object* child,
|
951
|
+
int field_offset = -1);
|
995
952
|
void SetInternalReference(HeapObject* parent_obj,
|
996
953
|
HeapEntry* parent,
|
997
954
|
int index,
|
998
|
-
Object* child
|
955
|
+
Object* child,
|
956
|
+
int field_offset = -1);
|
999
957
|
void SetHiddenReference(HeapObject* parent_obj,
|
1000
958
|
HeapEntry* parent,
|
1001
959
|
int index,
|
@@ -1003,7 +961,8 @@ class HeapSnapshotGenerator {
|
|
1003
961
|
void SetPropertyReference(HeapObject* parent_obj,
|
1004
962
|
HeapEntry* parent,
|
1005
963
|
String* reference_name,
|
1006
|
-
Object* child
|
964
|
+
Object* child,
|
965
|
+
int field_offset = -1);
|
1007
966
|
void SetPropertyShortcutReference(HeapObject* parent_obj,
|
1008
967
|
HeapEntry* parent,
|
1009
968
|
String* reference_name,
|
@@ -1011,24 +970,99 @@ class HeapSnapshotGenerator {
|
|
1011
970
|
void SetRootShortcutReference(Object* child);
|
1012
971
|
void SetRootGcRootsReference();
|
1013
972
|
void SetGcRootsReference(Object* child);
|
973
|
+
|
974
|
+
HeapEntry* GetEntry(Object* obj);
|
975
|
+
|
976
|
+
HeapSnapshot* snapshot_;
|
977
|
+
HeapSnapshotsCollection* collection_;
|
978
|
+
SnapshottingProgressReportingInterface* progress_;
|
979
|
+
SnapshotFillerInterface* filler_;
|
980
|
+
|
981
|
+
static HeapObject* const kGcRootsObject;
|
982
|
+
|
983
|
+
friend class IndexedReferencesExtractor;
|
984
|
+
friend class RootsReferencesExtractor;
|
985
|
+
|
986
|
+
DISALLOW_COPY_AND_ASSIGN(V8HeapExplorer);
|
987
|
+
};
|
988
|
+
|
989
|
+
|
990
|
+
// An implementation of retained native objects extractor.
|
991
|
+
class NativeObjectsExplorer : public HeapEntriesAllocator {
|
992
|
+
public:
|
993
|
+
NativeObjectsExplorer(HeapSnapshot* snapshot,
|
994
|
+
SnapshottingProgressReportingInterface* progress);
|
995
|
+
virtual ~NativeObjectsExplorer();
|
996
|
+
virtual HeapEntry* AllocateEntry(
|
997
|
+
HeapThing ptr, int children_count, int retainers_count);
|
998
|
+
void AddRootEntries(SnapshotFillerInterface* filler);
|
999
|
+
int EstimateObjectsCount();
|
1000
|
+
bool IterateAndExtractReferences(SnapshotFillerInterface* filler);
|
1001
|
+
|
1002
|
+
private:
|
1003
|
+
void FillRetainedObjects();
|
1004
|
+
List<HeapObject*>* GetListMaybeDisposeInfo(v8::RetainedObjectInfo* info);
|
1005
|
+
void SetNativeRootReference(v8::RetainedObjectInfo* info);
|
1006
|
+
void SetRootNativesRootReference();
|
1007
|
+
void SetWrapperNativeReferences(HeapObject* wrapper,
|
1008
|
+
v8::RetainedObjectInfo* info);
|
1009
|
+
void VisitSubtreeWrapper(Object** p, uint16_t class_id);
|
1010
|
+
|
1011
|
+
static uint32_t InfoHash(v8::RetainedObjectInfo* info) {
|
1012
|
+
return ComputeIntegerHash(static_cast<uint32_t>(info->GetHash()));
|
1013
|
+
}
|
1014
|
+
static bool RetainedInfosMatch(void* key1, void* key2) {
|
1015
|
+
return key1 == key2 ||
|
1016
|
+
(reinterpret_cast<v8::RetainedObjectInfo*>(key1))->IsEquivalent(
|
1017
|
+
reinterpret_cast<v8::RetainedObjectInfo*>(key2));
|
1018
|
+
}
|
1019
|
+
|
1020
|
+
HeapSnapshot* snapshot_;
|
1021
|
+
HeapSnapshotsCollection* collection_;
|
1022
|
+
SnapshottingProgressReportingInterface* progress_;
|
1023
|
+
bool embedder_queried_;
|
1024
|
+
HeapObjectsSet in_groups_;
|
1025
|
+
// RetainedObjectInfo* -> List<HeapObject*>*
|
1026
|
+
HashMap objects_by_info_;
|
1027
|
+
// Used during references extraction.
|
1028
|
+
SnapshotFillerInterface* filler_;
|
1029
|
+
|
1030
|
+
static HeapThing const kNativesRootObject;
|
1031
|
+
|
1032
|
+
friend class GlobalHandlesExtractor;
|
1033
|
+
|
1034
|
+
DISALLOW_COPY_AND_ASSIGN(NativeObjectsExplorer);
|
1035
|
+
};
|
1036
|
+
|
1037
|
+
|
1038
|
+
class HeapSnapshotGenerator : public SnapshottingProgressReportingInterface {
|
1039
|
+
public:
|
1040
|
+
HeapSnapshotGenerator(HeapSnapshot* snapshot,
|
1041
|
+
v8::ActivityControl* control);
|
1042
|
+
bool GenerateSnapshot();
|
1043
|
+
|
1044
|
+
private:
|
1045
|
+
bool ApproximateRetainedSizes();
|
1046
|
+
bool BuildDominatorTree(const Vector<HeapEntry*>& entries,
|
1047
|
+
Vector<HeapEntry*>* dominators);
|
1048
|
+
bool CountEntriesAndReferences();
|
1049
|
+
bool FillReferences();
|
1050
|
+
void FillReversePostorderIndexes(Vector<HeapEntry*>* entries);
|
1051
|
+
void ProgressStep();
|
1052
|
+
bool ProgressReport(bool force = false);
|
1053
|
+
bool SetEntriesDominators();
|
1014
1054
|
void SetProgressTotal(int iterations_count);
|
1015
1055
|
|
1016
1056
|
HeapSnapshot* snapshot_;
|
1017
1057
|
v8::ActivityControl* control_;
|
1018
|
-
|
1019
|
-
|
1058
|
+
V8HeapExplorer v8_heap_explorer_;
|
1059
|
+
NativeObjectsExplorer dom_explorer_;
|
1060
|
+
// Mapping from HeapThing pointers to HeapEntry* pointers.
|
1020
1061
|
HeapEntriesMap entries_;
|
1021
|
-
SnapshotFillerInterface* filler_;
|
1022
|
-
// Used during references extraction to mark heap objects that
|
1023
|
-
// are references via non-hidden properties.
|
1024
|
-
HeapObjectsSet known_references_;
|
1025
1062
|
// Used during snapshot generation.
|
1026
1063
|
int progress_counter_;
|
1027
1064
|
int progress_total_;
|
1028
1065
|
|
1029
|
-
friend class IndexedReferencesExtractor;
|
1030
|
-
friend class RootsReferencesExtractor;
|
1031
|
-
|
1032
1066
|
DISALLOW_COPY_AND_ASSIGN(HeapSnapshotGenerator);
|
1033
1067
|
};
|
1034
1068
|
|