From 5dc53644e2c69313893f6ec2b8ae501eef2ebb35 Mon Sep 17 00:00:00 2001 From: Ali Ijaz Sheikh Date: Mon, 28 Mar 2016 13:58:59 -0700 Subject: [PATCH 1/2] deps: upgrade V8 to 5.0.71.25 * Pick up the current branch head for V8 5.0 [1] * Edit v8 gitignore to allow trace_event copy * Update V8 DEP trace_event as per deps/v8/DEPS [2] [1] https://github.com/v8/v8/commit/a480160 [2] https://chromium.googlesource.com/chromium/src/base/trace_event/common/+/4b09207e447ae5bd34643b4c6321bee7b76d35f9 PR-URL: https://github.com/nodejs/node/pull/5945 Reviewed-By: bnoordhuis - Ben Noordhuis Reviewed-By: indutny - Fedor Indutny --- deps/v8/.clang-format | 2 +- deps/v8/.gitignore | 9 +- deps/v8/AUTHORS | 3 + deps/v8/BUILD.gn | 133 +- deps/v8/ChangeLog | 1775 +++++ deps/v8/DEPS | 64 +- deps/v8/Makefile | 2 +- deps/v8/WATCHLISTS | 24 +- .../trace_event/common/trace_event_common.h | 63 +- deps/v8/build/all.gyp | 6 + deps/v8/build/has_valgrind.py | 21 + deps/v8/build/isolate.gypi | 3 + deps/v8/build/standalone.gypi | 73 +- deps/v8/build/toolchain.gypi | 3 + deps/v8/build/vs_toolchain.py | 4 +- deps/v8/include/v8-experimental.h | 1 + deps/v8/include/v8-platform.h | 10 + deps/v8/include/v8-profiler.h | 134 + deps/v8/include/v8-version.h | 8 +- deps/v8/include/v8.h | 114 +- deps/v8/infra/config/cq.cfg | 5 +- deps/v8/snapshot_toolchain.gni | 2 + deps/v8/src/DEPS | 8 +- deps/v8/src/accessors.cc | 520 +- deps/v8/src/accessors.h | 24 +- deps/v8/src/address-map.cc | 9 +- deps/v8/src/api-experimental.cc | 5 + deps/v8/src/api-natives.cc | 296 +- deps/v8/src/api-natives.h | 4 - deps/v8/src/api.cc | 232 +- deps/v8/src/arguments.cc | 18 +- deps/v8/src/arguments.h | 55 +- deps/v8/src/arm/assembler-arm-inl.h | 27 +- deps/v8/src/arm/assembler-arm.cc | 47 +- deps/v8/src/arm/assembler-arm.h | 23 +- deps/v8/src/arm/builtins-arm.cc | 659 +- deps/v8/src/arm/code-stubs-arm.cc | 3038 ++++---- deps/v8/src/arm/codegen-arm.cc | 10 +- deps/v8/src/arm/constants-arm.h | 16 + deps/v8/src/arm/deoptimizer-arm.cc | 37 +- deps/v8/src/arm/disasm-arm.cc | 32 +- deps/v8/src/arm/interface-descriptors-arm.cc | 61 +- deps/v8/src/arm/macro-assembler-arm.cc | 109 +- deps/v8/src/arm/macro-assembler-arm.h | 24 +- deps/v8/src/arm/simulator-arm.cc | 50 +- deps/v8/src/arm64/assembler-arm64-inl.h | 22 +- deps/v8/src/arm64/assembler-arm64.h | 4 +- deps/v8/src/arm64/builtins-arm64.cc | 638 +- deps/v8/src/arm64/code-stubs-arm64.cc | 6372 +++++++++-------- deps/v8/src/arm64/cpu-arm64.cc | 5 +- deps/v8/src/arm64/deoptimizer-arm64.cc | 35 +- .../src/arm64/interface-descriptors-arm64.cc | 64 +- deps/v8/src/arm64/macro-assembler-arm64.cc | 133 +- deps/v8/src/arm64/macro-assembler-arm64.h | 28 +- deps/v8/src/arm64/simulator-arm64.cc | 61 +- deps/v8/src/arm64/utils-arm64.h | 13 - deps/v8/src/assembler.cc | 132 +- deps/v8/src/assembler.h | 46 +- deps/v8/src/ast/OWNERS | 1 + deps/v8/src/ast/ast-expression-rewriter.cc | 6 +- deps/v8/src/ast/ast-expression-rewriter.h | 2 - deps/v8/src/ast/ast-expression-visitor.cc | 5 +- deps/v8/src/ast/ast-expression-visitor.h | 2 - deps/v8/src/ast/ast-literal-reindexer.cc | 9 +- deps/v8/src/ast/ast-numbering.cc | 17 +- deps/v8/src/ast/ast-value-factory.cc | 2 + deps/v8/src/ast/ast-value-factory.h | 3 + deps/v8/src/ast/ast.cc | 43 +- deps/v8/src/ast/ast.h | 358 +- deps/v8/src/ast/modules.cc | 1 - deps/v8/src/ast/modules.h | 19 +- deps/v8/src/ast/prettyprinter.cc | 80 +- deps/v8/src/ast/prettyprinter.h | 3 + deps/v8/src/ast/scopeinfo.cc | 76 +- deps/v8/src/ast/scopes.cc | 170 +- deps/v8/src/ast/scopes.h | 57 +- deps/v8/src/ast/variables.cc | 3 - deps/v8/src/ast/variables.h | 56 +- deps/v8/src/bailout-reason.h | 14 +- deps/v8/src/base.isolate | 7 + deps/v8/src/base/atomicops.h | 2 + .../src/base/atomicops_internals_s390_gcc.h | 152 + deps/v8/src/base/bits.h | 14 + deps/v8/src/base/cpu.cc | 15 +- deps/v8/src/base/cpu.h | 5 + deps/v8/src/bootstrapper.cc | 355 +- deps/v8/src/bootstrapper.h | 6 +- deps/v8/src/builtins.cc | 1086 ++- deps/v8/src/builtins.h | 133 +- deps/v8/src/code-factory.cc | 93 +- deps/v8/src/code-factory.h | 33 +- deps/v8/src/code-stubs-hydrogen.cc | 84 +- deps/v8/src/code-stubs.cc | 106 +- deps/v8/src/code-stubs.h | 184 +- deps/v8/src/codegen.cc | 11 +- deps/v8/src/compiler.cc | 179 +- deps/v8/src/compiler.h | 115 +- deps/v8/src/compiler/access-builder.cc | 14 +- deps/v8/src/compiler/access-info.cc | 15 +- .../v8/src/compiler/arm/code-generator-arm.cc | 130 +- .../src/compiler/arm/instruction-codes-arm.h | 7 +- .../compiler/arm/instruction-scheduler-arm.cc | 6 + .../compiler/arm/instruction-selector-arm.cc | 166 +- .../compiler/arm64/code-generator-arm64.cc | 133 +- .../compiler/arm64/instruction-codes-arm64.h | 15 +- .../arm64/instruction-scheduler-arm64.cc | 12 +- .../arm64/instruction-selector-arm64.cc | 90 +- deps/v8/src/compiler/ast-graph-builder.cc | 360 +- deps/v8/src/compiler/ast-graph-builder.h | 12 +- .../compiler/ast-loop-assignment-analyzer.cc | 6 +- .../src/compiler/bytecode-branch-analysis.cc | 98 +- .../src/compiler/bytecode-branch-analysis.h | 34 +- .../v8/src/compiler/bytecode-graph-builder.cc | 1574 ++-- deps/v8/src/compiler/bytecode-graph-builder.h | 233 +- deps/v8/src/compiler/c-linkage.cc | 20 +- deps/v8/src/compiler/change-lowering.cc | 76 + deps/v8/src/compiler/change-lowering.h | 8 + deps/v8/src/compiler/code-generator.cc | 19 +- deps/v8/src/compiler/code-stub-assembler.cc | 485 +- deps/v8/src/compiler/code-stub-assembler.h | 210 +- deps/v8/src/compiler/common-operator.cc | 11 +- deps/v8/src/compiler/common-operator.h | 10 +- .../src/compiler/escape-analysis-reducer.cc | 280 +- .../v8/src/compiler/escape-analysis-reducer.h | 13 +- deps/v8/src/compiler/escape-analysis.cc | 1145 +-- deps/v8/src/compiler/escape-analysis.h | 104 +- .../src/compiler/fast-accessor-assembler.cc | 44 +- .../v8/src/compiler/fast-accessor-assembler.h | 9 +- deps/v8/src/compiler/frame-states.h | 16 +- deps/v8/src/compiler/frame.h | 33 +- deps/v8/src/compiler/graph-trimmer.cc | 3 +- deps/v8/src/compiler/graph-trimmer.h | 8 +- deps/v8/src/compiler/graph.cc | 6 +- deps/v8/src/compiler/graph.h | 8 +- .../src/compiler/ia32/code-generator-ia32.cc | 99 +- .../compiler/ia32/instruction-codes-ia32.h | 4 + .../ia32/instruction-scheduler-ia32.cc | 4 + .../ia32/instruction-selector-ia32.cc | 130 +- deps/v8/src/compiler/instruction-codes.h | 5 +- deps/v8/src/compiler/instruction-scheduler.cc | 101 +- deps/v8/src/compiler/instruction-scheduler.h | 64 +- deps/v8/src/compiler/instruction-selector.cc | 108 +- deps/v8/src/compiler/instruction-selector.h | 10 +- deps/v8/src/compiler/instruction.cc | 126 +- deps/v8/src/compiler/instruction.h | 41 +- deps/v8/src/compiler/int64-lowering.cc | 299 + deps/v8/src/compiler/int64-lowering.h | 63 + deps/v8/src/compiler/interpreter-assembler.cc | 751 -- deps/v8/src/compiler/interpreter-assembler.h | 224 - deps/v8/src/compiler/ir-operations.txt | 0 deps/v8/src/compiler/js-builtin-reducer.cc | 35 +- deps/v8/src/compiler/js-builtin-reducer.h | 8 +- deps/v8/src/compiler/js-call-reducer.cc | 32 +- deps/v8/src/compiler/js-call-reducer.h | 9 +- deps/v8/src/compiler/js-context-relaxation.cc | 67 - deps/v8/src/compiler/js-context-relaxation.h | 32 - deps/v8/src/compiler/js-create-lowering.cc | 1096 +++ deps/v8/src/compiler/js-create-lowering.h | 99 + deps/v8/src/compiler/js-generic-lowering.cc | 506 +- deps/v8/src/compiler/js-generic-lowering.h | 2 +- .../js-global-object-specialization.cc | 92 +- .../js-global-object-specialization.h | 14 +- deps/v8/src/compiler/js-inlining.cc | 71 +- deps/v8/src/compiler/js-intrinsic-lowering.cc | 174 +- deps/v8/src/compiler/js-intrinsic-lowering.h | 3 - .../js-native-context-specialization.cc | 96 +- .../js-native-context-specialization.h | 10 +- deps/v8/src/compiler/js-operator.cc | 389 +- deps/v8/src/compiler/js-operator.h | 158 +- deps/v8/src/compiler/js-typed-lowering.cc | 1137 +-- deps/v8/src/compiler/js-typed-lowering.h | 27 - deps/v8/src/compiler/jump-threading.cc | 13 +- deps/v8/src/compiler/jump-threading.h | 2 +- deps/v8/src/compiler/linkage.cc | 110 +- deps/v8/src/compiler/linkage.h | 40 +- deps/v8/src/compiler/live-range-separator.cc | 9 +- deps/v8/src/compiler/liveness-analyzer.h | 4 + deps/v8/src/compiler/machine-operator.cc | 40 +- deps/v8/src/compiler/machine-operator.h | 15 +- .../src/compiler/mips/code-generator-mips.cc | 134 +- .../compiler/mips/instruction-codes-mips.h | 5 +- .../mips/instruction-selector-mips.cc | 58 +- .../compiler/mips64/code-generator-mips64.cc | 207 +- .../mips64/instruction-codes-mips64.h | 7 +- .../mips64/instruction-selector-mips64.cc | 58 +- deps/v8/src/compiler/move-optimizer.cc | 340 +- deps/v8/src/compiler/move-optimizer.h | 21 +- deps/v8/src/compiler/node-properties.cc | 14 +- deps/v8/src/compiler/opcodes.h | 10 +- deps/v8/src/compiler/operator-properties.cc | 1 - deps/v8/src/compiler/pipeline.cc | 100 +- deps/v8/src/compiler/pipeline.h | 21 +- .../v8/src/compiler/ppc/code-generator-ppc.cc | 106 +- .../src/compiler/ppc/instruction-codes-ppc.h | 3 +- .../compiler/ppc/instruction-scheduler-ppc.cc | 2 + .../compiler/ppc/instruction-selector-ppc.cc | 49 +- deps/v8/src/compiler/raw-machine-assembler.cc | 95 +- deps/v8/src/compiler/raw-machine-assembler.h | 89 +- .../compiler/register-allocator-verifier.cc | 21 +- deps/v8/src/compiler/register-allocator.cc | 521 +- deps/v8/src/compiler/register-allocator.h | 34 +- deps/v8/src/compiler/representation-change.cc | 4 +- deps/v8/src/compiler/simplified-lowering.cc | 49 +- deps/v8/src/compiler/simplified-lowering.h | 2 - deps/v8/src/compiler/simplified-operator.cc | 4 +- deps/v8/src/compiler/simplified-operator.h | 6 +- deps/v8/src/compiler/typer.cc | 318 +- deps/v8/src/compiler/typer.h | 6 +- deps/v8/src/compiler/verifier.cc | 20 +- deps/v8/src/compiler/wasm-compiler.cc | 587 +- deps/v8/src/compiler/wasm-compiler.h | 18 +- deps/v8/src/compiler/wasm-linkage.cc | 124 +- .../v8/src/compiler/x64/code-generator-x64.cc | 104 +- .../src/compiler/x64/instruction-codes-x64.h | 4 + .../compiler/x64/instruction-scheduler-x64.cc | 4 + .../compiler/x64/instruction-selector-x64.cc | 124 +- .../v8/src/compiler/x87/code-generator-x87.cc | 167 +- .../src/compiler/x87/instruction-codes-x87.h | 5 +- .../compiler/x87/instruction-selector-x87.cc | 133 +- deps/v8/src/context-measure.cc | 2 +- deps/v8/src/contexts-inl.h | 3 +- deps/v8/src/contexts.cc | 19 +- deps/v8/src/contexts.h | 25 +- deps/v8/src/conversions-inl.h | 4 + deps/v8/src/conversions.h | 2 +- deps/v8/src/counters.cc | 138 + deps/v8/src/counters.h | 194 +- deps/v8/src/crankshaft/arm/lithium-arm.cc | 38 +- deps/v8/src/crankshaft/arm/lithium-arm.h | 66 - .../src/crankshaft/arm/lithium-codegen-arm.cc | 158 +- .../src/crankshaft/arm/lithium-codegen-arm.h | 14 +- deps/v8/src/crankshaft/arm64/lithium-arm64.cc | 40 +- deps/v8/src/crankshaft/arm64/lithium-arm64.h | 66 - .../crankshaft/arm64/lithium-codegen-arm64.cc | 143 +- .../crankshaft/arm64/lithium-codegen-arm64.h | 14 +- .../src/crankshaft/hydrogen-alias-analysis.h | 1 - .../src/crankshaft/hydrogen-instructions.cc | 128 +- .../v8/src/crankshaft/hydrogen-instructions.h | 283 +- .../crankshaft/hydrogen-load-elimination.cc | 2 - .../src/crankshaft/hydrogen-range-analysis.cc | 6 - .../crankshaft/hydrogen-store-elimination.cc | 2 - deps/v8/src/crankshaft/hydrogen-types.cc | 36 +- deps/v8/src/crankshaft/hydrogen-types.h | 7 +- deps/v8/src/crankshaft/hydrogen.cc | 938 ++- deps/v8/src/crankshaft/hydrogen.h | 80 +- .../crankshaft/ia32/lithium-codegen-ia32.cc | 145 +- .../crankshaft/ia32/lithium-codegen-ia32.h | 14 +- deps/v8/src/crankshaft/ia32/lithium-ia32.cc | 57 +- deps/v8/src/crankshaft/ia32/lithium-ia32.h | 66 - deps/v8/src/crankshaft/lithium-codegen.cc | 4 +- deps/v8/src/crankshaft/lithium.cc | 22 +- deps/v8/src/crankshaft/lithium.h | 13 +- .../crankshaft/mips/lithium-codegen-mips.cc | 196 +- .../crankshaft/mips/lithium-codegen-mips.h | 14 +- deps/v8/src/crankshaft/mips/lithium-mips.cc | 38 +- deps/v8/src/crankshaft/mips/lithium-mips.h | 66 - .../mips64/lithium-codegen-mips64.cc | 193 +- .../mips64/lithium-codegen-mips64.h | 14 +- .../src/crankshaft/mips64/lithium-mips64.cc | 38 +- .../v8/src/crankshaft/mips64/lithium-mips64.h | 66 - .../src/crankshaft/ppc/lithium-codegen-ppc.cc | 212 +- .../src/crankshaft/ppc/lithium-codegen-ppc.h | 10 +- deps/v8/src/crankshaft/ppc/lithium-ppc.cc | 37 +- deps/v8/src/crankshaft/ppc/lithium-ppc.h | 62 - deps/v8/src/crankshaft/typing.cc | 63 +- .../src/crankshaft/x64/lithium-codegen-x64.cc | 148 +- .../src/crankshaft/x64/lithium-codegen-x64.h | 14 +- deps/v8/src/crankshaft/x64/lithium-x64.cc | 54 +- deps/v8/src/crankshaft/x64/lithium-x64.h | 64 - .../src/crankshaft/x87/lithium-codegen-x87.cc | 143 +- .../src/crankshaft/x87/lithium-codegen-x87.h | 14 +- deps/v8/src/crankshaft/x87/lithium-x87.cc | 56 +- deps/v8/src/crankshaft/x87/lithium-x87.h | 62 - deps/v8/src/d8.cc | 8 + deps/v8/src/debug/arm/debug-arm.cc | 4 + deps/v8/src/debug/arm64/debug-arm64.cc | 4 + deps/v8/src/debug/debug-evaluate.cc | 7 +- deps/v8/src/debug/debug-frames.cc | 51 +- deps/v8/src/debug/debug-frames.h | 9 +- deps/v8/src/debug/debug-scopes.cc | 26 +- deps/v8/src/debug/debug-scopes.h | 5 +- deps/v8/src/debug/debug.cc | 519 +- deps/v8/src/debug/debug.h | 147 +- deps/v8/src/debug/debug.js | 83 +- deps/v8/src/debug/ia32/debug-ia32.cc | 3 + deps/v8/src/debug/liveedit.cc | 4 +- deps/v8/src/debug/mips/debug-mips.cc | 4 + deps/v8/src/debug/mips64/debug-mips64.cc | 4 + deps/v8/src/debug/mirrors.js | 2 +- deps/v8/src/debug/ppc/debug-ppc.cc | 4 + deps/v8/src/debug/x64/debug-x64.cc | 3 + deps/v8/src/debug/x87/debug-x87.cc | 3 + deps/v8/src/deoptimizer.cc | 727 +- deps/v8/src/deoptimizer.h | 100 +- deps/v8/src/elements-kind.cc | 5 + deps/v8/src/elements-kind.h | 20 +- deps/v8/src/elements.cc | 496 +- deps/v8/src/elements.h | 57 +- deps/v8/src/execution.cc | 18 +- deps/v8/src/execution.h | 4 - .../externalize-string-extension.cc | 4 +- deps/v8/src/factory.cc | 65 +- deps/v8/src/factory.h | 34 +- deps/v8/src/field-type.cc | 91 + deps/v8/src/field-type.h | 49 + deps/v8/src/flag-definitions.h | 93 +- deps/v8/src/frames.cc | 241 +- deps/v8/src/frames.h | 132 +- .../src/full-codegen/arm/full-codegen-arm.cc | 1187 +-- .../full-codegen/arm64/full-codegen-arm64.cc | 1164 +-- deps/v8/src/full-codegen/full-codegen.cc | 407 +- deps/v8/src/full-codegen/full-codegen.h | 136 +- .../full-codegen/ia32/full-codegen-ia32.cc | 1220 +--- .../full-codegen/mips/full-codegen-mips.cc | 1198 +--- .../mips64/full-codegen-mips64.cc | 1195 +--- .../src/full-codegen/ppc/full-codegen-ppc.cc | 1215 +--- .../src/full-codegen/x64/full-codegen-x64.cc | 1238 +--- .../src/full-codegen/x87/full-codegen-x87.cc | 1220 +--- deps/v8/src/global-handles.cc | 14 +- deps/v8/src/globals.h | 91 +- deps/v8/src/heap-symbols.h | 203 + deps/v8/src/heap/array-buffer-tracker.cc | 3 + deps/v8/src/heap/array-buffer-tracker.h | 2 + deps/v8/src/heap/heap-inl.h | 145 +- deps/v8/src/heap/heap.cc | 416 +- deps/v8/src/heap/heap.h | 362 +- deps/v8/src/heap/incremental-marking.cc | 86 +- deps/v8/src/heap/incremental-marking.h | 8 +- deps/v8/src/heap/mark-compact-inl.h | 15 +- deps/v8/src/heap/mark-compact.cc | 709 +- deps/v8/src/heap/mark-compact.h | 43 +- deps/v8/src/heap/memory-reducer.cc | 20 +- deps/v8/src/heap/memory-reducer.h | 4 +- deps/v8/src/heap/objects-visiting-inl.h | 4 +- deps/v8/src/heap/objects-visiting.cc | 1 - deps/v8/src/heap/remembered-set.cc | 69 + deps/v8/src/heap/remembered-set.h | 157 + deps/v8/src/heap/scavenger-inl.h | 2 +- deps/v8/src/heap/slot-set.h | 219 + deps/v8/src/heap/slots-buffer.cc | 5 +- deps/v8/src/heap/spaces-inl.h | 133 +- deps/v8/src/heap/spaces.cc | 607 +- deps/v8/src/heap/spaces.h | 901 +-- deps/v8/src/heap/store-buffer-inl.h | 44 +- deps/v8/src/heap/store-buffer.cc | 556 +- deps/v8/src/heap/store-buffer.h | 201 +- deps/v8/src/ia32/assembler-ia32-inl.h | 16 +- deps/v8/src/ia32/assembler-ia32.cc | 14 + deps/v8/src/ia32/assembler-ia32.h | 7 +- deps/v8/src/ia32/builtins-ia32.cc | 690 +- deps/v8/src/ia32/code-stubs-ia32.cc | 2831 ++++---- deps/v8/src/ia32/code-stubs-ia32.h | 26 +- deps/v8/src/ia32/deoptimizer-ia32.cc | 27 +- deps/v8/src/ia32/disasm-ia32.cc | 58 +- .../v8/src/ia32/interface-descriptors-ia32.cc | 60 +- deps/v8/src/ia32/macro-assembler-ia32.cc | 218 +- deps/v8/src/ia32/macro-assembler-ia32.h | 34 +- deps/v8/src/ic/arm/handler-compiler-arm.cc | 97 +- deps/v8/src/ic/arm/ic-arm.cc | 57 +- .../v8/src/ic/arm64/handler-compiler-arm64.cc | 88 +- deps/v8/src/ic/arm64/ic-arm64.cc | 62 +- deps/v8/src/ic/call-optimization.cc | 32 +- deps/v8/src/ic/call-optimization.h | 3 +- deps/v8/src/ic/handler-compiler.cc | 69 +- deps/v8/src/ic/handler-compiler.h | 15 +- deps/v8/src/ic/ia32/handler-compiler-ia32.cc | 76 +- deps/v8/src/ic/ia32/ic-ia32.cc | 53 +- deps/v8/src/ic/ic-compiler.cc | 5 +- deps/v8/src/ic/ic-inl.h | 3 - deps/v8/src/ic/ic-state.cc | 28 +- deps/v8/src/ic/ic-state.h | 48 +- deps/v8/src/ic/ic.cc | 303 +- deps/v8/src/ic/ic.h | 46 +- deps/v8/src/ic/mips/handler-compiler-mips.cc | 109 +- deps/v8/src/ic/mips/ic-mips.cc | 72 +- deps/v8/src/ic/mips/stub-cache-mips.cc | 6 +- .../src/ic/mips64/handler-compiler-mips64.cc | 109 +- deps/v8/src/ic/mips64/ic-mips64.cc | 56 +- deps/v8/src/ic/mips64/stub-cache-mips64.cc | 6 +- deps/v8/src/ic/ppc/handler-compiler-ppc.cc | 99 +- deps/v8/src/ic/ppc/ic-ppc.cc | 57 +- deps/v8/src/ic/x64/handler-compiler-x64.cc | 83 +- deps/v8/src/ic/x64/ic-x64.cc | 53 +- deps/v8/src/ic/x87/handler-compiler-x87.cc | 76 +- deps/v8/src/ic/x87/ic-x87.cc | 53 +- deps/v8/src/identity-map.cc | 18 +- deps/v8/src/identity-map.h | 6 + deps/v8/src/interface-descriptors.cc | 243 +- deps/v8/src/interface-descriptors.h | 118 +- deps/v8/src/interpreter/DEPS | 3 - .../src/interpreter/bytecode-array-builder.cc | 766 +- .../src/interpreter/bytecode-array-builder.h | 206 +- .../interpreter/bytecode-array-iterator.cc | 71 +- .../src/interpreter/bytecode-array-iterator.h | 4 +- deps/v8/src/interpreter/bytecode-generator.cc | 1464 +++- deps/v8/src/interpreter/bytecode-generator.h | 79 +- .../bytecode-register-allocator.cc | 175 +- .../interpreter/bytecode-register-allocator.h | 67 +- deps/v8/src/interpreter/bytecode-traits.h | 69 +- deps/v8/src/interpreter/bytecodes.cc | 303 +- deps/v8/src/interpreter/bytecodes.h | 258 +- .../src/interpreter/constant-array-builder.cc | 14 +- .../src/interpreter/constant-array-builder.h | 12 +- .../src/interpreter/control-flow-builders.cc | 51 + .../src/interpreter/control-flow-builders.h | 47 + .../src/interpreter/handler-table-builder.cc | 73 + .../src/interpreter/handler-table-builder.h | 61 + .../src/interpreter/interpreter-assembler.cc | 546 ++ .../src/interpreter/interpreter-assembler.h | 205 + deps/v8/src/interpreter/interpreter.cc | 1038 +-- deps/v8/src/interpreter/interpreter.h | 78 +- .../v8/src/interpreter/register-translator.cc | 173 + deps/v8/src/interpreter/register-translator.h | 119 + .../src/interpreter/source-position-table.cc | 84 + .../src/interpreter/source-position-table.h | 82 + deps/v8/src/isolate.cc | 159 +- deps/v8/src/isolate.h | 19 +- deps/v8/src/js/array.js | 119 +- deps/v8/src/js/generator.js | 45 +- deps/v8/src/js/harmony-reflect.js | 37 - deps/v8/src/js/i18n.js | 50 +- deps/v8/src/js/json.js | 5 +- deps/v8/src/js/macros.py | 8 +- deps/v8/src/js/math.js | 71 +- deps/v8/src/js/prologue.js | 3 - deps/v8/src/js/proxy.js | 39 - deps/v8/src/js/regexp.js | 209 +- deps/v8/src/js/runtime.js | 53 +- deps/v8/src/js/spread.js | 4 +- deps/v8/src/js/string.js | 326 +- deps/v8/src/js/symbol.js | 22 +- deps/v8/src/js/typedarray.js | 78 +- deps/v8/src/js/v8natives.js | 94 +- deps/v8/src/{parsing => }/json-parser.h | 30 +- deps/v8/src/json-stringifier.h | 3 +- deps/v8/src/key-accumulator.cc | 11 +- deps/v8/src/key-accumulator.h | 17 +- deps/v8/src/libplatform/default-platform.cc | 5 + deps/v8/src/libplatform/default-platform.h | 1 + deps/v8/src/list.h | 6 +- deps/v8/src/log-inl.h | 13 - deps/v8/src/log.cc | 6 +- deps/v8/src/log.h | 4 +- deps/v8/src/lookup.cc | 353 +- deps/v8/src/lookup.h | 77 +- deps/v8/src/machine-type.cc | 2 + deps/v8/src/machine-type.h | 9 + deps/v8/src/messages.cc | 11 +- deps/v8/src/messages.h | 27 +- deps/v8/src/mips/assembler-mips-inl.h | 29 +- deps/v8/src/mips/assembler-mips.cc | 64 +- deps/v8/src/mips/assembler-mips.h | 23 +- deps/v8/src/mips/builtins-mips.cc | 726 +- deps/v8/src/mips/code-stubs-mips.cc | 2614 +++---- deps/v8/src/mips/codegen-mips.cc | 12 +- deps/v8/src/mips/constants-mips.cc | 2 +- deps/v8/src/mips/constants-mips.h | 21 +- deps/v8/src/mips/deoptimizer-mips.cc | 27 +- deps/v8/src/mips/disasm-mips.cc | 2 + .../v8/src/mips/interface-descriptors-mips.cc | 61 +- deps/v8/src/mips/macro-assembler-mips.cc | 194 +- deps/v8/src/mips/macro-assembler-mips.h | 62 +- deps/v8/src/mips/simulator-mips.cc | 254 +- deps/v8/src/mips/simulator-mips.h | 6 +- deps/v8/src/mips64/assembler-mips64-inl.h | 32 +- deps/v8/src/mips64/assembler-mips64.cc | 3 +- deps/v8/src/mips64/assembler-mips64.h | 5 +- deps/v8/src/mips64/builtins-mips64.cc | 713 +- deps/v8/src/mips64/code-stubs-mips64.cc | 2560 ++++--- deps/v8/src/mips64/codegen-mips64.cc | 6 +- deps/v8/src/mips64/constants-mips64.h | 25 +- deps/v8/src/mips64/deoptimizer-mips64.cc | 39 +- .../mips64/interface-descriptors-mips64.cc | 61 +- deps/v8/src/mips64/macro-assembler-mips64.cc | 322 +- deps/v8/src/mips64/macro-assembler-mips64.h | 74 +- deps/v8/src/mips64/simulator-mips64.cc | 270 +- deps/v8/src/mips64/simulator-mips64.h | 28 - deps/v8/src/objects-body-descriptors-inl.h | 8 +- deps/v8/src/objects-debug.cc | 47 +- deps/v8/src/objects-inl.h | 779 +- deps/v8/src/objects-printer.cc | 113 +- deps/v8/src/objects.cc | 1968 ++--- deps/v8/src/objects.h | 878 +-- deps/v8/src/optimizing-compile-dispatcher.cc | 6 +- deps/v8/src/ostreams.cc | 16 + deps/v8/src/ostreams.h | 10 + deps/v8/src/parsing/OWNERS | 1 + deps/v8/src/parsing/expression-classifier.h | 71 +- deps/v8/src/parsing/parser-base.h | 552 +- deps/v8/src/parsing/parser.cc | 2467 +++++-- deps/v8/src/parsing/parser.h | 86 +- deps/v8/src/parsing/pattern-rewriter.cc | 18 +- deps/v8/src/parsing/preparser.cc | 77 +- deps/v8/src/parsing/preparser.h | 77 +- deps/v8/src/parsing/rewriter.cc | 14 +- deps/v8/src/parsing/scanner.cc | 12 +- deps/v8/src/parsing/scanner.h | 6 + deps/v8/src/parsing/token.h | 16 + deps/v8/src/ppc/assembler-ppc-inl.h | 42 +- deps/v8/src/ppc/assembler-ppc.cc | 21 +- deps/v8/src/ppc/assembler-ppc.h | 42 +- deps/v8/src/ppc/builtins-ppc.cc | 648 +- deps/v8/src/ppc/code-stubs-ppc.cc | 2782 +++---- deps/v8/src/ppc/codegen-ppc.cc | 8 +- deps/v8/src/ppc/cpu-ppc.cc | 2 +- deps/v8/src/ppc/deoptimizer-ppc.cc | 28 +- deps/v8/src/ppc/disasm-ppc.cc | 8 +- deps/v8/src/ppc/interface-descriptors-ppc.cc | 58 +- deps/v8/src/ppc/macro-assembler-ppc.cc | 243 +- deps/v8/src/ppc/macro-assembler-ppc.h | 55 +- deps/v8/src/ppc/simulator-ppc.cc | 175 +- deps/v8/src/profiler/cpu-profiler.cc | 13 +- deps/v8/src/profiler/cpu-profiler.h | 6 +- deps/v8/src/profiler/heap-profiler.cc | 26 + deps/v8/src/profiler/heap-profiler.h | 6 + .../src/profiler/heap-snapshot-generator.cc | 25 +- deps/v8/src/profiler/profile-generator.cc | 36 +- deps/v8/src/profiler/profile-generator.h | 8 +- deps/v8/src/profiler/sampler.cc | 27 +- deps/v8/src/profiler/sampler.h | 19 +- .../v8/src/profiler/sampling-heap-profiler.cc | 260 + deps/v8/src/profiler/sampling-heap-profiler.h | 166 + deps/v8/src/property-descriptor.cc | 38 +- deps/v8/src/property-descriptor.h | 10 + deps/v8/src/property-details.h | 5 +- deps/v8/src/property.cc | 6 + deps/v8/src/property.h | 35 +- deps/v8/src/prototype.h | 106 +- .../regexp/arm/regexp-macro-assembler-arm.cc | 16 +- .../regexp/arm/regexp-macro-assembler-arm.h | 2 +- .../arm64/regexp-macro-assembler-arm64.cc | 16 +- .../arm64/regexp-macro-assembler-arm64.h | 2 +- deps/v8/src/regexp/bytecodes-irregexp.h | 106 +- .../ia32/regexp-macro-assembler-ia32.cc | 19 +- .../regexp/ia32/regexp-macro-assembler-ia32.h | 2 +- deps/v8/src/regexp/interpreter-irregexp.cc | 60 +- deps/v8/src/regexp/interpreter-irregexp.h | 5 +- deps/v8/src/regexp/jsregexp-inl.h | 5 +- deps/v8/src/regexp/jsregexp.cc | 847 ++- deps/v8/src/regexp/jsregexp.h | 83 +- .../mips/regexp-macro-assembler-mips.cc | 16 +- .../regexp/mips/regexp-macro-assembler-mips.h | 2 +- .../mips64/regexp-macro-assembler-mips64.cc | 21 +- .../mips64/regexp-macro-assembler-mips64.h | 42 +- .../regexp/ppc/regexp-macro-assembler-ppc.cc | 17 +- .../regexp/ppc/regexp-macro-assembler-ppc.h | 2 +- deps/v8/src/regexp/regexp-ast.cc | 4 +- deps/v8/src/regexp/regexp-ast.h | 62 +- .../regexp-macro-assembler-irregexp-inl.h | 8 +- .../regexp/regexp-macro-assembler-irregexp.cc | 17 +- .../regexp/regexp-macro-assembler-irregexp.h | 10 +- .../regexp/regexp-macro-assembler-tracer.cc | 8 +- .../regexp/regexp-macro-assembler-tracer.h | 2 +- deps/v8/src/regexp/regexp-macro-assembler.cc | 112 +- deps/v8/src/regexp/regexp-macro-assembler.h | 37 +- deps/v8/src/regexp/regexp-parser.cc | 523 +- deps/v8/src/regexp/regexp-parser.h | 44 +- .../regexp/x64/regexp-macro-assembler-x64.cc | 29 +- .../regexp/x64/regexp-macro-assembler-x64.h | 2 +- .../regexp/x87/regexp-macro-assembler-x87.cc | 20 +- .../regexp/x87/regexp-macro-assembler-x87.h | 2 +- deps/v8/src/runtime-profiler.cc | 263 +- deps/v8/src/runtime-profiler.h | 5 +- deps/v8/src/runtime/runtime-array.cc | 28 +- deps/v8/src/runtime/runtime-classes.cc | 80 +- deps/v8/src/runtime/runtime-compiler.cc | 20 +- deps/v8/src/runtime/runtime-debug.cc | 54 +- deps/v8/src/runtime/runtime-forin.cc | 108 +- deps/v8/src/runtime/runtime-function.cc | 31 +- deps/v8/src/runtime/runtime-generator.cc | 65 +- deps/v8/src/runtime/runtime-i18n.cc | 3 +- deps/v8/src/runtime/runtime-internal.cc | 22 +- deps/v8/src/runtime/runtime-interpreter.cc | 162 +- deps/v8/src/runtime/runtime-json.cc | 2 +- deps/v8/src/runtime/runtime-literals.cc | 54 - deps/v8/src/runtime/runtime-maths.cc | 41 +- deps/v8/src/runtime/runtime-object.cc | 258 +- deps/v8/src/runtime/runtime-operators.cc | 133 - deps/v8/src/runtime/runtime-proxy.cc | 6 +- deps/v8/src/runtime/runtime-regexp.cc | 6 +- deps/v8/src/runtime/runtime-scopes.cc | 456 +- deps/v8/src/runtime/runtime-simd.cc | 40 - deps/v8/src/runtime/runtime-strings.cc | 2 +- deps/v8/src/runtime/runtime-test.cc | 52 +- deps/v8/src/runtime/runtime-typedarray.cc | 36 - deps/v8/src/runtime/runtime-utils.h | 16 + deps/v8/src/runtime/runtime.cc | 7 + deps/v8/src/runtime/runtime.h | 807 +-- deps/v8/src/snapshot/serialize.cc | 135 +- deps/v8/src/snapshot/serialize.h | 24 +- deps/v8/src/source-position.h | 87 + deps/v8/src/startup-data-util.cc | 5 +- deps/v8/src/string-stream.cc | 19 +- deps/v8/src/tracing/trace-event.h | 6 +- deps/v8/src/transitions-inl.h | 4 +- deps/v8/src/transitions.cc | 14 +- deps/v8/src/type-cache.cc | 1 - deps/v8/src/type-cache.h | 4 - deps/v8/src/type-feedback-vector.cc | 9 +- deps/v8/src/type-feedback-vector.h | 1 + deps/v8/src/type-info.cc | 6 +- deps/v8/src/types-inl.h | 487 -- deps/v8/src/types.cc | 579 +- deps/v8/src/types.h | 1262 ++-- deps/v8/src/typing-asm.cc | 296 +- deps/v8/src/typing-asm.h | 5 +- deps/v8/src/utils-inl.h | 37 + deps/v8/src/utils.h | 97 +- deps/v8/src/vm-state-inl.h | 26 +- deps/v8/src/vm-state.h | 2 + deps/v8/src/wasm/asm-wasm-builder.cc | 440 +- deps/v8/src/wasm/asm-wasm-builder.h | 5 +- deps/v8/src/wasm/ast-decoder.cc | 979 +-- deps/v8/src/wasm/ast-decoder.h | 213 +- deps/v8/src/wasm/decoder.h | 213 +- deps/v8/src/wasm/encoder.cc | 82 +- deps/v8/src/wasm/encoder.h | 19 +- deps/v8/src/wasm/module-decoder.cc | 195 +- deps/v8/src/wasm/wasm-js.cc | 172 +- deps/v8/src/wasm/wasm-macro-gen.h | 9 +- deps/v8/src/wasm/wasm-module.cc | 420 +- deps/v8/src/wasm/wasm-module.h | 95 +- deps/v8/src/wasm/wasm-opcodes.cc | 14 + deps/v8/src/wasm/wasm-opcodes.h | 8 +- deps/v8/src/x64/assembler-x64-inl.h | 23 +- deps/v8/src/x64/assembler-x64.cc | 11 + deps/v8/src/x64/assembler-x64.h | 20 +- deps/v8/src/x64/builtins-x64.cc | 683 +- deps/v8/src/x64/code-stubs-x64.cc | 2622 +++---- deps/v8/src/x64/deoptimizer-x64.cc | 23 +- deps/v8/src/x64/disasm-x64.cc | 12 + deps/v8/src/x64/interface-descriptors-x64.cc | 59 +- deps/v8/src/x64/macro-assembler-x64.cc | 205 +- deps/v8/src/x64/macro-assembler-x64.h | 30 +- deps/v8/src/x87/assembler-x87-inl.h | 16 +- deps/v8/src/x87/assembler-x87.cc | 5 + deps/v8/src/x87/assembler-x87.h | 6 +- deps/v8/src/x87/builtins-x87.cc | 705 +- deps/v8/src/x87/code-stubs-x87.cc | 2608 ++++--- deps/v8/src/x87/code-stubs-x87.h | 16 +- deps/v8/src/x87/deoptimizer-x87.cc | 27 +- deps/v8/src/x87/disasm-x87.cc | 48 +- deps/v8/src/x87/interface-descriptors-x87.cc | 57 +- deps/v8/src/x87/macro-assembler-x87.cc | 191 +- deps/v8/src/x87/macro-assembler-x87.h | 31 +- deps/v8/test/bot_default.gyp | 1 + deps/v8/test/bot_default.isolate | 6 + deps/v8/test/cctest/cctest.gyp | 40 +- deps/v8/test/cctest/cctest.isolate | 5 +- deps/v8/test/cctest/cctest.status | 227 +- deps/v8/test/cctest/cctest_exe.isolate | 13 + deps/v8/test/cctest/compiler/c-signature.h | 8 +- deps/v8/test/cctest/compiler/call-tester.h | 18 +- deps/v8/test/cctest/compiler/codegen-tester.h | 53 +- .../v8/test/cctest/compiler/function-tester.h | 37 +- .../compiler/test-code-stub-assembler.cc | 129 +- .../test-js-context-specialization.cc | 4 +- .../cctest/compiler/test-js-typed-lowering.cc | 224 +- .../cctest/compiler/test-jump-threading.cc | 2 +- deps/v8/test/cctest/compiler/test-linkage.cc | 28 +- deps/v8/test/cctest/compiler/test-pipeline.cc | 2 +- .../test-run-bytecode-graph-builder.cc | 829 ++- .../v8/test/cctest/compiler/test-run-deopt.cc | 3 - .../cctest/compiler/test-run-intrinsics.cc | 34 - .../test/cctest/compiler/test-run-jscalls.cc | 36 +- .../cctest/compiler/test-run-jsexceptions.cc | 7 - .../test/cctest/compiler/test-run-machops.cc | 208 +- .../cctest/compiler/test-run-native-calls.cc | 93 + .../v8/test/cctest/compiler/test-run-stubs.cc | 9 +- deps/v8/test/cctest/compiler/value-helper.h | 17 + deps/v8/test/cctest/heap/heap-tester.h | 21 +- deps/v8/test/cctest/heap/test-heap.cc | 132 +- deps/v8/test/cctest/heap/test-spaces.cc | 441 +- .../bytecode-expectations-printer.cc | 301 + .../bytecode-expectations-printer.h | 119 + .../generate-bytecode-expectations.cc | 469 ++ .../interpreter/test-bytecode-generator.cc | 4726 +++++++++--- .../cctest/interpreter/test-interpreter.cc | 1574 ++-- deps/v8/test/cctest/profiler-extension.cc | 36 +- deps/v8/test/cctest/profiler-extension.h | 7 +- deps/v8/test/cctest/test-accessors.cc | 4 +- .../cctest/test-api-fast-accessor-builder.cc | 82 +- deps/v8/test/cctest/test-api-interceptors.cc | 8 +- deps/v8/test/cctest/test-api.cc | 751 +- deps/v8/test/cctest/test-asm-validator.cc | 352 +- deps/v8/test/cctest/test-assembler-arm.cc | 49 + deps/v8/test/cctest/test-assembler-mips.cc | 154 +- deps/v8/test/cctest/test-assembler-mips64.cc | 154 +- .../cctest/test-ast-expression-visitor.cc | 13 +- deps/v8/test/cctest/test-cpu-profiler.cc | 744 +- deps/v8/test/cctest/test-debug.cc | 159 +- deps/v8/test/cctest/test-disasm-arm.cc | 106 +- deps/v8/test/cctest/test-extra.js | 9 + .../test/cctest/test-field-type-tracking.cc | 261 +- deps/v8/test/cctest/test-heap-profiler.cc | 160 +- .../cctest/test-inobject-slack-tracking.cc | 4 +- deps/v8/test/cctest/test-log-stack-tracer.cc | 5 + .../test/cctest/test-macro-assembler-mips.cc | 60 +- .../cctest/test-macro-assembler-mips64.cc | 66 +- deps/v8/test/cctest/test-object-observe.cc | 4 +- deps/v8/test/cctest/test-parsing.cc | 298 +- deps/v8/test/cctest/test-profile-generator.cc | 3 + deps/v8/test/cctest/test-regexp.cc | 175 +- deps/v8/test/cctest/test-transitions.cc | 55 +- deps/v8/test/cctest/test-types.cc | 974 +-- deps/v8/test/cctest/test-unboxed-doubles.cc | 76 +- deps/v8/test/cctest/test-weakmaps.cc | 4 +- deps/v8/test/cctest/test-weaksets.cc | 4 +- deps/v8/test/cctest/trace-extension.cc | 2 +- deps/v8/test/cctest/types-fuzz.h | 229 +- deps/v8/test/cctest/wasm/test-run-wasm-js.cc | 337 +- .../test/cctest/wasm/test-run-wasm-module.cc | 9 + deps/v8/test/cctest/wasm/test-run-wasm.cc | 698 +- deps/v8/test/cctest/wasm/test-signatures.h | 9 + deps/v8/test/cctest/wasm/wasm-run-utils.h | 435 +- deps/v8/test/default.gyp | 1 + deps/v8/test/default.isolate | 6 + deps/v8/test/fuzzer/DEPS | 3 + deps/v8/test/fuzzer/fuzzer-support.cc | 100 + deps/v8/test/fuzzer/fuzzer-support.h | 37 + deps/v8/test/fuzzer/fuzzer.cc | 56 + deps/v8/test/fuzzer/fuzzer.gyp | 134 + deps/v8/test/fuzzer/fuzzer.isolate | 22 + deps/v8/test/fuzzer/fuzzer.status | 7 + deps/v8/test/fuzzer/json.cc | 31 + deps/v8/test/fuzzer/json/json | 1 + deps/v8/test/fuzzer/json/not-json | 1 + deps/v8/test/fuzzer/parser.cc | 42 + deps/v8/test/fuzzer/parser/hello-world | 1 + deps/v8/test/fuzzer/regexp.cc | 75 + deps/v8/test/fuzzer/regexp/test00 | 1 + deps/v8/test/fuzzer/regexp/test01 | 1 + deps/v8/test/fuzzer/regexp/test02 | 1 + deps/v8/test/fuzzer/regexp/test03 | 1 + deps/v8/test/fuzzer/regexp/test04 | 1 + deps/v8/test/fuzzer/regexp/test05 | 1 + deps/v8/test/fuzzer/regexp/test06 | 1 + deps/v8/test/fuzzer/regexp/test07 | 1 + deps/v8/test/fuzzer/regexp/test08 | 1 + deps/v8/test/fuzzer/regexp/test09 | 1 + deps/v8/test/fuzzer/regexp/test10 | 1 + deps/v8/test/fuzzer/regexp/test11 | 1 + deps/v8/test/fuzzer/regexp/test12 | 1 + deps/v8/test/fuzzer/regexp/test13 | 1 + deps/v8/test/fuzzer/regexp/test14 | 1 + deps/v8/test/fuzzer/regexp/test15 | 1 + deps/v8/test/fuzzer/regexp/test16 | 1 + deps/v8/test/fuzzer/regexp/test17 | 1 + deps/v8/test/fuzzer/regexp/test18 | 1 + deps/v8/test/fuzzer/regexp/test19 | 1 + deps/v8/test/fuzzer/regexp/test20 | 1 + deps/v8/test/fuzzer/regexp/test21 | 1 + deps/v8/test/fuzzer/regexp/test22 | 1 + deps/v8/test/fuzzer/regexp/test23 | 1 + deps/v8/test/fuzzer/regexp/test24 | 1 + deps/v8/test/fuzzer/testcfg.py | 48 + deps/v8/test/ignition.isolate | 5 + deps/v8/test/message/arrow-invalid-rest-2.js | 8 + deps/v8/test/message/arrow-invalid-rest-2.out | 4 + deps/v8/test/message/arrow-invalid-rest.js | 8 + deps/v8/test/message/arrow-invalid-rest.out | 4 + deps/v8/test/message/for-loop-invalid-lhs.out | 1 + deps/v8/test/message/function-sent-escaped.js | 10 + .../v8/test/message/function-sent-escaped.out | 4 + .../let-lexical-name-in-array-prohibited.out | 1 + .../let-lexical-name-in-object-prohibited.out | 1 + .../message/let-lexical-name-prohibited.out | 1 + deps/v8/test/message/new-target-escaped.js | 10 + deps/v8/test/message/new-target-escaped.out | 4 + .../message/try-catch-lexical-conflict.out | 2 +- .../message/try-catch-variable-conflict.out | 2 +- deps/v8/test/mjsunit/apply.js | 4 +- deps/v8/test/mjsunit/arguments-opt.js | 132 - deps/v8/test/mjsunit/array-concat.js | 13 + deps/v8/test/mjsunit/array-sort.js | 6 + .../compiler/debug-catch-prediction.js | 143 + .../deopt-materialize-accumulator.js} | 23 +- .../compiler/double-array-to-global.js | 17 + .../test/mjsunit/compiler/inline-arguments.js | 26 - deps/v8/test/mjsunit/compiler/minus-zero.js | 28 +- .../test/mjsunit/compiler/optimized-for-in.js | 3 +- deps/v8/test/mjsunit/compiler/regress-1085.js | 1 - .../compiler/regress-dead-throw-inlining.js | 13 + deps/v8/test/mjsunit/compiler/regress-max.js | 1 - .../test/mjsunit/compiler/try-catch-deopt.js | 225 + deps/v8/test/mjsunit/compiler/try-context.js | 89 + .../mjsunit/compiler/try-finally-deopt.js | 249 + .../constant-fold-control-instructions.js | 7 - .../v8/test/mjsunit/debug-changebreakpoint.js | 6 - .../mjsunit/debug-conditional-breakpoints.js | 17 - .../test/mjsunit/debug-ignore-breakpoints.js | 88 - .../mjsunit/debug-negative-break-points.js | 99 + deps/v8/test/mjsunit/debug-script.js | 4 +- deps/v8/test/mjsunit/debug-setbreakpoint.js | 2 - .../test/mjsunit/deopt-with-outer-context.js | 22 + .../mjsunit/{harmony => es6}/array-concat.js | 34 +- deps/v8/test/mjsunit/es6/array-length.js | 2 - deps/v8/test/mjsunit/es6/block-for.js | 2 - deps/v8/test/mjsunit/es6/classes-super.js | 15 + .../mjsunit/{harmony => es6}/completion.js | 2 +- .../test/mjsunit/es6/generators-iteration.js | 71 +- .../v8/test/mjsunit/es6/generators-objects.js | 12 +- .../v8/test/mjsunit/es6/generators-runtime.js | 2 +- deps/v8/test/mjsunit/es6/generators-states.js | 27 + .../v8/test/mjsunit/es6/hasinstance-symbol.js | 12 + .../mjsunit/es6/no-unicode-regexp-flag.js | 2 +- deps/v8/test/mjsunit/es6/object-assign.js | 33 + .../mjsunit/es6/object-literals-method.js | 6 +- deps/v8/test/mjsunit/es6/regexp-tolength.js | 2 - deps/v8/test/mjsunit/es6/regexp-tostring.js | 46 + deps/v8/test/mjsunit/es6/symbols.js | 3 +- .../v8/test/mjsunit/es6/tail-call-megatest.js | 292 + deps/v8/test/mjsunit/es6/tail-call-proxies.js | 97 + deps/v8/test/mjsunit/es6/tail-call-simple.js | 107 + deps/v8/test/mjsunit/es6/tail-call.js | 386 + deps/v8/test/mjsunit/es6/typedarray.js | 16 +- deps/v8/test/mjsunit/for-in-opt.js | 16 +- deps/v8/test/mjsunit/function-caller.js | 3 +- deps/v8/test/mjsunit/function-names.js | 3 +- .../array-species-constructor-delete.js | 28 + .../harmony/array-species-constructor.js | 27 + .../mjsunit/harmony/array-species-delete.js | 28 + .../mjsunit/harmony/array-species-modified.js | 27 + .../array-species-parent-constructor.js | 27 + .../mjsunit/harmony/array-species-proto.js | 27 + deps/v8/test/mjsunit/harmony/array-species.js | 25 +- .../test/mjsunit/harmony/block-for-sloppy.js | 1 - .../mjsunit/harmony/debug-stepin-proxies.js | 17 - deps/v8/test/mjsunit/harmony/destructuring.js | 4 +- .../v8/test/mjsunit/harmony/do-expressions.js | 1 - deps/v8/test/mjsunit/harmony/function-name.js | 234 +- deps/v8/test/mjsunit/harmony/function-sent.js | 90 + deps/v8/test/mjsunit/harmony/generators.js | 252 + .../v8/test/mjsunit/harmony/instanceof-es6.js | 50 + .../v8/test/mjsunit/harmony/iterator-close.js | 364 + .../v8/test/mjsunit/harmony/object-entries.js | 249 + .../object-get-own-property-descriptors.js | 206 + deps/v8/test/mjsunit/harmony/object-values.js | 229 + .../test/mjsunit/harmony/private-symbols.js | 2 - deps/v8/test/mjsunit/harmony/proxies-apply.js | 33 + .../test/mjsunit/harmony/proxies-enumerate.js | 109 - deps/v8/test/mjsunit/harmony/proxies-for.js | 47 +- .../test/mjsunit/harmony/proxies-ownkeys.js | 12 + .../harmony/proxies-set-prototype-of.js | 8 + .../test/mjsunit/harmony/reflect-construct.js | 5 +- .../harmony/reflect-enumerate-delete.js | 53 - .../mjsunit/harmony/reflect-enumerate-opt.js | 78 - .../reflect-enumerate-special-cases.js | 88 - .../test/mjsunit/harmony/reflect-enumerate.js | 101 - deps/v8/test/mjsunit/harmony/reflect.js | 21 - .../mjsunit/harmony/regress/regress-4696.js | 29 + .../mjsunit/harmony/regress/regress-4755.js | 45 + .../harmony/regress/regress-crbug-578038.js | 16 + deps/v8/test/mjsunit/harmony/simd.js | 2 +- .../v8/test/mjsunit/harmony/string-replace.js | 19 + .../harmony/unicode-character-ranges.js | 158 + .../harmony/unicode-escapes-in-regexps.js | 32 +- .../harmony/unicode-regexp-backrefs.js | 53 + .../unicode-regexp-ignore-case-noi18n.js | 59 + .../harmony/unicode-regexp-ignore-case.js | 64 + .../harmony/unicode-regexp-last-index.js | 104 + .../harmony/unicode-regexp-property-class.js | 64 + .../unicode-regexp-restricted-syntax.js | 44 + .../unicode-regexp-unanchored-advance.js | 8 + .../harmony/unicode-regexp-zero-length.js | 58 + .../ignition/dead-code-source-position.js | 9 + .../mjsunit/ignition/debug-break-on-stack.js | 48 + deps/v8/test/mjsunit/ignition/debug-break.js | 46 + .../mjsunit/ignition/debugger-statement.js | 31 + .../ignition/stack-trace-source-position.js | 21 + deps/v8/test/mjsunit/messages.js | 45 +- deps/v8/test/mjsunit/mjsunit.status | 525 +- .../test/mjsunit/random-bit-correlations.js | 2 +- deps/v8/test/mjsunit/regexp-compile.js | 2 + deps/v8/test/mjsunit/regexp.js | 3 - deps/v8/test/mjsunit/regress-587004.js | 31 + deps/v8/test/mjsunit/regress/math-min.js | 66 + .../v8/test/mjsunit/regress/regress-3650-1.js | 22 + .../v8/test/mjsunit/regress/regress-3650-2.js | 23 + .../v8/test/mjsunit/regress/regress-3650-3.js | 17 + deps/v8/test/mjsunit/regress/regress-4267.js | 16 + ...-4509-Class-constructor-typeerror-realm.js | 25 + deps/v8/test/mjsunit/regress/regress-4654.js | 5 + deps/v8/test/mjsunit/regress/regress-4659.js | 12 + .../v8/test/mjsunit/regress/regress-4665-2.js | 33 + deps/v8/test/mjsunit/regress/regress-4693.js | 53 +- deps/v8/test/mjsunit/regress/regress-4715.js | 48 + deps/v8/test/mjsunit/regress/regress-4800.js | 76 + .../v8/test/mjsunit/regress/regress-575364.js | 2 +- .../mjsunit/regress/regress-crbug-516775.js | 2 +- .../mjsunit/regress/regress-crbug-577112.js | 15 + .../mjsunit/regress/regress-crbug-580506.js | 22 + .../mjsunit/regress/regress-crbug-580584.js | 19 + .../mjsunit/regress/regress-crbug-581577.js | 5 + .../mjsunit/regress/regress-crbug-582051.js | 44 + .../mjsunit/regress/regress-crbug-582703.js | 8 + .../mjsunit/regress/regress-crbug-583257.js | 27 + .../mjsunit/regress/regress-crbug-584188.js | 10 + .../mjsunit/regress/regress-crbug-590989-1.js | 18 + .../mjsunit/regress/regress-crbug-590989-2.js | 12 + .../mjsunit/regress/regress-crbug-592343.js | 12 + .../mjsunit/regress/regress-crbug-593282.js | 38 + .../regress-crbug-594574-concat-leak-1.js | 36 + .../regress-crbug-594574-concat-leak-2.js | 35 + .../mjsunit/regress/regress-crbug-595657.js | 15 + .../regress-integer-indexed-element.js | 12 + .../regress/regress-seqstrsetchar-ex1.js | 6 +- deps/v8/test/mjsunit/samevalue.js | 4 +- deps/v8/test/mjsunit/strict-mode.js | 12 +- .../mjsunit/strong/declaration-after-use.js | 255 - deps/v8/test/mjsunit/strong/for-in.js | 6 - .../strong/mutually-recursive-classes.js | 229 - deps/v8/test/mjsunit/to_number_order.js | 7 + deps/v8/test/mjsunit/typeof.js | 2 + deps/v8/test/mjsunit/wasm/asm-wasm.js | 663 +- deps/v8/test/mjsunit/wasm/import-table.js | 387 + ...-run-basic.js => instantiate-run-basic.js} | 2 +- deps/v8/test/mjsunit/wasm/stack.js | 69 + deps/v8/test/mjsunit/wasm/start-function.js | 172 + deps/v8/test/mjsunit/wasm/wasm-constants.js | 3 + deps/v8/test/mjsunit/wasm/wasm-object-api.js | 3 +- deps/v8/test/optimize_for_size.isolate | 5 + deps/v8/test/perf.gyp | 27 + deps/v8/test/perf.isolate | 23 + deps/v8/test/test262/archive.py | 18 + deps/v8/test/test262/list.py | 15 + deps/v8/test/test262/test262.gyp | 8 + deps/v8/test/test262/test262.isolate | 7 +- deps/v8/test/test262/test262.status | 430 +- deps/v8/test/test262/testcfg.py | 7 + .../arm/instruction-selector-arm-unittest.cc | 99 +- .../compiler/escape-analysis-unittest.cc | 164 +- .../compiler/instruction-selector-unittest.cc | 4 +- .../compiler/instruction-selector-unittest.h | 45 +- .../compiler/int64-lowering-unittest.cc | 299 + .../compiler/interpreter-assembler-unittest.h | 57 - .../compiler/js-builtin-reducer-unittest.cc | 109 +- .../js-context-relaxation-unittest.cc | 285 - .../compiler/js-create-lowering-unittest.cc | 236 + .../js-intrinsic-lowering-unittest.cc | 133 +- .../compiler/js-operator-unittest.cc | 150 +- .../compiler/js-typed-lowering-unittest.cc | 515 +- .../compiler/liveness-analyzer-unittest.cc | 2 +- .../compiler/move-optimizer-unittest.cc | 97 +- .../unittests/compiler/node-test-utils.cc | 42 +- .../test/unittests/compiler/node-test-utils.h | 10 +- .../compiler/scheduler-rpo-unittest.cc | 533 ++ .../unittests/compiler/scheduler-unittest.cc | 546 -- .../compiler/simplified-operator-unittest.cc | 4 +- .../test/unittests/compiler/typer-unittest.cc | 111 +- .../unittests/heap/memory-reducer-unittest.cc | 11 +- .../test/unittests/heap/slot-set-unittest.cc | 143 + .../bytecode-array-builder-unittest.cc | 289 +- .../bytecode-array-iterator-unittest.cc | 17 +- .../bytecode-register-allocator-unittest.cc | 218 +- .../interpreter/bytecodes-unittest.cc | 135 +- .../constant-array-builder-unittest.cc | 11 +- .../interpreter-assembler-unittest.cc | 385 +- .../interpreter-assembler-unittest.h | 57 + .../register-translator-unittest.cc | 260 + deps/v8/test/unittests/unittests.gyp | 11 +- .../unittests/wasm/ast-decoder-unittest.cc | 319 +- .../test/unittests/wasm/encoder-unittest.cc | 20 +- .../wasm/loop-assignment-analysis-unittest.cc | 211 + .../unittests/wasm/module-decoder-unittest.cc | 287 +- .../unittests/wasm/wasm-macro-gen-unittest.cc | 14 +- .../webkit/fast/regex/toString-expected.txt | 1 + ...larations-in-switch-statement-expected.txt | 2 +- deps/v8/test/webkit/webkit.status | 5 +- deps/v8/tools/android-sync.sh | 2 + deps/v8/tools/eval_gc_time.sh | 3 +- deps/v8/tools/fuzz-harness.sh | 46 +- deps/v8/tools/gcmole/download_gcmole_tools.py | 22 + deps/v8/tools/gcmole/gcmole-tools.tar.gz.sha1 | 1 + deps/v8/tools/gcmole/run-gcmole.isolate | 34 + deps/v8/tools/gcmole/run-gcmole.py | 23 + deps/v8/tools/gcmole/run_gcmole.gyp | 23 + deps/v8/tools/gen-postmortem-metadata.py | 2 +- deps/v8/tools/gyp/v8.gyp | 130 +- deps/v8/tools/ic-explorer.html | 338 + deps/v8/tools/jsfunfuzz/download_jsfunfuzz.py | 22 + deps/v8/tools/jsfunfuzz/fuzz-harness.sh | 84 + deps/v8/tools/jsfunfuzz/jsfunfuzz.gyp | 26 + deps/v8/tools/jsfunfuzz/jsfunfuzz.isolate | 18 + deps/v8/tools/jsfunfuzz/jsfunfuzz.tar.gz.sha1 | 1 + deps/v8/tools/ll_prof.py | 16 +- deps/v8/tools/luci-go/linux64/isolate.sha1 | 2 +- deps/v8/tools/luci-go/mac64/isolate.sha1 | 2 +- deps/v8/tools/luci-go/win64/isolate.exe.sha1 | 2 +- deps/v8/tools/perf/statistics-for-json.R | 113 + deps/v8/tools/presubmit.py | 24 - deps/v8/tools/release/auto_roll.py | 1 - deps/v8/tools/release/common_includes.py | 3 +- deps/v8/tools/release/create_release.py | 16 +- deps/v8/tools/release/test_scripts.py | 31 +- deps/v8/tools/run-deopt-fuzzer.gyp | 26 + deps/v8/tools/run-deopt-fuzzer.isolate | 19 + deps/v8/tools/run-deopt-fuzzer.py | 13 +- deps/v8/tools/run-tests.py | 6 + deps/v8/tools/run-valgrind.gyp | 26 + deps/v8/tools/run-valgrind.isolate | 29 + deps/v8/tools/run_perf.py | 34 +- deps/v8/tools/testrunner/local/execution.py | 25 +- deps/v8/tools/testrunner/local/pool.py | 7 +- deps/v8/tools/testrunner/local/testsuite.py | 6 +- deps/v8/tools/testrunner/objects/testcase.py | 19 +- deps/v8/tools/try_perf.py | 5 + deps/v8/tools/v8heapconst.py | 235 +- deps/v8/tools/whitespace.txt | 2 +- 1009 files changed, 82780 insertions(+), 60292 deletions(-) create mode 100755 deps/v8/build/has_valgrind.py create mode 100644 deps/v8/src/base/atomicops_internals_s390_gcc.h create mode 100644 deps/v8/src/compiler/int64-lowering.cc create mode 100644 deps/v8/src/compiler/int64-lowering.h delete mode 100644 deps/v8/src/compiler/interpreter-assembler.cc delete mode 100644 deps/v8/src/compiler/interpreter-assembler.h delete mode 100644 deps/v8/src/compiler/ir-operations.txt delete mode 100644 deps/v8/src/compiler/js-context-relaxation.cc delete mode 100644 deps/v8/src/compiler/js-context-relaxation.h create mode 100644 deps/v8/src/compiler/js-create-lowering.cc create mode 100644 deps/v8/src/compiler/js-create-lowering.h create mode 100644 deps/v8/src/field-type.cc create mode 100644 deps/v8/src/field-type.h create mode 100644 deps/v8/src/heap-symbols.h create mode 100644 deps/v8/src/heap/remembered-set.cc create mode 100644 deps/v8/src/heap/remembered-set.h create mode 100644 deps/v8/src/heap/slot-set.h delete mode 100644 deps/v8/src/interpreter/DEPS create mode 100644 deps/v8/src/interpreter/handler-table-builder.cc create mode 100644 deps/v8/src/interpreter/handler-table-builder.h create mode 100644 deps/v8/src/interpreter/interpreter-assembler.cc create mode 100644 deps/v8/src/interpreter/interpreter-assembler.h create mode 100644 deps/v8/src/interpreter/register-translator.cc create mode 100644 deps/v8/src/interpreter/register-translator.h create mode 100644 deps/v8/src/interpreter/source-position-table.cc create mode 100644 deps/v8/src/interpreter/source-position-table.h delete mode 100644 deps/v8/src/js/harmony-reflect.js rename deps/v8/src/{parsing => }/json-parser.h (97%) create mode 100644 deps/v8/src/profiler/sampling-heap-profiler.cc create mode 100644 deps/v8/src/profiler/sampling-heap-profiler.h create mode 100644 deps/v8/src/source-position.h delete mode 100644 deps/v8/src/types-inl.h create mode 100644 deps/v8/src/utils-inl.h create mode 100644 deps/v8/test/cctest/cctest_exe.isolate create mode 100644 deps/v8/test/cctest/interpreter/bytecode-expectations-printer.cc create mode 100644 deps/v8/test/cctest/interpreter/bytecode-expectations-printer.h create mode 100644 deps/v8/test/cctest/interpreter/generate-bytecode-expectations.cc create mode 100644 deps/v8/test/fuzzer/DEPS create mode 100644 deps/v8/test/fuzzer/fuzzer-support.cc create mode 100644 deps/v8/test/fuzzer/fuzzer-support.h create mode 100644 deps/v8/test/fuzzer/fuzzer.cc create mode 100644 deps/v8/test/fuzzer/fuzzer.gyp create mode 100644 deps/v8/test/fuzzer/fuzzer.isolate create mode 100644 deps/v8/test/fuzzer/fuzzer.status create mode 100644 deps/v8/test/fuzzer/json.cc create mode 100644 deps/v8/test/fuzzer/json/json create mode 100644 deps/v8/test/fuzzer/json/not-json create mode 100644 deps/v8/test/fuzzer/parser.cc create mode 100644 deps/v8/test/fuzzer/parser/hello-world create mode 100644 deps/v8/test/fuzzer/regexp.cc create mode 100644 deps/v8/test/fuzzer/regexp/test00 create mode 100644 deps/v8/test/fuzzer/regexp/test01 create mode 100644 deps/v8/test/fuzzer/regexp/test02 create mode 100644 deps/v8/test/fuzzer/regexp/test03 create mode 100644 deps/v8/test/fuzzer/regexp/test04 create mode 100644 deps/v8/test/fuzzer/regexp/test05 create mode 100644 deps/v8/test/fuzzer/regexp/test06 create mode 100644 deps/v8/test/fuzzer/regexp/test07 create mode 100644 deps/v8/test/fuzzer/regexp/test08 create mode 100644 deps/v8/test/fuzzer/regexp/test09 create mode 100644 deps/v8/test/fuzzer/regexp/test10 create mode 100644 deps/v8/test/fuzzer/regexp/test11 create mode 100644 deps/v8/test/fuzzer/regexp/test12 create mode 100644 deps/v8/test/fuzzer/regexp/test13 create mode 100644 deps/v8/test/fuzzer/regexp/test14 create mode 100644 deps/v8/test/fuzzer/regexp/test15 create mode 100644 deps/v8/test/fuzzer/regexp/test16 create mode 100644 deps/v8/test/fuzzer/regexp/test17 create mode 100644 deps/v8/test/fuzzer/regexp/test18 create mode 100644 deps/v8/test/fuzzer/regexp/test19 create mode 100644 deps/v8/test/fuzzer/regexp/test20 create mode 100644 deps/v8/test/fuzzer/regexp/test21 create mode 100644 deps/v8/test/fuzzer/regexp/test22 create mode 100644 deps/v8/test/fuzzer/regexp/test23 create mode 100644 deps/v8/test/fuzzer/regexp/test24 create mode 100644 deps/v8/test/fuzzer/testcfg.py create mode 100644 deps/v8/test/message/arrow-invalid-rest-2.js create mode 100644 deps/v8/test/message/arrow-invalid-rest-2.out create mode 100644 deps/v8/test/message/arrow-invalid-rest.js create mode 100644 deps/v8/test/message/arrow-invalid-rest.out create mode 100644 deps/v8/test/message/function-sent-escaped.js create mode 100644 deps/v8/test/message/function-sent-escaped.out create mode 100644 deps/v8/test/message/new-target-escaped.js create mode 100644 deps/v8/test/message/new-target-escaped.out delete mode 100644 deps/v8/test/mjsunit/arguments-opt.js create mode 100644 deps/v8/test/mjsunit/compiler/debug-catch-prediction.js rename deps/v8/test/mjsunit/{regress/setvalueof-deopt.js => compiler/deopt-materialize-accumulator.js} (79%) create mode 100644 deps/v8/test/mjsunit/compiler/double-array-to-global.js create mode 100644 deps/v8/test/mjsunit/compiler/regress-dead-throw-inlining.js create mode 100644 deps/v8/test/mjsunit/compiler/try-catch-deopt.js create mode 100644 deps/v8/test/mjsunit/compiler/try-context.js create mode 100644 deps/v8/test/mjsunit/compiler/try-finally-deopt.js delete mode 100644 deps/v8/test/mjsunit/debug-ignore-breakpoints.js create mode 100644 deps/v8/test/mjsunit/debug-negative-break-points.js create mode 100644 deps/v8/test/mjsunit/deopt-with-outer-context.js rename deps/v8/test/mjsunit/{harmony => es6}/array-concat.js (97%) create mode 100644 deps/v8/test/mjsunit/es6/classes-super.js rename deps/v8/test/mjsunit/{harmony => es6}/completion.js (98%) create mode 100644 deps/v8/test/mjsunit/es6/hasinstance-symbol.js create mode 100644 deps/v8/test/mjsunit/es6/regexp-tostring.js create mode 100644 deps/v8/test/mjsunit/es6/tail-call-megatest.js create mode 100644 deps/v8/test/mjsunit/es6/tail-call-proxies.js create mode 100644 deps/v8/test/mjsunit/es6/tail-call-simple.js create mode 100644 deps/v8/test/mjsunit/es6/tail-call.js create mode 100644 deps/v8/test/mjsunit/harmony/array-species-constructor-delete.js create mode 100644 deps/v8/test/mjsunit/harmony/array-species-constructor.js create mode 100644 deps/v8/test/mjsunit/harmony/array-species-delete.js create mode 100644 deps/v8/test/mjsunit/harmony/array-species-modified.js create mode 100644 deps/v8/test/mjsunit/harmony/array-species-parent-constructor.js create mode 100644 deps/v8/test/mjsunit/harmony/array-species-proto.js create mode 100644 deps/v8/test/mjsunit/harmony/function-sent.js create mode 100644 deps/v8/test/mjsunit/harmony/generators.js create mode 100644 deps/v8/test/mjsunit/harmony/instanceof-es6.js create mode 100644 deps/v8/test/mjsunit/harmony/iterator-close.js create mode 100644 deps/v8/test/mjsunit/harmony/object-entries.js create mode 100644 deps/v8/test/mjsunit/harmony/object-get-own-property-descriptors.js create mode 100644 deps/v8/test/mjsunit/harmony/object-values.js delete mode 100644 deps/v8/test/mjsunit/harmony/proxies-enumerate.js delete mode 100644 deps/v8/test/mjsunit/harmony/reflect-enumerate-delete.js delete mode 100644 deps/v8/test/mjsunit/harmony/reflect-enumerate-opt.js delete mode 100644 deps/v8/test/mjsunit/harmony/reflect-enumerate-special-cases.js delete mode 100644 deps/v8/test/mjsunit/harmony/reflect-enumerate.js create mode 100644 deps/v8/test/mjsunit/harmony/regress/regress-4696.js create mode 100644 deps/v8/test/mjsunit/harmony/regress/regress-4755.js create mode 100644 deps/v8/test/mjsunit/harmony/regress/regress-crbug-578038.js create mode 100644 deps/v8/test/mjsunit/harmony/string-replace.js create mode 100644 deps/v8/test/mjsunit/harmony/unicode-character-ranges.js create mode 100644 deps/v8/test/mjsunit/harmony/unicode-regexp-backrefs.js create mode 100644 deps/v8/test/mjsunit/harmony/unicode-regexp-ignore-case-noi18n.js create mode 100644 deps/v8/test/mjsunit/harmony/unicode-regexp-ignore-case.js create mode 100644 deps/v8/test/mjsunit/harmony/unicode-regexp-last-index.js create mode 100644 deps/v8/test/mjsunit/harmony/unicode-regexp-property-class.js create mode 100644 deps/v8/test/mjsunit/harmony/unicode-regexp-restricted-syntax.js create mode 100644 deps/v8/test/mjsunit/harmony/unicode-regexp-unanchored-advance.js create mode 100644 deps/v8/test/mjsunit/harmony/unicode-regexp-zero-length.js create mode 100644 deps/v8/test/mjsunit/ignition/dead-code-source-position.js create mode 100644 deps/v8/test/mjsunit/ignition/debug-break-on-stack.js create mode 100644 deps/v8/test/mjsunit/ignition/debug-break.js create mode 100644 deps/v8/test/mjsunit/ignition/debugger-statement.js create mode 100644 deps/v8/test/mjsunit/ignition/stack-trace-source-position.js create mode 100644 deps/v8/test/mjsunit/regress-587004.js create mode 100644 deps/v8/test/mjsunit/regress/math-min.js create mode 100644 deps/v8/test/mjsunit/regress/regress-3650-1.js create mode 100644 deps/v8/test/mjsunit/regress/regress-3650-2.js create mode 100644 deps/v8/test/mjsunit/regress/regress-3650-3.js create mode 100644 deps/v8/test/mjsunit/regress/regress-4267.js create mode 100644 deps/v8/test/mjsunit/regress/regress-4509-Class-constructor-typeerror-realm.js create mode 100644 deps/v8/test/mjsunit/regress/regress-4654.js create mode 100644 deps/v8/test/mjsunit/regress/regress-4659.js create mode 100644 deps/v8/test/mjsunit/regress/regress-4665-2.js create mode 100644 deps/v8/test/mjsunit/regress/regress-4715.js create mode 100644 deps/v8/test/mjsunit/regress/regress-4800.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-577112.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-580506.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-580584.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-581577.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-582051.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-582703.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-583257.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-584188.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-590989-1.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-590989-2.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-592343.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-593282.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-594574-concat-leak-1.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-594574-concat-leak-2.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-595657.js create mode 100644 deps/v8/test/mjsunit/regress/regress-integer-indexed-element.js delete mode 100644 deps/v8/test/mjsunit/strong/declaration-after-use.js delete mode 100644 deps/v8/test/mjsunit/strong/mutually-recursive-classes.js create mode 100644 deps/v8/test/mjsunit/wasm/import-table.js rename deps/v8/test/mjsunit/wasm/{compile-run-basic.js => instantiate-run-basic.js} (91%) create mode 100644 deps/v8/test/mjsunit/wasm/stack.js create mode 100644 deps/v8/test/mjsunit/wasm/start-function.js create mode 100644 deps/v8/test/perf.gyp create mode 100644 deps/v8/test/perf.isolate create mode 100755 deps/v8/test/test262/archive.py create mode 100755 deps/v8/test/test262/list.py create mode 100644 deps/v8/test/unittests/compiler/int64-lowering-unittest.cc delete mode 100644 deps/v8/test/unittests/compiler/interpreter-assembler-unittest.h delete mode 100644 deps/v8/test/unittests/compiler/js-context-relaxation-unittest.cc create mode 100644 deps/v8/test/unittests/compiler/js-create-lowering-unittest.cc create mode 100644 deps/v8/test/unittests/compiler/scheduler-rpo-unittest.cc create mode 100644 deps/v8/test/unittests/heap/slot-set-unittest.cc rename deps/v8/test/unittests/{compiler => interpreter}/interpreter-assembler-unittest.cc (65%) create mode 100644 deps/v8/test/unittests/interpreter/interpreter-assembler-unittest.h create mode 100644 deps/v8/test/unittests/interpreter/register-translator-unittest.cc create mode 100644 deps/v8/test/unittests/wasm/loop-assignment-analysis-unittest.cc create mode 100755 deps/v8/tools/gcmole/download_gcmole_tools.py create mode 100644 deps/v8/tools/gcmole/gcmole-tools.tar.gz.sha1 create mode 100644 deps/v8/tools/gcmole/run-gcmole.isolate create mode 100755 deps/v8/tools/gcmole/run-gcmole.py create mode 100644 deps/v8/tools/gcmole/run_gcmole.gyp create mode 100644 deps/v8/tools/ic-explorer.html create mode 100644 deps/v8/tools/jsfunfuzz/download_jsfunfuzz.py create mode 100755 deps/v8/tools/jsfunfuzz/fuzz-harness.sh create mode 100644 deps/v8/tools/jsfunfuzz/jsfunfuzz.gyp create mode 100644 deps/v8/tools/jsfunfuzz/jsfunfuzz.isolate create mode 100644 deps/v8/tools/jsfunfuzz/jsfunfuzz.tar.gz.sha1 create mode 100644 deps/v8/tools/perf/statistics-for-json.R create mode 100644 deps/v8/tools/run-deopt-fuzzer.gyp create mode 100644 deps/v8/tools/run-deopt-fuzzer.isolate create mode 100644 deps/v8/tools/run-valgrind.gyp create mode 100644 deps/v8/tools/run-valgrind.isolate diff --git a/deps/v8/.clang-format b/deps/v8/.clang-format index d9bbf504a6f525..ae160a0bcc9789 100644 --- a/deps/v8/.clang-format +++ b/deps/v8/.clang-format @@ -1,4 +1,4 @@ # Defines the Google C++ style for automatic reformatting. # http://clang.llvm.org/docs/ClangFormatStyleOptions.html BasedOnStyle: Google -MaxEmptyLinesToKeep: 2 +MaxEmptyLinesToKeep: 1 diff --git a/deps/v8/.gitignore b/deps/v8/.gitignore index e77e072c288edb..805f349a6e4300 100644 --- a/deps/v8/.gitignore +++ b/deps/v8/.gitignore @@ -42,7 +42,7 @@ shell_g /_* /build/Debug /build/gyp -/build/ipch/ +/build/ipch /build/Release /build/win_toolchain.json /buildtools @@ -58,6 +58,7 @@ shell_g /test/promises-aplus/sinon /test/simdjs/data /test/test262/data +/test/test262/data.tar /testing/gmock /testing/gtest /third_party @@ -65,8 +66,10 @@ shell_g /third_party/llvm /third_party/llvm-build /tools/clang -/tools/jsfunfuzz -/tools/jsfunfuzz.zip +/tools/gcmole/gcmole-tools +/tools/gcmole/gcmole-tools.tar.gz +/tools/jsfunfuzz/jsfunfuzz +/tools/jsfunfuzz/jsfunfuzz.tar.gz /tools/luci-go/linux64/isolate /tools/luci-go/mac64/isolate /tools/luci-go/win64/isolate.exe diff --git a/deps/v8/AUTHORS b/deps/v8/AUTHORS index c9be8bbcda70ec..ceffb49a99be45 100644 --- a/deps/v8/AUTHORS +++ b/deps/v8/AUTHORS @@ -40,7 +40,9 @@ Alexis Campailla Andreas Anyuru Andrew Paprocki Andrei Kashcha +Bangfu Tao Ben Noordhuis +Benjamin Tan Bert Belder Burcu Dogan Caitlin Potter @@ -107,5 +109,6 @@ Vlad Burlik Vladimir Krivosheev Vladimir Shutoff Yu Yin +Zac Hansen Zhongping Wang 柳荣一 \ No newline at end of file diff --git a/deps/v8/BUILD.gn b/deps/v8/BUILD.gn index 5279a4a783f5da..5f3baf23c9cff6 100644 --- a/deps/v8/BUILD.gn +++ b/deps/v8/BUILD.gn @@ -28,7 +28,7 @@ declare_args() { v8_deprecation_warnings = false v8_enable_disassembler = false v8_enable_gdbjit = false -v8_enable_handle_zapping = true +v8_enable_handle_zapping = is_debug v8_enable_i18n_support = true v8_enable_verify_heap = false v8_interpreted_regexp = false @@ -46,6 +46,15 @@ if (is_msan) { v8_target_arch = target_cpu } +if (v8_use_snapshot && v8_use_external_startup_data) { + snapshot_target = ":v8_external_snapshot" +} else if (v8_use_snapshot) { + snapshot_target = ":v8_snapshot" +} else { + assert(!v8_use_external_startup_data) + snapshot_target = ":v8_nosnapshot" +} + ############################################################################### # Configurations # @@ -173,7 +182,7 @@ config("toolchain") { } if (v8_target_arch == "s390") { defines += [ "V8_TARGET_ARCH_S390" ] - } + } if (v8_target_arch == "s390x") { defines += [ "V8_TARGET_ARCH_S390", @@ -186,7 +195,7 @@ config("toolchain") { if (v8_target_arch == "x64") { defines += [ "V8_TARGET_ARCH_X64" ] } - + if (is_win) { defines += [ "WIN32" ] # TODO(jochen): Support v8_enable_prof. @@ -291,7 +300,6 @@ action("js2c_experimental") { "src/js/generator.js", "src/js/harmony-atomics.js", "src/js/harmony-regexp.js", - "src/js/harmony-reflect.js", "src/js/harmony-object-observe.js", "src/js/harmony-sharedarraybuffer.js", "src/js/harmony-simd.js", @@ -774,16 +782,16 @@ source_set("v8_base") { "src/compiler/instruction-selector.h", "src/compiler/instruction.cc", "src/compiler/instruction.h", - "src/compiler/interpreter-assembler.cc", - "src/compiler/interpreter-assembler.h", + "src/compiler/int64-lowering.cc", + "src/compiler/int64-lowering.h", "src/compiler/js-builtin-reducer.cc", "src/compiler/js-builtin-reducer.h", "src/compiler/js-call-reducer.cc", "src/compiler/js-call-reducer.h", - "src/compiler/js-context-relaxation.cc", - "src/compiler/js-context-relaxation.h", "src/compiler/js-context-specialization.cc", "src/compiler/js-context-specialization.h", + "src/compiler/js-create-lowering.cc", + "src/compiler/js-create-lowering.h", "src/compiler/js-frame-specialization.cc", "src/compiler/js-frame-specialization.h", "src/compiler/js-generic-lowering.cc", @@ -1009,6 +1017,8 @@ source_set("v8_base") { "src/fast-dtoa.h", "src/field-index.h", "src/field-index-inl.h", + "src/field-type.cc", + "src/field-type.h", "src/fixed-dtoa.cc", "src/fixed-dtoa.h", "src/flag-definitions.h", @@ -1030,6 +1040,7 @@ source_set("v8_base") { "src/handles.cc", "src/handles.h", "src/hashmap.h", + "src/heap-symbols.h", "src/heap/array-buffer-tracker.cc", "src/heap/array-buffer-tracker.h", "src/heap/gc-idle-time-handler.cc", @@ -1053,11 +1064,14 @@ source_set("v8_base") { "src/heap/objects-visiting-inl.h", "src/heap/objects-visiting.cc", "src/heap/objects-visiting.h", + "src/heap/remembered-set.cc", + "src/heap/remembered-set.h", "src/heap/scavenge-job.h", "src/heap/scavenge-job.cc", "src/heap/scavenger-inl.h", "src/heap/scavenger.cc", "src/heap/scavenger.h", + "src/heap/slot-set.h", "src/heap/slots-buffer.cc", "src/heap/slots-buffer.h", "src/heap/spaces-inl.h", @@ -1104,11 +1118,20 @@ source_set("v8_base") { "src/interpreter/constant-array-builder.h", "src/interpreter/control-flow-builders.cc", "src/interpreter/control-flow-builders.h", + "src/interpreter/handler-table-builder.cc", + "src/interpreter/handler-table-builder.h", "src/interpreter/interpreter.cc", "src/interpreter/interpreter.h", + "src/interpreter/interpreter-assembler.cc", + "src/interpreter/interpreter-assembler.h", + "src/interpreter/register-translator.cc", + "src/interpreter/register-translator.h", + "src/interpreter/source-position-table.cc", + "src/interpreter/source-position-table.h", "src/isolate-inl.h", "src/isolate.cc", "src/isolate.h", + "src/json-parser.h", "src/json-stringifier.h", "src/key-accumulator.h", "src/key-accumulator.cc", @@ -1144,7 +1167,6 @@ source_set("v8_base") { "src/parsing/expression-classifier.h", "src/parsing/func-name-inferrer.cc", "src/parsing/func-name-inferrer.h", - "src/parsing/json-parser.h", "src/parsing/parameter-initializer-rewriter.cc", "src/parsing/parameter-initializer-rewriter.h", "src/parsing/parser-base.h", @@ -1183,6 +1205,8 @@ source_set("v8_base") { "src/profiler/profile-generator.h", "src/profiler/sampler.cc", "src/profiler/sampler.h", + "src/profiler/sampling-heap-profiler.cc", + "src/profiler/sampling-heap-profiler.h", "src/profiler/strings-storage.cc", "src/profiler/strings-storage.h", "src/profiler/unbound-queue-inl.h", @@ -1262,6 +1286,7 @@ source_set("v8_base") { "src/snapshot/snapshot-common.cc", "src/snapshot/snapshot-source-sink.cc", "src/snapshot/snapshot-source-sink.h", + "src/source-position.h", "src/splay-tree.h", "src/splay-tree-inl.h", "src/snapshot/snapshot.h", @@ -1286,7 +1311,6 @@ source_set("v8_base") { "src/type-feedback-vector.h", "src/type-info.cc", "src/type-info.h", - "src/types-inl.h", "src/types.cc", "src/types.h", "src/typing-asm.cc", @@ -1300,6 +1324,7 @@ source_set("v8_base") { "src/unicode-cache.h", "src/unicode-decoder.cc", "src/unicode-decoder.h", + "src/utils-inl.h", "src/utils.cc", "src/utils.h", "src/v8.cc", @@ -1655,6 +1680,7 @@ source_set("v8_libbase") { "src/base/atomicops_internals_mips_gcc.h", "src/base/atomicops_internals_mips64_gcc.h", "src/base/atomicops_internals_portable.h", + "src/base/atomicops_internals_s390_gcc.h", "src/base/atomicops_internals_tsan.h", "src/base/atomicops_internals_x86_gcc.cc", "src/base/atomicops_internals_x86_gcc.h", @@ -1721,8 +1747,6 @@ source_set("v8_libbase") { libs = [ "dl", "rt" ] } else if (is_android) { - defines += [ "CAN_USE_VFP_INSTRUCTIONS" ] - if (current_toolchain == host_toolchain) { libs = [ "dl", "rt" ] if (host_os == "mac") { @@ -1782,6 +1806,28 @@ source_set("v8_libplatform") { ] } +source_set("fuzzer_support") { + visibility = [ ":*" ] # Only targets in this file can depend on this. + + sources = [ + "test/fuzzer/fuzzer-support.cc", + "test/fuzzer/fuzzer-support.h", + ] + + configs -= [ "//build/config/compiler:chromium_code" ] + configs += [ "//build/config/compiler:no_chromium_code" ] + configs += [ + ":internal_config_base", + ":features", + ":toolchain", + ] + + deps = [ + ":v8_libplatform", + snapshot_target, + ] +} + ############################################################################### # Executables # @@ -1815,15 +1861,6 @@ if (current_toolchain == snapshot_toolchain) { # Public targets # -if (v8_use_snapshot && v8_use_external_startup_data) { - snapshot_target = ":v8_external_snapshot" -} else if (v8_use_snapshot) { - snapshot_target = ":v8_snapshot" -} else { - assert(!v8_use_external_startup_data) - snapshot_target = ":v8_nosnapshot" -} - if (is_component_build) { component("v8") { sources = [ @@ -1905,3 +1942,57 @@ if ((current_toolchain == host_toolchain && v8_toolset_for_d8 == "host") || } } } + +source_set("json_fuzzer") { + sources = [ + "test/fuzzer/json.cc", + ] + + deps = [ + ":fuzzer_support", + ] + + configs -= [ "//build/config/compiler:chromium_code" ] + configs += [ "//build/config/compiler:no_chromium_code" ] + configs += [ + ":internal_config", + ":features", + ":toolchain", + ] +} + +source_set("parser_fuzzer") { + sources = [ + "test/fuzzer/parser.cc", + ] + + deps = [ + ":fuzzer_support", + ] + + configs -= [ "//build/config/compiler:chromium_code" ] + configs += [ "//build/config/compiler:no_chromium_code" ] + configs += [ + ":internal_config", + ":features", + ":toolchain", + ] +} + +source_set("regexp_fuzzer") { + sources = [ + "test/fuzzer/regexp.cc", + ] + + deps = [ + ":fuzzer_support", + ] + + configs -= [ "//build/config/compiler:chromium_code" ] + configs += [ "//build/config/compiler:no_chromium_code" ] + configs += [ + ":internal_config", + ":features", + ":toolchain", + ] +} diff --git a/deps/v8/ChangeLog b/deps/v8/ChangeLog index 54bcbe4275a99c..9e21ba1cd76881 100644 --- a/deps/v8/ChangeLog +++ b/deps/v8/ChangeLog @@ -1,3 +1,1778 @@ +2016-02-23: Version 5.0.71 + + Performance and stability improvements on all platforms. + + +2016-02-23: Version 5.0.70 + + Performance and stability improvements on all platforms. + + +2016-02-23: Version 5.0.69 + + Performance and stability improvements on all platforms. + + +2016-02-23: Version 5.0.68 + + Performance and stability improvements on all platforms. + + +2016-02-23: Version 5.0.67 + + Performance and stability improvements on all platforms. + + +2016-02-23: Version 5.0.66 + + Performance and stability improvements on all platforms. + + +2016-02-22: Version 5.0.65 + + Performance and stability improvements on all platforms. + + +2016-02-22: Version 5.0.64 + + ES2015 web compat workaround: RegExp.prototype.flags => "" (Chromium + issue 581577). + + Remove the Proxy enumerate trap (issue 4768). + + Performance and stability improvements on all platforms. + + +2016-02-22: Version 5.0.63 + + Performance and stability improvements on all platforms. + + +2016-02-22: Version 5.0.62 + + Remove Reflect.enumerate (issue 4768). + + Performance and stability improvements on all platforms. + + +2016-02-22: Version 5.0.61 + + Performance and stability improvements on all platforms. + + +2016-02-22: Version 5.0.60 + + Performance and stability improvements on all platforms. + + +2016-02-22: Version 5.0.59 + + Performance and stability improvements on all platforms. + + +2016-02-22: Version 5.0.58 + + Performance and stability improvements on all platforms. + + +2016-02-22: Version 5.0.57 + + Performance and stability improvements on all platforms. + + +2016-02-22: Version 5.0.56 + + Performance and stability improvements on all platforms. + + +2016-02-22: Version 5.0.55 + + Performance and stability improvements on all platforms. + + +2016-02-22: Version 5.0.54 + + Performance and stability improvements on all platforms. + + +2016-02-21: Version 5.0.53 + + Performance and stability improvements on all platforms. + + +2016-02-21: Version 5.0.52 + + Performance and stability improvements on all platforms. + + +2016-02-21: Version 5.0.51 + + Performance and stability improvements on all platforms. + + +2016-02-21: Version 5.0.50 + + Performance and stability improvements on all platforms. + + +2016-02-21: Version 5.0.49 + + Performance and stability improvements on all platforms. + + +2016-02-21: Version 5.0.48 + + Performance and stability improvements on all platforms. + + +2016-02-20: Version 5.0.47 + + Performance and stability improvements on all platforms. + + +2016-02-20: Version 5.0.46 + + Performance and stability improvements on all platforms. + + +2016-02-19: Version 5.0.45 + + Performance and stability improvements on all platforms. + + +2016-02-19: Version 5.0.44 + + Return undefined from RegExp.prototype.compile (Chromium issue 585775). + + Performance and stability improvements on all platforms. + + +2016-02-19: Version 5.0.43 + + Disable --harmony-object-observe (Chromium issue 552100). + + Performance and stability improvements on all platforms. + + +2016-02-19: Version 5.0.42 + + Introduce BeforeCallEnteredCallback (Chromium issue 585949). + + Performance and stability improvements on all platforms. + + +2016-02-19: Version 5.0.41 + + Performance and stability improvements on all platforms. + + +2016-02-19: Version 5.0.40 + + Performance and stability improvements on all platforms. + + +2016-02-19: Version 5.0.39 + + Performance and stability improvements on all platforms. + + +2016-02-19: Version 5.0.38 + + [wasm] Add support for import section (Chromium issue 575167). + + Performance and stability improvements on all platforms. + + +2016-02-19: Version 5.0.37 + + Performance and stability improvements on all platforms. + + +2016-02-19: Version 5.0.36 + + Performance and stability improvements on all platforms. + + +2016-02-19: Version 5.0.35 + + Performance and stability improvements on all platforms. + + +2016-02-19: Version 5.0.34 + + Performance and stability improvements on all platforms. + + +2016-02-19: Version 5.0.33 + + Performance and stability improvements on all platforms. + + +2016-02-19: Version 5.0.32 + + Performance and stability improvements on all platforms. + + +2016-02-19: Version 5.0.31 + + Performance and stability improvements on all platforms. + + +2016-02-19: Version 5.0.30 + + Mark old SetAccessCheckCallback as deprecated. + + Performance and stability improvements on all platforms. + + +2016-02-19: Version 5.0.29 + + Performance and stability improvements on all platforms. + + +2016-02-19: Version 5.0.28 + + Performance and stability improvements on all platforms. + + +2016-02-19: Version 5.0.27 + + Performance and stability improvements on all platforms. + + +2016-02-19: Version 5.0.26 + + Performance and stability improvements on all platforms. + + +2016-02-18: Version 5.0.25 + + Performance and stability improvements on all platforms. + + +2016-02-18: Version 5.0.24 + + Make Date.prototype.toGMTString an alias for Date.prototype.toUTCString + (issue 4708). + + Performance and stability improvements on all platforms. + + +2016-02-18: Version 5.0.23 + + Performance and stability improvements on all platforms. + + +2016-02-18: Version 5.0.22 + + Performance and stability improvements on all platforms. + + +2016-02-18: Version 5.0.21 + + Performance and stability improvements on all platforms. + + +2016-02-18: Version 5.0.20 + + Performance and stability improvements on all platforms. + + +2016-02-18: Version 5.0.19 + + Performance and stability improvements on all platforms. + + +2016-02-18: Version 5.0.18 + + Performance and stability improvements on all platforms. + + +2016-02-18: Version 5.0.17 + + Performance and stability improvements on all platforms. + + +2016-02-18: Version 5.0.16 + + [es6] Implement for-of iterator finalization (issue 2214). + + Performance and stability improvements on all platforms. + + +2016-02-18: Version 5.0.15 + + Performance and stability improvements on all platforms. + + +2016-02-18: Version 5.0.14 + + Use displayName in Error.stack rendering if present (issue 4761). + + Performance and stability improvements on all platforms. + + +2016-02-18: Version 5.0.13 + + Performance and stability improvements on all platforms. + + +2016-02-18: Version 5.0.12 + + Performance and stability improvements on all platforms. + + +2016-02-18: Version 5.0.11 + + Performance and stability improvements on all platforms. + + +2016-02-17: Version 5.0.10 + + [Atomics] Add dmb/dsb/isb instructions to ARM (issue 4614). + + Performance and stability improvements on all platforms. + + +2016-02-17: Version 5.0.9 + + Performance and stability improvements on all platforms. + + +2016-02-17: Version 5.0.8 + + Performance and stability improvements on all platforms. + + +2016-02-17: Version 5.0.7 + + Performance and stability improvements on all platforms. + + +2016-02-17: Version 5.0.6 + + Performance and stability improvements on all platforms. + + +2016-02-17: Version 5.0.5 + + Performance and stability improvements on all platforms. + + +2016-02-17: Version 5.0.4 + + Performance and stability improvements on all platforms. + + +2016-02-17: Version 5.0.3 + + Performance and stability improvements on all platforms. + + +2016-02-17: Version 5.0.2 + + Performance and stability improvements on all platforms. + + +2016-02-17: Version 5.0.1 + + Performance and stability improvements on all platforms. + + +2016-02-17: Version 4.10.253 + + Performance and stability improvements on all platforms. + + +2016-02-17: Version 4.10.252 + + Performance and stability improvements on all platforms. + + +2016-02-17: Version 4.10.251 + + Performance and stability improvements on all platforms. + + +2016-02-17: Version 4.10.250 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.249 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.248 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.247 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.246 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.245 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.244 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.243 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.242 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.241 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.240 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.239 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.238 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.237 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.236 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.235 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.234 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.233 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.232 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.231 + + Make NamedLoadHandlerCompiler::CompileLoadInterceptor behave correcly + with lazy accessors (Chromium issue 585764). + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.230 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.229 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.228 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.227 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.226 + + Performance and stability improvements on all platforms. + + +2016-02-16: Version 4.10.225 + + Performance and stability improvements on all platforms. + + +2016-02-15: Version 4.10.224 + + Performance and stability improvements on all platforms. + + +2016-02-15: Version 4.10.223 + + Performance and stability improvements on all platforms. + + +2016-02-15: Version 4.10.222 + + Performance and stability improvements on all platforms. + + +2016-02-15: Version 4.10.221 + + Performance and stability improvements on all platforms. + + +2016-02-15: Version 4.10.220 + + Performance and stability improvements on all platforms. + + +2016-02-15: Version 4.10.219 + + Performance and stability improvements on all platforms. + + +2016-02-15: Version 4.10.218 + + Performance and stability improvements on all platforms. + + +2016-02-15: Version 4.10.217 + + Performance and stability improvements on all platforms. + + +2016-02-15: Version 4.10.216 + + [wasm] Add support for a start function (Chromium issue 575167). + + Performance and stability improvements on all platforms. + + +2016-02-15: Version 4.10.215 + + Performance and stability improvements on all platforms. + + +2016-02-15: Version 4.10.214 + + Performance and stability improvements on all platforms. + + +2016-02-15: Version 4.10.213 + + Performance and stability improvements on all platforms. + + +2016-02-15: Version 4.10.212 + + Performance and stability improvements on all platforms. + + +2016-02-15: Version 4.10.211 + + Performance and stability improvements on all platforms. + + +2016-02-15: Version 4.10.210 + + Performance and stability improvements on all platforms. + + +2016-02-14: Version 4.10.209 + + Performance and stability improvements on all platforms. + + +2016-02-14: Version 4.10.208 + + Performance and stability improvements on all platforms. + + +2016-02-14: Version 4.10.207 + + Performance and stability improvements on all platforms. + + +2016-02-13: Version 4.10.206 + + Performance and stability improvements on all platforms. + + +2016-02-12: Version 4.10.205 + + Performance and stability improvements on all platforms. + + +2016-02-12: Version 4.10.204 + + Performance and stability improvements on all platforms. + + +2016-02-12: Version 4.10.203 + + Performance and stability improvements on all platforms. + + +2016-02-12: Version 4.10.202 + + Performance and stability improvements on all platforms. + + +2016-02-12: Version 4.10.201 + + Performance and stability improvements on all platforms. + + +2016-02-12: Version 4.10.200 + + Performance and stability improvements on all platforms. + + +2016-02-12: Version 4.10.199 + + Performance and stability improvements on all platforms. + + +2016-02-12: Version 4.10.198 + + Performance and stability improvements on all platforms. + + +2016-02-12: Version 4.10.197 + + Stage --harmony-function-name (issue 3699). + + Performance and stability improvements on all platforms. + + +2016-02-12: Version 4.10.196 + + Performance and stability improvements on all platforms. + + +2016-02-10: Version 4.10.195 + + Performance and stability improvements on all platforms. + + +2016-02-10: Version 4.10.194 + + Performance and stability improvements on all platforms. + + +2016-02-10: Version 4.10.193 + + Use a for-of loop in Array.from (issue 4739). + + Performance and stability improvements on all platforms. + + +2016-02-09: Version 4.10.192 + + Performance and stability improvements on all platforms. + + +2016-02-09: Version 4.10.191 + + Performance and stability improvements on all platforms. + + +2016-02-09: Version 4.10.190 + + Performance and stability improvements on all platforms. + + +2016-02-09: Version 4.10.189 + + Performance and stability improvements on all platforms. + + +2016-02-09: Version 4.10.188 + + Performance and stability improvements on all platforms. + + +2016-02-09: Version 4.10.187 + + Performance and stability improvements on all platforms. + + +2016-02-09: Version 4.10.186 + + Performance and stability improvements on all platforms. + + +2016-02-09: Version 4.10.185 + + Performance and stability improvements on all platforms. + + +2016-02-09: Version 4.10.184 + + Performance and stability improvements on all platforms. + + +2016-02-09: Version 4.10.183 + + Performance and stability improvements on all platforms. + + +2016-02-08: Version 4.10.182 + + Performance and stability improvements on all platforms. + + +2016-02-08: Version 4.10.181 + + Performance and stability improvements on all platforms. + + +2016-02-08: Version 4.10.180 + + [wasm] Put the condition last in kExprBrIf (Chromium issue 575167). + + Stage --harmony-species flag, enabling Symbol.species (issue 4093). + + Extend subarray web compatibility fix to --harmony-species (issue 4665). + + Performance and stability improvements on all platforms. + + +2016-02-08: Version 4.10.179 + + Performance and stability improvements on all platforms. + + +2016-02-08: Version 4.10.178 + + Performance and stability improvements on all platforms. + + +2016-02-08: Version 4.10.177 + + Performance and stability improvements on all platforms. + + +2016-02-08: Version 4.10.176 + + Performance and stability improvements on all platforms. + + +2016-02-08: Version 4.10.175 + + Performance and stability improvements on all platforms. + + +2016-02-08: Version 4.10.174 + + Performance and stability improvements on all platforms. + + +2016-02-08: Version 4.10.173 + + Performance and stability improvements on all platforms. + + +2016-02-08: Version 4.10.172 + + android: Use libc++ instead of stlport (issue 4615). + + Performance and stability improvements on all platforms. + + +2016-02-08: Version 4.10.171 + + [api] Make ObjectTemplate::SetNativeDataProperty() work even if the + ObjectTemplate does not have a constructor (Chromium issue 579009). + + Performance and stability improvements on all platforms. + + +2016-02-05: Version 4.10.170 + + Performance and stability improvements on all platforms. + + +2016-02-05: Version 4.10.169 + + Performance and stability improvements on all platforms. + + +2016-02-05: Version 4.10.168 + + Performance and stability improvements on all platforms. + + +2016-02-05: Version 4.10.167 + + [wasm] min/max does not return signaling NaNs anymore (Chromium issue + 4733). + + Performance and stability improvements on all platforms. + + +2016-02-05: Version 4.10.166 + + Performance and stability improvements on all platforms. + + +2016-02-05: Version 4.10.165 + + [wasm] Put the condition last in kExprSelect (issue 4735, Chromium issue + 575167). + + Performance and stability improvements on all platforms. + + +2016-02-05: Version 4.10.164 + + Performance and stability improvements on all platforms. + + +2016-02-05: Version 4.10.163 + + Performance and stability improvements on all platforms. + + +2016-02-05: Version 4.10.162 + + Performance and stability improvements on all platforms. + + +2016-02-05: Version 4.10.161 + + PPC: [generators] Implement Generator.prototype.return (issue 3566). + + Performance and stability improvements on all platforms. + + +2016-02-04: Version 4.10.160 + + Performance and stability improvements on all platforms. + + +2016-02-04: Version 4.10.159 + + [generators] Implement Generator.prototype.return (issue 3566). + + Performance and stability improvements on all platforms. + + +2016-02-04: Version 4.10.158 + + Performance and stability improvements on all platforms. + + +2016-02-04: Version 4.10.157 + + Performance and stability improvements on all platforms. + + +2016-02-04: Version 4.10.156 + + Performance and stability improvements on all platforms. + + +2016-02-04: Version 4.10.155 + + Performance and stability improvements on all platforms. + + +2016-02-04: Version 4.10.154 + + Performance and stability improvements on all platforms. + + +2016-02-04: Version 4.10.153 + + Performance and stability improvements on all platforms. + + +2016-02-04: Version 4.10.152 + + Performance and stability improvements on all platforms. + + +2016-02-04: Version 4.10.151 + + Performance and stability improvements on all platforms. + + +2016-02-03: Version 4.10.150 + + Performance and stability improvements on all platforms. + + +2016-02-03: Version 4.10.149 + + Performance and stability improvements on all platforms. + + +2016-02-03: Version 4.10.148 + + Performance and stability improvements on all platforms. + + +2016-02-03: Version 4.10.147 + + Performance and stability improvements on all platforms. + + +2016-02-03: Version 4.10.146 + + Performance and stability improvements on all platforms. + + +2016-02-03: Version 4.10.145 + + Performance and stability improvements on all platforms. + + +2016-02-02: Version 4.10.144 + + Performance and stability improvements on all platforms. + + +2016-02-02: Version 4.10.143 + + Performance and stability improvements on all platforms. + + +2016-02-02: Version 4.10.142 + + [wasm] Provide backoff implementations for the Fxx rounding instructions + (Chromium issue 575379). + + Performance and stability improvements on all platforms. + + +2016-02-02: Version 4.10.141 + + Performance and stability improvements on all platforms. + + +2016-02-02: Version 4.10.140 + + [api] Make ObjectTemplate::SetNativeDataProperty() work even if the + ObjectTemplate does not have a constructor (Chromium issue 579009). + + Add native callbacks to FastAccessorAssembler (Chromium issue 508898). + + Performance and stability improvements on all platforms. + + +2016-02-02: Version 4.10.139 + + Performance and stability improvements on all platforms. + + +2016-02-02: Version 4.10.138 + + Performance and stability improvements on all platforms. + + +2016-02-01: Version 4.10.137 + + Performance and stability improvements on all platforms. + + +2016-02-01: Version 4.10.136 + + Performance and stability improvements on all platforms. + + +2016-02-01: Version 4.10.135 + + Performance and stability improvements on all platforms. + + +2016-02-01: Version 4.10.134 + + Performance and stability improvements on all platforms. + + +2016-02-01: Version 4.10.133 + + Performance and stability improvements on all platforms. + + +2016-02-01: Version 4.10.132 + + Performance and stability improvements on all platforms. + + +2016-02-01: Version 4.10.131 + + Performance and stability improvements on all platforms. + + +2016-02-01: Version 4.10.130 + + Performance and stability improvements on all platforms. + + +2016-02-01: Version 4.10.129 + + Performance and stability improvements on all platforms. + + +2016-02-01: Version 4.10.128 + + Performance and stability improvements on all platforms. + + +2016-02-01: Version 4.10.127 + + Performance and stability improvements on all platforms. + + +2016-02-01: Version 4.10.126 + + Performance and stability improvements on all platforms. + + +2016-02-01: Version 4.10.125 + + Ship RegExp subclassing (issues 4305, 4343, 4344, 4345). + + Performance and stability improvements on all platforms. + + +2016-02-01: Version 4.10.124 + + Performance and stability improvements on all platforms. + + +2016-01-31: Version 4.10.123 + + Performance and stability improvements on all platforms. + + +2016-01-31: Version 4.10.122 + + Performance and stability improvements on all platforms. + + +2016-01-29: Version 4.10.121 + + Performance and stability improvements on all platforms. + + +2016-01-29: Version 4.10.120 + + Performance and stability improvements on all platforms. + + +2016-01-29: Version 4.10.119 + + Performance and stability improvements on all platforms. + + +2016-01-29: Version 4.10.118 + + Performance and stability improvements on all platforms. + + +2016-01-29: Version 4.10.117 + + Fix Unicode string normalization with null bytes (issue 4654). + + Performance and stability improvements on all platforms. + + +2016-01-29: Version 4.10.116 + + Performance and stability improvements on all platforms. + + +2016-01-29: Version 4.10.115 + + Performance and stability improvements on all platforms. + + +2016-01-29: Version 4.10.114 + + Performance and stability improvements on all platforms. + + +2016-01-29: Version 4.10.113 + + Performance and stability improvements on all platforms. + + +2016-01-29: Version 4.10.112 + + [regexp] stage unicode regexps (issue 2952). + + Performance and stability improvements on all platforms. + + +2016-01-29: Version 4.10.111 + + Performance and stability improvements on all platforms. + + +2016-01-28: Version 4.10.110 + + Performance and stability improvements on all platforms. + + +2016-01-28: Version 4.10.109 + + Performance and stability improvements on all platforms. + + +2016-01-28: Version 4.10.108 + + Performance and stability improvements on all platforms. + + +2016-01-28: Version 4.10.107 + + Performance and stability improvements on all platforms. + + +2016-01-28: Version 4.10.106 + + Performance and stability improvements on all platforms. + + +2016-01-28: Version 4.10.105 + + Performance and stability improvements on all platforms. + + +2016-01-28: Version 4.10.104 + + Performance and stability improvements on all platforms. + + +2016-01-28: Version 4.10.103 + + Performance and stability improvements on all platforms. + + +2016-01-28: Version 4.10.102 + + Performance and stability improvements on all platforms. + + +2016-01-28: Version 4.10.101 + + Performance and stability improvements on all platforms. + + +2016-01-28: Version 4.10.100 + + Performance and stability improvements on all platforms. + + +2016-01-28: Version 4.10.99 + + Performance and stability improvements on all platforms. + + +2016-01-28: Version 4.10.98 + + Performance and stability improvements on all platforms. + + +2016-01-27: Version 4.10.97 + + Performance and stability improvements on all platforms. + + +2016-01-27: Version 4.10.96 + + Performance and stability improvements on all platforms. + + +2016-01-27: Version 4.10.95 + + Performance and stability improvements on all platforms. + + +2016-01-27: Version 4.10.94 + + Performance and stability improvements on all platforms. + + +2016-01-27: Version 4.10.93 + + Performance and stability improvements on all platforms. + + +2016-01-27: Version 4.10.92 + + Performance and stability improvements on all platforms. + + +2016-01-27: Version 4.10.91 + + Performance and stability improvements on all platforms. + + +2016-01-27: Version 4.10.90 + + Performance and stability improvements on all platforms. + + +2016-01-27: Version 4.10.89 + + Performance and stability improvements on all platforms. + + +2016-01-27: Version 4.10.88 + + Performance and stability improvements on all platforms. + + +2016-01-27: Version 4.10.87 + + [api] Default native data property setter to replace the setter if the + property is writable (Chromium issue 580584). + + Performance and stability improvements on all platforms. + + +2016-01-27: Version 4.10.86 + + Performance and stability improvements on all platforms. + + +2016-01-27: Version 4.10.85 + + Performance and stability improvements on all platforms. + + +2016-01-27: Version 4.10.84 + + Performance and stability improvements on all platforms. + + +2016-01-27: Version 4.10.83 + + Performance and stability improvements on all platforms. + + +2016-01-27: Version 4.10.82 + + Performance and stability improvements on all platforms. + + +2016-01-27: Version 4.10.81 + + Performance and stability improvements on all platforms. + + +2016-01-27: Version 4.10.80 + + Stage RegExp subclassing (issues 4305, 4343, 4344, 4345). + + Performance and stability improvements on all platforms. + + +2016-01-26: Version 4.10.79 + + Performance and stability improvements on all platforms. + + +2016-01-26: Version 4.10.78 + + Performance and stability improvements on all platforms. + + +2016-01-26: Version 4.10.77 + + Performance and stability improvements on all platforms. + + +2016-01-26: Version 4.10.76 + + Ensure arrow functions can close over lexically-scoped variables (issue + 4255, Chromium issue 580934). + + Performance and stability improvements on all platforms. + + +2016-01-26: Version 4.10.75 + + Performance and stability improvements on all platforms. + + +2016-01-26: Version 4.10.74 + + Performance and stability improvements on all platforms. + + +2016-01-26: Version 4.10.73 + + Performance and stability improvements on all platforms. + + +2016-01-26: Version 4.10.72 + + [GN] Remove CAN_USE_VFP_INSTRUCTIONS define to match GYP. + + Performance and stability improvements on all platforms. + + +2016-01-26: Version 4.10.71 + + PPC: [es6] Tail calls support (issue 4698). + + Performance and stability improvements on all platforms. + + +2016-01-26: Version 4.10.70 + + Performance and stability improvements on all platforms. + + +2016-01-26: Version 4.10.69 + + [es6] Tail calls support (issue 4698). + + Performance and stability improvements on all platforms. + + +2016-01-26: Version 4.10.68 + + Support @@species in Array.prototype.concat (issue 4093). + + Performance and stability improvements on all platforms. + + +2016-01-25: Version 4.10.67 + + Performance and stability improvements on all platforms. + + +2016-01-25: Version 4.10.66 + + Restore per-TypedArray-class length accessors as a perf workaround + (Chromium issue 579905). + + Performance and stability improvements on all platforms. + + +2016-01-25: Version 4.10.65 + + Performance and stability improvements on all platforms. + + +2016-01-25: Version 4.10.64 + + Performance and stability improvements on all platforms. + + +2016-01-25: Version 4.10.63 + + Performance and stability improvements on all platforms. + + +2016-01-25: Version 4.10.62 + + Performance and stability improvements on all platforms. + + +2016-01-25: Version 4.10.61 + + Performance and stability improvements on all platforms. + + +2016-01-25: Version 4.10.60 + + Performance and stability improvements on all platforms. + + +2016-01-25: Version 4.10.59 + + Don't NULL-check GlobalHandle::Node::object_ (issue 3647, Chromium issue + 580651). + + Performance and stability improvements on all platforms. + + +2016-01-25: Version 4.10.58 + + Performance and stability improvements on all platforms. + + +2016-01-25: Version 4.10.57 + + Performance and stability improvements on all platforms. + + +2016-01-25: Version 4.10.56 + + Performance and stability improvements on all platforms. + + +2016-01-25: Version 4.10.55 + + Performance and stability improvements on all platforms. + + +2016-01-25: Version 4.10.54 + + Performance and stability improvements on all platforms. + + +2016-01-25: Version 4.10.53 + + Performance and stability improvements on all platforms. + + +2016-01-25: Version 4.10.52 + + Performance and stability improvements on all platforms. + + +2016-01-25: Version 4.10.51 + + Performance and stability improvements on all platforms. + + +2016-01-22: Version 4.10.50 + + Performance and stability improvements on all platforms. + + +2016-01-22: Version 4.10.49 + + Sloppy mode webcompat: allow conflicting function declarations in blocks + (issue 4693, Chromium issue 579395). + + Performance and stability improvements on all platforms. + + +2016-01-22: Version 4.10.48 + + Performance and stability improvements on all platforms. + + +2016-01-22: Version 4.10.47 + + Performance and stability improvements on all platforms. + + +2016-01-22: Version 4.10.46 + + Performance and stability improvements on all platforms. + + +2016-01-22: Version 4.10.45 + + Performance and stability improvements on all platforms. + + +2016-01-22: Version 4.10.44 + + Performance and stability improvements on all platforms. + + +2016-01-22: Version 4.10.43 + + Performance and stability improvements on all platforms. + + +2016-01-22: Version 4.10.42 + + Array length reduction should throw in strict mode if it can't delete an + element (issue 4267). + + Performance and stability improvements on all platforms. + + +2016-01-22: Version 4.10.41 + + Performance and stability improvements on all platforms. + + +2016-01-22: Version 4.10.40 + + Performance and stability improvements on all platforms. + + +2016-01-22: Version 4.10.39 + + Performance and stability improvements on all platforms. + + +2016-01-22: Version 4.10.38 + + Performance and stability improvements on all platforms. + + +2016-01-22: Version 4.10.37 + + Performance and stability improvements on all platforms. + + +2016-01-21: Version 4.10.36 + + Performance and stability improvements on all platforms. + + +2016-01-21: Version 4.10.35 + + Performance and stability improvements on all platforms. + + +2016-01-21: Version 4.10.34 + + Performance and stability improvements on all platforms. + + +2016-01-21: Version 4.10.33 + + Array length reduction should throw in strict mode if it can't delete an + element (issue 4267). + + Performance and stability improvements on all platforms. + + +2016-01-21: Version 4.10.32 + + Performance and stability improvements on all platforms. + + +2016-01-21: Version 4.10.31 + + Performance and stability improvements on all platforms. + + +2016-01-21: Version 4.10.30 + + Performance and stability improvements on all platforms. + + +2016-01-21: Version 4.10.29 + + Performance and stability improvements on all platforms. + + +2016-01-21: Version 4.10.28 + + Performance and stability improvements on all platforms. + + +2016-01-21: Version 4.10.27 + + [debugger] negative conditional break points mute breaks and exceptions + (Chromium issue 429167). + + Performance and stability improvements on all platforms. + + +2016-01-21: Version 4.10.26 + + Performance and stability improvements on all platforms. + + +2016-01-21: Version 4.10.25 + + Performance and stability improvements on all platforms. + + +2016-01-20: Version 4.10.24 + + Performance and stability improvements on all platforms. + + +2016-01-20: Version 4.10.23 + + Performance and stability improvements on all platforms. + + +2016-01-20: Version 4.10.22 + + Performance and stability improvements on all platforms. + + +2016-01-20: Version 4.10.21 + + Performance and stability improvements on all platforms. + + +2016-01-20: Version 4.10.20 + + Performance and stability improvements on all platforms. + + +2016-01-20: Version 4.10.19 + + Performance and stability improvements on all platforms. + + +2016-01-20: Version 4.10.18 + + Performance and stability improvements on all platforms. + + +2016-01-20: Version 4.10.17 + + Performance and stability improvements on all platforms. + + +2016-01-20: Version 4.10.16 + + Performance and stability improvements on all platforms. + + +2016-01-20: Version 4.10.15 + + [wasm] Implemented F32Trunc as a turbofan graph based on int32 + instructions (Chromium issue 575379). + + Performance and stability improvements on all platforms. + + +2016-01-20: Version 4.10.14 + + [wasm] Verify boundaries of data segments when decoding modules + (Chromium issue 575167). + + Performance and stability improvements on all platforms. + + +2016-01-20: Version 4.10.13 + + Performance and stability improvements on all platforms. + + +2016-01-20: Version 4.10.12 + + Performance and stability improvements on all platforms. + + +2016-01-20: Version 4.10.11 + + [runtime] Do not use the enum-cache for keys retrieval (issue 705). + + Performance and stability improvements on all platforms. + + +2016-01-20: Version 4.10.10 + + Performance and stability improvements on all platforms. + + +2016-01-20: Version 4.10.9 + + Separate String.prototype.replace into RegExp.prototype[Symbol.replace] + (issue 4343). + + Performance and stability improvements on all platforms. + + +2016-01-19: Version 4.10.8 + + Performance and stability improvements on all platforms. + + +2016-01-19: Version 4.10.7 + + [wasm] Enable WASM JavaScript API tests (Chromium issue 575167). + + Performance and stability improvements on all platforms. + + +2016-01-18: Version 4.10.6 + + [wasm] Create a wrapper function for WASM.asmCompileRun() (Chromium + issue 575372). + + Make generators non-constructable (issues 4163, 4630). + + Performance and stability improvements on all platforms. + + +2016-01-18: Version 4.10.5 + + Performance and stability improvements on all platforms. + + +2016-01-18: Version 4.10.4 + + Performance and stability improvements on all platforms. + + +2016-01-18: Version 4.10.3 + + Performance and stability improvements on all platforms. + + +2016-01-16: Version 4.10.2 + + Performance and stability improvements on all platforms. + + +2016-01-16: Version 4.10.1 + + Performance and stability improvements on all platforms. + + +2016-01-15: Version 4.9.391 + + Performance and stability improvements on all platforms. + + +2016-01-15: Version 4.9.390 + + Performance and stability improvements on all platforms. + + +2016-01-15: Version 4.9.389 + + Construct instances of base class from TypedArray.prototype.subarray + (issue 4665). + + Performance and stability improvements on all platforms. + + +2016-01-14: Version 4.9.388 + + Performance and stability improvements on all platforms. + + +2016-01-14: Version 4.9.387 + + Performance and stability improvements on all platforms. + + +2016-01-14: Version 4.9.386 + + Performance and stability improvements on all platforms. + + 2016-01-14: Version 4.9.385 Performance and stability improvements on all platforms. diff --git a/deps/v8/DEPS b/deps/v8/DEPS index 07b11a4ae38fb7..5f26e91ecfa565 100644 --- a/deps/v8/DEPS +++ b/deps/v8/DEPS @@ -8,15 +8,15 @@ vars = { deps = { "v8/build/gyp": - Var("git_url") + "/external/gyp.git" + "@" + "b85ad3e578da830377dbc1843aa4fbc5af17a192", + Var("git_url") + "/external/gyp.git" + "@" + "ed163ce233f76a950dce1751ac851dbe4b1c00cc", "v8/third_party/icu": - Var("git_url") + "/chromium/deps/icu.git" + "@" + "8d342a405be5ae8aacb1e16f0bc31c3a4fbf26a2", + Var("git_url") + "/chromium/deps/icu.git" + "@" + "e466f6ac8f60bb9697af4a91c6911c6fc4aec95f", "v8/buildtools": - Var("git_url") + "/chromium/buildtools.git" + "@" + "0f8e6e4b126ee88137930a0ae4776c4741808740", + Var("git_url") + "/chromium/buildtools.git" + "@" + "97b5c485707335dd2952c05bf11412ada3f4fb6f", "v8/base/trace_event/common": - Var("git_url") + "/chromium/src/base/trace_event/common.git" + "@" + "d83d44b13d07c2fd0a40101a7deef9b93b841732", + Var("git_url") + "/chromium/src/base/trace_event/common.git" + "@" + "4b09207e447ae5bd34643b4c6321bee7b76d35f9", "v8/tools/swarming_client": - Var('git_url') + '/external/swarming.client.git' + '@' + "9cdd76171e517a430a72dcd7d66ade67e109aa00", + Var('git_url') + '/external/swarming.client.git' + '@' + "0b908f18767c8304dc089454bc1c91755d21f1f5", "v8/testing/gtest": Var("git_url") + "/external/github.com/google/googletest.git" + "@" + "6f8a66431cb592dad629028a50b3dd418a408c87", "v8/testing/gmock": @@ -27,9 +27,9 @@ deps = { Var("git_url") + "/v8/deps/third_party/mozilla-tests.git" + "@" + "f6c578a10ea707b1a8ab0b88943fe5115ce2b9be", "v8/test/simdjs/data": Var("git_url") + "/external/github.com/tc39/ecmascript_simd.git" + "@" + "c8ef63c728283debc25891123eb00482fee4b8cd", "v8/test/test262/data": - Var("git_url") + "/external/github.com/tc39/test262.git" + "@" + "67ba34b03a46bac4254223ae25f42c7b959540f0", + Var("git_url") + "/external/github.com/tc39/test262.git" + "@" + "738a24b109f3fa71be44d5c3701d73141d494510", "v8/tools/clang": - Var("git_url") + "/chromium/src/tools/clang.git" + "@" + "24e8c1c92fe54ef8ed7651b5850c056983354a4a", + Var("git_url") + "/chromium/src/tools/clang.git" + "@" + "a8adb78c8eda9bddb2aa9c51f3fee60296de1ad4", } deps_os = { @@ -102,6 +102,22 @@ hooks = [ "-s", "v8/buildtools/linux64/clang-format.sha1", ], }, + { + 'name': 'gcmole', + 'pattern': '.', + 'action': [ + 'python', + 'v8/tools/gcmole/download_gcmole_tools.py', + ], + }, + { + 'name': 'jsfunfuzz', + 'pattern': '.', + 'action': [ + 'python', + 'v8/tools/jsfunfuzz/download_jsfunfuzz.py', + ], + }, # Pull luci-go binaries (isolate, swarming) using checked-in hashes. { 'name': 'luci-go_win', @@ -136,6 +152,40 @@ hooks = [ '-d', 'v8/tools/luci-go/linux64', ], }, + # Pull GN using checked-in hashes. + { + "name": "gn_win", + "pattern": ".", + "action": [ "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", "chromium-gn", + "-s", "v8/buildtools/win/gn.exe.sha1", + ], + }, + { + "name": "gn_mac", + "pattern": ".", + "action": [ "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", "chromium-gn", + "-s", "v8/buildtools/mac/gn.sha1", + ], + }, + { + "name": "gn_linux", + "pattern": ".", + "action": [ "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", "chromium-gn", + "-s", "v8/buildtools/linux64/gn.sha1", + ], + }, { # Update the Windows toolchain if necessary. 'name': 'win_toolchain', diff --git a/deps/v8/Makefile b/deps/v8/Makefile index 6ae9b245768915..4fb6ee0162275f 100644 --- a/deps/v8/Makefile +++ b/deps/v8/Makefile @@ -251,7 +251,7 @@ NACL_ARCHES = nacl_ia32 nacl_x64 GYPFILES = third_party/icu/icu.gypi third_party/icu/icu.gyp \ build/shim_headers.gypi build/features.gypi build/standalone.gypi \ build/toolchain.gypi build/all.gyp build/mac/asan.gyp \ - test/cctest/cctest.gyp \ + test/cctest/cctest.gyp test/fuzzer/fuzzer.gyp \ test/unittests/unittests.gyp tools/gyp/v8.gyp \ tools/parser-shell.gyp testing/gmock.gyp testing/gtest.gyp \ buildtools/third_party/libc++abi/libc++abi.gyp \ diff --git a/deps/v8/WATCHLISTS b/deps/v8/WATCHLISTS index 81e941f28a5fb4..29b957b0917f00 100644 --- a/deps/v8/WATCHLISTS +++ b/deps/v8/WATCHLISTS @@ -43,9 +43,11 @@ 'filepath': 'src/debug/', }, 'interpreter': { - 'filepath': 'src/interpreter/', - 'filepath': 'test/cctest/interpreter/', - 'filepath': 'test/unittests/interpreter/', + 'filepath': 'src/interpreter/' \ + '|src/compiler/interpreter' \ + '|src/compiler/bytecode' \ + '|test/cctest/interpreter/' \ + '|test/unittests/interpreter/', }, 'feature_shipping_status': { 'filepath': 'src/flag-definitions.h', @@ -53,9 +55,12 @@ 'gc_changes': { 'filepath': 'src/heap/', }, - 'merges': { - 'filepath': '.', + 'arm': { + 'filepath': '/arm/', }, + 'ia32': { + 'filepath': '/ia32/', + } }, 'WATCHLISTS': { @@ -79,9 +84,12 @@ 'hpayer@chromium.org', 'ulan@chromium.org', ], - 'merges': [ - # Only enabled on branches created with tools/release/create_release.py - 'v8-merges@googlegroups.com', + 'arm': [ + 'v8-mips-ports@googlegroups.com', + 'v8-ppc-ports@googlegroups.com', + ], + 'ia32': [ + 'v8-x87-ports@googlegroups.com', ], }, } diff --git a/deps/v8/base/trace_event/common/trace_event_common.h b/deps/v8/base/trace_event/common/trace_event_common.h index 33578bd37bd258..8d13fc2e8cb8a5 100644 --- a/deps/v8/base/trace_event/common/trace_event_common.h +++ b/deps/v8/base/trace_event/common/trace_event_common.h @@ -203,40 +203,26 @@ // - category and name strings must have application lifetime (statics or // literals). They may not include " chars. #define TRACE_EVENT0(category_group, name) \ - INTERNAL_TRACE_MEMORY(category_group, name) \ INTERNAL_TRACE_EVENT_ADD_SCOPED(category_group, name) #define TRACE_EVENT_WITH_FLOW0(category_group, name, bind_id, flow_flags) \ - INTERNAL_TRACE_MEMORY(category_group, name) \ INTERNAL_TRACE_EVENT_ADD_SCOPED_WITH_FLOW(category_group, name, bind_id, \ flow_flags) #define TRACE_EVENT1(category_group, name, arg1_name, arg1_val) \ - INTERNAL_TRACE_MEMORY(category_group, name) \ INTERNAL_TRACE_EVENT_ADD_SCOPED(category_group, name, arg1_name, arg1_val) #define TRACE_EVENT_WITH_FLOW1(category_group, name, bind_id, flow_flags, \ arg1_name, arg1_val) \ - INTERNAL_TRACE_MEMORY(category_group, name) \ INTERNAL_TRACE_EVENT_ADD_SCOPED_WITH_FLOW(category_group, name, bind_id, \ flow_flags, arg1_name, arg1_val) #define TRACE_EVENT2(category_group, name, arg1_name, arg1_val, arg2_name, \ arg2_val) \ - INTERNAL_TRACE_MEMORY(category_group, name) \ INTERNAL_TRACE_EVENT_ADD_SCOPED(category_group, name, arg1_name, arg1_val, \ arg2_name, arg2_val) #define TRACE_EVENT_WITH_FLOW2(category_group, name, bind_id, flow_flags, \ arg1_name, arg1_val, arg2_name, arg2_val) \ - INTERNAL_TRACE_MEMORY(category_group, name) \ INTERNAL_TRACE_EVENT_ADD_SCOPED_WITH_FLOW(category_group, name, bind_id, \ flow_flags, arg1_name, arg1_val, \ arg2_name, arg2_val) -// Records events like TRACE_EVENT2 but uses |memory_tag| for memory tracing. -// Use this where |name| is too generic to accurately aggregate allocations. -#define TRACE_EVENT_WITH_MEMORY_TAG2(category, name, memory_tag, arg1_name, \ - arg1_val, arg2_name, arg2_val) \ - INTERNAL_TRACE_MEMORY(category, memory_tag) \ - INTERNAL_TRACE_EVENT_ADD_SCOPED(category, name, arg1_name, arg1_val, \ - arg2_name, arg2_val) - // UNSHIPPED_TRACE_EVENT* are like TRACE_EVENT* except that they are not // included in official builds. @@ -309,6 +295,12 @@ TRACE_EVENT_FLAG_COPY | scope, arg1_name, arg1_val, \ arg2_name, arg2_val) +#define TRACE_EVENT_INSTANT_WITH_TIMESTAMP0(category_group, name, scope, \ + timestamp) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ + TRACE_EVENT_PHASE_INSTANT, category_group, name, 0, 0, timestamp, \ + TRACE_EVENT_FLAG_NONE | scope) + // Syntactic sugars for the sampling tracing in the main thread. #define TRACE_EVENT_SCOPED_SAMPLING_STATE(category, name) \ TRACE_EVENT_SCOPED_SAMPLING_STATE_FOR_BUCKET(0, category, name) @@ -478,6 +470,20 @@ static_cast(value1_val), value2_name, \ static_cast(value2_val)) +// Similar to TRACE_COUNTERx, but with a custom |timestamp| provided. +#define TRACE_COUNTER_WITH_TIMESTAMP1(category_group, name, timestamp, value) \ + INTERNAL_TRACE_EVENT_ADD_WITH_TIMESTAMP( \ + TRACE_EVENT_PHASE_COUNTER, category_group, name, timestamp, \ + TRACE_EVENT_FLAG_NONE, "value", static_cast(value)) + +#define TRACE_COUNTER_WITH_TIMESTAMP2(category_group, name, timestamp, \ + value1_name, value1_val, value2_name, \ + value2_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_TIMESTAMP( \ + TRACE_EVENT_PHASE_COUNTER, category_group, name, timestamp, \ + TRACE_EVENT_FLAG_NONE, value1_name, static_cast(value1_val), \ + value2_name, static_cast(value2_val)) + // Records the value of a counter called "name" immediately. Value // must be representable as a 32 bit integer. // - category and name strings must have application lifetime (statics or @@ -920,6 +926,17 @@ name, id, TRACE_EVENT_FLAG_COPY, arg1_name, \ arg1_val, arg2_name, arg2_val) +// Records a clock sync event. +#define TRACE_EVENT_CLOCK_SYNC_RECEIVER(sync_id) \ + INTERNAL_TRACE_EVENT_ADD( \ + TRACE_EVENT_PHASE_CLOCK_SYNC, "__metadata", "clock_sync", \ + TRACE_EVENT_FLAG_NONE, "sync_id", sync_id) +#define TRACE_EVENT_CLOCK_SYNC_ISSUER(sync_id, issue_ts, issue_end_ts) \ + INTERNAL_TRACE_EVENT_ADD_WITH_TIMESTAMP( \ + TRACE_EVENT_PHASE_CLOCK_SYNC, "__metadata", "clock_sync", \ + issue_end_ts.ToInternalValue(), TRACE_EVENT_FLAG_NONE, \ + "sync_id", sync_id, "issue_ts", issue_ts.ToInternalValue()) + // Macros to track the life time and value of arbitrary client objects. // See also TraceTrackableObject. #define TRACE_EVENT_OBJECT_CREATED_WITH_ID(category_group, name, id) \ @@ -945,6 +962,21 @@ TRACE_EVENT_PHASE_DELETE_OBJECT, category_group, name, \ TRACE_ID_DONT_MANGLE(id), TRACE_EVENT_FLAG_NONE) +// Records entering and leaving trace event contexts. |category_group| and +// |name| specify the context category and type. |context| is a +// snapshotted context object id. +#define TRACE_EVENT_ENTER_CONTEXT(category_group, name, context) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID( \ + TRACE_EVENT_PHASE_ENTER_CONTEXT, category_group, name, \ + TRACE_ID_DONT_MANGLE(context), TRACE_EVENT_FLAG_NONE) +#define TRACE_EVENT_LEAVE_CONTEXT(category_group, name, context) \ + INTERNAL_TRACE_EVENT_ADD_WITH_ID( \ + TRACE_EVENT_PHASE_LEAVE_CONTEXT, category_group, name, \ + TRACE_ID_DONT_MANGLE(context), TRACE_EVENT_FLAG_NONE) +#define TRACE_EVENT_SCOPED_CONTEXT(category_group, name, context) \ + INTERNAL_TRACE_EVENT_SCOPED_CONTEXT(category_group, name, \ + TRACE_ID_DONT_MANGLE(context)) + // Macro to efficiently determine if a given category group is enabled. #define TRACE_EVENT_CATEGORY_GROUP_ENABLED(category_group, ret) \ do { \ @@ -1007,6 +1039,9 @@ #define TRACE_EVENT_PHASE_DELETE_OBJECT ('D') #define TRACE_EVENT_PHASE_MEMORY_DUMP ('v') #define TRACE_EVENT_PHASE_MARK ('R') +#define TRACE_EVENT_PHASE_CLOCK_SYNC ('c') +#define TRACE_EVENT_PHASE_ENTER_CONTEXT ('(') +#define TRACE_EVENT_PHASE_LEAVE_CONTEXT (')') // Flags for changing the behavior of TRACE_EVENT_API_ADD_TRACE_EVENT. #define TRACE_EVENT_FLAG_NONE (static_cast(0)) diff --git a/deps/v8/build/all.gyp b/deps/v8/build/all.gyp index 0a05a2f02fdb5b..feaf4fecccabf5 100644 --- a/deps/v8/build/all.gyp +++ b/deps/v8/build/all.gyp @@ -11,6 +11,7 @@ '../samples/samples.gyp:*', '../src/d8.gyp:d8', '../test/cctest/cctest.gyp:*', + '../test/fuzzer/fuzzer.gyp:*', '../test/unittests/unittests.gyp:*', ], 'conditions': [ @@ -30,11 +31,16 @@ '../test/mjsunit/mjsunit.gyp:*', '../test/mozilla/mozilla.gyp:*', '../test/optimize_for_size.gyp:*', + '../test/perf.gyp:*', '../test/preparser/preparser.gyp:*', '../test/simdjs/simdjs.gyp:*', '../test/test262/test262.gyp:*', '../test/webkit/webkit.gyp:*', '../tools/check-static-initializers.gyp:*', + '../tools/gcmole/run_gcmole.gyp:*', + '../tools/jsfunfuzz/jsfunfuzz.gyp:*', + '../tools/run-deopt-fuzzer.gyp:*', + '../tools/run-valgrind.gyp:*', ], }], ] diff --git a/deps/v8/build/has_valgrind.py b/deps/v8/build/has_valgrind.py new file mode 100755 index 00000000000000..83a848d50b3049 --- /dev/null +++ b/deps/v8/build/has_valgrind.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +# Copyright 2016 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import os + +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +VALGRIND_DIR = os.path.join(BASE_DIR, 'third_party', 'valgrind') +LINUX32_DIR = os.path.join(VALGRIND_DIR, 'linux_x86') +LINUX64_DIR = os.path.join(VALGRIND_DIR, 'linux_x64') + + +def DoMain(_): + """Hook to be called from gyp without starting a separate python + interpreter.""" + return int(os.path.exists(LINUX32_DIR) and os.path.exists(LINUX64_DIR)) + + +if __name__ == '__main__': + print DoMain([]) diff --git a/deps/v8/build/isolate.gypi b/deps/v8/build/isolate.gypi index 5d30005e74a56b..546870a755a81a 100644 --- a/deps/v8/build/isolate.gypi +++ b/deps/v8/build/isolate.gypi @@ -71,12 +71,15 @@ '--config-variable', 'OS=<(OS)', '--config-variable', 'asan=<(asan)', '--config-variable', 'cfi_vptr=<(cfi_vptr)', + '--config-variable', 'gcmole=<(gcmole)', + '--config-variable', 'has_valgrind=<(has_valgrind)', '--config-variable', 'icu_use_data_file_flag=0', '--config-variable', 'msan=<(msan)', '--config-variable', 'tsan=<(tsan)', '--config-variable', 'component=<(component)', '--config-variable', 'target_arch=<(target_arch)', '--config-variable', 'use_custom_libcxx=<(use_custom_libcxx)', + '--config-variable', 'v8_separate_ignition_snapshot=<(v8_separate_ignition_snapshot)', '--config-variable', 'v8_use_external_startup_data=<(v8_use_external_startup_data)', '--config-variable', 'v8_use_snapshot=<(v8_use_snapshot)', ], diff --git a/deps/v8/build/standalone.gypi b/deps/v8/build/standalone.gypi index 273d72b744e2b0..5269b95f64dbd9 100644 --- a/deps/v8/build/standalone.gypi +++ b/deps/v8/build/standalone.gypi @@ -110,6 +110,9 @@ 'use_goma%': 0, 'gomadir%': '', + # Check if valgrind directories are present. + 'has_valgrind%': ' #include namespace v8 { @@ -55,6 +56,15 @@ class Platform { virtual ~Platform() {} + /** + * Gets the number of threads that are used to execute background tasks. Is + * used to estimate the number of tasks a work package should be split into. + * A return value of 0 means that there are no background threads available. + * Note that a value of 0 won't prohibit V8 from posting tasks using + * |CallOnBackgroundThread|. + */ + virtual size_t NumberOfAvailableBackgroundThreads() { return 0; } + /** * Schedules a task to be invoked on a background thread. |expected_runtime| * indicates that the task will run a long time. The Platform implementation diff --git a/deps/v8/include/v8-profiler.h b/deps/v8/include/v8-profiler.h index e432600290c6bb..007ae2eca55e41 100644 --- a/deps/v8/include/v8-profiler.h +++ b/deps/v8/include/v8-profiler.h @@ -206,6 +206,13 @@ class V8_EXPORT CpuProfiler { */ CpuProfile* StopProfiling(Local title); + /** + * Force collection of a sample. Must be called on the VM thread. + * Recording the forced sample does not contribute to the aggregated + * profile statistics. + */ + void CollectSample(); + /** * Tells the profiler whether the embedder is idle. */ @@ -418,6 +425,90 @@ class V8_EXPORT ActivityControl { // NOLINT }; +/** + * AllocationProfile is a sampled profile of allocations done by the program. + * This is structured as a call-graph. + */ +class V8_EXPORT AllocationProfile { + public: + struct Allocation { + /** + * Size of the sampled allocation object. + */ + size_t size; + + /** + * The number of objects of such size that were sampled. + */ + unsigned int count; + }; + + /** + * Represents a node in the call-graph. + */ + struct Node { + /** + * Name of the function. May be empty for anonymous functions or if the + * script corresponding to this function has been unloaded. + */ + Local name; + + /** + * Name of the script containing the function. May be empty if the script + * name is not available, or if the script has been unloaded. + */ + Local script_name; + + /** + * id of the script where the function is located. May be equal to + * v8::UnboundScript::kNoScriptId in cases where the script doesn't exist. + */ + int script_id; + + /** + * Start position of the function in the script. + */ + int start_position; + + /** + * 1-indexed line number where the function starts. May be + * kNoLineNumberInfo if no line number information is available. + */ + int line_number; + + /** + * 1-indexed column number where the function starts. May be + * kNoColumnNumberInfo if no line number information is available. + */ + int column_number; + + /** + * List of callees called from this node for which we have sampled + * allocations. The lifetime of the children is scoped to the containing + * AllocationProfile. + */ + std::vector children; + + /** + * List of self allocations done by this node in the call-graph. + */ + std::vector allocations; + }; + + /** + * Returns the root node of the call-graph. The root node corresponds to an + * empty JS call-stack. The lifetime of the returned Node* is scoped to the + * containing AllocationProfile. + */ + virtual Node* GetRootNode() = 0; + + virtual ~AllocationProfile() {} + + static const int kNoLineNumberInfo = Message::kNoLineNumberInfo; + static const int kNoColumnNumberInfo = Message::kNoColumnInfo; +}; + + /** * Interface for controlling heap profiling. Instance of the * profiler can be retrieved using v8::Isolate::GetHeapProfiler. @@ -521,6 +612,49 @@ class V8_EXPORT HeapProfiler { */ void StopTrackingHeapObjects(); + /** + * Starts gathering a sampling heap profile. A sampling heap profile is + * similar to tcmalloc's heap profiler and Go's mprof. It samples object + * allocations and builds an online 'sampling' heap profile. At any point in + * time, this profile is expected to be a representative sample of objects + * currently live in the system. Each sampled allocation includes the stack + * trace at the time of allocation, which makes this really useful for memory + * leak detection. + * + * This mechanism is intended to be cheap enough that it can be used in + * production with minimal performance overhead. + * + * Allocations are sampled using a randomized Poisson process. On average, one + * allocation will be sampled every |sample_interval| bytes allocated. The + * |stack_depth| parameter controls the maximum number of stack frames to be + * captured on each allocation. + * + * NOTE: This is a proof-of-concept at this point. Right now we only sample + * newspace allocations. Support for paged space allocation (e.g. pre-tenured + * objects, large objects, code objects, etc.) and native allocations + * doesn't exist yet, but is anticipated in the future. + * + * Objects allocated before the sampling is started will not be included in + * the profile. + * + * Returns false if a sampling heap profiler is already running. + */ + bool StartSamplingHeapProfiler(uint64_t sample_interval = 512 * 1024, + int stack_depth = 16); + + /** + * Stops the sampling heap profile and discards the current profile. + */ + void StopSamplingHeapProfiler(); + + /** + * Returns the sampled profile of allocations allocated (and still live) since + * StartSamplingHeapProfiler was called. The ownership of the pointer is + * transfered to the caller. Returns nullptr if sampling heap profiler is not + * active. + */ + AllocationProfile* GetAllocationProfile(); + /** * Deletes all snapshots taken. All previously returned pointers to * snapshots and their contents become invalid after this call. diff --git a/deps/v8/include/v8-version.h b/deps/v8/include/v8-version.h index 28f15a4e745f52..231dd0b802fe95 100644 --- a/deps/v8/include/v8-version.h +++ b/deps/v8/include/v8-version.h @@ -8,10 +8,10 @@ // These macros define the version number for the current version. // NOTE these macros are used by some of the tool scripts and the build // system so their names cannot be changed without changing the scripts. -#define V8_MAJOR_VERSION 4 -#define V8_MINOR_VERSION 9 -#define V8_BUILD_NUMBER 385 -#define V8_PATCH_LEVEL 27 +#define V8_MAJOR_VERSION 5 +#define V8_MINOR_VERSION 0 +#define V8_BUILD_NUMBER 71 +#define V8_PATCH_LEVEL 25 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) diff --git a/deps/v8/include/v8.h b/deps/v8/include/v8.h index d9ad17cc54712b..9ccbc6eb1863bd 100644 --- a/deps/v8/include/v8.h +++ b/deps/v8/include/v8.h @@ -329,9 +329,7 @@ class Local { friend class PersistentValueMapBase; template friend class PersistentValueVector; - template - V8_INLINE Local(S* that) - : val_(that) {} + explicit V8_INLINE Local(T* that) : val_(that) {} V8_INLINE static Local New(Isolate* isolate, T* that); T* val_; }; @@ -434,7 +432,10 @@ class WeakCallbackInfo { return internal_fields_[1]; } - bool IsFirstPass() const { return callback_ != nullptr; } + V8_DEPRECATED("Not realiable once SetSecondPassCallback() was used.", + bool IsFirstPass() const) { + return callback_ != nullptr; + } // When first called, the embedder MUST Reset() the Global which triggered the // callback. The Global itself is unusable for anything else. No v8 other api @@ -787,7 +788,7 @@ template class Persistent : public PersistentBase { template friend class Persistent; template friend class ReturnValue; - template V8_INLINE Persistent(S* that) : PersistentBase(that) { } + explicit V8_INLINE Persistent(T* that) : PersistentBase(that) {} V8_INLINE T* operator*() const { return this->val_; } template V8_INLINE void Copy(const Persistent& that); @@ -886,7 +887,7 @@ using UniquePersistent = Global; */ class V8_EXPORT HandleScope { public: - HandleScope(Isolate* isolate); + explicit HandleScope(Isolate* isolate); ~HandleScope(); @@ -939,7 +940,7 @@ class V8_EXPORT HandleScope { */ class V8_EXPORT EscapableHandleScope : public HandleScope { public: - EscapableHandleScope(Isolate* isolate); + explicit EscapableHandleScope(Isolate* isolate); V8_INLINE ~EscapableHandleScope() {} /** @@ -2678,10 +2679,10 @@ class V8_EXPORT Object : public Value { V8_DEPRECATED("Use CreateDataProperty / DefineOwnProperty", bool ForceSet(Local key, Local value, PropertyAttribute attribs = None)); - V8_DEPRECATED("Use CreateDataProperty / DefineOwnProperty", - Maybe ForceSet(Local context, Local key, - Local value, - PropertyAttribute attribs = None)); + V8_DEPRECATE_SOON("Use CreateDataProperty / DefineOwnProperty", + Maybe ForceSet(Local context, + Local key, Local value, + PropertyAttribute attribs = None)); V8_DEPRECATE_SOON("Use maybe version", Local Get(Local key)); V8_WARN_UNUSED_RESULT MaybeLocal Get(Local context, @@ -3147,7 +3148,8 @@ class FunctionCallbackInfo { public: V8_INLINE int Length() const; V8_INLINE Local operator[](int i) const; - V8_INLINE Local Callee() const; + V8_INLINE V8_DEPRECATED("Use Data() to explicitly pass Callee instead", + Local Callee() const); V8_INLINE Local This() const; V8_INLINE Local Holder() const; V8_INLINE bool IsConstructCall() const; @@ -3191,19 +3193,21 @@ class PropertyCallbackInfo { V8_INLINE Local This() const; V8_INLINE Local Holder() const; V8_INLINE ReturnValue GetReturnValue() const; + V8_INLINE bool ShouldThrowOnError() const; // This shouldn't be public, but the arm compiler needs it. - static const int kArgsLength = 6; + static const int kArgsLength = 7; protected: friend class MacroAssembler; friend class internal::PropertyCallbackArguments; friend class internal::CustomArguments; - static const int kHolderIndex = 0; - static const int kIsolateIndex = 1; - static const int kReturnValueDefaultValueIndex = 2; - static const int kReturnValueIndex = 3; - static const int kDataIndex = 4; - static const int kThisIndex = 5; + static const int kShouldThrowOnErrorIndex = 0; + static const int kHolderIndex = 1; + static const int kIsolateIndex = 2; + static const int kReturnValueDefaultValueIndex = 3; + static const int kReturnValueIndex = 4; + static const int kDataIndex = 5; + static const int kThisIndex = 6; V8_INLINE PropertyCallbackInfo(internal::Object** args) : args_(args) {} internal::Object** args_; @@ -4322,8 +4326,10 @@ enum AccessType { * object. */ typedef bool (*AccessCheckCallback)(Local accessing_context, - Local accessed_object); - + Local accessed_object, + Local data); +typedef bool (*DeprecatedAccessCheckCallback)(Local accessing_context, + Local accessed_object); /** * Returns true if cross-context access should be allowed to the named @@ -4753,6 +4759,10 @@ class V8_EXPORT ObjectTemplate : public Template { */ void SetAccessCheckCallback(AccessCheckCallback callback, Local data = Local()); + V8_DEPRECATED( + "Use SetAccessCheckCallback with new AccessCheckCallback signature.", + void SetAccessCheckCallback(DeprecatedAccessCheckCallback callback, + Local data = Local())); V8_DEPRECATED( "Use SetAccessCheckCallback instead", @@ -4999,8 +5009,10 @@ typedef void (*MemoryAllocationCallback)(ObjectSpace space, AllocationAction action, int size); -// --- Leave Script Callback --- -typedef void (*CallCompletedCallback)(); +// --- Enter/Leave Script Callback --- +typedef void (*BeforeCallEnteredCallback)(Isolate*); +typedef void (*CallCompletedCallback)(Isolate*); +typedef void (*DeprecatedCallCompletedCallback)(); // --- Promise Reject Callback --- enum PromiseRejectEvent { @@ -5069,11 +5081,24 @@ enum GCType { kGCTypeIncrementalMarking | kGCTypeProcessWeakCallbacks }; +/** + * GCCallbackFlags is used to notify additional information about the GC + * callback. + * - kGCCallbackFlagConstructRetainedObjectInfos: The GC callback is for + * constructing retained object infos. + * - kGCCallbackFlagForced: The GC callback is for a forced GC for testing. + * - kGCCallbackFlagSynchronousPhantomCallbackProcessing: The GC callback + * is called synchronously without getting posted to an idle task. + * - kGCCallbackFlagCollectAllAvailableGarbage: The GC callback is called + * in a phase where V8 is trying to collect all available garbage + * (e.g., handling a low memory notification). + */ enum GCCallbackFlags { kNoGCCallbackFlags = 0, kGCCallbackFlagConstructRetainedObjectInfos = 1 << 1, kGCCallbackFlagForced = 1 << 2, - kGCCallbackFlagSynchronousPhantomCallbackProcessing = 1 << 3 + kGCCallbackFlagSynchronousPhantomCallbackProcessing = 1 << 3, + kGCCallbackFlagCollectAllAvailableGarbage = 1 << 4, }; typedef void (*GCCallback)(GCType type, GCCallbackFlags flags); @@ -5455,6 +5480,18 @@ class V8_EXPORT Isolate { kPromiseChain = 17, kPromiseAccept = 18, kPromiseDefer = 19, + kHtmlCommentInExternalScript = 20, + kHtmlComment = 21, + kSloppyModeBlockScopedFunctionRedefinition = 22, + kForInInitializer = 23, + kArrayProtectorDirtied = 24, + kArraySpeciesModified = 25, + kArrayPrototypeConstructorModified = 26, + kArrayInstanceProtoModified = 27, + kArrayInstanceConstructorModified = 28, + + // If you add new values here, you'll also need to update V8Initializer.cpp + // in Chromium. kUseCounterFeatureCount // This enum value must be last. }; @@ -5795,6 +5832,19 @@ class V8_EXPORT Isolate { */ void SetEventLogger(LogEventCallback that); + /** + * Adds a callback to notify the host application right before a script + * is about to run. If a script re-enters the runtime during executing, the + * BeforeCallEnteredCallback is invoked for each re-entrance. + * Executing scripts inside the callback will re-trigger the callback. + */ + void AddBeforeCallEnteredCallback(BeforeCallEnteredCallback callback); + + /** + * Removes callback that was installed by AddBeforeCallEnteredCallback. + */ + void RemoveBeforeCallEnteredCallback(BeforeCallEnteredCallback callback); + /** * Adds a callback to notify the host application when a script finished * running. If a script re-enters the runtime during executing, the @@ -5803,12 +5853,18 @@ class V8_EXPORT Isolate { * further callbacks. */ void AddCallCompletedCallback(CallCompletedCallback callback); + V8_DEPRECATE_SOON( + "Use callback with parameter", + void AddCallCompletedCallback(DeprecatedCallCompletedCallback callback)); /** * Removes callback that was installed by AddCallCompletedCallback. */ void RemoveCallCompletedCallback(CallCompletedCallback callback); - + V8_DEPRECATE_SOON( + "Use callback with parameter", + void RemoveCallCompletedCallback( + DeprecatedCallCompletedCallback callback)); /** * Set callback to notify about promise reject with no handler, or @@ -7132,7 +7188,7 @@ class Internals { static const int kNodeIsPartiallyDependentShift = 4; static const int kNodeIsActiveShift = 4; - static const int kJSObjectType = 0xb7; + static const int kJSObjectType = 0xb5; static const int kFirstNonstringType = 0x80; static const int kOddballType = 0x83; static const int kForeignType = 0x87; @@ -8262,6 +8318,12 @@ ReturnValue PropertyCallbackInfo::GetReturnValue() const { return ReturnValue(&args_[kReturnValueIndex]); } +template +bool PropertyCallbackInfo::ShouldThrowOnError() const { + typedef internal::Internals I; + return args_[kShouldThrowOnErrorIndex] != I::IntToSmi(0); +} + Local Undefined(Isolate* isolate) { typedef internal::Object* S; diff --git a/deps/v8/infra/config/cq.cfg b/deps/v8/infra/config/cq.cfg index 6d3624992c012a..fbf090bb595acc 100644 --- a/deps/v8/infra/config/cq.cfg +++ b/deps/v8/infra/config/cq.cfg @@ -16,6 +16,7 @@ rietveld { verifiers { reviewer_lgtm { committer_list: "project-v8-committers" + dry_run_access_list: "project-v8-tryjob-access" } tree_status { @@ -66,9 +67,9 @@ verifiers { } } buckets { - name: "tryserver.blink" + name: "tryserver.v8" builders { - name: "linux_blink_rel" + name: "v8_linux_blink_rel" experiment_percentage: 20 } } diff --git a/deps/v8/snapshot_toolchain.gni b/deps/v8/snapshot_toolchain.gni index 11b73c58043765..4932110489dd1a 100644 --- a/deps/v8/snapshot_toolchain.gni +++ b/deps/v8/snapshot_toolchain.gni @@ -42,3 +42,5 @@ if (host_cpu == "x64" && host_os == "linux") { } else { snapshot_toolchain = default_toolchain } + + diff --git a/deps/v8/src/DEPS b/deps/v8/src/DEPS index b54cd045634eb2..b0b703b7cc409f 100644 --- a/deps/v8/src/DEPS +++ b/deps/v8/src/DEPS @@ -12,18 +12,12 @@ include_rules = [ "+src/interpreter/bytecode-array-iterator.h", "+src/interpreter/bytecodes.h", "+src/interpreter/interpreter.h", + "+src/interpreter/source-position-table.h", "-src/libplatform", "-include/libplatform" ] specific_include_rules = { - ".*\.h": [ - # Note that src/v8.h by now is a regular header file, it doesn't provide - # any special declarations besides the V8 class. There should be no need - # for including it in any .h files though. This rule is just a reminder, - # and can be removed once the dust has settled. - "-src/v8.h", - ], "d8\.cc": [ "+include/libplatform/libplatform.h", ], diff --git a/deps/v8/src/accessors.cc b/deps/v8/src/accessors.cc index 2094cdb20db764..766509e2a5a408 100644 --- a/deps/v8/src/accessors.cc +++ b/deps/v8/src/accessors.cc @@ -27,13 +27,15 @@ Handle Accessors::MakeAccessor( AccessorNameSetterCallback setter, PropertyAttributes attributes) { Factory* factory = isolate->factory(); - Handle info = factory->NewExecutableAccessorInfo(); + Handle info = factory->NewAccessorInfo(); info->set_property_attributes(attributes); info->set_all_can_read(false); info->set_all_can_write(false); info->set_is_special_data_property(true); + name = factory->InternalizeName(name); info->set_name(*name); Handle get = v8::FromCData(isolate, getter); + if (setter == nullptr) setter = &ReconfigureToDataProperty; Handle set = v8::FromCData(isolate, setter); info->set_getter(*get); info->set_setter(*set); @@ -41,21 +43,6 @@ Handle Accessors::MakeAccessor( } -Handle Accessors::CloneAccessor( - Isolate* isolate, - Handle accessor) { - Factory* factory = isolate->factory(); - Handle info = factory->NewExecutableAccessorInfo(); - info->set_name(accessor->name()); - info->set_flag(accessor->flag()); - info->set_expected_receiver_type(accessor->expected_receiver_type()); - info->set_getter(accessor->getter()); - info->set_setter(accessor->setter()); - info->set_data(accessor->data()); - return info; -} - - static V8_INLINE bool CheckForName(Handle name, Handle property_name, int offset, @@ -96,6 +83,7 @@ bool Accessors::IsJSObjectFieldAccessor(Handle map, Handle name, bool Accessors::IsJSArrayBufferViewFieldAccessor(Handle map, Handle name, int* object_offset) { + DCHECK(name->IsUniqueName()); Isolate* isolate = name->GetIsolate(); switch (map->instance_type()) { @@ -113,7 +101,7 @@ bool Accessors::IsJSArrayBufferViewFieldAccessor(Handle map, // Check if the property is overridden on the instance. DescriptorArray* descriptors = map->instance_descriptors(); - int descriptor = descriptors->SearchWithCache(*name, *map); + int descriptor = descriptors->SearchWithCache(isolate, *name, *map); if (descriptor != DescriptorArray::kNotFound) return false; Handle proto = Handle(map->prototype(), isolate); @@ -140,6 +128,50 @@ bool Accessors::IsJSArrayBufferViewFieldAccessor(Handle map, } } +MUST_USE_RESULT static MaybeHandle ReplaceAccessorWithDataProperty( + Isolate* isolate, Handle receiver, Handle holder, + Handle name, Handle value, bool observe) { + LookupIterator it(receiver, name, holder, + LookupIterator::OWN_SKIP_INTERCEPTOR); + // Skip any access checks we might hit. This accessor should never hit in a + // situation where the caller does not have access. + if (it.state() == LookupIterator::ACCESS_CHECK) { + CHECK(it.HasAccess()); + it.Next(); + } + CHECK_EQ(LookupIterator::ACCESSOR, it.state()); + + Handle old_value; + bool is_observed = observe && receiver->map()->is_observed(); + if (is_observed) { + MaybeHandle maybe_old = Object::GetPropertyWithAccessor(&it); + if (!maybe_old.ToHandle(&old_value)) return maybe_old; + } + + it.ReconfigureDataProperty(value, it.property_attributes()); + + if (is_observed && !old_value->SameValue(*value)) { + return JSObject::EnqueueChangeRecord(receiver, "update", name, old_value); + } + + return value; +} + +void Accessors::ReconfigureToDataProperty( + v8::Local key, v8::Local val, + const v8::PropertyCallbackInfo& info) { + i::Isolate* isolate = reinterpret_cast(info.GetIsolate()); + HandleScope scope(isolate); + Handle receiver = + Handle::cast(Utils::OpenHandle(*info.This())); + Handle holder = + Handle::cast(Utils::OpenHandle(*info.Holder())); + Handle name = Utils::OpenHandle(*key); + Handle value = Utils::OpenHandle(*val); + MaybeHandle result = ReplaceAccessorWithDataProperty( + isolate, receiver, holder, name, value, false); + if (result.is_null()) isolate->OptionalRescheduleException(false); +} // // Accessors::ArgumentsIterator @@ -156,29 +188,11 @@ void Accessors::ArgumentsIteratorGetter( } -void Accessors::ArgumentsIteratorSetter( - v8::Local name, v8::Local val, - const v8::PropertyCallbackInfo& info) { - i::Isolate* isolate = reinterpret_cast(info.GetIsolate()); - HandleScope scope(isolate); - Handle object_handle = - Handle::cast(Utils::OpenHandle(*info.This())); - Handle value_handle = Utils::OpenHandle(*val); - Handle name_handle = Utils::OpenHandle(*name); - - if (JSObject::DefinePropertyOrElementIgnoreAttributes( - object_handle, name_handle, value_handle, NONE) - .is_null()) { - isolate->OptionalRescheduleException(false); - } -} - - Handle Accessors::ArgumentsIteratorInfo( Isolate* isolate, PropertyAttributes attributes) { Handle name = isolate->factory()->iterator_symbol(); - return MakeAccessor(isolate, name, &ArgumentsIteratorGetter, - &ArgumentsIteratorSetter, attributes); + return MakeAccessor(isolate, name, &ArgumentsIteratorGetter, nullptr, + attributes); } @@ -219,6 +233,19 @@ void Accessors::ArrayLengthSetter( if (JSArray::ObservableSetLength(array, length).is_null()) { isolate->OptionalRescheduleException(false); } + + if (info.ShouldThrowOnError()) { + uint32_t actual_new_len = 0; + CHECK(array->length()->ToArrayLength(&actual_new_len)); + // Throw TypeError if there were non-deletable elements. + if (actual_new_len != length) { + Factory* factory = isolate->factory(); + isolate->Throw(*factory->NewTypeError( + MessageTemplate::kStrictDeleteProperty, + factory->NewNumberFromUint(actual_new_len - 1), array)); + isolate->OptionalRescheduleException(false); + } + } } @@ -259,21 +286,10 @@ void Accessors::StringLengthGetter( } -void Accessors::StringLengthSetter( - v8::Local name, - v8::Local value, - const v8::PropertyCallbackInfo& info) { - UNREACHABLE(); -} - - Handle Accessors::StringLengthInfo( Isolate* isolate, PropertyAttributes attributes) { - return MakeAccessor(isolate, - isolate->factory()->length_string(), - &StringLengthGetter, - &StringLengthSetter, - attributes); + return MakeAccessor(isolate, isolate->factory()->length_string(), + &StringLengthGetter, nullptr, attributes); } @@ -295,22 +311,11 @@ void Accessors::ScriptColumnOffsetGetter( } -void Accessors::ScriptColumnOffsetSetter( - v8::Local name, - v8::Local value, - const v8::PropertyCallbackInfo& info) { - UNREACHABLE(); -} - - Handle Accessors::ScriptColumnOffsetInfo( Isolate* isolate, PropertyAttributes attributes) { Handle name(isolate->factory()->InternalizeOneByteString( STATIC_CHAR_VECTOR("column_offset"))); - return MakeAccessor(isolate, - name, - &ScriptColumnOffsetGetter, - &ScriptColumnOffsetSetter, + return MakeAccessor(isolate, name, &ScriptColumnOffsetGetter, nullptr, attributes); } @@ -332,23 +337,11 @@ void Accessors::ScriptIdGetter( } -void Accessors::ScriptIdSetter( - v8::Local name, - v8::Local value, - const v8::PropertyCallbackInfo& info) { - UNREACHABLE(); -} - - Handle Accessors::ScriptIdInfo( Isolate* isolate, PropertyAttributes attributes) { Handle name( isolate->factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("id"))); - return MakeAccessor(isolate, - name, - &ScriptIdGetter, - &ScriptIdSetter, - attributes); + return MakeAccessor(isolate, name, &ScriptIdGetter, nullptr, attributes); } @@ -369,21 +362,10 @@ void Accessors::ScriptNameGetter( } -void Accessors::ScriptNameSetter( - v8::Local name, - v8::Local value, - const v8::PropertyCallbackInfo& info) { - UNREACHABLE(); -} - - Handle Accessors::ScriptNameInfo( Isolate* isolate, PropertyAttributes attributes) { - return MakeAccessor(isolate, - isolate->factory()->name_string(), - &ScriptNameGetter, - &ScriptNameSetter, - attributes); + return MakeAccessor(isolate, isolate->factory()->name_string(), + &ScriptNameGetter, nullptr, attributes); } @@ -404,21 +386,10 @@ void Accessors::ScriptSourceGetter( } -void Accessors::ScriptSourceSetter( - v8::Local name, - v8::Local value, - const v8::PropertyCallbackInfo& info) { - UNREACHABLE(); -} - - Handle Accessors::ScriptSourceInfo( Isolate* isolate, PropertyAttributes attributes) { - return MakeAccessor(isolate, - isolate->factory()->source_string(), - &ScriptSourceGetter, - &ScriptSourceSetter, - attributes); + return MakeAccessor(isolate, isolate->factory()->source_string(), + &ScriptSourceGetter, nullptr, attributes); } @@ -440,22 +411,11 @@ void Accessors::ScriptLineOffsetGetter( } -void Accessors::ScriptLineOffsetSetter( - v8::Local name, - v8::Local value, - const v8::PropertyCallbackInfo& info) { - UNREACHABLE(); -} - - Handle Accessors::ScriptLineOffsetInfo( Isolate* isolate, PropertyAttributes attributes) { Handle name(isolate->factory()->InternalizeOneByteString( STATIC_CHAR_VECTOR("line_offset"))); - return MakeAccessor(isolate, - name, - &ScriptLineOffsetGetter, - &ScriptLineOffsetSetter, + return MakeAccessor(isolate, name, &ScriptLineOffsetGetter, nullptr, attributes); } @@ -478,23 +438,11 @@ void Accessors::ScriptTypeGetter( } -void Accessors::ScriptTypeSetter( - v8::Local name, - v8::Local value, - const v8::PropertyCallbackInfo& info) { - UNREACHABLE(); -} - - Handle Accessors::ScriptTypeInfo( Isolate* isolate, PropertyAttributes attributes) { Handle name( isolate->factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("type"))); - return MakeAccessor(isolate, - name, - &ScriptTypeGetter, - &ScriptTypeSetter, - attributes); + return MakeAccessor(isolate, name, &ScriptTypeGetter, nullptr, attributes); } @@ -516,22 +464,11 @@ void Accessors::ScriptCompilationTypeGetter( } -void Accessors::ScriptCompilationTypeSetter( - v8::Local name, - v8::Local value, - const v8::PropertyCallbackInfo& info) { - UNREACHABLE(); -} - - Handle Accessors::ScriptCompilationTypeInfo( Isolate* isolate, PropertyAttributes attributes) { Handle name(isolate->factory()->InternalizeOneByteString( STATIC_CHAR_VECTOR("compilation_type"))); - return MakeAccessor(isolate, - name, - &ScriptCompilationTypeGetter, - &ScriptCompilationTypeSetter, + return MakeAccessor(isolate, name, &ScriptCompilationTypeGetter, nullptr, attributes); } @@ -561,22 +498,11 @@ void Accessors::ScriptLineEndsGetter( } -void Accessors::ScriptLineEndsSetter( - v8::Local name, - v8::Local value, - const v8::PropertyCallbackInfo& info) { - UNREACHABLE(); -} - - Handle Accessors::ScriptLineEndsInfo( Isolate* isolate, PropertyAttributes attributes) { Handle name(isolate->factory()->InternalizeOneByteString( STATIC_CHAR_VECTOR("line_ends"))); - return MakeAccessor(isolate, - name, - &ScriptLineEndsGetter, - &ScriptLineEndsSetter, + return MakeAccessor(isolate, name, &ScriptLineEndsGetter, nullptr, attributes); } @@ -598,21 +524,10 @@ void Accessors::ScriptSourceUrlGetter( } -void Accessors::ScriptSourceUrlSetter( - v8::Local name, - v8::Local value, - const v8::PropertyCallbackInfo& info) { - UNREACHABLE(); -} - - Handle Accessors::ScriptSourceUrlInfo( Isolate* isolate, PropertyAttributes attributes) { - return MakeAccessor(isolate, - isolate->factory()->source_url_string(), - &ScriptSourceUrlGetter, - &ScriptSourceUrlSetter, - attributes); + return MakeAccessor(isolate, isolate->factory()->source_url_string(), + &ScriptSourceUrlGetter, nullptr, attributes); } @@ -634,21 +549,10 @@ void Accessors::ScriptSourceMappingUrlGetter( } -void Accessors::ScriptSourceMappingUrlSetter( - v8::Local name, - v8::Local value, - const v8::PropertyCallbackInfo& info) { - UNREACHABLE(); -} - - Handle Accessors::ScriptSourceMappingUrlInfo( Isolate* isolate, PropertyAttributes attributes) { - return MakeAccessor(isolate, - isolate->factory()->source_mapping_url_string(), - &ScriptSourceMappingUrlGetter, - &ScriptSourceMappingUrlSetter, - attributes); + return MakeAccessor(isolate, isolate->factory()->source_mapping_url_string(), + &ScriptSourceMappingUrlGetter, nullptr, attributes); } @@ -671,19 +575,12 @@ void Accessors::ScriptIsEmbedderDebugScriptGetter( } -void Accessors::ScriptIsEmbedderDebugScriptSetter( - v8::Local name, v8::Local value, - const v8::PropertyCallbackInfo& info) { - UNREACHABLE(); -} - - Handle Accessors::ScriptIsEmbedderDebugScriptInfo( Isolate* isolate, PropertyAttributes attributes) { Handle name(isolate->factory()->InternalizeOneByteString( STATIC_CHAR_VECTOR("is_debugger_script"))); return MakeAccessor(isolate, name, &ScriptIsEmbedderDebugScriptGetter, - &ScriptIsEmbedderDebugScriptSetter, attributes); + nullptr, attributes); } @@ -704,22 +601,11 @@ void Accessors::ScriptContextDataGetter( } -void Accessors::ScriptContextDataSetter( - v8::Local name, - v8::Local value, - const v8::PropertyCallbackInfo& info) { - UNREACHABLE(); -} - - Handle Accessors::ScriptContextDataInfo( Isolate* isolate, PropertyAttributes attributes) { Handle name(isolate->factory()->InternalizeOneByteString( STATIC_CHAR_VECTOR("context_data"))); - return MakeAccessor(isolate, - name, - &ScriptContextDataGetter, - &ScriptContextDataSetter, + return MakeAccessor(isolate, name, &ScriptContextDataGetter, nullptr, attributes); } @@ -751,22 +637,11 @@ void Accessors::ScriptEvalFromScriptGetter( } -void Accessors::ScriptEvalFromScriptSetter( - v8::Local name, - v8::Local value, - const v8::PropertyCallbackInfo& info) { - UNREACHABLE(); -} - - Handle Accessors::ScriptEvalFromScriptInfo( Isolate* isolate, PropertyAttributes attributes) { Handle name(isolate->factory()->InternalizeOneByteString( STATIC_CHAR_VECTOR("eval_from_script"))); - return MakeAccessor(isolate, - name, - &ScriptEvalFromScriptGetter, - &ScriptEvalFromScriptSetter, + return MakeAccessor(isolate, name, &ScriptEvalFromScriptGetter, nullptr, attributes); } @@ -789,7 +664,6 @@ void Accessors::ScriptEvalFromScriptPositionGetter( Handle code(SharedFunctionInfo::cast( script->eval_from_shared())->code()); result = Handle(Smi::FromInt(code->SourcePosition( - code->instruction_start() + script->eval_from_instructions_offset())), isolate); } @@ -797,23 +671,12 @@ void Accessors::ScriptEvalFromScriptPositionGetter( } -void Accessors::ScriptEvalFromScriptPositionSetter( - v8::Local name, - v8::Local value, - const v8::PropertyCallbackInfo& info) { - UNREACHABLE(); -} - - Handle Accessors::ScriptEvalFromScriptPositionInfo( Isolate* isolate, PropertyAttributes attributes) { Handle name(isolate->factory()->InternalizeOneByteString( STATIC_CHAR_VECTOR("eval_from_script_position"))); - return MakeAccessor(isolate, - name, - &ScriptEvalFromScriptPositionGetter, - &ScriptEvalFromScriptPositionSetter, - attributes); + return MakeAccessor(isolate, name, &ScriptEvalFromScriptPositionGetter, + nullptr, attributes); } @@ -843,22 +706,11 @@ void Accessors::ScriptEvalFromFunctionNameGetter( } -void Accessors::ScriptEvalFromFunctionNameSetter( - v8::Local name, - v8::Local value, - const v8::PropertyCallbackInfo& info) { - UNREACHABLE(); -} - - Handle Accessors::ScriptEvalFromFunctionNameInfo( Isolate* isolate, PropertyAttributes attributes) { Handle name(isolate->factory()->InternalizeOneByteString( STATIC_CHAR_VECTOR("eval_from_function_name"))); - return MakeAccessor(isolate, - name, - &ScriptEvalFromFunctionNameGetter, - &ScriptEvalFromFunctionNameSetter, + return MakeAccessor(isolate, name, &ScriptEvalFromFunctionNameGetter, nullptr, attributes); } @@ -976,59 +828,27 @@ void Accessors::FunctionLengthGetter( info.GetReturnValue().Set(Utils::ToLocal(result)); } - -MUST_USE_RESULT static MaybeHandle ReplaceAccessorWithDataProperty( - Isolate* isolate, Handle object, Handle name, - Handle value, bool is_observed, Handle old_value) { - LookupIterator it(object, name); - CHECK_EQ(LookupIterator::ACCESSOR, it.state()); - DCHECK(it.HolderIsReceiverOrHiddenPrototype()); - it.ReconfigureDataProperty(value, it.property_details().attributes()); - - if (is_observed && !old_value->SameValue(*value)) { - return JSObject::EnqueueChangeRecord(object, "update", name, old_value); - } - - return value; -} - - -MUST_USE_RESULT static MaybeHandle SetFunctionLength( - Isolate* isolate, Handle function, Handle value) { - Handle old_value; - bool is_observed = function->map()->is_observed(); - if (is_observed) { - old_value = handle(Smi::FromInt(function->shared()->length()), isolate); - } - - return ReplaceAccessorWithDataProperty(isolate, function, - isolate->factory()->length_string(), - value, is_observed, old_value); -} - - -void Accessors::FunctionLengthSetter( - v8::Local name, - v8::Local val, +void Accessors::ObservedReconfigureToDataProperty( + v8::Local key, v8::Local val, const v8::PropertyCallbackInfo& info) { i::Isolate* isolate = reinterpret_cast(info.GetIsolate()); HandleScope scope(isolate); + Handle receiver = + Handle::cast(Utils::OpenHandle(*info.This())); + Handle holder = + Handle::cast(Utils::OpenHandle(*info.Holder())); + Handle name = Utils::OpenHandle(*key); Handle value = Utils::OpenHandle(*val); - - Handle object = - Handle::cast(Utils::OpenHandle(*info.Holder())); - if (SetFunctionLength(isolate, object, value).is_null()) { - isolate->OptionalRescheduleException(false); - } + MaybeHandle result = ReplaceAccessorWithDataProperty( + isolate, receiver, holder, name, value, true); + if (result.is_null()) isolate->OptionalRescheduleException(false); } Handle Accessors::FunctionLengthInfo( Isolate* isolate, PropertyAttributes attributes) { - return MakeAccessor(isolate, - isolate->factory()->length_string(), - &FunctionLengthGetter, - &FunctionLengthSetter, + return MakeAccessor(isolate, isolate->factory()->length_string(), + &FunctionLengthGetter, &ObservedReconfigureToDataProperty, attributes); } @@ -1054,43 +874,10 @@ void Accessors::FunctionNameGetter( info.GetReturnValue().Set(Utils::ToLocal(result)); } - -MUST_USE_RESULT static MaybeHandle SetFunctionName( - Isolate* isolate, Handle function, Handle value) { - Handle old_value; - bool is_observed = function->map()->is_observed(); - if (is_observed) { - old_value = handle(function->shared()->name(), isolate); - } - - return ReplaceAccessorWithDataProperty(isolate, function, - isolate->factory()->name_string(), - value, is_observed, old_value); -} - - -void Accessors::FunctionNameSetter( - v8::Local name, - v8::Local val, - const v8::PropertyCallbackInfo& info) { - i::Isolate* isolate = reinterpret_cast(info.GetIsolate()); - HandleScope scope(isolate); - Handle value = Utils::OpenHandle(*val); - - Handle object = - Handle::cast(Utils::OpenHandle(*info.Holder())); - if (SetFunctionName(isolate, object, value).is_null()) { - isolate->OptionalRescheduleException(false); - } -} - - Handle Accessors::FunctionNameInfo( Isolate* isolate, PropertyAttributes attributes) { - return MakeAccessor(isolate, - isolate->factory()->name_string(), - &FunctionNameGetter, - &FunctionNameSetter, + return MakeAccessor(isolate, isolate->factory()->name_string(), + &FunctionNameGetter, &ObservedReconfigureToDataProperty, attributes); } @@ -1158,10 +945,10 @@ static int FindFunctionInFrame(JavaScriptFrame* frame, } +namespace { + Handle GetFunctionArguments(Isolate* isolate, Handle function) { - if (function->shared()->native()) return isolate->factory()->null_value(); - // Find the top invocation of the function by traversing frames. for (JavaScriptFrameIterator it(isolate); !it.done(); it.Advance()) { JavaScriptFrame* frame = it.frame(); @@ -1200,9 +987,14 @@ Handle GetFunctionArguments(Isolate* isolate, return isolate->factory()->null_value(); } +} // namespace -Handle Accessors::FunctionGetArguments(Handle function) { - return GetFunctionArguments(function->GetIsolate(), function); + +Handle Accessors::FunctionGetArguments(Handle function) { + Handle arguments = + GetFunctionArguments(function->GetIsolate(), function); + CHECK(arguments->IsJSObject()); + return Handle::cast(arguments); } @@ -1213,27 +1005,18 @@ void Accessors::FunctionArgumentsGetter( HandleScope scope(isolate); Handle function = Handle::cast(Utils::OpenHandle(*info.Holder())); - Handle result = GetFunctionArguments(isolate, function); + Handle result = + function->shared()->native() + ? Handle::cast(isolate->factory()->null_value()) + : GetFunctionArguments(isolate, function); info.GetReturnValue().Set(Utils::ToLocal(result)); } -void Accessors::FunctionArgumentsSetter( - v8::Local name, - v8::Local val, - const v8::PropertyCallbackInfo& info) { - // Function arguments is non writable, non configurable. - UNREACHABLE(); -} - - Handle Accessors::FunctionArgumentsInfo( Isolate* isolate, PropertyAttributes attributes) { - return MakeAccessor(isolate, - isolate->factory()->arguments_string(), - &FunctionArgumentsGetter, - &FunctionArgumentsSetter, - attributes); + return MakeAccessor(isolate, isolate->factory()->arguments_string(), + &FunctionArgumentsGetter, nullptr, attributes); } @@ -1363,22 +1146,10 @@ void Accessors::FunctionCallerGetter( } -void Accessors::FunctionCallerSetter( - v8::Local name, - v8::Local val, - const v8::PropertyCallbackInfo& info) { - // Function caller is non writable, non configurable. - UNREACHABLE(); -} - - Handle Accessors::FunctionCallerInfo( Isolate* isolate, PropertyAttributes attributes) { - return MakeAccessor(isolate, - isolate->factory()->caller_string(), - &FunctionCallerGetter, - &FunctionCallerSetter, - attributes); + return MakeAccessor(isolate, isolate->factory()->caller_string(), + &FunctionCallerGetter, nullptr, attributes); } @@ -1386,9 +1157,8 @@ Handle Accessors::FunctionCallerInfo( // Accessors::MakeModuleExport // -static void ModuleGetExport( - v8::Local property, - const v8::PropertyCallbackInfo& info) { +static void ModuleGetExport(v8::Local property, + const v8::PropertyCallbackInfo& info) { JSModule* instance = JSModule::cast(*v8::Utils::OpenHandle(*info.Holder())); Context* context = Context::cast(instance->context()); DCHECK(context->IsModuleContext()); @@ -1397,7 +1167,7 @@ static void ModuleGetExport( ->Int32Value(info.GetIsolate()->GetCurrentContext()) .FromMaybe(-1); if (slot < 0 || slot >= context->length()) { - Handle name = v8::Utils::OpenHandle(*property); + Handle name = v8::Utils::OpenHandle(*property); Handle exception = isolate->factory()->NewReferenceError( MessageTemplate::kNotDefined, name); @@ -1406,7 +1176,7 @@ static void ModuleGetExport( } Object* value = context->get(slot); if (value->IsTheHole()) { - Handle name = v8::Utils::OpenHandle(*property); + Handle name = v8::Utils::OpenHandle(*property); Handle exception = isolate->factory()->NewReferenceError( MessageTemplate::kNotDefined, name); @@ -1417,33 +1187,15 @@ static void ModuleGetExport( } -static void ModuleSetExport( - v8::Local property, - v8::Local value, - const v8::PropertyCallbackInfo& info) { - JSModule* instance = JSModule::cast(*v8::Utils::OpenHandle(*info.Holder())); - Context* context = Context::cast(instance->context()); - DCHECK(context->IsModuleContext()); - Isolate* isolate = instance->GetIsolate(); - int slot = info.Data() - ->Int32Value(info.GetIsolate()->GetCurrentContext()) - .FromMaybe(-1); - if (slot < 0 || slot >= context->length()) { - Handle name = v8::Utils::OpenHandle(*property); - Handle exception = isolate->factory()->NewReferenceError( - MessageTemplate::kNotDefined, name); - isolate->ScheduleThrow(*exception); - return; - } - Object* old_value = context->get(slot); - if (old_value->IsTheHole()) { - Handle name = v8::Utils::OpenHandle(*property); - Handle exception = isolate->factory()->NewReferenceError( - MessageTemplate::kNotDefined, name); - isolate->ScheduleThrow(*exception); - return; - } - context->set(slot, *v8::Utils::OpenHandle(*value)); +static void ModuleSetExport(v8::Local property, + v8::Local value, + const v8::PropertyCallbackInfo& info) { + if (!info.ShouldThrowOnError()) return; + Handle name = v8::Utils::OpenHandle(*property); + Isolate* isolate = name->GetIsolate(); + Handle exception = + isolate->factory()->NewTypeError(MessageTemplate::kNotDefined, name); + isolate->ScheduleThrow(*exception); } @@ -1452,17 +1204,9 @@ Handle Accessors::MakeModuleExport( int index, PropertyAttributes attributes) { Isolate* isolate = name->GetIsolate(); - Factory* factory = isolate->factory(); - Handle info = factory->NewExecutableAccessorInfo(); - info->set_property_attributes(attributes); - info->set_all_can_read(true); - info->set_all_can_write(true); - info->set_name(*name); + Handle info = MakeAccessor(isolate, name, &ModuleGetExport, + &ModuleSetExport, attributes); info->set_data(Smi::FromInt(index)); - Handle getter = v8::FromCData(isolate, &ModuleGetExport); - Handle setter = v8::FromCData(isolate, &ModuleSetExport); - info->set_getter(*getter); - if (!(attributes & ReadOnly)) info->set_setter(*setter); return info; } diff --git a/deps/v8/src/accessors.h b/deps/v8/src/accessors.h index 6c1765c404ddcd..3fe550c25a4559 100644 --- a/deps/v8/src/accessors.h +++ b/deps/v8/src/accessors.h @@ -15,7 +15,7 @@ namespace v8 { namespace internal { // Forward declarations. -class ExecutableAccessorInfo; +class AccessorInfo; // The list of accessor descriptors. This is a second-order macro // taking a macro to be applied to all accessor descriptor names. @@ -44,6 +44,12 @@ class ExecutableAccessorInfo; V(ScriptIsEmbedderDebugScript) \ V(StringLength) +#define ACCESSOR_SETTER_LIST(V) \ + V(ReconfigureToDataProperty) \ + V(ObservedReconfigureToDataProperty) \ + V(ArrayLengthSetter) \ + V(FunctionPrototypeSetter) + // Accessors contains all predefined proxy accessors. class Accessors : public AllStatic { @@ -53,16 +59,18 @@ class Accessors : public AllStatic { static void name##Getter( \ v8::Local name, \ const v8::PropertyCallbackInfo& info); \ - static void name##Setter( \ - v8::Local name, \ - v8::Local value, \ - const v8::PropertyCallbackInfo& info); \ static Handle name##Info( \ Isolate* isolate, \ PropertyAttributes attributes); ACCESSOR_INFO_LIST(ACCESSOR_INFO_DECLARATION) #undef ACCESSOR_INFO_DECLARATION +#define ACCESSOR_SETTER_DECLARATION(name) \ + static void name(v8::Local name, v8::Local value, \ + const v8::PropertyCallbackInfo& info); + ACCESSOR_SETTER_LIST(ACCESSOR_SETTER_DECLARATION) +#undef ACCESSOR_SETTER_DECLARATION + enum DescriptorId { #define ACCESSOR_INFO_DECLARATION(name) \ k##name##Getter, \ @@ -75,7 +83,7 @@ class Accessors : public AllStatic { // Accessor functions called directly from the runtime system. MUST_USE_RESULT static MaybeHandle FunctionSetPrototype( Handle object, Handle value); - static Handle FunctionGetArguments(Handle object); + static Handle FunctionGetArguments(Handle object); // Accessor infos. static Handle MakeModuleExport( @@ -100,10 +108,6 @@ class Accessors : public AllStatic { AccessorNameGetterCallback getter, AccessorNameSetterCallback setter, PropertyAttributes attributes); - - static Handle CloneAccessor( - Isolate* isolate, - Handle accessor); }; } // namespace internal diff --git a/deps/v8/src/address-map.cc b/deps/v8/src/address-map.cc index 681661af2978bb..86558e094aa221 100644 --- a/deps/v8/src/address-map.cc +++ b/deps/v8/src/address-map.cc @@ -17,10 +17,10 @@ RootIndexMap::RootIndexMap(Isolate* isolate) { for (uint32_t i = 0; i < Heap::kStrongRootListLength; i++) { Heap::RootListIndex root_index = static_cast(i); Object* root = isolate->heap()->root(root_index); + if (!root->IsHeapObject()) continue; // Omit root entries that can be written after initialization. They must // not be referenced through the root list in the snapshot. - if (root->IsHeapObject() && - isolate->heap()->RootCanBeTreatedAsConstant(root_index)) { + if (isolate->heap()->RootCanBeTreatedAsConstant(root_index)) { HeapObject* heap_object = HeapObject::cast(root); HashMap::Entry* entry = LookupEntry(map_, heap_object, false); if (entry != NULL) { @@ -29,6 +29,11 @@ RootIndexMap::RootIndexMap(Isolate* isolate) { } else { SetValue(LookupEntry(map_, heap_object, true), i); } + } else { + // Immortal immovable root objects are constant and allocated on the first + // page of old space. Non-constant roots cannot be immortal immovable. The + // root index map contains all immortal immmovable root objects. + CHECK(!Heap::RootIsImmortalImmovable(root_index)); } } isolate->set_root_index_map(map_); diff --git a/deps/v8/src/api-experimental.cc b/deps/v8/src/api-experimental.cc index 2b49e9723a5745..98d62e33a2f035 100644 --- a/deps/v8/src/api-experimental.cc +++ b/deps/v8/src/api-experimental.cc @@ -122,5 +122,10 @@ void FastAccessorBuilder::CheckNotZeroOrJump(ValueId value_id, FromApi(this)->CheckNotZeroOrJump(value_id, label_id); } +FastAccessorBuilder::ValueId FastAccessorBuilder::Call( + v8::FunctionCallback callback, ValueId value_id) { + return FromApi(this)->Call(callback, value_id); +} + } // namespace experimental } // namespace v8 diff --git a/deps/v8/src/api-natives.cc b/deps/v8/src/api-natives.cc index bc71e3ef90db8b..3be2df0bb686a5 100644 --- a/deps/v8/src/api-natives.cc +++ b/deps/v8/src/api-natives.cc @@ -16,8 +16,8 @@ namespace internal { namespace { MaybeHandle InstantiateObject(Isolate* isolate, - Handle data); - + Handle data, + bool is_hidden_prototype); MaybeHandle InstantiateFunction(Isolate* isolate, Handle data, @@ -30,32 +30,36 @@ MaybeHandle Instantiate(Isolate* isolate, Handle data, return InstantiateFunction(isolate, Handle::cast(data), name); } else if (data->IsObjectTemplateInfo()) { - return InstantiateObject(isolate, Handle::cast(data)); + return InstantiateObject(isolate, Handle::cast(data), + false); } else { return data; } } - -MaybeHandle DefineAccessorProperty(Isolate* isolate, - Handle object, - Handle name, - Handle getter, - Handle setter, - PropertyAttributes attributes) { - if (!getter->IsUndefined()) { - ASSIGN_RETURN_ON_EXCEPTION( - isolate, getter, - InstantiateFunction(isolate, - Handle::cast(getter)), - Object); - } - if (!setter->IsUndefined()) { - ASSIGN_RETURN_ON_EXCEPTION( - isolate, setter, - InstantiateFunction(isolate, - Handle::cast(setter)), - Object); +MaybeHandle DefineAccessorProperty( + Isolate* isolate, Handle object, Handle name, + Handle getter, Handle setter, PropertyAttributes attributes, + bool force_instantiate) { + DCHECK(!getter->IsFunctionTemplateInfo() || + !FunctionTemplateInfo::cast(*getter)->do_not_cache()); + DCHECK(!setter->IsFunctionTemplateInfo() || + !FunctionTemplateInfo::cast(*setter)->do_not_cache()); + if (force_instantiate) { + if (getter->IsFunctionTemplateInfo()) { + ASSIGN_RETURN_ON_EXCEPTION( + isolate, getter, + InstantiateFunction(isolate, + Handle::cast(getter)), + Object); + } + if (setter->IsFunctionTemplateInfo()) { + ASSIGN_RETURN_ON_EXCEPTION( + isolate, setter, + InstantiateFunction(isolate, + Handle::cast(setter)), + Object); + } } RETURN_ON_EXCEPTION(isolate, JSObject::DefineAccessor(object, name, getter, setter, attributes), @@ -148,17 +152,78 @@ Object* GetIntrinsic(Isolate* isolate, v8::Intrinsic intrinsic) { return nullptr; } +// Returns parent function template or null. +FunctionTemplateInfo* GetParent(FunctionTemplateInfo* data) { + Object* parent = data->parent_template(); + return parent->IsUndefined() ? nullptr : FunctionTemplateInfo::cast(parent); +} + +// Starting from given object template's constructor walk up the inheritance +// chain till a function template that has an instance template is found. +ObjectTemplateInfo* GetParent(ObjectTemplateInfo* data) { + Object* maybe_ctor = data->constructor(); + if (maybe_ctor->IsUndefined()) return nullptr; + FunctionTemplateInfo* ctor = FunctionTemplateInfo::cast(maybe_ctor); + while (true) { + ctor = GetParent(ctor); + if (ctor == nullptr) return nullptr; + Object* maybe_obj = ctor->instance_template(); + if (!maybe_obj->IsUndefined()) return ObjectTemplateInfo::cast(maybe_obj); + } +} +template MaybeHandle ConfigureInstance(Isolate* isolate, Handle obj, - Handle data) { + Handle data, + bool is_hidden_prototype) { + HandleScope scope(isolate); + // Disable access checks while instantiating the object. + AccessCheckDisableScope access_check_scope(isolate, obj); + + // Walk the inheritance chain and copy all accessors to current object. + int max_number_of_properties = 0; + TemplateInfoT* info = *data; + while (info != nullptr) { + if (!info->property_accessors()->IsUndefined()) { + Object* props = info->property_accessors(); + if (!props->IsUndefined()) { + Handle props_handle(props, isolate); + NeanderArray props_array(props_handle); + max_number_of_properties += props_array.length(); + } + } + info = GetParent(info); + } + + if (max_number_of_properties > 0) { + int valid_descriptors = 0; + // Use a temporary FixedArray to accumulate unique accessors. + Handle array = + isolate->factory()->NewFixedArray(max_number_of_properties); + + info = *data; + while (info != nullptr) { + // Accumulate accessors. + if (!info->property_accessors()->IsUndefined()) { + Handle props(info->property_accessors(), isolate); + valid_descriptors = + AccessorInfo::AppendUnique(props, array, valid_descriptors); + } + info = GetParent(info); + } + + // Install accumulated accessors. + for (int i = 0; i < valid_descriptors; i++) { + Handle accessor(AccessorInfo::cast(array->get(i))); + JSObject::SetAccessor(obj, accessor).Assert(); + } + } + auto property_list = handle(data->property_list(), isolate); if (property_list->IsUndefined()) return obj; // TODO(dcarney): just use a FixedArray here. NeanderArray properties(property_list); if (properties.length() == 0) return obj; - HandleScope scope(isolate); - // Disable access checks while instantiating the object. - AccessCheckDisableScope access_check_scope(isolate, obj); int i = 0; for (int c = 0; c < data->number_of_properties(); c++) { @@ -171,17 +236,16 @@ MaybeHandle ConfigureInstance(Isolate* isolate, Handle obj, if (kind == kData) { auto prop_data = handle(properties.get(i++), isolate); - RETURN_ON_EXCEPTION(isolate, DefineDataProperty(isolate, obj, name, prop_data, attributes), JSObject); } else { auto getter = handle(properties.get(i++), isolate); auto setter = handle(properties.get(i++), isolate); - RETURN_ON_EXCEPTION(isolate, - DefineAccessorProperty(isolate, obj, name, getter, - setter, attributes), - JSObject); + RETURN_ON_EXCEPTION( + isolate, DefineAccessorProperty(isolate, obj, name, getter, setter, + attributes, is_hidden_prototype), + JSObject); } } else { // Intrinsic data property --- Get appropriate value from the current @@ -202,14 +266,28 @@ MaybeHandle ConfigureInstance(Isolate* isolate, Handle obj, return obj; } +void CacheTemplateInstantiation(Isolate* isolate, Handle serial_number, + Handle object) { + auto cache = isolate->template_instantiations_cache(); + auto new_cache = ObjectHashTable::Put(cache, serial_number, object); + isolate->native_context()->set_template_instantiations_cache(*new_cache); +} + +void UncacheTemplateInstantiation(Isolate* isolate, Handle serial_number) { + auto cache = isolate->template_instantiations_cache(); + bool was_present = false; + auto new_cache = ObjectHashTable::Remove(cache, serial_number, &was_present); + DCHECK(was_present); + isolate->native_context()->set_template_instantiations_cache(*new_cache); +} MaybeHandle InstantiateObject(Isolate* isolate, - Handle data) { + Handle info, + bool is_hidden_prototype) { // Enter a new scope. Recursion could otherwise create a lot of handles. HandleScope scope(isolate); // Fast path. Handle result; - auto info = Handle::cast(data); auto constructor = handle(info->constructor(), isolate); Handle cons; if (constructor->IsUndefined()) { @@ -219,29 +297,32 @@ MaybeHandle InstantiateObject(Isolate* isolate, ASSIGN_RETURN_ON_EXCEPTION( isolate, cons, InstantiateFunction(isolate, cons_templ), JSFunction); } + auto serial_number = handle(Smi::cast(info->serial_number()), isolate); + if (serial_number->value()) { + // Probe cache. + auto cache = isolate->template_instantiations_cache(); + Object* boilerplate = cache->Lookup(serial_number); + if (boilerplate->IsJSObject()) { + result = handle(JSObject::cast(boilerplate), isolate); + ASSIGN_RETURN_ON_EXCEPTION( + isolate, result, JSObject::DeepCopyApiBoilerplate(result), JSObject); + return scope.CloseAndEscape(result); + } + } auto object = isolate->factory()->NewJSObject(cons); ASSIGN_RETURN_ON_EXCEPTION( - isolate, result, ConfigureInstance(isolate, object, info), JSFunction); + isolate, result, + ConfigureInstance(isolate, object, info, is_hidden_prototype), + JSFunction); // TODO(dcarney): is this necessary? JSObject::MigrateSlowToFast(result, 0, "ApiNatives::InstantiateObject"); - return scope.CloseAndEscape(result); -} - - -void CacheFunction(Isolate* isolate, Handle serial_number, - Handle function) { - auto cache = isolate->function_cache(); - auto new_cache = ObjectHashTable::Put(cache, serial_number, function); - isolate->native_context()->set_function_cache(*new_cache); -} - -void UncacheFunction(Isolate* isolate, Handle serial_number) { - auto cache = isolate->function_cache(); - bool was_present = false; - auto new_cache = ObjectHashTable::Remove(cache, serial_number, &was_present); - DCHECK(was_present); - isolate->native_context()->set_function_cache(*new_cache); + if (serial_number->value()) { + CacheTemplateInstantiation(isolate, serial_number, result); + ASSIGN_RETURN_ON_EXCEPTION( + isolate, result, JSObject::DeepCopyApiBoilerplate(result), JSObject); + } + return scope.CloseAndEscape(result); } @@ -249,9 +330,9 @@ MaybeHandle InstantiateFunction(Isolate* isolate, Handle data, Handle name) { auto serial_number = handle(Smi::cast(data->serial_number()), isolate); - // Probe cache. - if (!data->do_not_cache()) { - auto cache = isolate->function_cache(); + if (serial_number->value()) { + // Probe cache. + auto cache = isolate->template_instantiations_cache(); Object* element = cache->Lookup(serial_number); if (element->IsJSFunction()) { return handle(JSFunction::cast(element), isolate); @@ -268,7 +349,8 @@ MaybeHandle InstantiateFunction(Isolate* isolate, ASSIGN_RETURN_ON_EXCEPTION( isolate, prototype, InstantiateObject(isolate, - Handle::cast(prototype_templ)), + Handle::cast(prototype_templ), + data->hidden_prototype()), JSFunction); } auto parent = handle(data->parent_template(), isolate); @@ -296,15 +378,16 @@ MaybeHandle InstantiateFunction(Isolate* isolate, if (!name.is_null() && name->IsString()) { function->shared()->set_name(*name); } - if (!data->do_not_cache()) { + if (serial_number->value()) { // Cache the function. - CacheFunction(isolate, serial_number, function); + CacheTemplateInstantiation(isolate, serial_number, function); } - auto result = ConfigureInstance(isolate, function, data); + auto result = + ConfigureInstance(isolate, function, data, data->hidden_prototype()); if (result.is_null()) { // Uncache on error. - if (!data->do_not_cache()) { - UncacheFunction(isolate, serial_number); + if (serial_number->value()) { + UncacheTemplateInstantiation(isolate, serial_number); } return MaybeHandle(); } @@ -364,23 +447,7 @@ MaybeHandle ApiNatives::InstantiateObject( Handle data) { Isolate* isolate = data->GetIsolate(); InvokeScope invoke_scope(isolate); - return ::v8::internal::InstantiateObject(isolate, data); -} - - -MaybeHandle ApiNatives::ConfigureInstance( - Isolate* isolate, Handle desc, - Handle instance) { - // Configure the instance by adding the properties specified by the - // instance template. - if (desc->instance_template()->IsUndefined()) return desc; - InvokeScope invoke_scope(isolate); - Handle instance_template( - ObjectTemplateInfo::cast(desc->instance_template()), isolate); - RETURN_ON_EXCEPTION(isolate, ::v8::internal::ConfigureInstance( - isolate, instance, instance_template), - FunctionTemplateInfo); - return desc; + return ::v8::internal::InstantiateObject(isolate, data, false); } @@ -527,11 +594,6 @@ Handle ApiNatives::CreateApiFunction( map->set_is_undetectable(); } - // Mark as hidden for the __proto__ accessor if needed. - if (obj->hidden_prototype()) { - map->set_is_hidden_prototype(); - } - // Mark as needs_access_check if needed. if (obj->needs_access_check()) { map->set_is_access_check_needed(true); @@ -548,73 +610,7 @@ Handle ApiNatives::CreateApiFunction( // Mark instance as callable in the map. if (!obj->instance_call_handler()->IsUndefined()) { map->set_is_callable(); - map->set_is_constructor(); - } - - // Recursively copy parent instance templates' accessors, - // 'data' may be modified. - int max_number_of_additional_properties = 0; - int max_number_of_static_properties = 0; - FunctionTemplateInfo* info = *obj; - while (true) { - if (!info->instance_template()->IsUndefined()) { - Object* props = ObjectTemplateInfo::cast(info->instance_template()) - ->property_accessors(); - if (!props->IsUndefined()) { - Handle props_handle(props, isolate); - NeanderArray props_array(props_handle); - max_number_of_additional_properties += props_array.length(); - } - } - if (!info->property_accessors()->IsUndefined()) { - Object* props = info->property_accessors(); - if (!props->IsUndefined()) { - Handle props_handle(props, isolate); - NeanderArray props_array(props_handle); - max_number_of_static_properties += props_array.length(); - } - } - Object* parent = info->parent_template(); - if (parent->IsUndefined()) break; - info = FunctionTemplateInfo::cast(parent); - } - - Map::EnsureDescriptorSlack(map, max_number_of_additional_properties); - - // Use a temporary FixedArray to acculumate static accessors - int valid_descriptors = 0; - Handle array; - if (max_number_of_static_properties > 0) { - array = isolate->factory()->NewFixedArray(max_number_of_static_properties); - } - - while (true) { - // Install instance descriptors - if (!obj->instance_template()->IsUndefined()) { - Handle instance = Handle( - ObjectTemplateInfo::cast(obj->instance_template()), isolate); - Handle props = - Handle(instance->property_accessors(), isolate); - if (!props->IsUndefined()) { - Map::AppendCallbackDescriptors(map, props); - } - } - // Accumulate static accessors - if (!obj->property_accessors()->IsUndefined()) { - Handle props = Handle(obj->property_accessors(), isolate); - valid_descriptors = - AccessorInfo::AppendUnique(props, array, valid_descriptors); - } - // Climb parent chain - Handle parent = Handle(obj->parent_template(), isolate); - if (parent->IsUndefined()) break; - obj = Handle::cast(parent); - } - - // Install accumulated static accessors - for (int i = 0; i < valid_descriptors; i++) { - Handle accessor(AccessorInfo::cast(array->get(i))); - JSObject::SetAccessor(result, accessor).Assert(); + map->set_is_constructor(true); } DCHECK(result->shared()->IsApiFunction()); diff --git a/deps/v8/src/api-natives.h b/deps/v8/src/api-natives.h index fcca4a5a17e638..91f0b168d92830 100644 --- a/deps/v8/src/api-natives.h +++ b/deps/v8/src/api-natives.h @@ -25,10 +25,6 @@ class ApiNatives { MUST_USE_RESULT static MaybeHandle InstantiateObject( Handle data); - MUST_USE_RESULT static MaybeHandle ConfigureInstance( - Isolate* isolate, Handle instance, - Handle data); - enum ApiInstanceType { JavaScriptObjectType, GlobalObjectType, diff --git a/deps/v8/src/api.cc b/deps/v8/src/api.cc index c787dd5f1fc937..a71dcfaec31a77 100644 --- a/deps/v8/src/api.cc +++ b/deps/v8/src/api.cc @@ -15,6 +15,7 @@ #include "include/v8-experimental.h" #include "include/v8-profiler.h" #include "include/v8-testing.h" +#include "src/accessors.h" #include "src/api-experimental.h" #include "src/api-natives.h" #include "src/assert-scope.h" @@ -38,8 +39,8 @@ #include "src/global-handles.h" #include "src/icu_util.h" #include "src/isolate-inl.h" +#include "src/json-parser.h" #include "src/messages.h" -#include "src/parsing/json-parser.h" #include "src/parsing/parser.h" #include "src/parsing/scanner-character-streams.h" #include "src/pending-compilation-error-handler.h" @@ -58,6 +59,7 @@ #include "src/snapshot/natives.h" #include "src/snapshot/snapshot.h" #include "src/startup-data-util.h" +#include "src/tracing/trace-event.h" #include "src/unicode-inl.h" #include "src/v8.h" #include "src/v8threads.h" @@ -167,6 +169,7 @@ class CallDepthScope { isolate_->IncrementJsCallsFromApiCounter(); isolate_->handle_scope_implementer()->IncrementCallDepth(); if (!context_.IsEmpty()) context_->Enter(); + if (do_callback_) isolate_->FireBeforeCallEnteredCallback(); } ~CallDepthScope() { if (!context_.IsEmpty()) context_->Exit(); @@ -969,6 +972,9 @@ static void InitializeFunctionTemplate( info->set_flag(0); } +static Local ObjectTemplateNew( + i::Isolate* isolate, v8::Local constructor, + bool do_not_cache); Local FunctionTemplate::PrototypeTemplate() { i::Isolate* i_isolate = Utils::OpenHandle(this)->GetIsolate(); @@ -976,8 +982,9 @@ Local FunctionTemplate::PrototypeTemplate() { i::Handle result(Utils::OpenHandle(this)->prototype_template(), i_isolate); if (result->IsUndefined()) { - v8::Isolate* isolate = reinterpret_cast(i_isolate); - result = Utils::OpenHandle(*ObjectTemplate::New(isolate)); + // Do not cache prototype objects. + result = Utils::OpenHandle( + *ObjectTemplateNew(i_isolate, Local(), true)); Utils::OpenHandle(this)->set_prototype_template(*result); } return ToApiHandle(result); @@ -1119,21 +1126,23 @@ static i::Handle SetAccessorInfoProperties( return obj; } - template static i::Handle MakeAccessorInfo( v8::Local name, Getter getter, Setter setter, v8::Local data, v8::AccessControl settings, v8::PropertyAttribute attributes, - v8::Local signature) { + v8::Local signature, bool is_special_data_property) { i::Isolate* isolate = Utils::OpenHandle(*name)->GetIsolate(); - i::Handle obj = - isolate->factory()->NewExecutableAccessorInfo(); + i::Handle obj = isolate->factory()->NewAccessorInfo(); SET_FIELD_WRAPPED(obj, set_getter, getter); + if (is_special_data_property && setter == nullptr) { + setter = reinterpret_cast(&i::Accessors::ReconfigureToDataProperty); + } SET_FIELD_WRAPPED(obj, set_setter, setter); if (data.IsEmpty()) { data = v8::Undefined(reinterpret_cast(isolate)); } obj->set_data(*Utils::OpenHandle(*data)); + obj->set_is_special_data_property(is_special_data_property); return SetAccessorInfoProperties(obj, name, settings, attributes, signature); } @@ -1225,9 +1234,9 @@ Local ObjectTemplate::New() { return New(i::Isolate::Current(), Local()); } - -Local ObjectTemplate::New( - i::Isolate* isolate, v8::Local constructor) { +static Local ObjectTemplateNew( + i::Isolate* isolate, v8::Local constructor, + bool do_not_cache) { // Changes to the environment cannot be captured in the snapshot. Expect no // object templates when the isolate is created for serialization. DCHECK(!isolate->serializer_enabled()); @@ -1238,12 +1247,22 @@ Local ObjectTemplate::New( i::Handle obj = i::Handle::cast(struct_obj); InitializeTemplate(obj, Consts::OBJECT_TEMPLATE); + int next_serial_number = 0; + if (!do_not_cache) { + next_serial_number = isolate->next_serial_number() + 1; + isolate->set_next_serial_number(next_serial_number); + } + obj->set_serial_number(i::Smi::FromInt(next_serial_number)); if (!constructor.IsEmpty()) obj->set_constructor(*Utils::OpenHandle(*constructor)); obj->set_internal_field_count(i::Smi::FromInt(0)); return Utils::ToLocal(obj); } +Local ObjectTemplate::New( + i::Isolate* isolate, v8::Local constructor) { + return ObjectTemplateNew(isolate, constructor, false); +} // Ensure that the object template has a constructor. If no // constructor is available we create one. @@ -1264,39 +1283,20 @@ static i::Handle EnsureConstructor( } -static inline i::Handle GetTemplateInfo( - i::Isolate* isolate, - Template* template_obj) { - return Utils::OpenHandle(template_obj); -} - - -// TODO(dcarney): remove this with ObjectTemplate::SetAccessor -static inline i::Handle GetTemplateInfo( - i::Isolate* isolate, - ObjectTemplate* object_template) { - EnsureConstructor(isolate, object_template); - return Utils::OpenHandle(object_template); -} - - -template -static bool TemplateSetAccessor( - Template* template_obj, - v8::Local name, - Getter getter, - Setter setter, - Data data, - AccessControl settings, - PropertyAttribute attribute, - v8::Local signature) { - auto isolate = Utils::OpenHandle(template_obj)->GetIsolate(); +template +static bool TemplateSetAccessor(Template* template_obj, v8::Local name, + Getter getter, Setter setter, Data data, + AccessControl settings, + PropertyAttribute attribute, + v8::Local signature, + bool is_special_data_property) { + auto info = Utils::OpenHandle(template_obj); + auto isolate = info->GetIsolate(); ENTER_V8(isolate); i::HandleScope scope(isolate); auto obj = MakeAccessorInfo(name, getter, setter, data, settings, attribute, - signature); + signature, is_special_data_property); if (obj.is_null()) return false; - auto info = GetTemplateInfo(isolate, template_obj); i::ApiNatives::AddNativeDataProperty(isolate, info, obj); return true; } @@ -1309,8 +1309,8 @@ void Template::SetNativeDataProperty(v8::Local name, PropertyAttribute attribute, v8::Local signature, AccessControl settings) { - TemplateSetAccessor( - this, name, getter, setter, data, settings, attribute, signature); + TemplateSetAccessor(this, name, getter, setter, data, settings, attribute, + signature, true); } @@ -1321,8 +1321,8 @@ void Template::SetNativeDataProperty(v8::Local name, PropertyAttribute attribute, v8::Local signature, AccessControl settings) { - TemplateSetAccessor( - this, name, getter, setter, data, settings, attribute, signature); + TemplateSetAccessor(this, name, getter, setter, data, settings, attribute, + signature, true); } @@ -1344,8 +1344,8 @@ void ObjectTemplate::SetAccessor(v8::Local name, v8::Local data, AccessControl settings, PropertyAttribute attribute, v8::Local signature) { - TemplateSetAccessor( - this, name, getter, setter, data, settings, attribute, signature); + TemplateSetAccessor(this, name, getter, setter, data, settings, attribute, + signature, i::FLAG_disable_old_api_accessors); } @@ -1355,8 +1355,8 @@ void ObjectTemplate::SetAccessor(v8::Local name, v8::Local data, AccessControl settings, PropertyAttribute attribute, v8::Local signature) { - TemplateSetAccessor( - this, name, getter, setter, data, settings, attribute, signature); + TemplateSetAccessor(this, name, getter, setter, data, settings, attribute, + signature, i::FLAG_disable_old_api_accessors); } @@ -1452,6 +1452,10 @@ void ObjectTemplate::SetAccessCheckCallback(AccessCheckCallback callback, cons->set_needs_access_check(true); } +void ObjectTemplate::SetAccessCheckCallback( + DeprecatedAccessCheckCallback callback, Local data) { + SetAccessCheckCallback(reinterpret_cast(callback), data); +} void ObjectTemplate::SetAccessCheckCallbacks( NamedSecurityCallback named_callback, @@ -1602,32 +1606,7 @@ Local + + +

+ I + C + E +

+ Your IC-Explorer. +

Usage

+ Run your script with --trace_ic and upload on this page:
+ /path/to/d8 --trace_ic your_script.js > trace.txt +

Data

+
+

+ + trace entries: 0 +

+
+

Result

+

+ Group-Key: + +

+

+ + + +
+

+ + diff --git a/deps/v8/tools/jsfunfuzz/download_jsfunfuzz.py b/deps/v8/tools/jsfunfuzz/download_jsfunfuzz.py new file mode 100644 index 00000000000000..19eff02438feae --- /dev/null +++ b/deps/v8/tools/jsfunfuzz/download_jsfunfuzz.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +# Copyright 2016 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import os +import re +import subprocess + +FUZZ_PATH = os.path.dirname(os.path.abspath(__file__)) +SHA1_PATH = os.path.join(FUZZ_PATH, 'jsfunfuzz.tar.gz.sha1') + +if re.search(r'\bjsfunfuzz=1', os.environ.get('GYP_DEFINES', '')): + subprocess.check_call([ + 'download_from_google_storage', + '-b', 'chrome-v8-jsfunfuzz', + '-u', '--no_resume', + '-s', SHA1_PATH, + '--platform=linux*' + ]) +else: + print 'Skipping jsfunfuzz download as jsfunfuzz is not set in gyp flags.' diff --git a/deps/v8/tools/jsfunfuzz/fuzz-harness.sh b/deps/v8/tools/jsfunfuzz/fuzz-harness.sh new file mode 100755 index 00000000000000..205a61b33516a4 --- /dev/null +++ b/deps/v8/tools/jsfunfuzz/fuzz-harness.sh @@ -0,0 +1,84 @@ +#!/bin/bash +# Copyright 2016 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# A simple harness that downloads and runs 'jsfunfuzz' against d8. This +# takes a long time because it runs many iterations and is intended for +# automated usage. The package containing 'jsfunfuzz' can be found as an +# attachment to this bug: +# https://bugzilla.mozilla.org/show_bug.cgi?id=jsfunfuzz + +JSFUNFUZZ_URL="https://bugzilla.mozilla.org/attachment.cgi?id=310631" +JSFUNFUZZ_MD5="d0e497201c5cd7bffbb1cdc1574f4e32" + +v8_root=$(readlink -f $(dirname $BASH_SOURCE)/../../) +jsfunfuzz_dir="$v8_root/tools/jsfunfuzz" +cd "$jsfunfuzz_dir" + +if [ -n "$1" ]; then + d8="${v8_root}/$1" +else + d8="${v8_root}/d8" +fi + +if [ ! -f "$d8" ]; then + echo "Failed to find d8 binary: $d8" + exit 1 +fi + +# Deprecated download method. A prepatched archive is downloaded as a hook +# if jsfunfuzz=1 is specified as a gyp flag. Requires google.com authentication +# for google storage. +if [ "$3" == "--download" ]; then + + jsfunfuzz_file="$v8_root/tools/jsfunfuzz.zip" + if [ ! -f "$jsfunfuzz_file" ]; then + echo "Downloading $jsfunfuzz_file ..." + wget -q -O "$jsfunfuzz_file" $JSFUNFUZZ_URL || exit 1 + fi + + jsfunfuzz_sum=$(md5sum "$jsfunfuzz_file" | awk '{ print $1 }') + if [ $jsfunfuzz_sum != $JSFUNFUZZ_MD5 ]; then + echo "Failed to verify checksum!" + exit 1 + fi + + if [ ! -d "$jsfunfuzz_dir" ]; then + echo "Unpacking into $jsfunfuzz_dir ..." + unzip "$jsfunfuzz_file" -d "$jsfunfuzz_dir" || exit 1 + echo "Patching runner ..." + cat << EOF | patch -s -p0 -d "$v8_root" +--- tools/jsfunfuzz/jsfunfuzz/multi_timed_run.py~ ++++ tools/jsfunfuzz/jsfunfuzz/multi_timed_run.py +@@ -125,7 +125,7 @@ + + def many_timed_runs(): + iteration = 0 +- while True: ++ while iteration < 100: + iteration += 1 + logfilename = "w%d" % iteration + one_timed_run(logfilename) +EOF + fi + +fi + +flags='--debug-code --expose-gc --verify-gc' +python -u "$jsfunfuzz_dir/jsfunfuzz/multi_timed_run.py" 300 \ + "$d8" $flags "$jsfunfuzz_dir/jsfunfuzz/jsfunfuzz.js" +exit_code=$(cat w* | grep " looking good" -c) +exit_code=$((100-exit_code)) + +if [ -n "$2" ]; then + archive="$2" +else + archive=fuzz-results-$(date +%Y%m%d%H%M%S).tar.bz2 +fi +echo "Creating archive $archive" +tar -cjf $archive err-* w* +rm -f err-* w* + +echo "Total failures: $exit_code" +exit $exit_code diff --git a/deps/v8/tools/jsfunfuzz/jsfunfuzz.gyp b/deps/v8/tools/jsfunfuzz/jsfunfuzz.gyp new file mode 100644 index 00000000000000..fb0e5f4949c1b3 --- /dev/null +++ b/deps/v8/tools/jsfunfuzz/jsfunfuzz.gyp @@ -0,0 +1,26 @@ +# Copyright 2016 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +{ + 'conditions': [ + ['test_isolation_mode != "noop"', { + 'targets': [ + { + 'target_name': 'jsfunfuzz_run', + 'type': 'none', + 'dependencies': [ + '../../src/d8.gyp:d8_run', + ], + 'includes': [ + '../../build/features.gypi', + '../../build/isolate.gypi', + ], + 'sources': [ + 'jsfunfuzz.isolate', + ], + }, + ], + }], + ], +} diff --git a/deps/v8/tools/jsfunfuzz/jsfunfuzz.isolate b/deps/v8/tools/jsfunfuzz/jsfunfuzz.isolate new file mode 100644 index 00000000000000..56cb4a733f3052 --- /dev/null +++ b/deps/v8/tools/jsfunfuzz/jsfunfuzz.isolate @@ -0,0 +1,18 @@ +# Copyright 2016 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +{ + 'variables': { + 'command': [ + 'fuzz-harness.sh', + ], + 'files': [ + # Grab current directory. This avoids adding logic for checking the + # existence of the jsfunfuzz subdirectory. + './', + ], + }, + 'includes': [ + '../../src/d8.isolate', + ], +} diff --git a/deps/v8/tools/jsfunfuzz/jsfunfuzz.tar.gz.sha1 b/deps/v8/tools/jsfunfuzz/jsfunfuzz.tar.gz.sha1 new file mode 100644 index 00000000000000..449996007df062 --- /dev/null +++ b/deps/v8/tools/jsfunfuzz/jsfunfuzz.tar.gz.sha1 @@ -0,0 +1 @@ +d92e66273ea2a0da89456a977edd0224a8e837e9 \ No newline at end of file diff --git a/deps/v8/tools/ll_prof.py b/deps/v8/tools/ll_prof.py index 7dac2e05eba77e..e65796145e807d 100755 --- a/deps/v8/tools/ll_prof.py +++ b/deps/v8/tools/ll_prof.py @@ -173,11 +173,19 @@ def PrintAnnotated(self, arch, options): break count += cnt total_count += count - count = 100.0 * count / self.self_ticks - if count >= 0.01: - print "%15.2f %x: %s" % (count, lines[i][0], lines[i][1]) + percent = 100.0 * count / self.self_ticks + offset = lines[i][0] + if percent >= 0.01: + # 5 spaces for tick count + # 1 space following + # 1 for '|' + # 1 space following + # 6 for the percentage number, incl. the '.' + # 1 for the '%' sign + # => 15 + print "%5d | %6.2f%% %x(%d): %s" % (count, percent, offset, offset, lines[i][1]) else: - print "%s %x: %s" % (" " * 15, lines[i][0], lines[i][1]) + print "%s %x(%d): %s" % (" " * 15, offset, offset, lines[i][1]) print assert total_count == self.self_ticks, \ "Lost ticks (%d != %d) in %s" % (total_count, self.self_ticks, self) diff --git a/deps/v8/tools/luci-go/linux64/isolate.sha1 b/deps/v8/tools/luci-go/linux64/isolate.sha1 index c2821fca105d39..41d0add7969780 100644 --- a/deps/v8/tools/luci-go/linux64/isolate.sha1 +++ b/deps/v8/tools/luci-go/linux64/isolate.sha1 @@ -1 +1 @@ -32a3d49a4f7279ad022f346f7d960b2d58e2a0fe \ No newline at end of file +cf7c1fac12790056ac393774827a5720c7590bac diff --git a/deps/v8/tools/luci-go/mac64/isolate.sha1 b/deps/v8/tools/luci-go/mac64/isolate.sha1 index fcb6c8fa9e2be0..15744d663a3116 100644 --- a/deps/v8/tools/luci-go/mac64/isolate.sha1 +++ b/deps/v8/tools/luci-go/mac64/isolate.sha1 @@ -1 +1 @@ -83306c575904ec92c1af9ccc67240d26069df337 \ No newline at end of file +4678a9332ef5a7b90b184763afee1c100981f710 diff --git a/deps/v8/tools/luci-go/win64/isolate.exe.sha1 b/deps/v8/tools/luci-go/win64/isolate.exe.sha1 index 032483cba745cc..7c5b7ebf6e2cf7 100644 --- a/deps/v8/tools/luci-go/win64/isolate.exe.sha1 +++ b/deps/v8/tools/luci-go/win64/isolate.exe.sha1 @@ -1 +1 @@ -da358c2666ef9b89022e0eadf363cc6e123384e2 \ No newline at end of file +98457ff4fc79d05661fea53d2b3aff70fac90022 diff --git a/deps/v8/tools/perf/statistics-for-json.R b/deps/v8/tools/perf/statistics-for-json.R new file mode 100644 index 00000000000000..fde2cd75db128e --- /dev/null +++ b/deps/v8/tools/perf/statistics-for-json.R @@ -0,0 +1,113 @@ +# Copyright 2016 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Do statistical tests on benchmark results +# This script requires the libraries rjson, R.utils, ggplot2 and data.table +# Install them prior to running + +# To use the script, first get some benchmark results, for example via +# tools/run_perf.py ../v8-perf/benchmarks/Octane2.1/Octane2.1-TF.json +# --outdir=out/x64.release-on --outdir-no-patch=out/x64.release-off +# --json-test-results=results-on.json +# --json-test-results-no-patch=results-off.json +# then run this script +# Rscript statistics-for-json.R results-on.json results-off.json ~/SVG +# to produce graphs (and get stdio output of statistical tests). + + +suppressMessages(library("rjson")) # for fromJson +suppressMessages(library("R.utils")) # for printf +suppressMessages(library("ggplot2")) # for plotting +suppressMessages(library("data.table")) # less broken than data.frame + +# Clear all variables from environment +rm(list=ls()) + +args <- commandArgs(TRUE) +if (length(args) != 3) { + printf(paste("usage: Rscript %%this_script patched-results.json", + "unpatched-results.json\n")) +} else { + patch <- fromJSON(file=args[1]) + nopatch <- fromJSON(file=args[2]) + outputPath <- args[3] + df <- data.table(L = numeric(), R = numeric(), E = numeric(), + p.value = numeric(), yL = character(), + p.value.sig = logical()) + + for (i in seq(1, length(patch$traces))) { + testName <- patch$traces[[i]]$graphs[[2]] + printf("%s\n", testName) + + nopatch_res <- as.integer(nopatch$traces[[i]]$results) + patch_res <- as.integer(patch$traces[[i]]$results) + if (length(nopatch_res) > 0) { + patch_norm <- shapiro.test(patch_res); + nopatch_norm <- shapiro.test(nopatch_res); + + # Shaprio-Wilk test indicates whether data is not likely to + # come from a normal distribution. The p-value is the probability + # to obtain the sample from a normal distribution. This means, the + # smaller p, the more likely the sample was not drawn from a normal + # distribution. See [wikipedia:Shapiro-Wilk-Test]. + printf(" Patched scores look %s distributed (W=%.4f, p=%.4f)\n", + ifelse(patch_norm$p.value < 0.05, "not normally", "normally"), + patch_norm$statistic, patch_norm$p.value); + printf(" Unpatched scores look %s distributed (W=%.4f, p=%.4f)\n", + ifelse(nopatch_norm$p.value < 0.05, "not normally", "normally"), + nopatch_norm$statistic, nopatch_norm$p.value); + + hist <- ggplot(data=data.frame(x=as.integer(patch_res)), aes(x)) + + theme_bw() + + geom_histogram(bins=50) + + ylab("Points") + + xlab(patch$traces[[i]]$graphs[[2]]) + ggsave(filename=sprintf("%s/%s.svg", outputPath, testName), + plot=hist, width=7, height=7) + + hist <- ggplot(data=data.frame(x=as.integer(nopatch_res)), aes(x)) + + theme_bw() + + geom_histogram(bins=50) + + ylab("Points") + + xlab(patch$traces[[i]]$graphs[[2]]) + ggsave(filename=sprintf("%s/%s-before.svg", outputPath, testName), + plot=hist, width=7, height=7) + + # The Wilcoxon rank-sum test + mww <- wilcox.test(patch_res, nopatch_res, conf.int = TRUE, exact=TRUE) + printf(paste(" Wilcoxon U-test W=%.4f, p=%.4f,", + "confidence interval [%.1f, %.1f],", + "est. effect size %.1f \n"), + mww$statistic, mww$p.value, + mww$conf.int[1], mww$conf.int[2], mww$estimate); + df <-rbind(df, list(mww$conf.int[1], mww$conf.int[2], + unname(mww$estimate), unname(mww$p.value), + testName, ifelse(mww$p.value < 0.05, TRUE, FALSE))) + # t-test + t <- t.test(patch_res, nopatch_res, paired=FALSE) + printf(paste(" Welch t-test t=%.4f, df = %.2f, p=%.4f,", + "confidence interval [%.1f, %.1f], mean diff %.1f \n"), + t$statistic, t$parameter, t$p.value, + t$conf.int[1], t$conf.int[2], t$estimate[1]-t$estimate[2]); + } + } + df2 <- cbind(x=1:nrow(df), df[order(E),]) + speedup <- ggplot(df2, aes(x = x, y = E, colour=p.value.sig)) + + geom_errorbar(aes(ymax = L, ymin = R), colour="black") + + geom_point(size = 4) + + scale_x_discrete(limits=df2$yL, + name=paste("Benchmark, n=", length(patch_res))) + + theme_bw() + + geom_hline(yintercept = 0) + + ylab("Est. Effect Size in Points") + + theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust=0.5)) + + theme(legend.position = "bottom") + + scale_colour_manual(name="Statistical Significance (MWW, p < 0.05)", + values=c("red", "green"), + labels=c("not significant", "significant")) + + theme(legend.justification=c(0,1), legend.position=c(0,1)) + print(speedup) + ggsave(filename=sprintf("%s/speedup-estimates.svg", outputPath), + plot=speedup, width=7, height=7) +} diff --git a/deps/v8/tools/presubmit.py b/deps/v8/tools/presubmit.py index 998656908dd674..23940bb6861cf8 100755 --- a/deps/v8/tools/presubmit.py +++ b/deps/v8/tools/presubmit.py @@ -354,30 +354,6 @@ def ProcessContents(self, name, contents): if not contents.endswith('\n') or contents.endswith('\n\n'): print "%s does not end with a single new line." % name result = False - # Check two empty lines between declarations. - if name.endswith(".cc"): - line = 0 - lines = [] - parts = contents.split('\n') - while line < len(parts) - 2: - if self.EndOfDeclaration(parts[line]): - if self.StartOfDeclaration(parts[line + 1]): - lines.append(str(line + 1)) - line += 1 - elif parts[line + 1] == "" and \ - self.StartOfDeclaration(parts[line + 2]): - lines.append(str(line + 1)) - line += 2 - line += 1 - if len(lines) >= 1: - linenumbers = ', '.join(lines) - if len(lines) > 1: - print "%s does not have two empty lines between declarations " \ - "in lines %s." % (name, linenumbers) - else: - print "%s does not have two empty lines between declarations " \ - "in line %s." % (name, linenumbers) - result = False # Sanitize flags for fuzzer. if "mjsunit" in name: match = FLAGS_LINE.search(contents) diff --git a/deps/v8/tools/release/auto_roll.py b/deps/v8/tools/release/auto_roll.py index 27fd3709716933..fc9aeee461ea34 100755 --- a/deps/v8/tools/release/auto_roll.py +++ b/deps/v8/tools/release/auto_roll.py @@ -123,7 +123,6 @@ def RunStep(self): cwd = self._options.chromium self.GitCheckout("master", cwd=cwd) self.DeleteBranch("work-branch", cwd=cwd) - self.Command("gclient", "sync --nohooks", cwd=cwd) self.GitPull(cwd=cwd) # Update v8 remotes. diff --git a/deps/v8/tools/release/common_includes.py b/deps/v8/tools/release/common_includes.py index c2b64c38ec8594..c3a216c66416c1 100644 --- a/deps/v8/tools/release/common_includes.py +++ b/deps/v8/tools/release/common_includes.py @@ -50,6 +50,7 @@ PUSH_MSG_GIT_RE = re.compile(r".* \(based on (?P[a-fA-F0-9]+)\)$") PUSH_MSG_NEW_RE = re.compile(r"^Version \d+\.\d+\.\d+$") VERSION_FILE = os.path.join("include", "v8-version.h") +WATCHLISTS_FILE = "WATCHLISTS" # V8 base directory. V8_BASE = os.path.dirname( @@ -381,7 +382,7 @@ def Tag(self, tag, remote, message): # is the case for all automated merge and push commits - also no title is # the prefix of another title). commit = None - for wait_interval in [3, 7, 15, 35, 45, 60]: + for wait_interval in [5, 10, 20, 40, 60, 60]: self.step.Git("fetch") commit = self.step.GitLog(n=1, format="%H", grep=message, branch=remote) if commit: diff --git a/deps/v8/tools/release/create_release.py b/deps/v8/tools/release/create_release.py index 3bbb50e491aa5b..7477ea1461f5eb 100755 --- a/deps/v8/tools/release/create_release.py +++ b/deps/v8/tools/release/create_release.py @@ -11,7 +11,6 @@ from common_includes import * - class Preparation(Step): MESSAGE = "Preparation." @@ -164,6 +163,7 @@ def RunStep(self): self.Git("checkout -b work-branch %s" % self["push_hash"]) self.GitCheckoutFile(CHANGELOG_FILE, self["latest_version"]) self.GitCheckoutFile(VERSION_FILE, self["latest_version"]) + self.GitCheckoutFile(WATCHLISTS_FILE, self["latest_version"]) class AddChangeLog(Step): @@ -183,6 +183,19 @@ def RunStep(self): self.SetVersion(os.path.join(self.default_cwd, VERSION_FILE), "new_") +class EnableMergeWatchlist(Step): + MESSAGE = "Enable watchlist entry for merge notifications." + + def RunStep(self): + old_watchlist_content = FileToText(os.path.join(self.default_cwd, + WATCHLISTS_FILE)) + new_watchlist_content = re.sub("(# 'v8-merges@googlegroups\.com',)", + "'v8-merges@googlegroups.com',", + old_watchlist_content) + TextToFile(new_watchlist_content, os.path.join(self.default_cwd, + WATCHLISTS_FILE)) + + class CommitBranch(Step): MESSAGE = "Commit version and changelog to new branch." @@ -288,6 +301,7 @@ def _Steps(self): MakeBranch, AddChangeLog, SetVersion, + EnableMergeWatchlist, CommitBranch, PushBranch, TagRevision, diff --git a/deps/v8/tools/release/test_scripts.py b/deps/v8/tools/release/test_scripts.py index 4a3cb5b24a1f04..4f133ac28acba3 100644 --- a/deps/v8/tools/release/test_scripts.py +++ b/deps/v8/tools/release/test_scripts.py @@ -43,8 +43,6 @@ from merge_to_branch import * import push_to_candidates from push_to_candidates import * -import chromium_roll -from chromium_roll import ChromiumRoll import releases from releases import Releases from auto_tag import AutoTag @@ -391,6 +389,20 @@ def WriteFakeVersionFile(self, major=3, minor=22, build=4, patch=0): f.write(" // Some line...\n") f.write("#define V8_IS_CANDIDATE_VERSION 0\n") + def WriteFakeWatchlistsFile(self): + watchlists_file = os.path.join(TEST_CONFIG["DEFAULT_CWD"], WATCHLISTS_FILE) + if not os.path.exists(os.path.dirname(watchlists_file)): + os.makedirs(os.path.dirname(watchlists_file)) + with open(watchlists_file, "w") as f: + + content = """ + 'merges': [ + # Only enabled on branches created with tools/release/create_release.py + # 'v8-merges@googlegroups.com', + ], +""" + f.write(content) + def MakeStep(self): """Convenience wrapper.""" options = ScriptsBase(TEST_CONFIG, self, self._state).MakeOptions([]) @@ -954,6 +966,8 @@ def CheckVersionCommit(): Cmd("git checkout -f 3.22.4 -- ChangeLog", "", cb=ResetChangeLog), Cmd("git checkout -f 3.22.4 -- include/v8-version.h", "", cb=self.WriteFakeVersionFile), + Cmd("git checkout -f 3.22.4 -- WATCHLISTS", "", + cb=self.WriteFakeWatchlistsFile), Cmd("git commit -aF \"%s\"" % TEST_CONFIG["COMMITMSG_FILE"], "", cb=CheckVersionCommit), Cmd("git push origin " @@ -985,6 +999,18 @@ def CheckVersionCommit(): # Note: The version file is on build number 5 again in the end of this test # since the git command that merges to master is mocked out. + # Check for correct content of the WATCHLISTS file + + watchlists_content = FileToText(os.path.join(TEST_CONFIG["DEFAULT_CWD"], + WATCHLISTS_FILE)) + expected_watchlists_content = """ + 'merges': [ + # Only enabled on branches created with tools/release/create_release.py + 'v8-merges@googlegroups.com', + ], +""" + self.assertEqual(watchlists_content, expected_watchlists_content) + C_V8_22624_LOG = """V8 CL. git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22624 123 @@ -1086,7 +1112,6 @@ def WriteDeps(): Cmd("git status -s -uno", "", cwd=chrome_dir), Cmd("git checkout -f master", "", cwd=chrome_dir), Cmd("git branch", "", cwd=chrome_dir), - Cmd("gclient sync --nohooks", "syncing...", cwd=chrome_dir), Cmd("git pull", "", cwd=chrome_dir), Cmd("git fetch origin", ""), Cmd("git new-branch work-branch", "", cwd=chrome_dir), diff --git a/deps/v8/tools/run-deopt-fuzzer.gyp b/deps/v8/tools/run-deopt-fuzzer.gyp new file mode 100644 index 00000000000000..73f0aaf7a521cd --- /dev/null +++ b/deps/v8/tools/run-deopt-fuzzer.gyp @@ -0,0 +1,26 @@ +# Copyright 2016 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +{ + 'conditions': [ + ['test_isolation_mode != "noop"', { + 'targets': [ + { + 'target_name': 'run_deopt_fuzzer_run', + 'type': 'none', + 'dependencies': [ + '../src/d8.gyp:d8_run', + ], + 'includes': [ + '../build/features.gypi', + '../build/isolate.gypi', + ], + 'sources': [ + 'run-deopt-fuzzer.isolate', + ], + }, + ], + }], + ], +} diff --git a/deps/v8/tools/run-deopt-fuzzer.isolate b/deps/v8/tools/run-deopt-fuzzer.isolate new file mode 100644 index 00000000000000..196fb5dbbc2f4f --- /dev/null +++ b/deps/v8/tools/run-deopt-fuzzer.isolate @@ -0,0 +1,19 @@ +# Copyright 2016 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +{ + 'variables': { + 'command': [ + 'run-deopt-fuzzer.py', + ], + 'files': [ + 'run-deopt-fuzzer.py', + ], + }, + 'includes': [ + 'testrunner/testrunner.isolate', + '../src/d8.isolate', + '../test/mjsunit/mjsunit.isolate', + '../test/webkit/webkit.isolate', + ], +} diff --git a/deps/v8/tools/run-deopt-fuzzer.py b/deps/v8/tools/run-deopt-fuzzer.py index 70e106ec1bf547..e4d8f16b4ffd79 100755 --- a/deps/v8/tools/run-deopt-fuzzer.py +++ b/deps/v8/tools/run-deopt-fuzzer.py @@ -48,6 +48,9 @@ from testrunner.objects import context +# Base dir of the v8 checkout to be used as cwd. +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + ARCH_GUESS = utils.DefaultArch() DEFAULT_TESTS = ["mjsunit", "webkit"] TIMEOUT_DEFAULT = 60 @@ -290,6 +293,9 @@ def ShardTests(tests, shard_count, shard_run): def Main(): + # Use the v8 root as cwd as some test cases use "load" with relative paths. + os.chdir(BASE_DIR) + parser = BuildOptions() (options, args) = parser.parse_args() if not ProcessOptions(options): @@ -297,9 +303,8 @@ def Main(): return 1 exit_code = 0 - workspace = os.path.abspath(join(os.path.dirname(sys.argv[0]), "..")) - suite_paths = utils.GetSuitePaths(join(workspace, "test")) + suite_paths = utils.GetSuitePaths(join(BASE_DIR, "test")) if len(args) == 0: suite_paths = [ s for s in suite_paths if s in DEFAULT_TESTS ] @@ -314,7 +319,7 @@ def Main(): suites = [] for root in suite_paths: suite = testsuite.TestSuite.LoadTestSuite( - os.path.join(workspace, "test", root)) + os.path.join(BASE_DIR, "test", root)) if suite: suite.SetupWorkingDirectory() suites.append(suite) @@ -326,7 +331,7 @@ def Main(): for mode in options.mode: for arch in options.arch: try: - code = Execute(arch, mode, args, options, suites, workspace) + code = Execute(arch, mode, args, options, suites, BASE_DIR) exit_code = exit_code or code except KeyboardInterrupt: return 2 diff --git a/deps/v8/tools/run-tests.py b/deps/v8/tools/run-tests.py index fe8091efb36ed1..c94457fe6d2964 100755 --- a/deps/v8/tools/run-tests.py +++ b/deps/v8/tools/run-tests.py @@ -60,27 +60,33 @@ # expected runtimes (suites with slow test cases first). These groups are # invoked in seperate steps on the bots. TEST_MAP = { + # This needs to stay in sync with test/bot_default.isolate. "bot_default": [ "mjsunit", "cctest", "webkit", + "fuzzer", "message", "preparser", "intl", "unittests", ], + # This needs to stay in sync with test/default.isolate. "default": [ "mjsunit", "cctest", + "fuzzer", "message", "preparser", "intl", "unittests", ], + # This needs to stay in sync with test/ignition.isolate. "ignition": [ "mjsunit", "cctest", ], + # This needs to stay in sync with test/optimize_for_size.isolate. "optimize_for_size": [ "mjsunit", "cctest", diff --git a/deps/v8/tools/run-valgrind.gyp b/deps/v8/tools/run-valgrind.gyp new file mode 100644 index 00000000000000..d06be933a9d3ab --- /dev/null +++ b/deps/v8/tools/run-valgrind.gyp @@ -0,0 +1,26 @@ +# Copyright 2016 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +{ + 'conditions': [ + ['test_isolation_mode != "noop"', { + 'targets': [ + { + 'target_name': 'run_valgrind_run', + 'type': 'none', + 'dependencies': [ + '../src/d8.gyp:d8_run', + ], + 'includes': [ + '../build/features.gypi', + '../build/isolate.gypi', + ], + 'sources': [ + 'run-valgrind.isolate', + ], + }, + ], + }], + ], +} diff --git a/deps/v8/tools/run-valgrind.isolate b/deps/v8/tools/run-valgrind.isolate new file mode 100644 index 00000000000000..5947409e17541d --- /dev/null +++ b/deps/v8/tools/run-valgrind.isolate @@ -0,0 +1,29 @@ +# Copyright 2016 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +{ + 'variables': { + 'command': [ + 'run-valgrind.py', + ], + 'files': [ + 'run-valgrind.py', + ], + }, + 'conditions': [ + ['has_valgrind==1', { + 'variables': { + 'files': [ + # This assumes vagrind binaries have been fetched as a custom deps + # into v8/third_party/valgrind. It is not clear on which target + # machine this will run, but grabbing both is cheap. + '../third_party/valgrind/linux_x86/', + '../third_party/valgrind/linux_x64/', + ], + }, + }], + ], + 'includes': [ + '../src/d8.isolate', + ], +} diff --git a/deps/v8/tools/run_perf.py b/deps/v8/tools/run_perf.py index a8cc3fab715820..db4245f499fc07 100755 --- a/deps/v8/tools/run_perf.py +++ b/deps/v8/tools/run_perf.py @@ -350,9 +350,9 @@ def AppendChild(self, child): class DefaultSentinel(Node): """Fake parent node with all default values.""" - def __init__(self): + def __init__(self, binary = "d8"): super(DefaultSentinel, self).__init__() - self.binary = "d8" + self.binary = binary self.run_count = 10 self.timeout = 60 self.path = [] @@ -543,11 +543,10 @@ def MakeGraphConfig(suite, arch, parent): raise Exception("Invalid suite configuration.") -def BuildGraphConfigs(suite, arch, parent=None): +def BuildGraphConfigs(suite, arch, parent): """Builds a tree structure of graph objects that corresponds to the suite configuration. """ - parent = parent or DefaultSentinel() # TODO(machenbach): Implement notion of cpu type? if arch not in suite.get("archs", SUPPORTED_ARCHS): @@ -732,6 +731,12 @@ def _PushExecutable(self, shell_dir, target_dir, binary): target_dir, skip_if_missing=True, ) + self._PushFile( + shell_dir, + "snapshot_blob_ignition.bin", + target_dir, + skip_if_missing=True, + ) def PreTests(self, node, path): suite_dir = os.path.abspath(os.path.dirname(path)) @@ -813,6 +818,11 @@ def Main(args): default="out") parser.add_option("--outdir-no-patch", help="Base directory with compile output without patch") + parser.add_option("--binary-override-path", + help="JavaScript engine binary. By default, d8 under " + "architecture-specific build dir. " + "Not supported in conjunction with outdir-no-patch.") + (options, args) = parser.parse_args(args) if len(args) == 0: # pragma: no cover @@ -843,7 +853,18 @@ def Main(args): else: build_config = "%s.release" % options.arch - options.shell_dir = os.path.join(workspace, options.outdir, build_config) + if options.binary_override_path == None: + options.shell_dir = os.path.join(workspace, options.outdir, build_config) + default_binary_name = "d8" + else: + if not os.path.isfile(options.binary_override_path): + print "binary-override-path must be a file name" + return 1 + if options.outdir_no_patch: + print "specify either binary-override-path or outdir-no-patch" + return 1 + options.shell_dir = os.path.dirname(options.binary_override_path) + default_binary_name = os.path.basename(options.binary_override_path) if options.outdir_no_patch: options.shell_dir_no_patch = os.path.join( @@ -872,7 +893,8 @@ def Main(args): platform.PreExecution() # Build the graph/trace tree structure. - root = BuildGraphConfigs(suite, options.arch) + default_parent = DefaultSentinel(default_binary_name) + root = BuildGraphConfigs(suite, options.arch, default_parent) # Callback to be called on each node on traversal. def NodeCB(node): diff --git a/deps/v8/tools/testrunner/local/execution.py b/deps/v8/tools/testrunner/local/execution.py index c9fe54175a3ddd..0d90ab8d0de17a 100644 --- a/deps/v8/tools/testrunner/local/execution.py +++ b/deps/v8/tools/testrunner/local/execution.py @@ -28,6 +28,7 @@ import collections import os +import re import shutil import sys import time @@ -38,6 +39,7 @@ from . import statusfile from . import testsuite from . import utils +from ..objects import output # Base dir of the v8 checkout. @@ -82,7 +84,7 @@ def MakeProcessContext(context): def GetCommand(test, context): d8testflag = [] - shell = test.suite.shell() + shell = test.shell() if shell == "d8": d8testflag = ["--test"] if utils.IsWindows(): @@ -134,15 +136,28 @@ def Run(self, process_context): raise NotImplementedError() +def SetupProblem(exception, test): + stderr = ">>> EXCEPTION: %s\n" % exception + match = re.match(r"^.*No such file or directory: '(.*)'$", str(exception)) + if match: + # Extra debuging information when files are claimed missing. + f = match.group(1) + stderr += ">>> File %s exists? -> %s\n" % (f, os.path.exists(f)) + return test.id, output.Output(1, False, "", stderr), 0 + + class TestJob(Job): def __init__(self, test): self.test = test def Run(self, process_context): - # Retrieve a new suite object on the worker-process side. The original - # suite object isn't pickled. - self.test.SetSuiteObject(process_context.suites) - instr = _GetInstructions(self.test, process_context.context) + try: + # Retrieve a new suite object on the worker-process side. The original + # suite object isn't pickled. + self.test.SetSuiteObject(process_context.suites) + instr = _GetInstructions(self.test, process_context.context) + except Exception, e: + return SetupProblem(e, self.test) start_time = time.time() if instr.dep_command is not None: diff --git a/deps/v8/tools/testrunner/local/pool.py b/deps/v8/tools/testrunner/local/pool.py index 6d123fd4e5e7fb..99996ee3ce49cc 100644 --- a/deps/v8/tools/testrunner/local/pool.py +++ b/deps/v8/tools/testrunner/local/pool.py @@ -109,6 +109,7 @@ def imap_unordered(self, fn, gen, process boundary. """ try: + internal_error = False gen = iter(gen) self.advance = self._advance_more @@ -134,7 +135,9 @@ def imap_unordered(self, fn, gen, yield MaybeResult.create_heartbeat() self.count -= 1 if result.exception: - # Ignore items with unexpected exceptions. + # TODO(machenbach): Handle a few known types of internal errors + # gracefully, e.g. missing test files. + internal_error = True continue elif result.break_now: # A keyboard interrupt happened in one of the worker processes. @@ -144,6 +147,8 @@ def imap_unordered(self, fn, gen, self.advance(gen) finally: self.terminate() + if internal_error: + raise Exception("Internal error in a worker process.") def _advance_more(self, gen): while self.count < self.num_workers * self.BUFFER_FACTOR: diff --git a/deps/v8/tools/testrunner/local/testsuite.py b/deps/v8/tools/testrunner/local/testsuite.py index e3d1e232e80eb9..55e0eb21ae02ff 100644 --- a/deps/v8/tools/testrunner/local/testsuite.py +++ b/deps/v8/tools/testrunner/local/testsuite.py @@ -41,8 +41,7 @@ "turbofan": [["--turbo"]], "turbofan_opt": [["--turbo", "--always-opt"]], "nocrankshaft": [["--nocrankshaft"]], - "ignition": [["--ignition", "--turbo", "--ignition-fake-try-catch", - "--ignition-fallback-on-eval-and-catch"]], + "ignition": [["--ignition", "--turbo"]], "preparser": [["--min-preparse-length=0"]], } @@ -52,8 +51,7 @@ "stress": [["--stress-opt"]], "turbofan": [["--turbo"]], "nocrankshaft": [["--nocrankshaft"]], - "ignition": [["--ignition", "--turbo", "--ignition-fake-try-catch", - "--ignition-fallback-on-eval-and-catch"]], + "ignition": [["--ignition", "--turbo"]], "preparser": [["--min-preparse-length=0"]], } diff --git a/deps/v8/tools/testrunner/objects/testcase.py b/deps/v8/tools/testrunner/objects/testcase.py index fa2265c0703f1f..b91f8b4b562de5 100644 --- a/deps/v8/tools/testrunner/objects/testcase.py +++ b/deps/v8/tools/testrunner/objects/testcase.py @@ -30,12 +30,13 @@ class TestCase(object): def __init__(self, suite, path, variant='default', flags=None, - dependency=None): + dependency=None, override_shell=None): self.suite = suite # TestSuite object self.path = path # string, e.g. 'div-mod', 'test-api/foo' self.flags = flags or [] # list of strings, flags specific to this test self.variant = variant # name of the used testing variant self.dependency = dependency # |path| for testcase that must be run first + self.override_shell = override_shell self.outcomes = set([]) self.output = None self.id = None # int, used to map result back to TestCase instance @@ -44,7 +45,7 @@ def __init__(self, suite, path, variant='default', flags=None, def CopyAddingFlags(self, variant, flags): copy = TestCase(self.suite, self.path, variant, self.flags + flags, - self.dependency) + self.dependency, self.override_shell) copy.outcomes = self.outcomes return copy @@ -55,15 +56,16 @@ def PackTask(self): """ assert self.id is not None return [self.suitename(), self.path, self.variant, self.flags, - self.dependency, list(self.outcomes or []), self.id] + self.dependency, self.override_shell, list(self.outcomes or []), + self.id] @staticmethod def UnpackTask(task): """Creates a new TestCase object based on packed task data.""" # For the order of the fields, refer to PackTask() above. - test = TestCase(str(task[0]), task[1], task[2], task[3], task[4]) - test.outcomes = set(task[5]) - test.id = task[6] + test = TestCase(str(task[0]), task[1], task[2], task[3], task[4], task[5]) + test.outcomes = set(task[6]) + test.id = task[7] test.run = 1 return test @@ -87,6 +89,11 @@ def suitename(self): def GetLabel(self): return self.suitename() + "/" + self.suite.CommonTestName(self) + def shell(self): + if self.override_shell: + return self.override_shell + return self.suite.shell() + def __getstate__(self): """Representation to pickle test cases. diff --git a/deps/v8/tools/try_perf.py b/deps/v8/tools/try_perf.py index 2403f7d782ddf6..fbd4036dadb49c 100755 --- a/deps/v8/tools/try_perf.py +++ b/deps/v8/tools/try_perf.py @@ -53,6 +53,10 @@ def main(): parser.add_argument('benchmarks', nargs='+', help='The benchmarks to run.') parser.add_argument('--extra-flags', default='', help='Extra flags to be passed to the executable.') + parser.add_argument('-r', '--revision', type=str, default=None, + help='Revision (use full hash!) to use for the try job; ' + 'default: the revision will be determined by the ' + 'try server; see its waterfall for more info') for option in sorted(BOTS): parser.add_argument( option, dest='bots', action='append_const', const=BOTS[option], @@ -85,6 +89,7 @@ def main(): cmd = ['git cl try -m internal.client.v8'] cmd += ['-b %s' % bot for bot in options.bots] + if options.revision: cmd += ['-r %s' % options.revision] benchmarks = ['"%s"' % benchmark for benchmark in options.benchmarks] cmd += ['-p \'testfilter=[%s]\'' % ','.join(benchmarks)] if options.extra_flags: diff --git a/deps/v8/tools/v8heapconst.py b/deps/v8/tools/v8heapconst.py index 0461bcbb66fde1..39cfeb1707322b 100644 --- a/deps/v8/tools/v8heapconst.py +++ b/deps/v8/tools/v8heapconst.py @@ -55,8 +55,8 @@ 132: "MAP_TYPE", 133: "CODE_TYPE", 131: "ODDBALL_TYPE", - 173: "CELL_TYPE", - 176: "PROPERTY_CELL_TYPE", + 171: "CELL_TYPE", + 174: "PROPERTY_CELL_TYPE", 129: "HEAP_NUMBER_TYPE", 134: "MUTABLE_HEAP_NUMBER_TYPE", 135: "FOREIGN_TYPE", @@ -73,59 +73,57 @@ 146: "FIXED_FLOAT64_ARRAY_TYPE", 147: "FIXED_UINT8_CLAMPED_ARRAY_TYPE", 149: "FILLER_TYPE", - 150: "DECLARED_ACCESSOR_DESCRIPTOR_TYPE", - 151: "DECLARED_ACCESSOR_INFO_TYPE", - 152: "EXECUTABLE_ACCESSOR_INFO_TYPE", - 153: "ACCESSOR_PAIR_TYPE", - 154: "ACCESS_CHECK_INFO_TYPE", - 155: "INTERCEPTOR_INFO_TYPE", - 156: "CALL_HANDLER_INFO_TYPE", - 157: "FUNCTION_TEMPLATE_INFO_TYPE", - 158: "OBJECT_TEMPLATE_INFO_TYPE", - 159: "SIGNATURE_INFO_TYPE", - 160: "TYPE_SWITCH_INFO_TYPE", - 162: "ALLOCATION_MEMENTO_TYPE", - 161: "ALLOCATION_SITE_TYPE", - 163: "SCRIPT_TYPE", - 164: "CODE_CACHE_TYPE", - 165: "POLYMORPHIC_CODE_CACHE_TYPE", - 166: "TYPE_FEEDBACK_INFO_TYPE", - 167: "ALIASED_ARGUMENTS_ENTRY_TYPE", - 168: "BOX_TYPE", - 177: "PROTOTYPE_INFO_TYPE", - 178: "SLOPPY_BLOCK_WITH_EVAL_CONTEXT_EXTENSION_TYPE", - 171: "FIXED_ARRAY_TYPE", + 150: "ACCESSOR_INFO_TYPE", + 151: "ACCESSOR_PAIR_TYPE", + 152: "ACCESS_CHECK_INFO_TYPE", + 153: "INTERCEPTOR_INFO_TYPE", + 154: "CALL_HANDLER_INFO_TYPE", + 155: "FUNCTION_TEMPLATE_INFO_TYPE", + 156: "OBJECT_TEMPLATE_INFO_TYPE", + 157: "SIGNATURE_INFO_TYPE", + 158: "TYPE_SWITCH_INFO_TYPE", + 160: "ALLOCATION_MEMENTO_TYPE", + 159: "ALLOCATION_SITE_TYPE", + 161: "SCRIPT_TYPE", + 162: "CODE_CACHE_TYPE", + 163: "POLYMORPHIC_CODE_CACHE_TYPE", + 164: "TYPE_FEEDBACK_INFO_TYPE", + 165: "ALIASED_ARGUMENTS_ENTRY_TYPE", + 166: "BOX_TYPE", + 175: "PROTOTYPE_INFO_TYPE", + 176: "SLOPPY_BLOCK_WITH_EVAL_CONTEXT_EXTENSION_TYPE", + 169: "FIXED_ARRAY_TYPE", 148: "FIXED_DOUBLE_ARRAY_TYPE", - 172: "SHARED_FUNCTION_INFO_TYPE", - 174: "WEAK_CELL_TYPE", - 175: "TRANSITION_ARRAY_TYPE", - 181: "JS_MESSAGE_OBJECT_TYPE", - 180: "JS_VALUE_TYPE", - 182: "JS_DATE_TYPE", - 183: "JS_OBJECT_TYPE", - 184: "JS_CONTEXT_EXTENSION_OBJECT_TYPE", - 185: "JS_GENERATOR_OBJECT_TYPE", - 186: "JS_MODULE_TYPE", - 187: "JS_GLOBAL_OBJECT_TYPE", - 188: "JS_GLOBAL_PROXY_TYPE", - 189: "JS_ARRAY_TYPE", - 190: "JS_ARRAY_BUFFER_TYPE", - 191: "JS_TYPED_ARRAY_TYPE", - 192: "JS_DATA_VIEW_TYPE", - 179: "JS_PROXY_TYPE", - 193: "JS_SET_TYPE", - 194: "JS_MAP_TYPE", - 195: "JS_SET_ITERATOR_TYPE", - 196: "JS_MAP_ITERATOR_TYPE", - 197: "JS_ITERATOR_RESULT_TYPE", - 198: "JS_WEAK_MAP_TYPE", - 199: "JS_WEAK_SET_TYPE", - 200: "JS_PROMISE_TYPE", - 201: "JS_REGEXP_TYPE", - 202: "JS_BOUND_FUNCTION_TYPE", - 203: "JS_FUNCTION_TYPE", - 169: "DEBUG_INFO_TYPE", - 170: "BREAK_POINT_INFO_TYPE", + 170: "SHARED_FUNCTION_INFO_TYPE", + 172: "WEAK_CELL_TYPE", + 173: "TRANSITION_ARRAY_TYPE", + 179: "JS_MESSAGE_OBJECT_TYPE", + 178: "JS_VALUE_TYPE", + 180: "JS_DATE_TYPE", + 181: "JS_OBJECT_TYPE", + 182: "JS_CONTEXT_EXTENSION_OBJECT_TYPE", + 183: "JS_GENERATOR_OBJECT_TYPE", + 184: "JS_MODULE_TYPE", + 185: "JS_GLOBAL_OBJECT_TYPE", + 186: "JS_GLOBAL_PROXY_TYPE", + 187: "JS_ARRAY_TYPE", + 188: "JS_ARRAY_BUFFER_TYPE", + 189: "JS_TYPED_ARRAY_TYPE", + 190: "JS_DATA_VIEW_TYPE", + 177: "JS_PROXY_TYPE", + 191: "JS_SET_TYPE", + 192: "JS_MAP_TYPE", + 193: "JS_SET_ITERATOR_TYPE", + 194: "JS_MAP_ITERATOR_TYPE", + 195: "JS_ITERATOR_RESULT_TYPE", + 196: "JS_WEAK_MAP_TYPE", + 197: "JS_WEAK_SET_TYPE", + 198: "JS_PROMISE_TYPE", + 199: "JS_REGEXP_TYPE", + 200: "JS_BOUND_FUNCTION_TYPE", + 201: "JS_FUNCTION_TYPE", + 167: "DEBUG_INFO_TYPE", + 168: "BREAK_POINT_INFO_TYPE", } # List of known V8 maps. @@ -133,7 +131,7 @@ 0x08081: (136, "ByteArrayMap"), 0x080ad: (132, "MetaMap"), 0x080d9: (131, "NullMap"), - 0x08105: (171, "FixedArrayMap"), + 0x08105: (169, "FixedArrayMap"), 0x08131: (4, "OneByteInternalizedStringMap"), 0x0815d: (138, "FreeSpaceMap"), 0x08189: (149, "OnePointerFillerMap"), @@ -143,9 +141,9 @@ 0x08239: (131, "TheHoleMap"), 0x08265: (131, "BooleanMap"), 0x08291: (131, "UninitializedMap"), - 0x082bd: (173, "CellMap"), - 0x082e9: (176, "GlobalPropertyCellMap"), - 0x08315: (172, "SharedFunctionInfoMap"), + 0x082bd: (171, "CellMap"), + 0x082e9: (174, "GlobalPropertyCellMap"), + 0x08315: (170, "SharedFunctionInfoMap"), 0x08341: (134, "MutableHeapNumberMap"), 0x0836d: (130, "Float32x4Map"), 0x08399: (130, "Int32x4Map"), @@ -157,21 +155,21 @@ 0x084a1: (130, "Int8x16Map"), 0x084cd: (130, "Uint8x16Map"), 0x084f9: (130, "Bool8x16Map"), - 0x08525: (171, "NativeContextMap"), + 0x08525: (169, "NativeContextMap"), 0x08551: (133, "CodeMap"), - 0x0857d: (171, "ScopeInfoMap"), - 0x085a9: (171, "FixedCOWArrayMap"), + 0x0857d: (169, "ScopeInfoMap"), + 0x085a9: (169, "FixedCOWArrayMap"), 0x085d5: (148, "FixedDoubleArrayMap"), - 0x08601: (174, "WeakCellMap"), - 0x0862d: (175, "TransitionArrayMap"), + 0x08601: (172, "WeakCellMap"), + 0x0862d: (173, "TransitionArrayMap"), 0x08659: (68, "OneByteStringMap"), - 0x08685: (171, "FunctionContextMap"), + 0x08685: (169, "FunctionContextMap"), 0x086b1: (131, "NoInterceptorResultSentinelMap"), 0x086dd: (131, "ArgumentsMarkerMap"), 0x08709: (131, "ExceptionMap"), 0x08735: (131, "TerminationExceptionMap"), - 0x08761: (171, "HashTableMap"), - 0x0878d: (171, "OrderedHashTableMap"), + 0x08761: (169, "HashTableMap"), + 0x0878d: (169, "OrderedHashTableMap"), 0x087b9: (128, "SymbolMap"), 0x087e5: (64, "StringMap"), 0x08811: (69, "ConsOneByteStringMap"), @@ -201,37 +199,37 @@ 0x08c31: (145, "FixedFloat32ArrayMap"), 0x08c5d: (146, "FixedFloat64ArrayMap"), 0x08c89: (147, "FixedUint8ClampedArrayMap"), - 0x08cb5: (171, "SloppyArgumentsElementsMap"), - 0x08ce1: (171, "CatchContextMap"), - 0x08d0d: (171, "WithContextMap"), - 0x08d39: (171, "BlockContextMap"), - 0x08d65: (171, "ModuleContextMap"), - 0x08d91: (171, "ScriptContextMap"), - 0x08dbd: (171, "ScriptContextTableMap"), - 0x08de9: (181, "JSMessageObjectMap"), + 0x08cb5: (169, "SloppyArgumentsElementsMap"), + 0x08ce1: (169, "CatchContextMap"), + 0x08d0d: (169, "WithContextMap"), + 0x08d39: (169, "BlockContextMap"), + 0x08d65: (169, "ModuleContextMap"), + 0x08d91: (169, "ScriptContextMap"), + 0x08dbd: (169, "ScriptContextTableMap"), + 0x08de9: (179, "JSMessageObjectMap"), 0x08e15: (135, "ForeignMap"), - 0x08e41: (183, "NeanderMap"), - 0x08e6d: (183, "ExternalMap"), - 0x08e99: (162, "AllocationMementoMap"), - 0x08ec5: (161, "AllocationSiteMap"), - 0x08ef1: (165, "PolymorphicCodeCacheMap"), - 0x08f1d: (163, "ScriptMap"), + 0x08e41: (181, "NeanderMap"), + 0x08e6d: (181, "ExternalMap"), + 0x08e99: (160, "AllocationMementoMap"), + 0x08ec5: (159, "AllocationSiteMap"), + 0x08ef1: (163, "PolymorphicCodeCacheMap"), + 0x08f1d: (161, "ScriptMap"), 0x08f75: (137, "BytecodeArrayMap"), - 0x08fa1: (168, "BoxMap"), - 0x08fcd: (152, "ExecutableAccessorInfoMap"), - 0x08ff9: (153, "AccessorPairMap"), - 0x09025: (154, "AccessCheckInfoMap"), - 0x09051: (155, "InterceptorInfoMap"), - 0x0907d: (156, "CallHandlerInfoMap"), - 0x090a9: (157, "FunctionTemplateInfoMap"), - 0x090d5: (158, "ObjectTemplateInfoMap"), - 0x09101: (164, "CodeCacheMap"), - 0x0912d: (166, "TypeFeedbackInfoMap"), - 0x09159: (167, "AliasedArgumentsEntryMap"), - 0x09185: (169, "DebugInfoMap"), - 0x091b1: (170, "BreakPointInfoMap"), - 0x091dd: (177, "PrototypeInfoMap"), - 0x09209: (178, "SloppyBlockWithEvalContextExtensionMap"), + 0x08fa1: (166, "BoxMap"), + 0x08fcd: (150, "AccessorInfoMap"), + 0x08ff9: (151, "AccessorPairMap"), + 0x09025: (152, "AccessCheckInfoMap"), + 0x09051: (153, "InterceptorInfoMap"), + 0x0907d: (154, "CallHandlerInfoMap"), + 0x090a9: (155, "FunctionTemplateInfoMap"), + 0x090d5: (156, "ObjectTemplateInfoMap"), + 0x09101: (162, "CodeCacheMap"), + 0x0912d: (164, "TypeFeedbackInfoMap"), + 0x09159: (165, "AliasedArgumentsEntryMap"), + 0x09185: (167, "DebugInfoMap"), + 0x091b1: (168, "BreakPointInfoMap"), + 0x091dd: (175, "PrototypeInfoMap"), + 0x09209: (176, "SloppyBlockWithEvalContextExtensionMap"), } # List of known V8 objects. @@ -270,28 +268,27 @@ ("OLD_SPACE", 0x0980d): "MinusInfinityValue", ("OLD_SPACE", 0x0981d): "MessageListeners", ("OLD_SPACE", 0x09839): "CodeStubs", - ("OLD_SPACE", 0x10201): "DummyVector", - ("OLD_SPACE", 0x1403d): "NonMonomorphicCache", - ("OLD_SPACE", 0x14651): "PolymorphicCodeCache", - ("OLD_SPACE", 0x14659): "NativesSourceCache", - ("OLD_SPACE", 0x148f5): "ExperimentalNativesSourceCache", - ("OLD_SPACE", 0x14929): "ExtraNativesSourceCache", - ("OLD_SPACE", 0x14949): "ExperimentalExtraNativesSourceCache", - ("OLD_SPACE", 0x14955): "EmptyScript", - ("OLD_SPACE", 0x14995): "IntrinsicFunctionNames", - ("OLD_SPACE", 0x2e73d): "UndefinedCell", - ("OLD_SPACE", 0x2e745): "ObservationState", - ("OLD_SPACE", 0x2e751): "ScriptList", - ("OLD_SPACE", 0x2e8d9): "ClearedOptimizedCodeMap", - ("OLD_SPACE", 0x2e8e5): "EmptyWeakCell", - ("OLD_SPACE", 0x54715): "EmptySlowElementDictionary", - ("OLD_SPACE", 0x54761): "WeakObjectToCodeTable", - ("OLD_SPACE", 0x54875): "ArrayProtector", - ("OLD_SPACE", 0x54885): "EmptyPropertyCell", - ("OLD_SPACE", 0x54895): "NoScriptSharedFunctionInfos", - ("OLD_SPACE", 0x5711d): "InterpreterTable", - ("OLD_SPACE", 0x57325): "EmptyBytecodeArray", - ("OLD_SPACE", 0x5a2d1): "StringTable", - ("CODE_SPACE", 0x1a2a1): "JsEntryCode", - ("CODE_SPACE", 0x1f081): "JsConstructEntryCode", + ("OLD_SPACE", 0x0feb9): "DummyVector", + ("OLD_SPACE", 0x13fed): "NonMonomorphicCache", + ("OLD_SPACE", 0x14601): "PolymorphicCodeCache", + ("OLD_SPACE", 0x14609): "NativesSourceCache", + ("OLD_SPACE", 0x1488d): "ExperimentalNativesSourceCache", + ("OLD_SPACE", 0x148c1): "ExtraNativesSourceCache", + ("OLD_SPACE", 0x148e1): "ExperimentalExtraNativesSourceCache", + ("OLD_SPACE", 0x148ed): "EmptyScript", + ("OLD_SPACE", 0x1492d): "IntrinsicFunctionNames", + ("OLD_SPACE", 0x2e919): "EmptyPropertiesDictionary", + ("OLD_SPACE", 0x2e965): "UndefinedCell", + ("OLD_SPACE", 0x2e96d): "ObservationState", + ("OLD_SPACE", 0x2e979): "ScriptList", + ("OLD_SPACE", 0x2eb01): "ClearedOptimizedCodeMap", + ("OLD_SPACE", 0x2eb0d): "EmptyWeakCell", + ("OLD_SPACE", 0x534d1): "EmptySlowElementDictionary", + ("OLD_SPACE", 0x5351d): "WeakObjectToCodeTable", + ("OLD_SPACE", 0x53631): "ArrayProtector", + ("OLD_SPACE", 0x53641): "EmptyPropertyCell", + ("OLD_SPACE", 0x53651): "NoScriptSharedFunctionInfos", + ("OLD_SPACE", 0x59cf1): "StringTable", + ("CODE_SPACE", 0x1a001): "JsEntryCode", + ("CODE_SPACE", 0x1e721): "JsConstructEntryCode", } diff --git a/deps/v8/tools/whitespace.txt b/deps/v8/tools/whitespace.txt index 687be113dd4898..d1395f5d9132ac 100644 --- a/deps/v8/tools/whitespace.txt +++ b/deps/v8/tools/whitespace.txt @@ -5,4 +5,4 @@ Try to write something funny. And please don't add trailing whitespace. A Smi balks into a war and says: "I'm so deoptimized today!" The doubles heard this and started to unbox. -The Smi looked at them when a crazy v8-autoroll account showed up..... +The Smi looked at them when a crazy v8-autoroll account showed up.. From c01a9cc046e8cf2bc84880220da16d438b267f5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Zasso?= Date: Mon, 7 Mar 2016 23:09:31 +0100 Subject: [PATCH 2/2] test: update error message for JSON.parse V8 5.0 introduced a small modification for the unexpected end of input error. PR-URL: https://github.com/nodejs/node/pull/5945 Reviewed-By: bnoordhuis - Ben Noordhuis Reviewed-By: indutny - Fedor Indutny --- test/parallel/test-repl.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-repl.js b/test/parallel/test-repl.js index 02ce8169caf3fe..2ec996897a1cae 100644 --- a/test/parallel/test-repl.js +++ b/test/parallel/test-repl.js @@ -156,7 +156,7 @@ function error_test() { expect: /^SyntaxError: Unexpected number/ }, // should throw { client: client_unix, send: 'JSON.parse(\'{\');', - expect: /^SyntaxError: Unexpected end of input/ }, + expect: /^SyntaxError: Unexpected end of JSON input/ }, // invalid RegExps are a special case of syntax error, // should throw { client: client_unix, send: '/(/;',