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
@@ -130,7 +130,7 @@ void DeclarationContext::Check(const char* source,
|
|
130
130
|
InitializeIfNeeded();
|
131
131
|
// A retry after a GC may pollute the counts, so perform gc now
|
132
132
|
// to avoid that.
|
133
|
-
|
133
|
+
HEAP->CollectGarbage(v8::internal::NEW_SPACE);
|
134
134
|
HandleScope scope;
|
135
135
|
TryCatch catcher;
|
136
136
|
catcher.SetVerbose(true);
|
@@ -30,20 +30,21 @@
|
|
30
30
|
#include "v8.h"
|
31
31
|
|
32
32
|
#include "api.h"
|
33
|
+
#include "cctest.h"
|
33
34
|
#include "compilation-cache.h"
|
34
35
|
#include "debug.h"
|
35
36
|
#include "deoptimizer.h"
|
37
|
+
#include "isolate.h"
|
36
38
|
#include "platform.h"
|
37
39
|
#include "stub-cache.h"
|
38
|
-
#include "cctest.h"
|
39
|
-
|
40
40
|
|
41
|
-
using ::v8::internal::Handle;
|
42
|
-
using ::v8::internal::Object;
|
43
|
-
using ::v8::internal::JSFunction;
|
44
41
|
using ::v8::internal::Deoptimizer;
|
45
42
|
using ::v8::internal::EmbeddedVector;
|
43
|
+
using ::v8::internal::Handle;
|
44
|
+
using ::v8::internal::Isolate;
|
45
|
+
using ::v8::internal::JSFunction;
|
46
46
|
using ::v8::internal::OS;
|
47
|
+
using ::v8::internal::Object;
|
47
48
|
|
48
49
|
// Size of temp buffer for formatting small strings.
|
49
50
|
#define SMALL_STRING_BUFFER_SIZE 80
|
@@ -124,7 +125,7 @@ TEST(DeoptimizeSimple) {
|
|
124
125
|
|
125
126
|
CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
|
126
127
|
CHECK(!GetJSFunction(env->Global(), "f")->IsOptimized());
|
127
|
-
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
|
128
|
+
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
|
128
129
|
|
129
130
|
// Test lazy deoptimization of a simple function. Call the function after the
|
130
131
|
// deoptimization while it is still activated further down the stack.
|
@@ -140,7 +141,7 @@ TEST(DeoptimizeSimple) {
|
|
140
141
|
|
141
142
|
CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
|
142
143
|
CHECK(!GetJSFunction(env->Global(), "f")->IsOptimized());
|
143
|
-
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
|
144
|
+
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
|
144
145
|
}
|
145
146
|
|
146
147
|
|
@@ -164,7 +165,7 @@ TEST(DeoptimizeSimpleWithArguments) {
|
|
164
165
|
|
165
166
|
CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
|
166
167
|
CHECK(!GetJSFunction(env->Global(), "f")->IsOptimized());
|
167
|
-
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
|
168
|
+
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
|
168
169
|
|
169
170
|
// Test lazy deoptimization of a simple function with some arguments. Call the
|
170
171
|
// function after the deoptimization while it is still activated further down
|
@@ -181,7 +182,7 @@ TEST(DeoptimizeSimpleWithArguments) {
|
|
181
182
|
|
182
183
|
CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
|
183
184
|
CHECK(!GetJSFunction(env->Global(), "f")->IsOptimized());
|
184
|
-
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
|
185
|
+
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
|
185
186
|
}
|
186
187
|
|
187
188
|
|
@@ -207,7 +208,7 @@ TEST(DeoptimizeSimpleNested) {
|
|
207
208
|
CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
|
208
209
|
CHECK_EQ(6, env->Global()->Get(v8_str("result"))->Int32Value());
|
209
210
|
CHECK(!GetJSFunction(env->Global(), "f")->IsOptimized());
|
210
|
-
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
|
211
|
+
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
|
211
212
|
}
|
212
213
|
}
|
213
214
|
|
@@ -232,7 +233,7 @@ TEST(DeoptimizeRecursive) {
|
|
232
233
|
|
233
234
|
CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
|
234
235
|
CHECK_EQ(11, env->Global()->Get(v8_str("calls"))->Int32Value());
|
235
|
-
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
|
236
|
+
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
|
236
237
|
|
237
238
|
v8::Local<v8::Function> fun =
|
238
239
|
v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f")));
|
@@ -266,7 +267,7 @@ TEST(DeoptimizeMultiple) {
|
|
266
267
|
|
267
268
|
CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
|
268
269
|
CHECK_EQ(14, env->Global()->Get(v8_str("result"))->Int32Value());
|
269
|
-
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
|
270
|
+
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
|
270
271
|
}
|
271
272
|
|
272
273
|
|
@@ -289,7 +290,7 @@ TEST(DeoptimizeConstructor) {
|
|
289
290
|
|
290
291
|
CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
|
291
292
|
CHECK(env->Global()->Get(v8_str("result"))->IsTrue());
|
292
|
-
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
|
293
|
+
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
|
293
294
|
|
294
295
|
{
|
295
296
|
AlwaysOptimizeAllowNativesSyntaxNoInlining options;
|
@@ -306,7 +307,7 @@ TEST(DeoptimizeConstructor) {
|
|
306
307
|
|
307
308
|
CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
|
308
309
|
CHECK_EQ(3, env->Global()->Get(v8_str("result"))->Int32Value());
|
309
|
-
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
|
310
|
+
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
|
310
311
|
}
|
311
312
|
|
312
313
|
|
@@ -337,7 +338,7 @@ TEST(DeoptimizeConstructorMultiple) {
|
|
337
338
|
|
338
339
|
CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
|
339
340
|
CHECK_EQ(14, env->Global()->Get(v8_str("result"))->Int32Value());
|
340
|
-
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
|
341
|
+
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
|
341
342
|
}
|
342
343
|
|
343
344
|
|
@@ -385,7 +386,7 @@ TEST(DeoptimizeBinaryOperationADDString) {
|
|
385
386
|
CHECK(result->IsString());
|
386
387
|
v8::String::AsciiValue ascii(result);
|
387
388
|
CHECK_EQ("a+an X", *ascii);
|
388
|
-
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
|
389
|
+
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
|
389
390
|
}
|
390
391
|
|
391
392
|
|
@@ -444,7 +445,7 @@ TEST(DeoptimizeBinaryOperationADD) {
|
|
444
445
|
|
445
446
|
CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
|
446
447
|
CHECK_EQ(15, env->Global()->Get(v8_str("result"))->Int32Value());
|
447
|
-
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
|
448
|
+
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
|
448
449
|
}
|
449
450
|
|
450
451
|
|
@@ -458,7 +459,7 @@ TEST(DeoptimizeBinaryOperationSUB) {
|
|
458
459
|
|
459
460
|
CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
|
460
461
|
CHECK_EQ(-1, env->Global()->Get(v8_str("result"))->Int32Value());
|
461
|
-
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
|
462
|
+
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
|
462
463
|
}
|
463
464
|
|
464
465
|
|
@@ -472,7 +473,7 @@ TEST(DeoptimizeBinaryOperationMUL) {
|
|
472
473
|
|
473
474
|
CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
|
474
475
|
CHECK_EQ(56, env->Global()->Get(v8_str("result"))->Int32Value());
|
475
|
-
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
|
476
|
+
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
|
476
477
|
}
|
477
478
|
|
478
479
|
|
@@ -486,7 +487,7 @@ TEST(DeoptimizeBinaryOperationDIV) {
|
|
486
487
|
|
487
488
|
CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
|
488
489
|
CHECK_EQ(0, env->Global()->Get(v8_str("result"))->Int32Value());
|
489
|
-
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
|
490
|
+
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
|
490
491
|
}
|
491
492
|
|
492
493
|
|
@@ -500,7 +501,7 @@ TEST(DeoptimizeBinaryOperationMOD) {
|
|
500
501
|
|
501
502
|
CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
|
502
503
|
CHECK_EQ(7, env->Global()->Get(v8_str("result"))->Int32Value());
|
503
|
-
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
|
504
|
+
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
|
504
505
|
}
|
505
506
|
|
506
507
|
|
@@ -545,7 +546,7 @@ TEST(DeoptimizeCompare) {
|
|
545
546
|
CHECK(!GetJSFunction(env->Global(), "f")->IsOptimized());
|
546
547
|
CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
|
547
548
|
CHECK_EQ(true, env->Global()->Get(v8_str("result"))->BooleanValue());
|
548
|
-
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
|
549
|
+
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
|
549
550
|
}
|
550
551
|
|
551
552
|
|
@@ -627,7 +628,7 @@ TEST(DeoptimizeLoadICStoreIC) {
|
|
627
628
|
CHECK(!GetJSFunction(env->Global(), "g2")->IsOptimized());
|
628
629
|
CHECK_EQ(4, env->Global()->Get(v8_str("count"))->Int32Value());
|
629
630
|
CHECK_EQ(13, env->Global()->Get(v8_str("result"))->Int32Value());
|
630
|
-
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
|
631
|
+
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
|
631
632
|
}
|
632
633
|
|
633
634
|
|
@@ -710,5 +711,5 @@ TEST(DeoptimizeLoadICStoreICNested) {
|
|
710
711
|
CHECK(!GetJSFunction(env->Global(), "g2")->IsOptimized());
|
711
712
|
CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value());
|
712
713
|
CHECK_EQ(13, env->Global()->Get(v8_str("result"))->Int32Value());
|
713
|
-
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount());
|
714
|
+
CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(Isolate::Current()));
|
714
715
|
}
|
@@ -72,11 +72,11 @@ bool DisassembleAndCompare(byte* pc, const char* compare_string) {
|
|
72
72
|
// Setup V8 to a state where we can at least run the assembler and
|
73
73
|
// disassembler. Declare the variables and allocate the data structures used
|
74
74
|
// in the rest of the macros.
|
75
|
-
#define SETUP()
|
76
|
-
InitializeVM();
|
77
|
-
v8::HandleScope scope;
|
75
|
+
#define SETUP() \
|
76
|
+
InitializeVM(); \
|
77
|
+
v8::HandleScope scope; \
|
78
78
|
byte *buffer = reinterpret_cast<byte*>(malloc(4*1024)); \
|
79
|
-
Assembler assm(buffer, 4*1024);
|
79
|
+
Assembler assm(Isolate::Current(), buffer, 4*1024); \
|
80
80
|
bool failure = false;
|
81
81
|
|
82
82
|
|
@@ -440,6 +440,11 @@ TEST(Vfp) {
|
|
440
440
|
COMPARE(vabs(d3, d4, mi),
|
441
441
|
"4eb03bc4 vabsmi d3, d4");
|
442
442
|
|
443
|
+
COMPARE(vneg(d0, d1),
|
444
|
+
"eeb10b41 vneg d0, d1");
|
445
|
+
COMPARE(vneg(d3, d4, mi),
|
446
|
+
"4eb13b44 vnegmi d3, d4");
|
447
|
+
|
443
448
|
COMPARE(vadd(d0, d1, d2),
|
444
449
|
"ee310b02 vadd.f64 d0, d1, d2");
|
445
450
|
COMPARE(vadd(d3, d4, d5, mi),
|
@@ -58,7 +58,7 @@ TEST(DisasmIa320) {
|
|
58
58
|
InitializeVM();
|
59
59
|
v8::HandleScope scope;
|
60
60
|
v8::internal::byte buffer[2048];
|
61
|
-
Assembler assm(buffer, sizeof buffer);
|
61
|
+
Assembler assm(Isolate::Current(), buffer, sizeof buffer);
|
62
62
|
DummyStaticFunction(NULL); // just bloody use it (DELETE; debugging)
|
63
63
|
|
64
64
|
// Short immediate instructions
|
@@ -68,7 +68,7 @@ TEST(DisasmIa320) {
|
|
68
68
|
__ sub(Operand(eax), Immediate(12345678));
|
69
69
|
__ xor_(eax, 12345678);
|
70
70
|
__ and_(eax, 12345678);
|
71
|
-
Handle<FixedArray> foo =
|
71
|
+
Handle<FixedArray> foo = FACTORY->NewFixedArray(10, TENURED);
|
72
72
|
__ cmp(eax, foo);
|
73
73
|
|
74
74
|
// ---- This one caused crash
|
@@ -99,7 +99,7 @@ TEST(DisasmIa320) {
|
|
99
99
|
__ cmp(edx, 3);
|
100
100
|
__ cmp(edx, Operand(esp, 4));
|
101
101
|
__ cmp(Operand(ebp, ecx, times_4, 0), Immediate(1000));
|
102
|
-
Handle<FixedArray> foo2 =
|
102
|
+
Handle<FixedArray> foo2 = FACTORY->NewFixedArray(10, TENURED);
|
103
103
|
__ cmp(ebx, foo2);
|
104
104
|
__ cmpb(ebx, Operand(ebp, ecx, times_2, 0));
|
105
105
|
__ cmpb(Operand(ebp, ecx, times_2, 0), ebx);
|
@@ -272,7 +272,8 @@ TEST(DisasmIa320) {
|
|
272
272
|
__ bind(&L2);
|
273
273
|
__ call(Operand(ebx, ecx, times_4, 10000));
|
274
274
|
__ nop();
|
275
|
-
Handle<Code> ic(
|
275
|
+
Handle<Code> ic(Isolate::Current()->builtins()->builtin(
|
276
|
+
Builtins::kLoadIC_Initialize));
|
276
277
|
__ call(ic, RelocInfo::CODE_TARGET);
|
277
278
|
__ nop();
|
278
279
|
__ call(FUNCTION_ADDR(DummyStaticFunction), RelocInfo::RUNTIME_ENTRY);
|
@@ -282,7 +283,8 @@ TEST(DisasmIa320) {
|
|
282
283
|
__ jmp(Operand(ebx, ecx, times_4, 10000));
|
283
284
|
#ifdef ENABLE_DEBUGGER_SUPPORT
|
284
285
|
ExternalReference after_break_target =
|
285
|
-
ExternalReference(Debug_Address::AfterBreakTarget()
|
286
|
+
ExternalReference(Debug_Address::AfterBreakTarget(),
|
287
|
+
assm.isolate());
|
286
288
|
__ jmp(Operand::StaticVariable(after_break_target));
|
287
289
|
#endif // ENABLE_DEBUGGER_SUPPORT
|
288
290
|
__ jmp(ic, RelocInfo::CODE_TARGET);
|
@@ -332,7 +334,7 @@ TEST(DisasmIa320) {
|
|
332
334
|
__ j(zero, &Ljcc, taken);
|
333
335
|
__ j(zero, &Ljcc, not_taken);
|
334
336
|
|
335
|
-
// __ mov(Operand::StaticVariable(
|
337
|
+
// __ mov(Operand::StaticVariable(Isolate::handler_address()), eax);
|
336
338
|
// 0xD9 instructions
|
337
339
|
__ nop();
|
338
340
|
|
@@ -458,10 +460,10 @@ TEST(DisasmIa320) {
|
|
458
460
|
|
459
461
|
CodeDesc desc;
|
460
462
|
assm.GetCode(&desc);
|
461
|
-
Object* code =
|
463
|
+
Object* code = HEAP->CreateCode(
|
462
464
|
desc,
|
463
465
|
Code::ComputeFlags(Code::STUB),
|
464
|
-
Handle<Object>(
|
466
|
+
Handle<Object>(HEAP->undefined_value()))->ToObjectChecked();
|
465
467
|
CHECK(code->IsCode());
|
466
468
|
#ifdef OBJECT_PRINT
|
467
469
|
Code::cast(code)->Print();
|
@@ -36,6 +36,7 @@ using ::v8::internal::CStrVector;
|
|
36
36
|
using ::v8::internal::Factory;
|
37
37
|
using ::v8::internal::Handle;
|
38
38
|
using ::v8::internal::Heap;
|
39
|
+
using ::v8::internal::Isolate;
|
39
40
|
using ::v8::internal::JSFunction;
|
40
41
|
using ::v8::internal::Object;
|
41
42
|
using ::v8::internal::Runtime;
|
@@ -77,15 +78,20 @@ static void CheckFunctionName(v8::Handle<v8::Script> script,
|
|
77
78
|
|
78
79
|
// Find the position of a given func source substring in the source.
|
79
80
|
Handle<String> func_pos_str =
|
80
|
-
|
81
|
-
int func_pos = Runtime::StringMatch(
|
81
|
+
FACTORY->NewStringFromAscii(CStrVector(func_pos_src));
|
82
|
+
int func_pos = Runtime::StringMatch(Isolate::Current(),
|
83
|
+
script_src,
|
84
|
+
func_pos_str,
|
85
|
+
0);
|
82
86
|
CHECK_NE(0, func_pos);
|
83
87
|
|
84
88
|
#ifdef ENABLE_DEBUGGER_SUPPORT
|
85
89
|
// Obtain SharedFunctionInfo for the function.
|
86
90
|
Object* shared_func_info_ptr =
|
87
|
-
Runtime::FindSharedFunctionInfoInScript(
|
88
|
-
|
91
|
+
Runtime::FindSharedFunctionInfoInScript(Isolate::Current(),
|
92
|
+
i_script,
|
93
|
+
func_pos);
|
94
|
+
CHECK(shared_func_info_ptr != HEAP->undefined_value());
|
89
95
|
Handle<SharedFunctionInfo> shared_func_info(
|
90
96
|
SharedFunctionInfo::cast(shared_func_info_ptr));
|
91
97
|
|
@@ -26,7 +26,7 @@ class ConstructorHeapProfileTestHelper : public i::ConstructorHeapProfile {
|
|
26
26
|
public:
|
27
27
|
ConstructorHeapProfileTestHelper()
|
28
28
|
: i::ConstructorHeapProfile(),
|
29
|
-
f_name_(
|
29
|
+
f_name_(FACTORY->NewStringFromAscii(i::CStrVector("F"))),
|
30
30
|
f_count_(0) {
|
31
31
|
}
|
32
32
|
|
@@ -143,25 +143,25 @@ TEST(ClustersCoarserSimple) {
|
|
143
143
|
i::ZoneScope zn_scope(i::DELETE_ON_EXIT);
|
144
144
|
|
145
145
|
JSObjectsRetainerTree tree;
|
146
|
-
JSObjectsCluster function(
|
147
|
-
JSObjectsCluster a(*
|
148
|
-
JSObjectsCluster b(*
|
146
|
+
JSObjectsCluster function(HEAP->function_class_symbol());
|
147
|
+
JSObjectsCluster a(*FACTORY->NewStringFromAscii(i::CStrVector("A")));
|
148
|
+
JSObjectsCluster b(*FACTORY->NewStringFromAscii(i::CStrVector("B")));
|
149
149
|
|
150
150
|
// o1 <- Function
|
151
151
|
JSObjectsCluster o1 =
|
152
|
-
AddHeapObjectToTree(&tree,
|
152
|
+
AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x100, &function);
|
153
153
|
// o2 <- Function
|
154
154
|
JSObjectsCluster o2 =
|
155
|
-
AddHeapObjectToTree(&tree,
|
155
|
+
AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x200, &function);
|
156
156
|
// o3 <- A, B
|
157
157
|
JSObjectsCluster o3 =
|
158
|
-
AddHeapObjectToTree(&tree,
|
158
|
+
AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x300, &a, &b);
|
159
159
|
// o4 <- B, A
|
160
160
|
JSObjectsCluster o4 =
|
161
|
-
AddHeapObjectToTree(&tree,
|
161
|
+
AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x400, &b, &a);
|
162
162
|
// o5 <- A, B, Function
|
163
163
|
JSObjectsCluster o5 =
|
164
|
-
AddHeapObjectToTree(&tree,
|
164
|
+
AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x500,
|
165
165
|
&a, &b, &function);
|
166
166
|
|
167
167
|
ClustersCoarser coarser;
|
@@ -181,20 +181,20 @@ TEST(ClustersCoarserMultipleConstructors) {
|
|
181
181
|
i::ZoneScope zn_scope(i::DELETE_ON_EXIT);
|
182
182
|
|
183
183
|
JSObjectsRetainerTree tree;
|
184
|
-
JSObjectsCluster function(
|
184
|
+
JSObjectsCluster function(HEAP->function_class_symbol());
|
185
185
|
|
186
186
|
// o1 <- Function
|
187
187
|
JSObjectsCluster o1 =
|
188
|
-
AddHeapObjectToTree(&tree,
|
188
|
+
AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x100, &function);
|
189
189
|
// a1 <- Function
|
190
190
|
JSObjectsCluster a1 =
|
191
|
-
AddHeapObjectToTree(&tree,
|
191
|
+
AddHeapObjectToTree(&tree, HEAP->Array_symbol(), 0x1000, &function);
|
192
192
|
// o2 <- Function
|
193
193
|
JSObjectsCluster o2 =
|
194
|
-
AddHeapObjectToTree(&tree,
|
194
|
+
AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x200, &function);
|
195
195
|
// a2 <- Function
|
196
196
|
JSObjectsCluster a2 =
|
197
|
-
AddHeapObjectToTree(&tree,
|
197
|
+
AddHeapObjectToTree(&tree, HEAP->Array_symbol(), 0x2000, &function);
|
198
198
|
|
199
199
|
ClustersCoarser coarser;
|
200
200
|
coarser.Process(&tree);
|
@@ -224,21 +224,21 @@ TEST(ClustersCoarserPathsTraversal) {
|
|
224
224
|
// o21 ~ o22, and o11 ~ o12.
|
225
225
|
|
226
226
|
JSObjectsCluster o =
|
227
|
-
AddHeapObjectToTree(&tree,
|
227
|
+
AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x100);
|
228
228
|
JSObjectsCluster o11 =
|
229
|
-
AddHeapObjectToTree(&tree,
|
229
|
+
AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x110, &o);
|
230
230
|
JSObjectsCluster o12 =
|
231
|
-
AddHeapObjectToTree(&tree,
|
231
|
+
AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x120, &o);
|
232
232
|
JSObjectsCluster o21 =
|
233
|
-
AddHeapObjectToTree(&tree,
|
233
|
+
AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x210, &o11);
|
234
234
|
JSObjectsCluster o22 =
|
235
|
-
AddHeapObjectToTree(&tree,
|
235
|
+
AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x220, &o12);
|
236
236
|
JSObjectsCluster p =
|
237
|
-
AddHeapObjectToTree(&tree,
|
237
|
+
AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x300, &o21);
|
238
238
|
JSObjectsCluster q =
|
239
|
-
AddHeapObjectToTree(&tree,
|
239
|
+
AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x310, &o21, &o22);
|
240
240
|
JSObjectsCluster r =
|
241
|
-
AddHeapObjectToTree(&tree,
|
241
|
+
AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x320, &o22);
|
242
242
|
|
243
243
|
ClustersCoarser coarser;
|
244
244
|
coarser.Process(&tree);
|
@@ -275,19 +275,19 @@ TEST(ClustersCoarserSelf) {
|
|
275
275
|
// we expect that coarser will deduce equivalences: p ~ q ~ r, o1 ~ o2;
|
276
276
|
|
277
277
|
JSObjectsCluster o =
|
278
|
-
AddHeapObjectToTree(&tree,
|
278
|
+
AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x100);
|
279
279
|
JSObjectsCluster o1 =
|
280
|
-
AddHeapObjectToTree(&tree,
|
280
|
+
AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x110, &o);
|
281
281
|
JSObjectsCluster o2 =
|
282
|
-
AddHeapObjectToTree(&tree,
|
282
|
+
AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x120, &o);
|
283
283
|
JSObjectsCluster p =
|
284
|
-
AddHeapObjectToTree(&tree,
|
284
|
+
AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x300, &o1);
|
285
285
|
AddSelfReferenceToTree(&tree, &p);
|
286
286
|
JSObjectsCluster q =
|
287
|
-
AddHeapObjectToTree(&tree,
|
287
|
+
AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x310, &o1, &o2);
|
288
288
|
AddSelfReferenceToTree(&tree, &q);
|
289
289
|
JSObjectsCluster r =
|
290
|
-
AddHeapObjectToTree(&tree,
|
290
|
+
AddHeapObjectToTree(&tree, HEAP->Object_symbol(), 0x320, &o2);
|
291
291
|
AddSelfReferenceToTree(&tree, &r);
|
292
292
|
|
293
293
|
ClustersCoarser coarser;
|
@@ -433,19 +433,6 @@ static const v8::HeapGraphNode* GetProperty(const v8::HeapGraphNode* node,
|
|
433
433
|
}
|
434
434
|
|
435
435
|
|
436
|
-
static bool IsNodeRetainedAs(const v8::HeapGraphNode* node,
|
437
|
-
v8::HeapGraphEdge::Type type,
|
438
|
-
const char* name) {
|
439
|
-
for (int i = 0, count = node->GetRetainersCount(); i < count; ++i) {
|
440
|
-
const v8::HeapGraphEdge* prop = node->GetRetainer(i);
|
441
|
-
v8::String::AsciiValue prop_name(prop->GetName());
|
442
|
-
if (prop->GetType() == type && strcmp(name, *prop_name) == 0)
|
443
|
-
return true;
|
444
|
-
}
|
445
|
-
return false;
|
446
|
-
}
|
447
|
-
|
448
|
-
|
449
436
|
static bool HasString(const v8::HeapGraphNode* node, const char* contents) {
|
450
437
|
for (int i = 0, count = node->GetChildrenCount(); i < count; ++i) {
|
451
438
|
const v8::HeapGraphEdge* prop = node->GetChild(i);
|
@@ -496,56 +483,6 @@ TEST(HeapSnapshot) {
|
|
496
483
|
CHECK(det.has_A2);
|
497
484
|
CHECK(det.has_B2);
|
498
485
|
CHECK(det.has_C2);
|
499
|
-
|
500
|
-
/*
|
501
|
-
// Currently disabled. Too many retaining paths emerge, need to
|
502
|
-
// reduce the amount.
|
503
|
-
|
504
|
-
// Verify 'a2' object retainers. They are:
|
505
|
-
// - (global object).a2
|
506
|
-
// - c2.x1, c2.x2, c2[1]
|
507
|
-
// - b2_1 and b2_2 closures: via 'x' variable
|
508
|
-
CHECK_EQ(6, a2_node->GetRetainingPathsCount());
|
509
|
-
bool has_global_obj_a2_ref = false;
|
510
|
-
bool has_c2_x1_ref = false, has_c2_x2_ref = false, has_c2_1_ref = false;
|
511
|
-
bool has_b2_1_x_ref = false, has_b2_2_x_ref = false;
|
512
|
-
for (int i = 0; i < a2_node->GetRetainingPathsCount(); ++i) {
|
513
|
-
const v8::HeapGraphPath* path = a2_node->GetRetainingPath(i);
|
514
|
-
const int edges_count = path->GetEdgesCount();
|
515
|
-
CHECK_GT(edges_count, 0);
|
516
|
-
const v8::HeapGraphEdge* last_edge = path->GetEdge(edges_count - 1);
|
517
|
-
v8::String::AsciiValue last_edge_name(last_edge->GetName());
|
518
|
-
if (strcmp("a2", *last_edge_name) == 0
|
519
|
-
&& last_edge->GetType() == v8::HeapGraphEdge::kProperty) {
|
520
|
-
has_global_obj_a2_ref = true;
|
521
|
-
continue;
|
522
|
-
}
|
523
|
-
CHECK_GT(edges_count, 1);
|
524
|
-
const v8::HeapGraphEdge* prev_edge = path->GetEdge(edges_count - 2);
|
525
|
-
v8::String::AsciiValue prev_edge_name(prev_edge->GetName());
|
526
|
-
if (strcmp("x1", *last_edge_name) == 0
|
527
|
-
&& last_edge->GetType() == v8::HeapGraphEdge::kProperty
|
528
|
-
&& strcmp("c2", *prev_edge_name) == 0) has_c2_x1_ref = true;
|
529
|
-
if (strcmp("x2", *last_edge_name) == 0
|
530
|
-
&& last_edge->GetType() == v8::HeapGraphEdge::kProperty
|
531
|
-
&& strcmp("c2", *prev_edge_name) == 0) has_c2_x2_ref = true;
|
532
|
-
if (strcmp("1", *last_edge_name) == 0
|
533
|
-
&& last_edge->GetType() == v8::HeapGraphEdge::kElement
|
534
|
-
&& strcmp("c2", *prev_edge_name) == 0) has_c2_1_ref = true;
|
535
|
-
if (strcmp("x", *last_edge_name) == 0
|
536
|
-
&& last_edge->GetType() == v8::HeapGraphEdge::kContextVariable
|
537
|
-
&& strcmp("b2_1", *prev_edge_name) == 0) has_b2_1_x_ref = true;
|
538
|
-
if (strcmp("x", *last_edge_name) == 0
|
539
|
-
&& last_edge->GetType() == v8::HeapGraphEdge::kContextVariable
|
540
|
-
&& strcmp("b2_2", *prev_edge_name) == 0) has_b2_2_x_ref = true;
|
541
|
-
}
|
542
|
-
CHECK(has_global_obj_a2_ref);
|
543
|
-
CHECK(has_c2_x1_ref);
|
544
|
-
CHECK(has_c2_x2_ref);
|
545
|
-
CHECK(has_c2_1_ref);
|
546
|
-
CHECK(has_b2_1_x_ref);
|
547
|
-
CHECK(has_b2_2_x_ref);
|
548
|
-
*/
|
549
486
|
}
|
550
487
|
|
551
488
|
|
@@ -637,10 +574,10 @@ TEST(HeapSnapshotCodeObjects) {
|
|
637
574
|
|
638
575
|
// Find references to code.
|
639
576
|
const v8::HeapGraphNode* compiled_code =
|
640
|
-
GetProperty(compiled, v8::HeapGraphEdge::kInternal, "
|
577
|
+
GetProperty(compiled, v8::HeapGraphEdge::kInternal, "shared");
|
641
578
|
CHECK_NE(NULL, compiled_code);
|
642
579
|
const v8::HeapGraphNode* lazy_code =
|
643
|
-
GetProperty(lazy, v8::HeapGraphEdge::kInternal, "
|
580
|
+
GetProperty(lazy, v8::HeapGraphEdge::kInternal, "shared");
|
644
581
|
CHECK_NE(NULL, lazy_code);
|
645
582
|
|
646
583
|
// Verify that non-compiled code doesn't contain references to "x"
|
@@ -730,7 +667,7 @@ TEST(HeapEntryIdsAndGC) {
|
|
730
667
|
const v8::HeapSnapshot* snapshot1 =
|
731
668
|
v8::HeapProfiler::TakeSnapshot(v8::String::New("s1"));
|
732
669
|
|
733
|
-
|
670
|
+
HEAP->CollectAllGarbage(true); // Enforce compaction.
|
734
671
|
|
735
672
|
const v8::HeapSnapshot* snapshot2 =
|
736
673
|
v8::HeapProfiler::TakeSnapshot(v8::String::New("s2"));
|
@@ -774,76 +711,6 @@ TEST(HeapEntryIdsAndGC) {
|
|
774
711
|
}
|
775
712
|
|
776
713
|
|
777
|
-
TEST(HeapSnapshotsDiff) {
|
778
|
-
v8::HandleScope scope;
|
779
|
-
LocalContext env;
|
780
|
-
|
781
|
-
CompileRun(
|
782
|
-
"function A() {}\n"
|
783
|
-
"function B(x) { this.x = x; }\n"
|
784
|
-
"function A2(a) { for (var i = 0; i < a; ++i) this[i] = i; }\n"
|
785
|
-
"var a = new A();\n"
|
786
|
-
"var b = new B(a);");
|
787
|
-
const v8::HeapSnapshot* snapshot1 =
|
788
|
-
v8::HeapProfiler::TakeSnapshot(v8::String::New("s1"));
|
789
|
-
|
790
|
-
CompileRun(
|
791
|
-
"delete a;\n"
|
792
|
-
"b.x = null;\n"
|
793
|
-
"var a = new A2(20);\n"
|
794
|
-
"var b2 = new B(a);");
|
795
|
-
const v8::HeapSnapshot* snapshot2 =
|
796
|
-
v8::HeapProfiler::TakeSnapshot(v8::String::New("s2"));
|
797
|
-
|
798
|
-
const v8::HeapSnapshotsDiff* diff = snapshot1->CompareWith(snapshot2);
|
799
|
-
|
800
|
-
// Verify additions: ensure that addition of A and B was detected.
|
801
|
-
const v8::HeapGraphNode* additions_root = diff->GetAdditionsRoot();
|
802
|
-
bool found_A = false, found_B = false;
|
803
|
-
uint64_t s1_A_id = 0;
|
804
|
-
for (int i = 0, count = additions_root->GetChildrenCount(); i < count; ++i) {
|
805
|
-
const v8::HeapGraphEdge* prop = additions_root->GetChild(i);
|
806
|
-
const v8::HeapGraphNode* node = prop->GetToNode();
|
807
|
-
if (node->GetType() == v8::HeapGraphNode::kObject) {
|
808
|
-
v8::String::AsciiValue node_name(node->GetName());
|
809
|
-
if (strcmp(*node_name, "A2") == 0) {
|
810
|
-
CHECK(IsNodeRetainedAs(node, v8::HeapGraphEdge::kShortcut, "a"));
|
811
|
-
CHECK(!found_A);
|
812
|
-
found_A = true;
|
813
|
-
s1_A_id = node->GetId();
|
814
|
-
} else if (strcmp(*node_name, "B") == 0) {
|
815
|
-
CHECK(IsNodeRetainedAs(node, v8::HeapGraphEdge::kShortcut, "b2"));
|
816
|
-
CHECK(!found_B);
|
817
|
-
found_B = true;
|
818
|
-
}
|
819
|
-
}
|
820
|
-
}
|
821
|
-
CHECK(found_A);
|
822
|
-
CHECK(found_B);
|
823
|
-
|
824
|
-
// Verify deletions: ensure that deletion of A was detected.
|
825
|
-
const v8::HeapGraphNode* deletions_root = diff->GetDeletionsRoot();
|
826
|
-
bool found_A_del = false;
|
827
|
-
uint64_t s2_A_id = 0;
|
828
|
-
for (int i = 0, count = deletions_root->GetChildrenCount(); i < count; ++i) {
|
829
|
-
const v8::HeapGraphEdge* prop = deletions_root->GetChild(i);
|
830
|
-
const v8::HeapGraphNode* node = prop->GetToNode();
|
831
|
-
if (node->GetType() == v8::HeapGraphNode::kObject) {
|
832
|
-
v8::String::AsciiValue node_name(node->GetName());
|
833
|
-
if (strcmp(*node_name, "A") == 0) {
|
834
|
-
CHECK(IsNodeRetainedAs(node, v8::HeapGraphEdge::kShortcut, "a"));
|
835
|
-
CHECK(!found_A_del);
|
836
|
-
found_A_del = true;
|
837
|
-
s2_A_id = node->GetId();
|
838
|
-
}
|
839
|
-
}
|
840
|
-
}
|
841
|
-
CHECK(found_A_del);
|
842
|
-
CHECK_NE_UINT64_T(0, s1_A_id);
|
843
|
-
CHECK(s1_A_id != s2_A_id);
|
844
|
-
}
|
845
|
-
|
846
|
-
|
847
714
|
TEST(HeapSnapshotRootPreservedAfterSorting) {
|
848
715
|
v8::HandleScope scope;
|
849
716
|
LocalContext env;
|
@@ -1258,4 +1125,199 @@ TEST(TakeHeapSnapshotAborting) {
|
|
1258
1125
|
CHECK_GT(control.total(), 0);
|
1259
1126
|
}
|
1260
1127
|
|
1128
|
+
|
1129
|
+
namespace {
|
1130
|
+
|
1131
|
+
class TestRetainedObjectInfo : public v8::RetainedObjectInfo {
|
1132
|
+
public:
|
1133
|
+
TestRetainedObjectInfo(int hash,
|
1134
|
+
const char* label,
|
1135
|
+
intptr_t element_count = -1,
|
1136
|
+
intptr_t size = -1)
|
1137
|
+
: disposed_(false),
|
1138
|
+
hash_(hash),
|
1139
|
+
label_(label),
|
1140
|
+
element_count_(element_count),
|
1141
|
+
size_(size) {
|
1142
|
+
instances.Add(this);
|
1143
|
+
}
|
1144
|
+
virtual ~TestRetainedObjectInfo() {}
|
1145
|
+
virtual void Dispose() {
|
1146
|
+
CHECK(!disposed_);
|
1147
|
+
disposed_ = true;
|
1148
|
+
}
|
1149
|
+
virtual bool IsEquivalent(RetainedObjectInfo* other) {
|
1150
|
+
return GetHash() == other->GetHash();
|
1151
|
+
}
|
1152
|
+
virtual intptr_t GetHash() { return hash_; }
|
1153
|
+
virtual const char* GetLabel() { return label_; }
|
1154
|
+
virtual intptr_t GetElementCount() { return element_count_; }
|
1155
|
+
virtual intptr_t GetSizeInBytes() { return size_; }
|
1156
|
+
bool disposed() { return disposed_; }
|
1157
|
+
|
1158
|
+
static v8::RetainedObjectInfo* WrapperInfoCallback(
|
1159
|
+
uint16_t class_id, v8::Handle<v8::Value> wrapper) {
|
1160
|
+
if (class_id == 1) {
|
1161
|
+
if (wrapper->IsString()) {
|
1162
|
+
v8::String::AsciiValue ascii(wrapper);
|
1163
|
+
if (strcmp(*ascii, "AAA") == 0)
|
1164
|
+
return new TestRetainedObjectInfo(1, "aaa", 100);
|
1165
|
+
else if (strcmp(*ascii, "BBB") == 0)
|
1166
|
+
return new TestRetainedObjectInfo(1, "aaa", 100);
|
1167
|
+
}
|
1168
|
+
} else if (class_id == 2) {
|
1169
|
+
if (wrapper->IsString()) {
|
1170
|
+
v8::String::AsciiValue ascii(wrapper);
|
1171
|
+
if (strcmp(*ascii, "CCC") == 0)
|
1172
|
+
return new TestRetainedObjectInfo(2, "ccc");
|
1173
|
+
}
|
1174
|
+
}
|
1175
|
+
CHECK(false);
|
1176
|
+
return NULL;
|
1177
|
+
}
|
1178
|
+
|
1179
|
+
static i::List<TestRetainedObjectInfo*> instances;
|
1180
|
+
|
1181
|
+
private:
|
1182
|
+
bool disposed_;
|
1183
|
+
int category_;
|
1184
|
+
int hash_;
|
1185
|
+
const char* label_;
|
1186
|
+
intptr_t element_count_;
|
1187
|
+
intptr_t size_;
|
1188
|
+
};
|
1189
|
+
|
1190
|
+
|
1191
|
+
i::List<TestRetainedObjectInfo*> TestRetainedObjectInfo::instances;
|
1192
|
+
}
|
1193
|
+
|
1194
|
+
|
1195
|
+
static const v8::HeapGraphNode* GetNode(const v8::HeapGraphNode* parent,
|
1196
|
+
v8::HeapGraphNode::Type type,
|
1197
|
+
const char* name) {
|
1198
|
+
for (int i = 0, count = parent->GetChildrenCount(); i < count; ++i) {
|
1199
|
+
const v8::HeapGraphNode* node = parent->GetChild(i)->GetToNode();
|
1200
|
+
if (node->GetType() == type && strcmp(name,
|
1201
|
+
const_cast<i::HeapEntry*>(
|
1202
|
+
reinterpret_cast<const i::HeapEntry*>(node))->name()) == 0) {
|
1203
|
+
return node;
|
1204
|
+
}
|
1205
|
+
}
|
1206
|
+
return NULL;
|
1207
|
+
}
|
1208
|
+
|
1209
|
+
|
1210
|
+
TEST(HeapSnapshotRetainedObjectInfo) {
|
1211
|
+
v8::HandleScope scope;
|
1212
|
+
LocalContext env;
|
1213
|
+
|
1214
|
+
v8::HeapProfiler::DefineWrapperClass(
|
1215
|
+
1, TestRetainedObjectInfo::WrapperInfoCallback);
|
1216
|
+
v8::HeapProfiler::DefineWrapperClass(
|
1217
|
+
2, TestRetainedObjectInfo::WrapperInfoCallback);
|
1218
|
+
v8::Persistent<v8::String> p_AAA =
|
1219
|
+
v8::Persistent<v8::String>::New(v8_str("AAA"));
|
1220
|
+
p_AAA.SetWrapperClassId(1);
|
1221
|
+
v8::Persistent<v8::String> p_BBB =
|
1222
|
+
v8::Persistent<v8::String>::New(v8_str("BBB"));
|
1223
|
+
p_BBB.SetWrapperClassId(1);
|
1224
|
+
v8::Persistent<v8::String> p_CCC =
|
1225
|
+
v8::Persistent<v8::String>::New(v8_str("CCC"));
|
1226
|
+
p_CCC.SetWrapperClassId(2);
|
1227
|
+
CHECK_EQ(0, TestRetainedObjectInfo::instances.length());
|
1228
|
+
const v8::HeapSnapshot* snapshot =
|
1229
|
+
v8::HeapProfiler::TakeSnapshot(v8::String::New("retained"));
|
1230
|
+
|
1231
|
+
CHECK_EQ(3, TestRetainedObjectInfo::instances.length());
|
1232
|
+
for (int i = 0; i < TestRetainedObjectInfo::instances.length(); ++i) {
|
1233
|
+
CHECK(TestRetainedObjectInfo::instances[i]->disposed());
|
1234
|
+
delete TestRetainedObjectInfo::instances[i];
|
1235
|
+
}
|
1236
|
+
|
1237
|
+
const v8::HeapGraphNode* natives = GetNode(
|
1238
|
+
snapshot->GetRoot(), v8::HeapGraphNode::kObject, "(Native objects)");
|
1239
|
+
CHECK_NE(NULL, natives);
|
1240
|
+
CHECK_EQ(2, natives->GetChildrenCount());
|
1241
|
+
const v8::HeapGraphNode* aaa = GetNode(
|
1242
|
+
natives, v8::HeapGraphNode::kNative, "aaa / 100 entries");
|
1243
|
+
CHECK_NE(NULL, aaa);
|
1244
|
+
const v8::HeapGraphNode* ccc = GetNode(
|
1245
|
+
natives, v8::HeapGraphNode::kNative, "ccc");
|
1246
|
+
CHECK_NE(NULL, ccc);
|
1247
|
+
|
1248
|
+
CHECK_EQ(2, aaa->GetChildrenCount());
|
1249
|
+
const v8::HeapGraphNode* n_AAA = GetNode(
|
1250
|
+
aaa, v8::HeapGraphNode::kString, "AAA");
|
1251
|
+
CHECK_NE(NULL, n_AAA);
|
1252
|
+
const v8::HeapGraphNode* n_BBB = GetNode(
|
1253
|
+
aaa, v8::HeapGraphNode::kString, "BBB");
|
1254
|
+
CHECK_NE(NULL, n_BBB);
|
1255
|
+
CHECK_EQ(1, ccc->GetChildrenCount());
|
1256
|
+
const v8::HeapGraphNode* n_CCC = GetNode(
|
1257
|
+
ccc, v8::HeapGraphNode::kString, "CCC");
|
1258
|
+
CHECK_NE(NULL, n_CCC);
|
1259
|
+
|
1260
|
+
CHECK_EQ(aaa, GetProperty(n_AAA, v8::HeapGraphEdge::kInternal, "native"));
|
1261
|
+
CHECK_EQ(aaa, GetProperty(n_BBB, v8::HeapGraphEdge::kInternal, "native"));
|
1262
|
+
CHECK_EQ(ccc, GetProperty(n_CCC, v8::HeapGraphEdge::kInternal, "native"));
|
1263
|
+
}
|
1264
|
+
|
1265
|
+
|
1266
|
+
TEST(DeleteAllHeapSnapshots) {
|
1267
|
+
v8::HandleScope scope;
|
1268
|
+
LocalContext env;
|
1269
|
+
|
1270
|
+
CHECK_EQ(0, v8::HeapProfiler::GetSnapshotsCount());
|
1271
|
+
v8::HeapProfiler::DeleteAllSnapshots();
|
1272
|
+
CHECK_EQ(0, v8::HeapProfiler::GetSnapshotsCount());
|
1273
|
+
CHECK_NE(NULL, v8::HeapProfiler::TakeSnapshot(v8::String::New("1")));
|
1274
|
+
CHECK_EQ(1, v8::HeapProfiler::GetSnapshotsCount());
|
1275
|
+
v8::HeapProfiler::DeleteAllSnapshots();
|
1276
|
+
CHECK_EQ(0, v8::HeapProfiler::GetSnapshotsCount());
|
1277
|
+
CHECK_NE(NULL, v8::HeapProfiler::TakeSnapshot(v8::String::New("1")));
|
1278
|
+
CHECK_NE(NULL, v8::HeapProfiler::TakeSnapshot(v8::String::New("2")));
|
1279
|
+
CHECK_EQ(2, v8::HeapProfiler::GetSnapshotsCount());
|
1280
|
+
v8::HeapProfiler::DeleteAllSnapshots();
|
1281
|
+
CHECK_EQ(0, v8::HeapProfiler::GetSnapshotsCount());
|
1282
|
+
}
|
1283
|
+
|
1284
|
+
|
1285
|
+
TEST(DeleteHeapSnapshot) {
|
1286
|
+
v8::HandleScope scope;
|
1287
|
+
LocalContext env;
|
1288
|
+
|
1289
|
+
CHECK_EQ(0, v8::HeapProfiler::GetSnapshotsCount());
|
1290
|
+
const v8::HeapSnapshot* s1 =
|
1291
|
+
v8::HeapProfiler::TakeSnapshot(v8::String::New("1"));
|
1292
|
+
CHECK_NE(NULL, s1);
|
1293
|
+
CHECK_EQ(1, v8::HeapProfiler::GetSnapshotsCount());
|
1294
|
+
unsigned uid1 = s1->GetUid();
|
1295
|
+
CHECK_EQ(s1, v8::HeapProfiler::FindSnapshot(uid1));
|
1296
|
+
const_cast<v8::HeapSnapshot*>(s1)->Delete();
|
1297
|
+
CHECK_EQ(0, v8::HeapProfiler::GetSnapshotsCount());
|
1298
|
+
CHECK_EQ(NULL, v8::HeapProfiler::FindSnapshot(uid1));
|
1299
|
+
|
1300
|
+
const v8::HeapSnapshot* s2 =
|
1301
|
+
v8::HeapProfiler::TakeSnapshot(v8::String::New("2"));
|
1302
|
+
CHECK_NE(NULL, s2);
|
1303
|
+
CHECK_EQ(1, v8::HeapProfiler::GetSnapshotsCount());
|
1304
|
+
unsigned uid2 = s2->GetUid();
|
1305
|
+
CHECK_NE(static_cast<int>(uid1), static_cast<int>(uid2));
|
1306
|
+
CHECK_EQ(s2, v8::HeapProfiler::FindSnapshot(uid2));
|
1307
|
+
const v8::HeapSnapshot* s3 =
|
1308
|
+
v8::HeapProfiler::TakeSnapshot(v8::String::New("3"));
|
1309
|
+
CHECK_NE(NULL, s3);
|
1310
|
+
CHECK_EQ(2, v8::HeapProfiler::GetSnapshotsCount());
|
1311
|
+
unsigned uid3 = s3->GetUid();
|
1312
|
+
CHECK_NE(static_cast<int>(uid1), static_cast<int>(uid3));
|
1313
|
+
CHECK_EQ(s3, v8::HeapProfiler::FindSnapshot(uid3));
|
1314
|
+
const_cast<v8::HeapSnapshot*>(s2)->Delete();
|
1315
|
+
CHECK_EQ(1, v8::HeapProfiler::GetSnapshotsCount());
|
1316
|
+
CHECK_EQ(NULL, v8::HeapProfiler::FindSnapshot(uid2));
|
1317
|
+
CHECK_EQ(s3, v8::HeapProfiler::FindSnapshot(uid3));
|
1318
|
+
const_cast<v8::HeapSnapshot*>(s3)->Delete();
|
1319
|
+
CHECK_EQ(0, v8::HeapProfiler::GetSnapshotsCount());
|
1320
|
+
CHECK_EQ(NULL, v8::HeapProfiler::FindSnapshot(uid3));
|
1321
|
+
}
|
1322
|
+
|
1261
1323
|
#endif // ENABLE_LOGGING_AND_PROFILING
|