mustang 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
data/vendor/v8/src/code-stubs.h
CHANGED
@@ -40,7 +40,6 @@ namespace internal {
|
|
40
40
|
V(GenericBinaryOp) \
|
41
41
|
V(TypeRecordingBinaryOp) \
|
42
42
|
V(StringAdd) \
|
43
|
-
V(StringCharAt) \
|
44
43
|
V(SubString) \
|
45
44
|
V(StringCompare) \
|
46
45
|
V(SmiOp) \
|
@@ -81,10 +80,19 @@ namespace internal {
|
|
81
80
|
#define CODE_STUB_LIST_ARM(V)
|
82
81
|
#endif
|
83
82
|
|
83
|
+
// List of code stubs only used on MIPS platforms.
|
84
|
+
#ifdef V8_TARGET_ARCH_MIPS
|
85
|
+
#define CODE_STUB_LIST_MIPS(V) \
|
86
|
+
V(RegExpCEntry)
|
87
|
+
#else
|
88
|
+
#define CODE_STUB_LIST_MIPS(V)
|
89
|
+
#endif
|
90
|
+
|
84
91
|
// Combined list of code stubs.
|
85
92
|
#define CODE_STUB_LIST(V) \
|
86
93
|
CODE_STUB_LIST_ALL_PLATFORMS(V) \
|
87
|
-
CODE_STUB_LIST_ARM(V)
|
94
|
+
CODE_STUB_LIST_ARM(V) \
|
95
|
+
CODE_STUB_LIST_MIPS(V)
|
88
96
|
|
89
97
|
// Mode to overwrite BinaryExpression values.
|
90
98
|
enum OverwriteMode { NO_OVERWRITE, OVERWRITE_LEFT, OVERWRITE_RIGHT };
|
@@ -167,7 +175,11 @@ class CodeStub BASE_EMBEDDED {
|
|
167
175
|
// Returns a name for logging/debugging purposes.
|
168
176
|
virtual const char* GetName() { return MajorName(MajorKey(), false); }
|
169
177
|
|
170
|
-
|
178
|
+
// Returns whether the code generated for this stub needs to be allocated as
|
179
|
+
// a fixed (non-moveable) code object.
|
180
|
+
virtual bool NeedsImmovableCode() { return false; }
|
181
|
+
|
182
|
+
#ifdef DEBUG
|
171
183
|
virtual void Print() { PrintF("%s\n", GetName()); }
|
172
184
|
#endif
|
173
185
|
|
@@ -274,12 +286,17 @@ class ToNumberStub: public CodeStub {
|
|
274
286
|
|
275
287
|
class FastNewClosureStub : public CodeStub {
|
276
288
|
public:
|
289
|
+
explicit FastNewClosureStub(StrictModeFlag strict_mode)
|
290
|
+
: strict_mode_(strict_mode) { }
|
291
|
+
|
277
292
|
void Generate(MacroAssembler* masm);
|
278
293
|
|
279
294
|
private:
|
280
295
|
const char* GetName() { return "FastNewClosureStub"; }
|
281
296
|
Major MajorKey() { return FastNewClosure; }
|
282
|
-
int MinorKey() { return
|
297
|
+
int MinorKey() { return strict_mode_; }
|
298
|
+
|
299
|
+
StrictModeFlag strict_mode_;
|
283
300
|
};
|
284
301
|
|
285
302
|
|
@@ -434,18 +451,6 @@ class MathPowStub: public CodeStub {
|
|
434
451
|
};
|
435
452
|
|
436
453
|
|
437
|
-
class StringCharAtStub: public CodeStub {
|
438
|
-
public:
|
439
|
-
StringCharAtStub() {}
|
440
|
-
|
441
|
-
private:
|
442
|
-
Major MajorKey() { return StringCharAt; }
|
443
|
-
int MinorKey() { return 0; }
|
444
|
-
|
445
|
-
void Generate(MacroAssembler* masm);
|
446
|
-
};
|
447
|
-
|
448
|
-
|
449
454
|
class ICCompareStub: public CodeStub {
|
450
455
|
public:
|
451
456
|
ICCompareStub(Token::Value op, CompareIC::State state)
|
@@ -623,6 +628,8 @@ class CEntryStub : public CodeStub {
|
|
623
628
|
Major MajorKey() { return CEntry; }
|
624
629
|
int MinorKey();
|
625
630
|
|
631
|
+
bool NeedsImmovableCode();
|
632
|
+
|
626
633
|
const char* GetName() { return "CEntryStub"; }
|
627
634
|
};
|
628
635
|
|
@@ -661,7 +668,8 @@ class ArgumentsAccessStub: public CodeStub {
|
|
661
668
|
public:
|
662
669
|
enum Type {
|
663
670
|
READ_ELEMENT,
|
664
|
-
|
671
|
+
NEW_NON_STRICT,
|
672
|
+
NEW_STRICT
|
665
673
|
};
|
666
674
|
|
667
675
|
explicit ArgumentsAccessStub(Type type) : type_(type) { }
|
@@ -676,6 +684,19 @@ class ArgumentsAccessStub: public CodeStub {
|
|
676
684
|
void GenerateReadElement(MacroAssembler* masm);
|
677
685
|
void GenerateNewObject(MacroAssembler* masm);
|
678
686
|
|
687
|
+
int GetArgumentsBoilerplateIndex() const {
|
688
|
+
return (type_ == NEW_STRICT)
|
689
|
+
? Context::STRICT_MODE_ARGUMENTS_BOILERPLATE_INDEX
|
690
|
+
: Context::ARGUMENTS_BOILERPLATE_INDEX;
|
691
|
+
}
|
692
|
+
|
693
|
+
int GetArgumentsObjectSize() const {
|
694
|
+
if (type_ == NEW_STRICT)
|
695
|
+
return Heap::kArgumentsObjectSizeStrict;
|
696
|
+
else
|
697
|
+
return Heap::kArgumentsObjectSize;
|
698
|
+
}
|
699
|
+
|
679
700
|
const char* GetName() { return "ArgumentsAccessStub"; }
|
680
701
|
|
681
702
|
#ifdef DEBUG
|
data/vendor/v8/src/codegen-inl.h
CHANGED
@@ -55,8 +55,12 @@ bool CodeGenerator::is_eval() { return info_->is_eval(); }
|
|
55
55
|
|
56
56
|
Scope* CodeGenerator::scope() { return info_->function()->scope(); }
|
57
57
|
|
58
|
+
bool CodeGenerator::is_strict_mode() {
|
59
|
+
return info_->function()->strict_mode();
|
60
|
+
}
|
61
|
+
|
58
62
|
StrictModeFlag CodeGenerator::strict_mode_flag() {
|
59
|
-
return
|
63
|
+
return is_strict_mode() ? kStrictMode : kNonStrictMode;
|
60
64
|
}
|
61
65
|
|
62
66
|
} } // namespace v8::internal
|
data/vendor/v8/src/codegen.cc
CHANGED
@@ -61,9 +61,6 @@ Comment::~Comment() {
|
|
61
61
|
#undef __
|
62
62
|
|
63
63
|
|
64
|
-
CodeGenerator* CodeGeneratorScope::top_ = NULL;
|
65
|
-
|
66
|
-
|
67
64
|
void CodeGenerator::ProcessDeferred() {
|
68
65
|
while (!deferred_.is_empty()) {
|
69
66
|
DeferredCode* code = deferred_.RemoveLast();
|
@@ -129,7 +126,7 @@ void CodeGenerator::MakeCodePrologue(CompilationInfo* info) {
|
|
129
126
|
bool print_json_ast = false;
|
130
127
|
const char* ftype;
|
131
128
|
|
132
|
-
if (
|
129
|
+
if (Isolate::Current()->bootstrapper()->IsActive()) {
|
133
130
|
print_source = FLAG_print_builtin_source;
|
134
131
|
print_ast = FLAG_print_builtin_ast;
|
135
132
|
print_json_ast = FLAG_print_builtin_json_ast;
|
@@ -178,13 +175,17 @@ void CodeGenerator::MakeCodePrologue(CompilationInfo* info) {
|
|
178
175
|
Handle<Code> CodeGenerator::MakeCodeEpilogue(MacroAssembler* masm,
|
179
176
|
Code::Flags flags,
|
180
177
|
CompilationInfo* info) {
|
178
|
+
Isolate* isolate = info->isolate();
|
179
|
+
|
181
180
|
// Allocate and install the code.
|
182
181
|
CodeDesc desc;
|
183
182
|
masm->GetCode(&desc);
|
184
|
-
Handle<Code> code =
|
183
|
+
Handle<Code> code =
|
184
|
+
isolate->factory()->NewCode(desc, flags, masm->CodeObject());
|
185
185
|
|
186
186
|
if (!code.is_null()) {
|
187
|
-
|
187
|
+
isolate->counters()->total_compiled_code_size()->Increment(
|
188
|
+
code->instruction_size());
|
188
189
|
}
|
189
190
|
return code;
|
190
191
|
}
|
@@ -192,7 +193,7 @@ Handle<Code> CodeGenerator::MakeCodeEpilogue(MacroAssembler* masm,
|
|
192
193
|
|
193
194
|
void CodeGenerator::PrintCode(Handle<Code> code, CompilationInfo* info) {
|
194
195
|
#ifdef ENABLE_DISASSEMBLER
|
195
|
-
bool print_code =
|
196
|
+
bool print_code = Isolate::Current()->bootstrapper()->IsActive()
|
196
197
|
? FLAG_print_builtin_code
|
197
198
|
: (FLAG_print_code || (info->IsOptimizing() && FLAG_print_opt_code));
|
198
199
|
Vector<const char> filter = CStrVector(FLAG_hydrogen_filter);
|
@@ -238,7 +239,8 @@ bool CodeGenerator::MakeCode(CompilationInfo* info) {
|
|
238
239
|
Handle<Script> script = info->script();
|
239
240
|
if (!script->IsUndefined() && !script->source()->IsUndefined()) {
|
240
241
|
int len = String::cast(script->source())->length();
|
241
|
-
Counters
|
242
|
+
Counters* counters = info->isolate()->counters();
|
243
|
+
counters->total_old_codegen_source_size()->Increment(len);
|
242
244
|
}
|
243
245
|
if (FLAG_trace_codegen) {
|
244
246
|
PrintF("Classic Compiler - ");
|
@@ -246,15 +248,15 @@ bool CodeGenerator::MakeCode(CompilationInfo* info) {
|
|
246
248
|
MakeCodePrologue(info);
|
247
249
|
// Generate code.
|
248
250
|
const int kInitialBufferSize = 4 * KB;
|
249
|
-
MacroAssembler masm(NULL, kInitialBufferSize);
|
251
|
+
MacroAssembler masm(info->isolate(), NULL, kInitialBufferSize);
|
250
252
|
#ifdef ENABLE_GDB_JIT_INTERFACE
|
251
253
|
masm.positions_recorder()->StartGDBJITLineInfoRecording();
|
252
254
|
#endif
|
253
255
|
CodeGenerator cgen(&masm);
|
254
|
-
CodeGeneratorScope scope(&cgen);
|
256
|
+
CodeGeneratorScope scope(Isolate::Current(), &cgen);
|
255
257
|
cgen.Generate(info);
|
256
258
|
if (cgen.HasStackOverflow()) {
|
257
|
-
ASSERT(!
|
259
|
+
ASSERT(!Isolate::Current()->has_pending_exception());
|
258
260
|
return false;
|
259
261
|
}
|
260
262
|
|
@@ -279,12 +281,15 @@ bool CodeGenerator::MakeCode(CompilationInfo* info) {
|
|
279
281
|
|
280
282
|
#ifdef ENABLE_LOGGING_AND_PROFILING
|
281
283
|
|
284
|
+
|
285
|
+
static Vector<const char> kRegexp = CStrVector("regexp");
|
286
|
+
|
287
|
+
|
282
288
|
bool CodeGenerator::ShouldGenerateLog(Expression* type) {
|
283
289
|
ASSERT(type != NULL);
|
284
|
-
if (!
|
290
|
+
if (!LOGGER->is_logging() && !CpuProfiler::is_profiling()) return false;
|
285
291
|
Handle<String> name = Handle<String>::cast(type->AsLiteral()->handle());
|
286
292
|
if (FLAG_log_regexp) {
|
287
|
-
static Vector<const char> kRegexp = CStrVector("regexp");
|
288
293
|
if (name->IsEqualTo(kRegexp))
|
289
294
|
return true;
|
290
295
|
}
|
@@ -317,7 +322,7 @@ void CodeGenerator::ProcessDeclarations(ZoneList<Declaration*>* declarations) {
|
|
317
322
|
if (globals == 0) return;
|
318
323
|
|
319
324
|
// Compute array of global variable and function declarations.
|
320
|
-
Handle<FixedArray> array =
|
325
|
+
Handle<FixedArray> array = FACTORY->NewFixedArray(2 * globals, TENURED);
|
321
326
|
for (int j = 0, i = 0; i < length; i++) {
|
322
327
|
Declaration* node = declarations->at(i);
|
323
328
|
Variable* var = node->proxy()->var();
|
@@ -374,7 +379,7 @@ const CodeGenerator::InlineFunctionGenerator
|
|
374
379
|
bool CodeGenerator::CheckForInlineRuntimeCall(CallRuntime* node) {
|
375
380
|
ZoneList<Expression*>* args = node->arguments();
|
376
381
|
Handle<String> name = node->name();
|
377
|
-
Runtime::Function* function = node->function();
|
382
|
+
const Runtime::Function* function = node->function();
|
378
383
|
if (function != NULL && function->intrinsic_type == Runtime::INLINE) {
|
379
384
|
int lookup_index = static_cast<int>(function->function_id) -
|
380
385
|
static_cast<int>(Runtime::kFirstInlineFunction);
|
@@ -475,8 +480,13 @@ const char* GenericUnaryOpStub::GetName() {
|
|
475
480
|
|
476
481
|
void ArgumentsAccessStub::Generate(MacroAssembler* masm) {
|
477
482
|
switch (type_) {
|
478
|
-
case READ_ELEMENT:
|
479
|
-
|
483
|
+
case READ_ELEMENT:
|
484
|
+
GenerateReadElement(masm);
|
485
|
+
break;
|
486
|
+
case NEW_NON_STRICT:
|
487
|
+
case NEW_STRICT:
|
488
|
+
GenerateNewObject(masm);
|
489
|
+
break;
|
480
490
|
}
|
481
491
|
}
|
482
492
|
|
data/vendor/v8/src/codegen.h
CHANGED
@@ -92,26 +92,26 @@ namespace internal {
|
|
92
92
|
// of active code generators.
|
93
93
|
class CodeGeneratorScope BASE_EMBEDDED {
|
94
94
|
public:
|
95
|
-
explicit CodeGeneratorScope(CodeGenerator* cgen)
|
96
|
-
|
97
|
-
|
95
|
+
explicit CodeGeneratorScope(Isolate* isolate, CodeGenerator* cgen)
|
96
|
+
: isolate_(isolate) {
|
97
|
+
previous_ = isolate->current_code_generator();
|
98
|
+
isolate->set_current_code_generator(cgen);
|
98
99
|
}
|
99
100
|
|
100
101
|
~CodeGeneratorScope() {
|
101
|
-
|
102
|
+
isolate_->set_current_code_generator(previous_);
|
102
103
|
}
|
103
104
|
|
104
|
-
static CodeGenerator* Current() {
|
105
|
-
ASSERT(
|
106
|
-
return
|
105
|
+
static CodeGenerator* Current(Isolate* isolate) {
|
106
|
+
ASSERT(isolate->current_code_generator() != NULL);
|
107
|
+
return isolate->current_code_generator();
|
107
108
|
}
|
108
109
|
|
109
110
|
private:
|
110
|
-
static CodeGenerator* top_;
|
111
111
|
CodeGenerator* previous_;
|
112
|
+
Isolate* isolate_;
|
112
113
|
};
|
113
114
|
|
114
|
-
|
115
115
|
#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64
|
116
116
|
|
117
117
|
// State of used registers in a virtual frame.
|
@@ -33,8 +33,6 @@
|
|
33
33
|
namespace v8 {
|
34
34
|
namespace internal {
|
35
35
|
|
36
|
-
// The number of sub caches covering the different types to cache.
|
37
|
-
static const int kSubCacheCount = 4;
|
38
36
|
|
39
37
|
// The number of generations for each sub cache.
|
40
38
|
// The number of ScriptGenerations is carefully chosen based on histograms.
|
@@ -47,162 +45,32 @@ static const int kRegExpGenerations = 2;
|
|
47
45
|
// Initial size of each compilation cache table allocated.
|
48
46
|
static const int kInitialCacheSize = 64;
|
49
47
|
|
50
|
-
// Index for the first generation in the cache.
|
51
|
-
static const int kFirstGeneration = 0;
|
52
|
-
|
53
|
-
// The compilation cache consists of several generational sub-caches which uses
|
54
|
-
// this class as a base class. A sub-cache contains a compilation cache tables
|
55
|
-
// for each generation of the sub-cache. Since the same source code string has
|
56
|
-
// different compiled code for scripts and evals, we use separate sub-caches
|
57
|
-
// for different compilation modes, to avoid retrieving the wrong result.
|
58
|
-
class CompilationSubCache {
|
59
|
-
public:
|
60
|
-
explicit CompilationSubCache(int generations): generations_(generations) {
|
61
|
-
tables_ = NewArray<Object*>(generations);
|
62
|
-
}
|
63
|
-
|
64
|
-
~CompilationSubCache() { DeleteArray(tables_); }
|
65
|
-
|
66
|
-
// Get the compilation cache tables for a specific generation.
|
67
|
-
Handle<CompilationCacheTable> GetTable(int generation);
|
68
48
|
|
69
|
-
|
70
|
-
|
71
|
-
|
49
|
+
CompilationCache::CompilationCache(Isolate* isolate)
|
50
|
+
: isolate_(isolate),
|
51
|
+
script_(isolate, kScriptGenerations),
|
52
|
+
eval_global_(isolate, kEvalGlobalGenerations),
|
53
|
+
eval_contextual_(isolate, kEvalContextualGenerations),
|
54
|
+
reg_exp_(isolate, kRegExpGenerations),
|
55
|
+
enabled_(true),
|
56
|
+
eager_optimizing_set_(NULL) {
|
57
|
+
CompilationSubCache* subcaches[kSubCacheCount] =
|
58
|
+
{&script_, &eval_global_, &eval_contextual_, ®_exp_};
|
59
|
+
for (int i = 0; i < kSubCacheCount; ++i) {
|
60
|
+
subcaches_[i] = subcaches[i];
|
72
61
|
}
|
73
|
-
|
74
|
-
ASSERT(kFirstGeneration < generations_);
|
75
|
-
tables_[kFirstGeneration] = *value;
|
76
|
-
}
|
77
|
-
|
78
|
-
// Age the sub-cache by evicting the oldest generation and creating a new
|
79
|
-
// young generation.
|
80
|
-
void Age();
|
81
|
-
|
82
|
-
// GC support.
|
83
|
-
void Iterate(ObjectVisitor* v);
|
84
|
-
void IterateFunctions(ObjectVisitor* v);
|
85
|
-
|
86
|
-
// Clear this sub-cache evicting all its content.
|
87
|
-
void Clear();
|
88
|
-
|
89
|
-
// Remove given shared function info from sub-cache.
|
90
|
-
void Remove(Handle<SharedFunctionInfo> function_info);
|
91
|
-
|
92
|
-
// Number of generations in this sub-cache.
|
93
|
-
inline int generations() { return generations_; }
|
94
|
-
|
95
|
-
private:
|
96
|
-
int generations_; // Number of generations.
|
97
|
-
Object** tables_; // Compilation cache tables - one for each generation.
|
98
|
-
|
99
|
-
DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationSubCache);
|
100
|
-
};
|
101
|
-
|
102
|
-
|
103
|
-
// Sub-cache for scripts.
|
104
|
-
class CompilationCacheScript : public CompilationSubCache {
|
105
|
-
public:
|
106
|
-
explicit CompilationCacheScript(int generations)
|
107
|
-
: CompilationSubCache(generations) { }
|
108
|
-
|
109
|
-
Handle<SharedFunctionInfo> Lookup(Handle<String> source,
|
110
|
-
Handle<Object> name,
|
111
|
-
int line_offset,
|
112
|
-
int column_offset);
|
113
|
-
void Put(Handle<String> source, Handle<SharedFunctionInfo> function_info);
|
114
|
-
|
115
|
-
private:
|
116
|
-
MUST_USE_RESULT MaybeObject* TryTablePut(
|
117
|
-
Handle<String> source, Handle<SharedFunctionInfo> function_info);
|
118
|
-
|
119
|
-
// Note: Returns a new hash table if operation results in expansion.
|
120
|
-
Handle<CompilationCacheTable> TablePut(
|
121
|
-
Handle<String> source, Handle<SharedFunctionInfo> function_info);
|
122
|
-
|
123
|
-
bool HasOrigin(Handle<SharedFunctionInfo> function_info,
|
124
|
-
Handle<Object> name,
|
125
|
-
int line_offset,
|
126
|
-
int column_offset);
|
127
|
-
|
128
|
-
DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationCacheScript);
|
129
|
-
};
|
130
|
-
|
131
|
-
|
132
|
-
// Sub-cache for eval scripts.
|
133
|
-
class CompilationCacheEval: public CompilationSubCache {
|
134
|
-
public:
|
135
|
-
explicit CompilationCacheEval(int generations)
|
136
|
-
: CompilationSubCache(generations) { }
|
137
|
-
|
138
|
-
Handle<SharedFunctionInfo> Lookup(Handle<String> source,
|
139
|
-
Handle<Context> context,
|
140
|
-
StrictModeFlag strict_mode);
|
141
|
-
|
142
|
-
void Put(Handle<String> source,
|
143
|
-
Handle<Context> context,
|
144
|
-
Handle<SharedFunctionInfo> function_info);
|
145
|
-
|
146
|
-
private:
|
147
|
-
MUST_USE_RESULT MaybeObject* TryTablePut(
|
148
|
-
Handle<String> source,
|
149
|
-
Handle<Context> context,
|
150
|
-
Handle<SharedFunctionInfo> function_info);
|
151
|
-
|
152
|
-
|
153
|
-
// Note: Returns a new hash table if operation results in expansion.
|
154
|
-
Handle<CompilationCacheTable> TablePut(
|
155
|
-
Handle<String> source,
|
156
|
-
Handle<Context> context,
|
157
|
-
Handle<SharedFunctionInfo> function_info);
|
158
|
-
|
159
|
-
DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationCacheEval);
|
160
|
-
};
|
161
|
-
|
162
|
-
|
163
|
-
// Sub-cache for regular expressions.
|
164
|
-
class CompilationCacheRegExp: public CompilationSubCache {
|
165
|
-
public:
|
166
|
-
explicit CompilationCacheRegExp(int generations)
|
167
|
-
: CompilationSubCache(generations) { }
|
168
|
-
|
169
|
-
Handle<FixedArray> Lookup(Handle<String> source, JSRegExp::Flags flags);
|
170
|
-
|
171
|
-
void Put(Handle<String> source,
|
172
|
-
JSRegExp::Flags flags,
|
173
|
-
Handle<FixedArray> data);
|
174
|
-
private:
|
175
|
-
MUST_USE_RESULT MaybeObject* TryTablePut(Handle<String> source,
|
176
|
-
JSRegExp::Flags flags,
|
177
|
-
Handle<FixedArray> data);
|
178
|
-
|
179
|
-
// Note: Returns a new hash table if operation results in expansion.
|
180
|
-
Handle<CompilationCacheTable> TablePut(Handle<String> source,
|
181
|
-
JSRegExp::Flags flags,
|
182
|
-
Handle<FixedArray> data);
|
183
|
-
|
184
|
-
DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationCacheRegExp);
|
185
|
-
};
|
186
|
-
|
187
|
-
|
188
|
-
// Statically allocate all the sub-caches.
|
189
|
-
static CompilationCacheScript script(kScriptGenerations);
|
190
|
-
static CompilationCacheEval eval_global(kEvalGlobalGenerations);
|
191
|
-
static CompilationCacheEval eval_contextual(kEvalContextualGenerations);
|
192
|
-
static CompilationCacheRegExp reg_exp(kRegExpGenerations);
|
193
|
-
static CompilationSubCache* subcaches[kSubCacheCount] =
|
194
|
-
{&script, &eval_global, &eval_contextual, ®_exp};
|
62
|
+
}
|
195
63
|
|
196
64
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
return FLAG_compilation_cache && enabled;
|
65
|
+
CompilationCache::~CompilationCache() {
|
66
|
+
delete eager_optimizing_set_;
|
67
|
+
eager_optimizing_set_ = NULL;
|
201
68
|
}
|
202
69
|
|
203
70
|
|
204
|
-
static Handle<CompilationCacheTable> AllocateTable(int size) {
|
205
|
-
CALL_HEAP_FUNCTION(
|
71
|
+
static Handle<CompilationCacheTable> AllocateTable(Isolate* isolate, int size) {
|
72
|
+
CALL_HEAP_FUNCTION(isolate,
|
73
|
+
CompilationCacheTable::Allocate(size),
|
206
74
|
CompilationCacheTable);
|
207
75
|
}
|
208
76
|
|
@@ -211,17 +79,16 @@ Handle<CompilationCacheTable> CompilationSubCache::GetTable(int generation) {
|
|
211
79
|
ASSERT(generation < generations_);
|
212
80
|
Handle<CompilationCacheTable> result;
|
213
81
|
if (tables_[generation]->IsUndefined()) {
|
214
|
-
result = AllocateTable(kInitialCacheSize);
|
82
|
+
result = AllocateTable(isolate(), kInitialCacheSize);
|
215
83
|
tables_[generation] = *result;
|
216
84
|
} else {
|
217
85
|
CompilationCacheTable* table =
|
218
86
|
CompilationCacheTable::cast(tables_[generation]);
|
219
|
-
result = Handle<CompilationCacheTable>(table);
|
87
|
+
result = Handle<CompilationCacheTable>(table, isolate());
|
220
88
|
}
|
221
89
|
return result;
|
222
90
|
}
|
223
91
|
|
224
|
-
|
225
92
|
void CompilationSubCache::Age() {
|
226
93
|
// Age the generations implicitly killing off the oldest.
|
227
94
|
for (int i = generations_ - 1; i > 0; i--) {
|
@@ -229,12 +96,12 @@ void CompilationSubCache::Age() {
|
|
229
96
|
}
|
230
97
|
|
231
98
|
// Set the first generation as unborn.
|
232
|
-
tables_[0] =
|
99
|
+
tables_[0] = isolate()->heap()->undefined_value();
|
233
100
|
}
|
234
101
|
|
235
102
|
|
236
103
|
void CompilationSubCache::IterateFunctions(ObjectVisitor* v) {
|
237
|
-
Object* undefined =
|
104
|
+
Object* undefined = isolate()->heap()->raw_unchecked_undefined_value();
|
238
105
|
for (int i = 0; i < generations_; i++) {
|
239
106
|
if (tables_[i] != undefined) {
|
240
107
|
reinterpret_cast<CompilationCacheTable*>(tables_[i])->IterateElements(v);
|
@@ -249,14 +116,14 @@ void CompilationSubCache::Iterate(ObjectVisitor* v) {
|
|
249
116
|
|
250
117
|
|
251
118
|
void CompilationSubCache::Clear() {
|
252
|
-
MemsetPointer(tables_,
|
119
|
+
MemsetPointer(tables_, isolate()->heap()->undefined_value(), generations_);
|
253
120
|
}
|
254
121
|
|
255
122
|
|
256
123
|
void CompilationSubCache::Remove(Handle<SharedFunctionInfo> function_info) {
|
257
124
|
// Probe the script generation tables. Make sure not to leak handles
|
258
125
|
// into the caller's handle scope.
|
259
|
-
{ HandleScope scope;
|
126
|
+
{ HandleScope scope(isolate());
|
260
127
|
for (int generation = 0; generation < generations(); generation++) {
|
261
128
|
Handle<CompilationCacheTable> table = GetTable(generation);
|
262
129
|
table->Remove(*function_info);
|
@@ -265,6 +132,13 @@ void CompilationSubCache::Remove(Handle<SharedFunctionInfo> function_info) {
|
|
265
132
|
}
|
266
133
|
|
267
134
|
|
135
|
+
CompilationCacheScript::CompilationCacheScript(Isolate* isolate,
|
136
|
+
int generations)
|
137
|
+
: CompilationSubCache(isolate, generations),
|
138
|
+
script_histogram_(NULL),
|
139
|
+
script_histogram_initialized_(false) { }
|
140
|
+
|
141
|
+
|
268
142
|
// We only re-use a cached function for some script source code if the
|
269
143
|
// script originates from the same place. This is to avoid issues
|
270
144
|
// when reporting errors, etc.
|
@@ -274,7 +148,7 @@ bool CompilationCacheScript::HasOrigin(
|
|
274
148
|
int line_offset,
|
275
149
|
int column_offset) {
|
276
150
|
Handle<Script> script =
|
277
|
-
Handle<Script>(Script::cast(function_info->script()));
|
151
|
+
Handle<Script>(Script::cast(function_info->script()), isolate());
|
278
152
|
// If the script name isn't set, the boilerplate script should have
|
279
153
|
// an undefined name to have the same origin.
|
280
154
|
if (name.is_null()) {
|
@@ -303,10 +177,10 @@ Handle<SharedFunctionInfo> CompilationCacheScript::Lookup(Handle<String> source,
|
|
303
177
|
|
304
178
|
// Probe the script generation tables. Make sure not to leak handles
|
305
179
|
// into the caller's handle scope.
|
306
|
-
{ HandleScope scope;
|
180
|
+
{ HandleScope scope(isolate());
|
307
181
|
for (generation = 0; generation < generations(); generation++) {
|
308
182
|
Handle<CompilationCacheTable> table = GetTable(generation);
|
309
|
-
Handle<Object> probe(table->Lookup(*source));
|
183
|
+
Handle<Object> probe(table->Lookup(*source), isolate());
|
310
184
|
if (probe->IsSharedFunctionInfo()) {
|
311
185
|
Handle<SharedFunctionInfo> function_info =
|
312
186
|
Handle<SharedFunctionInfo>::cast(probe);
|
@@ -320,30 +194,34 @@ Handle<SharedFunctionInfo> CompilationCacheScript::Lookup(Handle<String> source,
|
|
320
194
|
}
|
321
195
|
}
|
322
196
|
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
197
|
+
if (!script_histogram_initialized_) {
|
198
|
+
script_histogram_ = isolate()->stats_table()->CreateHistogram(
|
199
|
+
"V8.ScriptCache",
|
200
|
+
0,
|
201
|
+
kScriptGenerations,
|
202
|
+
kScriptGenerations + 1);
|
203
|
+
script_histogram_initialized_ = true;
|
204
|
+
}
|
328
205
|
|
329
|
-
if (
|
206
|
+
if (script_histogram_ != NULL) {
|
330
207
|
// The level NUMBER_OF_SCRIPT_GENERATIONS is equivalent to a cache miss.
|
331
|
-
|
208
|
+
isolate()->stats_table()->AddHistogramSample(script_histogram_, generation);
|
332
209
|
}
|
333
210
|
|
334
211
|
// Once outside the manacles of the handle scope, we need to recheck
|
335
212
|
// to see if we actually found a cached script. If so, we return a
|
336
213
|
// handle created in the caller's handle scope.
|
337
214
|
if (result != NULL) {
|
338
|
-
Handle<SharedFunctionInfo> shared(SharedFunctionInfo::cast(result)
|
215
|
+
Handle<SharedFunctionInfo> shared(SharedFunctionInfo::cast(result),
|
216
|
+
isolate());
|
339
217
|
ASSERT(HasOrigin(shared, name, line_offset, column_offset));
|
340
218
|
// If the script was found in a later generation, we promote it to
|
341
219
|
// the first generation to let it survive longer in the cache.
|
342
220
|
if (generation != 0) Put(source, shared);
|
343
|
-
|
221
|
+
isolate()->counters()->compilation_cache_hits()->Increment();
|
344
222
|
return shared;
|
345
223
|
} else {
|
346
|
-
|
224
|
+
isolate()->counters()->compilation_cache_misses()->Increment();
|
347
225
|
return Handle<SharedFunctionInfo>::null();
|
348
226
|
}
|
349
227
|
}
|
@@ -360,13 +238,15 @@ MaybeObject* CompilationCacheScript::TryTablePut(
|
|
360
238
|
Handle<CompilationCacheTable> CompilationCacheScript::TablePut(
|
361
239
|
Handle<String> source,
|
362
240
|
Handle<SharedFunctionInfo> function_info) {
|
363
|
-
CALL_HEAP_FUNCTION(
|
241
|
+
CALL_HEAP_FUNCTION(isolate(),
|
242
|
+
TryTablePut(source, function_info),
|
243
|
+
CompilationCacheTable);
|
364
244
|
}
|
365
245
|
|
366
246
|
|
367
247
|
void CompilationCacheScript::Put(Handle<String> source,
|
368
248
|
Handle<SharedFunctionInfo> function_info) {
|
369
|
-
HandleScope scope;
|
249
|
+
HandleScope scope(isolate());
|
370
250
|
SetFirstTable(TablePut(source, function_info));
|
371
251
|
}
|
372
252
|
|
@@ -380,7 +260,7 @@ Handle<SharedFunctionInfo> CompilationCacheEval::Lookup(
|
|
380
260
|
// having cleared the cache.
|
381
261
|
Object* result = NULL;
|
382
262
|
int generation;
|
383
|
-
{ HandleScope scope;
|
263
|
+
{ HandleScope scope(isolate());
|
384
264
|
for (generation = 0; generation < generations(); generation++) {
|
385
265
|
Handle<CompilationCacheTable> table = GetTable(generation);
|
386
266
|
result = table->LookupEval(*source, *context, strict_mode);
|
@@ -391,14 +271,14 @@ Handle<SharedFunctionInfo> CompilationCacheEval::Lookup(
|
|
391
271
|
}
|
392
272
|
if (result->IsSharedFunctionInfo()) {
|
393
273
|
Handle<SharedFunctionInfo>
|
394
|
-
function_info(SharedFunctionInfo::cast(result));
|
274
|
+
function_info(SharedFunctionInfo::cast(result), isolate());
|
395
275
|
if (generation != 0) {
|
396
276
|
Put(source, context, function_info);
|
397
277
|
}
|
398
|
-
|
278
|
+
isolate()->counters()->compilation_cache_hits()->Increment();
|
399
279
|
return function_info;
|
400
280
|
} else {
|
401
|
-
|
281
|
+
isolate()->counters()->compilation_cache_misses()->Increment();
|
402
282
|
return Handle<SharedFunctionInfo>::null();
|
403
283
|
}
|
404
284
|
}
|
@@ -417,7 +297,8 @@ Handle<CompilationCacheTable> CompilationCacheEval::TablePut(
|
|
417
297
|
Handle<String> source,
|
418
298
|
Handle<Context> context,
|
419
299
|
Handle<SharedFunctionInfo> function_info) {
|
420
|
-
CALL_HEAP_FUNCTION(
|
300
|
+
CALL_HEAP_FUNCTION(isolate(),
|
301
|
+
TryTablePut(source, context, function_info),
|
421
302
|
CompilationCacheTable);
|
422
303
|
}
|
423
304
|
|
@@ -425,7 +306,7 @@ Handle<CompilationCacheTable> CompilationCacheEval::TablePut(
|
|
425
306
|
void CompilationCacheEval::Put(Handle<String> source,
|
426
307
|
Handle<Context> context,
|
427
308
|
Handle<SharedFunctionInfo> function_info) {
|
428
|
-
HandleScope scope;
|
309
|
+
HandleScope scope(isolate());
|
429
310
|
SetFirstTable(TablePut(source, context, function_info));
|
430
311
|
}
|
431
312
|
|
@@ -437,7 +318,7 @@ Handle<FixedArray> CompilationCacheRegExp::Lookup(Handle<String> source,
|
|
437
318
|
// having cleared the cache.
|
438
319
|
Object* result = NULL;
|
439
320
|
int generation;
|
440
|
-
{ HandleScope scope;
|
321
|
+
{ HandleScope scope(isolate());
|
441
322
|
for (generation = 0; generation < generations(); generation++) {
|
442
323
|
Handle<CompilationCacheTable> table = GetTable(generation);
|
443
324
|
result = table->LookupRegExp(*source, flags);
|
@@ -447,14 +328,14 @@ Handle<FixedArray> CompilationCacheRegExp::Lookup(Handle<String> source,
|
|
447
328
|
}
|
448
329
|
}
|
449
330
|
if (result->IsFixedArray()) {
|
450
|
-
Handle<FixedArray> data(FixedArray::cast(result));
|
331
|
+
Handle<FixedArray> data(FixedArray::cast(result), isolate());
|
451
332
|
if (generation != 0) {
|
452
333
|
Put(source, flags, data);
|
453
334
|
}
|
454
|
-
|
335
|
+
isolate()->counters()->compilation_cache_hits()->Increment();
|
455
336
|
return data;
|
456
337
|
} else {
|
457
|
-
|
338
|
+
isolate()->counters()->compilation_cache_misses()->Increment();
|
458
339
|
return Handle<FixedArray>::null();
|
459
340
|
}
|
460
341
|
}
|
@@ -473,14 +354,16 @@ Handle<CompilationCacheTable> CompilationCacheRegExp::TablePut(
|
|
473
354
|
Handle<String> source,
|
474
355
|
JSRegExp::Flags flags,
|
475
356
|
Handle<FixedArray> data) {
|
476
|
-
CALL_HEAP_FUNCTION(
|
357
|
+
CALL_HEAP_FUNCTION(isolate(),
|
358
|
+
TryTablePut(source, flags, data),
|
359
|
+
CompilationCacheTable);
|
477
360
|
}
|
478
361
|
|
479
362
|
|
480
363
|
void CompilationCacheRegExp::Put(Handle<String> source,
|
481
364
|
JSRegExp::Flags flags,
|
482
365
|
Handle<FixedArray> data) {
|
483
|
-
HandleScope scope;
|
366
|
+
HandleScope scope(isolate());
|
484
367
|
SetFirstTable(TablePut(source, flags, data));
|
485
368
|
}
|
486
369
|
|
@@ -488,9 +371,9 @@ void CompilationCacheRegExp::Put(Handle<String> source,
|
|
488
371
|
void CompilationCache::Remove(Handle<SharedFunctionInfo> function_info) {
|
489
372
|
if (!IsEnabled()) return;
|
490
373
|
|
491
|
-
|
492
|
-
|
493
|
-
|
374
|
+
eval_global_.Remove(function_info);
|
375
|
+
eval_contextual_.Remove(function_info);
|
376
|
+
script_.Remove(function_info);
|
494
377
|
}
|
495
378
|
|
496
379
|
|
@@ -502,7 +385,7 @@ Handle<SharedFunctionInfo> CompilationCache::LookupScript(Handle<String> source,
|
|
502
385
|
return Handle<SharedFunctionInfo>::null();
|
503
386
|
}
|
504
387
|
|
505
|
-
return
|
388
|
+
return script_.Lookup(source, name, line_offset, column_offset);
|
506
389
|
}
|
507
390
|
|
508
391
|
|
@@ -517,9 +400,9 @@ Handle<SharedFunctionInfo> CompilationCache::LookupEval(
|
|
517
400
|
|
518
401
|
Handle<SharedFunctionInfo> result;
|
519
402
|
if (is_global) {
|
520
|
-
result =
|
403
|
+
result = eval_global_.Lookup(source, context, strict_mode);
|
521
404
|
} else {
|
522
|
-
result =
|
405
|
+
result = eval_contextual_.Lookup(source, context, strict_mode);
|
523
406
|
}
|
524
407
|
return result;
|
525
408
|
}
|
@@ -531,7 +414,7 @@ Handle<FixedArray> CompilationCache::LookupRegExp(Handle<String> source,
|
|
531
414
|
return Handle<FixedArray>::null();
|
532
415
|
}
|
533
416
|
|
534
|
-
return
|
417
|
+
return reg_exp_.Lookup(source, flags);
|
535
418
|
}
|
536
419
|
|
537
420
|
|
@@ -541,7 +424,7 @@ void CompilationCache::PutScript(Handle<String> source,
|
|
541
424
|
return;
|
542
425
|
}
|
543
426
|
|
544
|
-
|
427
|
+
script_.Put(source, function_info);
|
545
428
|
}
|
546
429
|
|
547
430
|
|
@@ -553,11 +436,11 @@ void CompilationCache::PutEval(Handle<String> source,
|
|
553
436
|
return;
|
554
437
|
}
|
555
438
|
|
556
|
-
HandleScope scope;
|
439
|
+
HandleScope scope(isolate());
|
557
440
|
if (is_global) {
|
558
|
-
|
441
|
+
eval_global_.Put(source, context, function_info);
|
559
442
|
} else {
|
560
|
-
|
443
|
+
eval_contextual_.Put(source, context, function_info);
|
561
444
|
}
|
562
445
|
}
|
563
446
|
|
@@ -570,7 +453,7 @@ void CompilationCache::PutRegExp(Handle<String> source,
|
|
570
453
|
return;
|
571
454
|
}
|
572
455
|
|
573
|
-
|
456
|
+
reg_exp_.Put(source, flags, data);
|
574
457
|
}
|
575
458
|
|
576
459
|
|
@@ -579,9 +462,11 @@ static bool SourceHashCompare(void* key1, void* key2) {
|
|
579
462
|
}
|
580
463
|
|
581
464
|
|
582
|
-
|
583
|
-
|
584
|
-
|
465
|
+
HashMap* CompilationCache::EagerOptimizingSet() {
|
466
|
+
if (eager_optimizing_set_ == NULL) {
|
467
|
+
eager_optimizing_set_ = new HashMap(&SourceHashCompare);
|
468
|
+
}
|
469
|
+
return eager_optimizing_set_;
|
585
470
|
}
|
586
471
|
|
587
472
|
|
@@ -615,38 +500,39 @@ void CompilationCache::ResetEagerOptimizingData() {
|
|
615
500
|
|
616
501
|
void CompilationCache::Clear() {
|
617
502
|
for (int i = 0; i < kSubCacheCount; i++) {
|
618
|
-
|
503
|
+
subcaches_[i]->Clear();
|
619
504
|
}
|
620
505
|
}
|
621
506
|
|
507
|
+
|
622
508
|
void CompilationCache::Iterate(ObjectVisitor* v) {
|
623
509
|
for (int i = 0; i < kSubCacheCount; i++) {
|
624
|
-
|
510
|
+
subcaches_[i]->Iterate(v);
|
625
511
|
}
|
626
512
|
}
|
627
513
|
|
628
514
|
|
629
515
|
void CompilationCache::IterateFunctions(ObjectVisitor* v) {
|
630
516
|
for (int i = 0; i < kSubCacheCount; i++) {
|
631
|
-
|
517
|
+
subcaches_[i]->IterateFunctions(v);
|
632
518
|
}
|
633
519
|
}
|
634
520
|
|
635
521
|
|
636
522
|
void CompilationCache::MarkCompactPrologue() {
|
637
523
|
for (int i = 0; i < kSubCacheCount; i++) {
|
638
|
-
|
524
|
+
subcaches_[i]->Age();
|
639
525
|
}
|
640
526
|
}
|
641
527
|
|
642
528
|
|
643
529
|
void CompilationCache::Enable() {
|
644
|
-
|
530
|
+
enabled_ = true;
|
645
531
|
}
|
646
532
|
|
647
533
|
|
648
534
|
void CompilationCache::Disable() {
|
649
|
-
|
535
|
+
enabled_ = false;
|
650
536
|
Clear();
|
651
537
|
}
|
652
538
|
|