diff --git a/.eslintignore b/.eslintignore index bd85fff8e424aa..38d3367e9d1779 100644 --- a/.eslintignore +++ b/.eslintignore @@ -2,7 +2,6 @@ lib/internal/v8_prof_polyfill.js lib/punycode.js test/addons/??_*/ test/fixtures -test/disabled test/tmp*/ tools/eslint node_modules diff --git a/.eslintrc.yaml b/.eslintrc.yaml index 5e025301fe8a62..3bded1a7ce0ec7 100644 --- a/.eslintrc.yaml +++ b/.eslintrc.yaml @@ -101,18 +101,13 @@ rules: func-call-spacing: error func-name-matching: error func-style: [error, declaration, {allowArrowFunctions: true}] - # indent: [error, 2, {ArrayExpression: first, - # CallExpression: {arguments: first}, - # FunctionDeclaration: {parameters: first}, - # FunctionExpression: {parameters: first}, - # MemberExpression: off, - # ObjectExpression: first, - # SwitchCase: 1}] - indent-legacy: [error, 2, {ArrayExpression: first, - CallExpression: {arguments: first}, - MemberExpression: 1, - ObjectExpression: first, - SwitchCase: 1}] + indent: [error, 2, {ArrayExpression: first, + CallExpression: {arguments: first}, + FunctionDeclaration: {parameters: first}, + FunctionExpression: {parameters: first}, + MemberExpression: off, + ObjectExpression: first, + SwitchCase: 1}] key-spacing: [error, {mode: minimum}] keyword-spacing: error linebreak-style: [error, unix] @@ -124,6 +119,12 @@ rules: no-mixed-spaces-and-tabs: error no-multiple-empty-lines: [error, {max: 2, maxEOF: 0, maxBOF: 0}] no-restricted-syntax: [error, { + selector: "CallExpression[callee.object.name='assert'][callee.property.name='throws'][arguments.1.type='Literal']:not([arguments.1.regex])", + message: "use a regular expression for second argument of assert.throws()" + }, { + selector: "CallExpression[callee.object.name='assert'][callee.property.name='throws'][arguments.length<2]", + message: "assert.throws() must be invoked with at least two arguments." + }, { selector: "CallExpression[callee.name='setTimeout'][arguments.length<2]", message: "setTimeout() must be invoked with at least two arguments." }, { @@ -167,7 +168,6 @@ rules: template-curly-spacing: error # Custom rules in tools/eslint-rules - assert-throws-arguments: [error, { requireTwo: true }] no-unescaped-regexp-dot: error # Global scoped method and vars diff --git a/CHANGELOG.md b/CHANGELOG.md index ab0fd9875432ee..ba634b10e3f358 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,7 +27,8 @@ release. -8.2.1
+8.3.0
+8.2.1
8.2.0
8.1.4
8.1.3
diff --git a/Makefile b/Makefile index 01716fc7317e82..652c591e2bfe96 100644 --- a/Makefile +++ b/Makefile @@ -702,7 +702,8 @@ $(PKG): release-only --release-urlbase=$(RELEASE_URLBASE) \ $(CONFIG_FLAGS) $(BUILD_RELEASE_FLAGS) $(MAKE) install V=$(V) DESTDIR=$(PKGDIR) - SIGN="$(CODESIGN_CERT)" PKGDIR="$(PKGDIR)" bash tools/osx-codesign.sh + SIGN="$(CODESIGN_CERT)" PKGDIR="$(PKGDIR)/usr/local" bash \ + tools/osx-codesign.sh cat tools/osx-pkg.pmdoc/index.xml.tmpl \ | sed -E "s/\\{nodeversion\\}/$(FULLVERSION)/g" \ | sed -E "s/\\{npmversion\\}/$(NPMVERSION)/g" \ @@ -807,6 +808,9 @@ $(BINARYTAR): release-only cp README.md $(BINARYNAME) cp LICENSE $(BINARYNAME) cp CHANGELOG.md $(BINARYNAME) +ifeq ($(OSTYPE),darwin) + SIGN="$(CODESIGN_CERT)" PKGDIR="$(BINARYNAME)" bash tools/osx-codesign.sh +endif tar -cf $(BINARYNAME).tar $(BINARYNAME) $(RM) -r $(BINARYNAME) gzip -c -f -9 $(BINARYNAME).tar > $(BINARYNAME).tar.gz @@ -887,11 +891,16 @@ CPPLINT_EXCLUDE += src/queue.h CPPLINT_EXCLUDE += src/tree.h CPPLINT_EXCLUDE += $(wildcard test/addons/??_*/*.cc test/addons/??_*/*.h) CPPLINT_EXCLUDE += $(wildcard test/addons-napi/??_*/*.cc test/addons-napi/??_*/*.h) +# These files were copied more or less verbatim from V8. +CPPLINT_EXCLUDE += src/tracing/trace_event.h src/tracing/trace_event_common.h CPPLINT_FILES = $(filter-out $(CPPLINT_EXCLUDE), $(wildcard \ src/*.c \ src/*.cc \ src/*.h \ + src/*/*.c \ + src/*/*.cc \ + src/*/*.h \ test/addons/*/*.cc \ test/addons/*/*.h \ test/cctest/*.cc \ diff --git a/README.md b/README.md index 04f5a746bfd61a..1960b333702106 100644 --- a/README.md +++ b/README.md @@ -296,6 +296,8 @@ more information about the governance of the Node.js project, see **Daniel Wang** <wangyang0123@gmail.com> * [Fishrock123](https://github.com/Fishrock123) - **Jeremiah Senkpiel** <fishrock123@rocketmail.com> +* [gabrielschulhof](https://github.com/gabrielschulhof) - +**Gabriel Schulhof** <gabriel.schulhof@intel.com> * [geek](https://github.com/geek) - **Wyatt Preul** <wpreul@gmail.com> * [gibfahn](https://github.com/gibfahn) - @@ -448,6 +450,8 @@ more information about the governance of the Node.js project, see **Daijiro Wachi** <daijiro.wachi@gmail.com> (he/him) * [whitlockjc](https://github.com/whitlockjc) - **Jeremy Whitlock** <jwhitlock@apache.org> +* [XadillaX](https://github.com/XadillaX) - +**Khaidi Chu** <i@2333.moe> (he/him) * [yorkie](https://github.com/yorkie) - **Yorkie Liu** <yorkiefixer@gmail.com> * [yosuke-furukawa](https://github.com/yosuke-furukawa) - diff --git a/benchmark/.eslintrc.yaml b/benchmark/.eslintrc.yaml deleted file mode 100644 index beaaea041fc7f5..00000000000000 --- a/benchmark/.eslintrc.yaml +++ /dev/null @@ -1,13 +0,0 @@ -## Benchmarks-specific linter rules - -rules: - # Stylistic Issues - # http://eslint.org/docs/rules/#stylistic-issues - indent: [error, 2, {ArrayExpression: first, - CallExpression: {arguments: first}, - FunctionDeclaration: {parameters: first}, - FunctionExpression: {parameters: first}, - MemberExpression: off, - ObjectExpression: first, - SwitchCase: 1}] - indent-legacy: off diff --git a/benchmark/_benchmark_progress.js b/benchmark/_benchmark_progress.js index 0c5cc10bf8d536..ffb2dfdf6511a9 100644 --- a/benchmark/_benchmark_progress.js +++ b/benchmark/_benchmark_progress.js @@ -65,12 +65,12 @@ class BenchmarkProgress { this.updateProgress(); } - completeConfig(data) { + completeConfig() { this.completedConfig++; this.updateProgress(); } - completeRun(job) { + completeRun() { this.completedRuns++; this.updateProgress(); } @@ -108,7 +108,7 @@ class BenchmarkProgress { `${caption} `; } - updateProgress(finished) { + updateProgress() { if (!process.stderr.isTTY || process.stdout.isTTY) { return; } diff --git a/benchmark/assert/deepequal-map.js b/benchmark/assert/deepequal-map.js new file mode 100644 index 00000000000000..eae4a20605ca70 --- /dev/null +++ b/benchmark/assert/deepequal-map.js @@ -0,0 +1,123 @@ +'use strict'; + +/* eslint-disable no-restricted-properties */ + +const common = require('../common.js'); +const assert = require('assert'); + +const bench = common.createBenchmark(main, { + n: [5e2], + len: [5e2], + method: [ + 'deepEqual_primitiveOnly', + 'deepStrictEqual_primitiveOnly', + 'deepEqual_objectOnly', + 'deepStrictEqual_objectOnly', + 'deepEqual_mixed', + 'deepStrictEqual_mixed', + 'deepEqual_looseMatches', + 'notDeepEqual_primitiveOnly', + 'notDeepStrictEqual_primitiveOnly', + 'notDeepEqual_objectOnly', + 'notDeepStrictEqual_objectOnly', + 'notDeepEqual_mixed', + 'notDeepStrictEqual_mixed', + 'notDeepEqual_looseMatches', + ] +}); + +function benchmark(method, n, values, values2) { + const actual = new Map(values); + // Prevent reference equal elements + const deepCopy = JSON.parse(JSON.stringify(values2 ? values2 : values)); + const expected = new Map(deepCopy); + bench.start(); + for (var i = 0; i < n; ++i) { + method(actual, expected); + } + bench.end(n); +} + +function main(conf) { + const n = +conf.n; + const len = +conf.len; + + const array = Array(len).fill(1); + var values, values2; + + switch (conf.method) { + case 'deepEqual_primitiveOnly': + values = array.map((_, i) => [`str_${i}`, 123]); + benchmark(assert.deepEqual, n, values); + break; + case 'deepStrictEqual_primitiveOnly': + values = array.map((_, i) => [`str_${i}`, 123]); + benchmark(assert.deepStrictEqual, n, values); + break; + case 'deepEqual_objectOnly': + values = array.map((_, i) => [[`str_${i}`, 1], 123]); + benchmark(assert.deepEqual, n, values); + break; + case 'deepStrictEqual_objectOnly': + values = array.map((_, i) => [[`str_${i}`, 1], 123]); + benchmark(assert.deepStrictEqual, n, values); + break; + case 'deepEqual_mixed': + values = array.map((_, i) => [i % 2 ? [`str_${i}`, 1] : `str_${i}`, 123]); + benchmark(assert.deepEqual, n, values); + break; + case 'deepStrictEqual_mixed': + values = array.map((_, i) => [i % 2 ? [`str_${i}`, 1] : `str_${i}`, 123]); + benchmark(assert.deepStrictEqual, n, values); + break; + case 'deepEqual_looseMatches': + values = array.map((_, i) => [i, i]); + values2 = values.slice().map((v) => [String(v[0]), String(v[1])]); + benchmark(assert.deepEqual, n, values, values2); + break; + case 'notDeepEqual_primitiveOnly': + values = array.map((_, i) => [`str_${i}`, 123]); + values2 = values.slice(0); + values2[Math.floor(len / 2)] = ['w00t', 123]; + benchmark(assert.notDeepEqual, n, values, values2); + break; + case 'notDeepStrictEqual_primitiveOnly': + values = array.map((_, i) => [`str_${i}`, 123]); + values2 = values.slice(0); + values2[Math.floor(len / 2)] = ['w00t', 123]; + benchmark(assert.notDeepStrictEqual, n, values, values2); + break; + case 'notDeepEqual_objectOnly': + values = array.map((_, i) => [[`str_${i}`, 1], 123]); + values2 = values.slice(0); + values2[Math.floor(len / 2)] = [['w00t'], 123]; + benchmark(assert.notDeepEqual, n, values, values2); + break; + case 'notDeepStrictEqual_objectOnly': + values = array.map((_, i) => [[`str_${i}`, 1], 123]); + values2 = values.slice(0); + values2[Math.floor(len / 2)] = [['w00t'], 123]; + benchmark(assert.notDeepStrictEqual, n, values, values2); + break; + case 'notDeepEqual_mixed': + values = array.map((_, i) => [i % 2 ? [`str_${i}`, 1] : `str_${i}`, 123]); + values2 = values.slice(0); + values2[0] = ['w00t', 123]; + benchmark(assert.notDeepEqual, n, values, values2); + break; + case 'notDeepStrictEqual_mixed': + values = array.map((_, i) => [i % 2 ? [`str_${i}`, 1] : `str_${i}`, 123]); + values2 = values.slice(0); + values2[0] = ['w00t', 123]; + benchmark(assert.notDeepStrictEqual, n, values, values2); + break; + case 'notDeepEqual_looseMatches': + values = array.map((_, i) => [i, i]); + values2 = values.slice().map((v) => [String(v[0]), String(v[1])]); + values2[len - 1] = [String(len + 1), String(len + 1)]; + benchmark(assert.notDeepEqual, n, values, values2); + break; + default: + throw new Error('Unsupported method'); + } +} diff --git a/benchmark/assert/deepequal-set.js b/benchmark/assert/deepequal-set.js new file mode 100644 index 00000000000000..ecf44c063dfecf --- /dev/null +++ b/benchmark/assert/deepequal-set.js @@ -0,0 +1,132 @@ +'use strict'; + +/* eslint-disable no-restricted-properties */ + +const common = require('../common.js'); +const assert = require('assert'); + +const bench = common.createBenchmark(main, { + n: [5e2], + len: [5e2], + method: [ + 'deepEqual_primitiveOnly', + 'deepStrictEqual_primitiveOnly', + 'deepEqual_objectOnly', + 'deepStrictEqual_objectOnly', + 'deepEqual_mixed', + 'deepStrictEqual_mixed', + 'deepEqual_looseMatches', + 'notDeepEqual_primitiveOnly', + 'notDeepStrictEqual_primitiveOnly', + 'notDeepEqual_objectOnly', + 'notDeepStrictEqual_objectOnly', + 'notDeepEqual_mixed', + 'notDeepStrictEqual_mixed', + 'notDeepEqual_looseMatches', + ] +}); + +function benchmark(method, n, values, values2) { + const actual = new Set(values); + // Prevent reference equal elements + const deepCopy = JSON.parse(JSON.stringify(values2 ? values2 : values)); + const expected = new Set(deepCopy); + bench.start(); + for (var i = 0; i < n; ++i) { + method(actual, expected); + } + bench.end(n); +} + +function main(conf) { + const n = +conf.n; + const len = +conf.len; + + const array = Array(len).fill(1); + + var values, values2; + + switch (conf.method) { + case 'deepEqual_primitiveOnly': + values = array.map((_, i) => `str_${i}`); + benchmark(assert.deepEqual, n, values); + break; + case 'deepStrictEqual_primitiveOnly': + values = array.map((_, i) => `str_${i}`); + benchmark(assert.deepStrictEqual, n, values); + break; + case 'deepEqual_objectOnly': + values = array.map((_, i) => [`str_${i}`, null]); + benchmark(assert.deepEqual, n, values); + break; + case 'deepStrictEqual_objectOnly': + values = array.map((_, i) => [`str_${i}`, null]); + benchmark(assert.deepStrictEqual, n, values); + break; + case 'deepEqual_mixed': + values = array.map((_, i) => { + return i % 2 ? [`str_${i}`, null] : `str_${i}`; + }); + benchmark(assert.deepEqual, n, values); + break; + case 'deepStrictEqual_mixed': + values = array.map((_, i) => { + return i % 2 ? [`str_${i}`, null] : `str_${i}`; + }); + benchmark(assert.deepStrictEqual, n, values); + break; + case 'deepEqual_looseMatches': + values = array.map((_, i) => i); + values2 = values.slice().map((v) => String(v)); + benchmark(assert.deepEqual, n, values, values2); + break; + case 'notDeepEqual_primitiveOnly': + values = array.map((_, i) => `str_${i}`); + values2 = values.slice(0); + values2[Math.floor(len / 2)] = 'w00t'; + benchmark(assert.notDeepEqual, n, values, values2); + break; + case 'notDeepStrictEqual_primitiveOnly': + values = array.map((_, i) => `str_${i}`); + values2 = values.slice(0); + values2[Math.floor(len / 2)] = 'w00t'; + benchmark(assert.notDeepStrictEqual, n, values, values2); + break; + case 'notDeepEqual_objectOnly': + values = array.map((_, i) => [`str_${i}`, null]); + values2 = values.slice(0); + values2[Math.floor(len / 2)] = ['w00t']; + benchmark(assert.notDeepEqual, n, values, values2); + break; + case 'notDeepStrictEqual_objectOnly': + values = array.map((_, i) => [`str_${i}`, null]); + values2 = values.slice(0); + values2[Math.floor(len / 2)] = ['w00t']; + benchmark(assert.notDeepStrictEqual, n, values, values2); + break; + case 'notDeepEqual_mixed': + values = array.map((_, i) => { + return i % 2 ? [`str_${i}`, null] : `str_${i}`; + }); + values2 = values.slice(); + values2[0] = 'w00t'; + benchmark(assert.notDeepEqual, n, values, values2); + break; + case 'notDeepStrictEqual_mixed': + values = array.map((_, i) => { + return i % 2 ? [`str_${i}`, null] : `str_${i}`; + }); + values2 = values.slice(); + values2[0] = 'w00t'; + benchmark(assert.notDeepStrictEqual, n, values, values2); + break; + case 'notDeepEqual_looseMatches': + values = array.map((_, i) => i); + values2 = values.slice().map((v) => String(v)); + values2[len - 1] = String(len + 1); + benchmark(assert.notDeepEqual, n, values, values2); + break; + default: + throw new Error('Unsupported method'); + } +} diff --git a/common.gypi b/common.gypi index ea08e80365b5c6..6677274f3abe80 100644 --- a/common.gypi +++ b/common.gypi @@ -407,9 +407,15 @@ 'libraries': [ '-lelf' ], }], ['OS=="freebsd"', { - # Use this flag because on FreeBSD std::pairs copy constructor is non-trivial - # https://lists.freebsd.org/pipermail/freebsd-toolchain/2016-March/002094.html - 'cflags': [ '-D_LIBCPP_TRIVIAL_PAIR_COPY_CTOR=1' ], + 'conditions': [ + ['llvm_version < "4.0"', { + # Use this flag because on FreeBSD std::pairs copy constructor is non-trivial. + # Doesn't apply to llvm 4.0 (FreeBSD 11.1) or later. + # Refs: https://lists.freebsd.org/pipermail/freebsd-toolchain/2016-March/002094.html + # Refs: https://svnweb.freebsd.org/ports/head/www/node/Makefile?revision=444555&view=markup + 'cflags': [ '-D_LIBCPP_TRIVIAL_PAIR_COPY_CTOR=1' ], + }], + ], 'ldflags': [ '-Wl,--export-dynamic', ], diff --git a/configure b/configure index 9a0855b49ad2e0..a481e444330c06 100755 --- a/configure +++ b/configure @@ -640,12 +640,14 @@ def check_compiler(o): # to a version that is not completely ancient. warn('C compiler too old, need gcc 4.2 or clang 3.2 (CC=%s)' % CC) - # Need llvm_version or gas_version when openssl asm files are compiled + if is_clang: + o['variables']['llvm_version'] = get_llvm_version(CC) + + # Need xcode_version or gas_version when openssl asm files are compiled. if options.without_ssl or options.openssl_no_asm or options.shared_openssl: return if is_clang: - o['variables']['llvm_version'] = get_llvm_version(CC) if sys.platform == 'darwin': o['variables']['xcode_version'] = get_xcode_version(CC) else: diff --git a/deps/cares/src/ares_parse_naptr_reply.c b/deps/cares/src/ares_parse_naptr_reply.c index 717d355778117f..a14c226a9e7e25 100644 --- a/deps/cares/src/ares_parse_naptr_reply.c +++ b/deps/cares/src/ares_parse_naptr_reply.c @@ -110,18 +110,19 @@ ares_parse_naptr_reply (const unsigned char *abuf, int alen, status = ARES_EBADRESP; break; } - /* RR must contain at least 7 bytes = 2 x int16 + 3 x name */ - if (rr_len < 7) - { - status = ARES_EBADRESP; - break; - } /* Check if we are really looking at a NAPTR record */ if (rr_class == C_IN && rr_type == T_NAPTR) { /* parse the NAPTR record itself */ + /* RR must contain at least 7 bytes = 2 x int16 + 3 x name */ + if (rr_len < 7) + { + status = ARES_EBADRESP; + break; + } + /* Allocate storage for this NAPTR answer appending it to the list */ naptr_curr = ares_malloc_data(ARES_DATATYPE_NAPTR_REPLY); if (!naptr_curr) diff --git a/deps/v8/.gitignore b/deps/v8/.gitignore index 8088214daa951b..bcec3768f398dc 100644 --- a/deps/v8/.gitignore +++ b/deps/v8/.gitignore @@ -1,3 +1,5 @@ +#*# +*.Makefile *.a *.exe *.idb @@ -18,9 +20,9 @@ *.vcxproj *.vcxproj.filters *.xcodeproj -#*# *~ .#* +.*.sw? .cpplint-cache .cproject .d8_history @@ -30,26 +32,23 @@ .project .pydevproject .settings -.*.sw? -bsuite -compile_commands.json -d8 -d8_g -gccauses -gcsuspects -shell -shell_g /_* /build -/gypfiles/win_toolchain.json /buildtools +/gypfiles/win_toolchain.json /hydrogen.cfg /obj /out /out.gn /perf.data /perf.data.old +/src/inspector/build/closure-compiler +/src/inspector/build/closure-compiler.tar.gz /test/benchmarks/data +/test/fuzzer/wasm_corpus +/test/fuzzer/wasm_corpus.tar.gz +/test/fuzzer/wasm_asmjs_corpus +/test/fuzzer/wasm_asmjs_corpus.tar.gz /test/mozilla/data /test/promises-aplus/promises-tests /test/promises-aplus/promises-tests.tar.gz @@ -57,6 +56,9 @@ shell_g /test/test262/data /test/test262/data.tar /test/test262/harness +/test/wasm-js +/test/wasm-spec-tests/tests +/test/wasm-spec-tests/tests.tar.gz /testing/gmock /testing/gtest/* !/testing/gtest/include @@ -81,26 +83,26 @@ shell_g /tools/swarming_client /tools/visual_studio/Debug /tools/visual_studio/Release -/test/fuzzer/wasm -/test/fuzzer/wasm_asmjs /v8.log.ll /xcodebuild -TAGS -*.Makefile -GTAGS +GPATH GRTAGS GSYMS -GPATH -tags +GTAGS +TAGS +bsuite +compile_commands.json +d8 +d8_g +gccauses +gcsuspects gtags.files +shell +shell_g +tags turbo*.cfg turbo*.dot turbo*.json v8.ignition_dispatches_table.json -/test/fuzzer/wasm.tar.gz -/test/fuzzer/wasm_asmjs.tar.gz -/src/inspector/build/closure-compiler.tar.gz -/src/inspector/build/closure-compiler -/test/wasm-js !/third_party/jinja2 !/third_party/markupsafe diff --git a/deps/v8/AUTHORS b/deps/v8/AUTHORS index 756d1dc985e6ad..07cf31914431e0 100644 --- a/deps/v8/AUTHORS +++ b/deps/v8/AUTHORS @@ -1,4 +1,4 @@ -# Below is a list of people and organizations that have contributed +# Below is a list of people and organizations that have contributed # to the V8 project. Names should be added to the list like so: # # Name/Organization @@ -70,6 +70,7 @@ Hirofumi Mako Honggyu Kim Ioseb Dzmanashvili Isiah Meadows +Jaime Bernardo Jan de Mooij Jay Freeman James Pike @@ -82,6 +83,7 @@ JunHo Seo Kang-Hao (Kenny) Lu Karl Skomski Kevin Gibbons +Loo Rong Jie Luis Reis Luke Zarko Maciej Małecki diff --git a/deps/v8/BUILD.gn b/deps/v8/BUILD.gn index 6f656f69582762..2060cb19817059 100644 --- a/deps/v8/BUILD.gn +++ b/deps/v8/BUILD.gn @@ -5,6 +5,7 @@ import("//build/config/android/config.gni") import("//build/config/arm.gni") import("//build/config/dcheck_always_on.gni") +import("//build/config/host_byteorder.gni") import("//build/config/mips.gni") import("//build/config/sanitizers/sanitizers.gni") @@ -20,6 +21,12 @@ declare_args() { # Print to stdout on Android. v8_android_log_stdout = false + # Sets -DV8_ENABLE_FUTURE. + v8_enable_future = false + + # Sets -DV8_DISABLE_TURBO. + v8_disable_turbo = false + # Sets -DVERIFY_HEAP. v8_enable_verify_heap = "" @@ -63,12 +70,18 @@ declare_args() { # Sets -dOBJECT_PRINT. v8_enable_object_print = "" - # Sets -dTRACE_MAPS. + # Sets -dV8_TRACE_MAPS. v8_enable_trace_maps = "" # Sets -dV8_ENABLE_CHECKS. v8_enable_v8_checks = "" + # Sets -dV8_TRACE_IGNITION. + v8_enable_trace_ignition = false + + # Sets -dV8_CONCURRENT_MARKING + v8_enable_concurrent_marking = false + # With post mortem support enabled, metadata is embedded into libv8 that # describes various parameters of the VM for use by debuggers. See # tools/gen-postmortem-metadata.py for details. @@ -125,7 +138,6 @@ if (v8_enable_v8_checks == "") { # snapshots. is_target_simulator = target_cpu != v8_target_cpu -v8_generated_peephole_source = "$target_gen_dir/bytecode-peephole-table.cc" v8_random_seed = "314159265" v8_toolset_for_shell = "host" @@ -178,10 +190,10 @@ config("external_config") { if (is_component_build) { defines = [ "USING_V8_SHARED" ] } - include_dirs = [ "include" ] - if (v8_enable_inspector) { - include_dirs += [ "$target_gen_dir/include" ] - } + include_dirs = [ + "include", + "$target_gen_dir/include", + ] } # This config should only be applied to code that needs to be explicitly @@ -204,6 +216,12 @@ config("features") { defines += [ "V8_PROMISE_INTERNAL_FIELD_COUNT=${v8_promise_internal_field_count}" ] } + if (v8_enable_future) { + defines += [ "V8_ENABLE_FUTURE" ] + } + if (v8_disable_turbo) { + defines += [ "V8_DISABLE_TURBO" ] + } if (v8_enable_gdbjit) { defines += [ "ENABLE_GDB_JIT_INTERFACE" ] } @@ -220,7 +238,10 @@ config("features") { defines += [ "VERIFY_PREDICTABLE" ] } if (v8_enable_trace_maps) { - defines += [ "TRACE_MAPS" ] + defines += [ "V8_TRACE_MAPS" ] + } + if (v8_enable_trace_ignition) { + defines += [ "V8_TRACE_IGNITION" ] } if (v8_enable_v8_checks) { defines += [ "V8_ENABLE_CHECKS" ] @@ -235,14 +256,20 @@ config("features") { defines += [ "V8_IMMINENT_DEPRECATION_WARNINGS" ] } if (v8_enable_i18n_support) { - defines += [ "V8_I18N_SUPPORT" ] + defines += [ "V8_INTL_SUPPORT" ] } if (v8_enable_handle_zapping) { defines += [ "ENABLE_HANDLE_ZAPPING" ] } + if (v8_use_snapshot) { + defines += [ "V8_USE_SNAPSHOT" ] + } if (v8_use_external_startup_data) { defines += [ "V8_USE_EXTERNAL_STARTUP_DATA" ] } + if (v8_enable_concurrent_marking) { + defines += [ "V8_CONCURRENT_MARKING" ] + } } config("toolchain") { @@ -356,10 +383,34 @@ config("toolchain") { if (v8_current_cpu == "s390x") { defines += [ "V8_TARGET_ARCH_S390X" ] } - if (host_cpu == "x64" || host_cpu == "x86") { + if (host_byteorder == "little") { defines += [ "V8_TARGET_ARCH_S390_LE_SIM" ] + } else { + cflags += [ "-march=z196" ] } } + if (v8_current_cpu == "ppc" || v8_current_cpu == "ppc64") { + defines += [ "V8_TARGET_ARCH_PPC" ] + if (v8_current_cpu == "ppc64") { + defines += [ "V8_TARGET_ARCH_PPC64" ] + } + if (host_byteorder == "little") { + defines += [ "V8_TARGET_ARCH_PPC_LE" ] + } else if (host_byteorder == "big") { + defines += [ "V8_TARGET_ARCH_PPC_BE" ] + if (current_os == "aix") { + cflags += [ + # Work around AIX ceil, trunc and round oddities. + "-mcpu=power5+", + "-mfprnd", + + # Work around AIX assembler popcntb bug. + "-mno-popcntb", + ] + } + } + } + if (v8_current_cpu == "x86") { defines += [ "V8_TARGET_ARCH_IA32" ] if (is_win) { @@ -414,10 +465,34 @@ config("toolchain") { # TODO(hans): Remove once http://crbug.com/428099 is resolved. "-Winconsistent-missing-override", ] - #if (v8_current_cpu == "x64" || v8_current_cpu == "arm64" || - # v8_current_cpu == "mips64el") { - # cflags += [ "-Wshorten-64-to-32" ] - #} + if (v8_current_cpu == "x64" || v8_current_cpu == "arm64" || + v8_current_cpu == "mips64el") { + cflags += [ "-Wshorten-64-to-32" ] + } + } + + if (is_win) { + cflags += [ + "/wd4245", # Conversion with signed/unsigned mismatch. + "/wd4267", # Conversion with possible loss of data. + "/wd4324", # Padding structure due to alignment. + "/wd4701", # Potentially uninitialized local variable. + "/wd4702", # Unreachable code. + "/wd4703", # Potentially uninitialized local pointer variable. + "/wd4709", # Comma operator within array index expr (bugged). + "/wd4714", # Function marked forceinline not inlined. + "/wd4718", # Recursive call has no side-effect. + "/wd4800", # Forcing value to bool. + ] + } + + if (!is_clang && !is_win) { + cflags += [ + # Disable gcc warnings for optimizations based on the assumption that + # signed overflow does not occur. Generates false positives (see + # http://crbug.com/v8/6341). + "-Wno-strict-overflow", + ] } } @@ -441,11 +516,10 @@ action("js2c") { "src/js/macros.py", "src/messages.h", "src/js/prologue.js", - "src/js/runtime.js", + "src/js/max-min.js", "src/js/v8natives.js", "src/js/array.js", "src/js/string.js", - "src/js/arraybuffer.js", "src/js/typedarray.js", "src/js/collection.js", "src/js/weak-collection.js", @@ -455,7 +529,6 @@ action("js2c") { "src/js/templates.js", "src/js/spread.js", "src/js/proxy.js", - "src/js/harmony-string-padding.js", "src/debug/mirrors.js", "src/debug/debug.js", "src/debug/liveedit.js", @@ -466,7 +539,7 @@ action("js2c") { ] if (v8_enable_i18n_support) { - sources += [ "src/js/i18n.js" ] + sources += [ "src/js/intl.js" ] } args = [ @@ -483,43 +556,6 @@ action("js2c") { } } -action("js2c_experimental") { - visibility = [ ":*" ] # Only targets in this file can depend on this. - - script = "tools/js2c.py" - - # The script depends on this other script, this rule causes a rebuild if it - # changes. - inputs = [ - "tools/jsmin.py", - ] - - # NOSORT - sources = [ - "src/js/macros.py", - "src/messages.h", - "src/js/harmony-atomics.js", - ] - - outputs = [ - "$target_gen_dir/experimental-libraries.cc", - ] - - args = [ - rebase_path("$target_gen_dir/experimental-libraries.cc", - root_build_dir), - "EXPERIMENTAL", - ] + rebase_path(sources, root_build_dir) - - if (v8_use_external_startup_data) { - outputs += [ "$target_gen_dir/libraries_experimental.bin" ] - args += [ - "--startup_blob", - rebase_path("$target_gen_dir/libraries_experimental.bin", root_build_dir), - ] - } -} - action("js2c_extras") { visibility = [ ":*" ] # Only targets in this file can depend on this. @@ -630,7 +666,6 @@ if (v8_use_external_startup_data) { deps = [ ":js2c", - ":js2c_experimental", ":js2c_experimental_extras", ":js2c_extras", ] @@ -638,7 +673,6 @@ if (v8_use_external_startup_data) { # NOSORT sources = [ "$target_gen_dir/libraries.bin", - "$target_gen_dir/libraries_experimental.bin", "$target_gen_dir/libraries_extras.bin", "$target_gen_dir/libraries_experimental_extras.bin", ] @@ -667,6 +701,8 @@ action("postmortem-metadata") { sources = [ "src/objects.h", "src/objects-inl.h", + "src/objects/map.h", + "src/objects/map-inl.h", ] outputs = [ @@ -728,29 +764,6 @@ action("run_mksnapshot") { } } -action("run_mkpeephole") { - visibility = [ ":*" ] # Only targets in this file can depend on this. - - deps = [ - ":mkpeephole($v8_snapshot_toolchain)", - ] - - outputs = [ - v8_generated_peephole_source, - ] - - sources = [] - - script = "tools/run.py" - - args = [ - "./" + rebase_path(get_label_info(":mkpeephole($v8_snapshot_toolchain)", - "root_out_dir") + "/mkpeephole", - root_build_dir), - rebase_path(v8_generated_peephole_source, root_build_dir), - ] -} - action("v8_dump_build_config") { script = "tools/testrunner/utils/dump_build_config.py" outputs = [ @@ -769,7 +782,6 @@ action("v8_dump_build_config") { "target_cpu=\"$target_cpu\"", "v8_current_cpu=\"$v8_current_cpu\"", "v8_enable_i18n_support=$v8_enable_i18n_support", - "v8_enable_inspector=$v8_enable_inspector", "v8_target_cpu=\"$v8_target_cpu\"", "v8_use_snapshot=$v8_use_snapshot", ] @@ -791,6 +803,7 @@ source_set("v8_maybe_snapshot") { } else { # Ignore v8_use_external_startup_data setting if no snapshot is used. public_deps = [ + ":v8_builtins_setup", ":v8_nosnapshot", ] } @@ -801,7 +814,6 @@ v8_source_set("v8_nosnapshot") { deps = [ ":js2c", - ":js2c_experimental", ":js2c_experimental_extras", ":js2c_extras", ":v8_base", @@ -809,7 +821,6 @@ v8_source_set("v8_nosnapshot") { sources = [ "$target_gen_dir/experimental-extras-libraries.cc", - "$target_gen_dir/experimental-libraries.cc", "$target_gen_dir/extras-libraries.cc", "$target_gen_dir/libraries.cc", "src/snapshot/snapshot-empty.cc", @@ -828,7 +839,6 @@ v8_source_set("v8_snapshot") { deps = [ ":js2c", - ":js2c_experimental", ":js2c_experimental_extras", ":js2c_extras", ":v8_base", @@ -841,10 +851,10 @@ v8_source_set("v8_snapshot") { sources = [ "$target_gen_dir/experimental-extras-libraries.cc", - "$target_gen_dir/experimental-libraries.cc", "$target_gen_dir/extras-libraries.cc", "$target_gen_dir/libraries.cc", "$target_gen_dir/snapshot.cc", + "src/setup-isolate-deserialize.cc", ] configs = [ ":internal_config" ] @@ -856,7 +866,6 @@ if (v8_use_external_startup_data) { deps = [ ":js2c", - ":js2c_experimental", ":js2c_experimental_extras", ":js2c_extras", ":v8_base", @@ -867,6 +876,7 @@ if (v8_use_external_startup_data) { ] sources = [ + "src/setup-isolate-deserialize.cc", "src/snapshot/natives-external.cc", "src/snapshot/snapshot-external.cc", ] @@ -875,17 +885,171 @@ if (v8_use_external_startup_data) { } } +v8_source_set("v8_builtins_generators") { + visibility = [ + ":*", + "test/cctest:*", + ] + + deps = [ + ":v8_base", + ] + + sources = [ + ### gcmole(all) ### + "src/builtins/builtins-arguments-gen.cc", + "src/builtins/builtins-arguments-gen.h", + "src/builtins/builtins-array-gen.cc", + "src/builtins/builtins-async-function-gen.cc", + "src/builtins/builtins-async-gen.cc", + "src/builtins/builtins-async-gen.h", + "src/builtins/builtins-async-generator-gen.cc", + "src/builtins/builtins-async-iterator-gen.cc", + "src/builtins/builtins-boolean-gen.cc", + "src/builtins/builtins-call-gen.cc", + "src/builtins/builtins-console-gen.cc", + "src/builtins/builtins-constructor-gen.cc", + "src/builtins/builtins-constructor-gen.h", + "src/builtins/builtins-constructor.h", + "src/builtins/builtins-conversion-gen.cc", + "src/builtins/builtins-date-gen.cc", + "src/builtins/builtins-forin-gen.cc", + "src/builtins/builtins-forin-gen.h", + "src/builtins/builtins-function-gen.cc", + "src/builtins/builtins-generator-gen.cc", + "src/builtins/builtins-global-gen.cc", + "src/builtins/builtins-handler-gen.cc", + "src/builtins/builtins-ic-gen.cc", + "src/builtins/builtins-internal-gen.cc", + "src/builtins/builtins-interpreter-gen.cc", + "src/builtins/builtins-intl-gen.cc", + "src/builtins/builtins-math-gen.cc", + "src/builtins/builtins-number-gen.cc", + "src/builtins/builtins-object-gen.cc", + "src/builtins/builtins-promise-gen.cc", + "src/builtins/builtins-promise-gen.h", + "src/builtins/builtins-regexp-gen.cc", + "src/builtins/builtins-regexp-gen.h", + "src/builtins/builtins-sharedarraybuffer-gen.cc", + "src/builtins/builtins-string-gen.cc", + "src/builtins/builtins-string-gen.h", + "src/builtins/builtins-symbol-gen.cc", + "src/builtins/builtins-typedarray-gen.cc", + "src/builtins/builtins-utils-gen.h", + "src/builtins/builtins-wasm-gen.cc", + "src/builtins/setup-builtins-internal.cc", + "src/ic/accessor-assembler.cc", + "src/ic/accessor-assembler.h", + "src/ic/binary-op-assembler.cc", + "src/ic/binary-op-assembler.h", + "src/ic/keyed-store-generic.cc", + "src/ic/keyed-store-generic.h", + "src/interpreter/interpreter-assembler.cc", + "src/interpreter/interpreter-assembler.h", + "src/interpreter/interpreter-generator.cc", + "src/interpreter/interpreter-generator.h", + "src/interpreter/interpreter-intrinsics-generator.cc", + "src/interpreter/interpreter-intrinsics-generator.h", + "src/interpreter/setup-interpreter-internal.cc", + "src/interpreter/setup-interpreter.h", + ] + + if (v8_current_cpu == "x86") { + sources += [ + ### gcmole(arch:ia32) ### + "src/builtins/ia32/builtins-ia32.cc", + ] + } else if (v8_current_cpu == "x64") { + sources += [ + ### gcmole(arch:x64) ### + "src/builtins/x64/builtins-x64.cc", + ] + } else if (v8_current_cpu == "arm") { + sources += [ + ### gcmole(arch:arm) ### + "src/builtins/arm/builtins-arm.cc", + ] + } else if (v8_current_cpu == "arm64") { + sources += [ + ### gcmole(arch:arm64) ### + "src/builtins/arm64/builtins-arm64.cc", + ] + } else if (v8_current_cpu == "mips" || v8_current_cpu == "mipsel") { + sources += [ + ### gcmole(arch:mipsel) ### + "src/builtins/mips/builtins-mips.cc", + ] + } else if (v8_current_cpu == "mips64" || v8_current_cpu == "mips64el") { + sources += [ + ### gcmole(arch:mips64el) ### + "src/builtins/mips64/builtins-mips64.cc", + ] + } else if (v8_current_cpu == "ppc" || v8_current_cpu == "ppc64") { + sources += [ + ### gcmole(arch:ppc) ### + "src/builtins/ppc/builtins-ppc.cc", + ] + } else if (v8_current_cpu == "s390" || v8_current_cpu == "s390x") { + sources += [ + ### gcmole(arch:s390) ### + "src/builtins/s390/builtins-s390.cc", + ] + } else if (v8_current_cpu == "x87") { + sources += [ + ### gcmole(arch:x87) ### + "src/builtins/x87/builtins-x87.cc", + ] + } + + if (!v8_enable_i18n_support) { + sources -= [ "src/builtins/builtins-intl-gen.cc" ] + } + + configs = [ ":internal_config" ] +} + +v8_source_set("v8_builtins_setup") { + visibility = [ ":*" ] # Only targets in this file can depend on this. + + deps = [ + ":v8_builtins_generators", + ] + + sources = [ + ### gcmole(all) ### + "src/setup-isolate-full.cc", + ] + + configs = [ ":internal_config" ] +} + # This is split out to be a non-code containing target that the Chromium browser # DLL can depend upon to get only a version string. v8_header_set("v8_version") { configs = [ ":internal_config" ] sources = [ + "include/v8-value-serializer-version.h", "include/v8-version-string.h", "include/v8-version.h", ] } +# This is split out to be a non-code containing target that the Chromium browser +# can depend upon to get basic v8 types. +v8_header_set("v8_headers") { + configs = [ ":internal_config" ] + + sources = [ + "include/v8.h", + "include/v8config.h", + ] + + deps = [ + ":v8_version", + ] +} + v8_source_set("v8_base") { visibility = [ ":*" ] # Only targets in this file can depend on this. @@ -894,6 +1058,8 @@ v8_source_set("v8_base") { ### gcmole(all) ### "include/v8-debug.h", + "include/v8-inspector-protocol.h", + "include/v8-inspector.h", "include/v8-platform.h", "include/v8-profiler.h", "include/v8-testing.h", @@ -919,12 +1085,13 @@ v8_source_set("v8_base") { "src/arguments.h", "src/asmjs/asm-js.cc", "src/asmjs/asm-js.h", - "src/asmjs/asm-typer.cc", - "src/asmjs/asm-typer.h", + "src/asmjs/asm-names.h", + "src/asmjs/asm-parser.cc", + "src/asmjs/asm-parser.h", + "src/asmjs/asm-scanner.cc", + "src/asmjs/asm-scanner.h", "src/asmjs/asm-types.cc", "src/asmjs/asm-types.h", - "src/asmjs/asm-wasm-builder.cc", - "src/asmjs/asm-wasm-builder.h", "src/asmjs/switch-logic.cc", "src/asmjs/switch-logic.h", "src/assembler-inl.h", @@ -973,52 +1140,41 @@ v8_source_set("v8_base") { "src/bootstrapper.cc", "src/bootstrapper.h", "src/builtins/builtins-api.cc", - "src/builtins/builtins-arguments.cc", - "src/builtins/builtins-arguments.h", "src/builtins/builtins-array.cc", "src/builtins/builtins-arraybuffer.cc", - "src/builtins/builtins-async-function.cc", - "src/builtins/builtins-async-iterator.cc", - "src/builtins/builtins-async.cc", - "src/builtins/builtins-async.h", "src/builtins/builtins-boolean.cc", "src/builtins/builtins-call.cc", "src/builtins/builtins-callsite.cc", - "src/builtins/builtins-constructor.cc", + "src/builtins/builtins-console.cc", "src/builtins/builtins-constructor.h", - "src/builtins/builtins-conversion.cc", "src/builtins/builtins-dataview.cc", "src/builtins/builtins-date.cc", "src/builtins/builtins-debug.cc", + "src/builtins/builtins-definitions.h", + "src/builtins/builtins-descriptors.h", "src/builtins/builtins-error.cc", "src/builtins/builtins-function.cc", - "src/builtins/builtins-generator.cc", "src/builtins/builtins-global.cc", - "src/builtins/builtins-handler.cc", - "src/builtins/builtins-ic.cc", "src/builtins/builtins-internal.cc", "src/builtins/builtins-interpreter.cc", + "src/builtins/builtins-intl.cc", "src/builtins/builtins-json.cc", "src/builtins/builtins-math.cc", "src/builtins/builtins-number.cc", "src/builtins/builtins-object.cc", - "src/builtins/builtins-object.h", - "src/builtins/builtins-promise.cc", - "src/builtins/builtins-promise.h", "src/builtins/builtins-proxy.cc", "src/builtins/builtins-reflect.cc", "src/builtins/builtins-regexp.cc", - "src/builtins/builtins-regexp.h", "src/builtins/builtins-sharedarraybuffer.cc", "src/builtins/builtins-string.cc", "src/builtins/builtins-symbol.cc", "src/builtins/builtins-typedarray.cc", "src/builtins/builtins-utils.h", - "src/builtins/builtins-wasm.cc", "src/builtins/builtins.cc", "src/builtins/builtins.h", "src/cached-powers.cc", "src/cached-powers.h", + "src/callable.h", "src/cancelable-task.cc", "src/cancelable-task.h", "src/char-predicates-inl.h", @@ -1031,6 +1187,7 @@ v8_source_set("v8_base") { "src/code-stub-assembler.cc", "src/code-stub-assembler.h", "src/code-stubs-hydrogen.cc", + "src/code-stubs-utils.h", "src/code-stubs.cc", "src/code-stubs.h", "src/codegen.cc", @@ -1117,8 +1274,6 @@ v8_source_set("v8_base") { "src/compiler/graph-assembler.h", "src/compiler/graph-reducer.cc", "src/compiler/graph-reducer.h", - "src/compiler/graph-replay.cc", - "src/compiler/graph-replay.h", "src/compiler/graph-trimmer.cc", "src/compiler/graph-trimmer.h", "src/compiler/graph-visualizer.cc", @@ -1262,8 +1417,6 @@ v8_source_set("v8_base") { "src/compiler/wasm-linkage.cc", "src/compiler/zone-stats.cc", "src/compiler/zone-stats.h", - "src/context-measure.cc", - "src/context-measure.h", "src/contexts-inl.h", "src/contexts.cc", "src/contexts.h", @@ -1428,6 +1581,9 @@ v8_source_set("v8_base") { "src/heap/array-buffer-tracker.h", "src/heap/code-stats.cc", "src/heap/code-stats.h", + "src/heap/concurrent-marking-deque.h", + "src/heap/concurrent-marking.cc", + "src/heap/concurrent-marking.h", "src/heap/embedder-tracing.cc", "src/heap/embedder-tracing.h", "src/heap/gc-idle-time-handler.cc", @@ -1442,6 +1598,7 @@ v8_source_set("v8_base") { "src/heap/incremental-marking-job.h", "src/heap/incremental-marking.cc", "src/heap/incremental-marking.h", + "src/heap/item-parallel-job.h", "src/heap/mark-compact-inl.h", "src/heap/mark-compact.cc", "src/heap/mark-compact.h", @@ -1460,19 +1617,18 @@ v8_source_set("v8_base") { "src/heap/scavenger-inl.h", "src/heap/scavenger.cc", "src/heap/scavenger.h", + "src/heap/sequential-marking-deque.cc", + "src/heap/sequential-marking-deque.h", "src/heap/slot-set.h", "src/heap/spaces-inl.h", "src/heap/spaces.cc", "src/heap/spaces.h", "src/heap/store-buffer.cc", "src/heap/store-buffer.h", - "src/i18n.cc", - "src/i18n.h", + "src/heap/workstealing-marking-deque.h", "src/ic/access-compiler-data.h", "src/ic/access-compiler.cc", "src/ic/access-compiler.h", - "src/ic/accessor-assembler.cc", - "src/ic/accessor-assembler.h", "src/ic/call-optimization.cc", "src/ic/call-optimization.h", "src/ic/handler-compiler.cc", @@ -1486,8 +1642,6 @@ v8_source_set("v8_base") { "src/ic/ic-stats.h", "src/ic/ic.cc", "src/ic/ic.h", - "src/ic/keyed-store-generic.cc", - "src/ic/keyed-store-generic.h", "src/ic/stub-cache.cc", "src/ic/stub-cache.h", "src/icu_util.cc", @@ -1506,28 +1660,26 @@ v8_source_set("v8_base") { "src/interpreter/bytecode-array-random-iterator.h", "src/interpreter/bytecode-array-writer.cc", "src/interpreter/bytecode-array-writer.h", - "src/interpreter/bytecode-dead-code-optimizer.cc", - "src/interpreter/bytecode-dead-code-optimizer.h", "src/interpreter/bytecode-decoder.cc", "src/interpreter/bytecode-decoder.h", "src/interpreter/bytecode-flags.cc", "src/interpreter/bytecode-flags.h", "src/interpreter/bytecode-generator.cc", "src/interpreter/bytecode-generator.h", + "src/interpreter/bytecode-jump-table.h", "src/interpreter/bytecode-label.cc", "src/interpreter/bytecode-label.h", + "src/interpreter/bytecode-node.cc", + "src/interpreter/bytecode-node.h", "src/interpreter/bytecode-operands.cc", "src/interpreter/bytecode-operands.h", - "src/interpreter/bytecode-peephole-optimizer.cc", - "src/interpreter/bytecode-peephole-optimizer.h", - "src/interpreter/bytecode-peephole-table.h", - "src/interpreter/bytecode-pipeline.cc", - "src/interpreter/bytecode-pipeline.h", "src/interpreter/bytecode-register-allocator.h", "src/interpreter/bytecode-register-optimizer.cc", "src/interpreter/bytecode-register-optimizer.h", "src/interpreter/bytecode-register.cc", "src/interpreter/bytecode-register.h", + "src/interpreter/bytecode-source-info.cc", + "src/interpreter/bytecode-source-info.h", "src/interpreter/bytecode-traits.h", "src/interpreter/bytecodes.cc", "src/interpreter/bytecodes.h", @@ -1537,12 +1689,13 @@ v8_source_set("v8_base") { "src/interpreter/control-flow-builders.h", "src/interpreter/handler-table-builder.cc", "src/interpreter/handler-table-builder.h", - "src/interpreter/interpreter-assembler.cc", - "src/interpreter/interpreter-assembler.h", + "src/interpreter/interpreter-generator.h", "src/interpreter/interpreter-intrinsics.cc", "src/interpreter/interpreter-intrinsics.h", "src/interpreter/interpreter.cc", "src/interpreter/interpreter.h", + "src/intl.cc", + "src/intl.h", "src/isolate-inl.h", "src/isolate.cc", "src/isolate.h", @@ -1572,6 +1725,7 @@ v8_source_set("v8_base") { "src/lookup.h", "src/machine-type.cc", "src/machine-type.h", + "src/macro-assembler-inl.h", "src/macro-assembler.h", "src/managed.h", "src/map-updater.cc", @@ -1586,17 +1740,31 @@ v8_source_set("v8_base") { "src/objects-printer.cc", "src/objects.cc", "src/objects.h", + "src/objects/code-cache-inl.h", + "src/objects/code-cache.h", + "src/objects/compilation-cache-inl.h", + "src/objects/compilation-cache.h", + "src/objects/descriptor-array.h", + "src/objects/dictionary.h", + "src/objects/frame-array-inl.h", + "src/objects/frame-array.h", + "src/objects/hash-table-inl.h", + "src/objects/hash-table.h", + "src/objects/intl-objects.cc", + "src/objects/intl-objects.h", "src/objects/literal-objects.cc", "src/objects/literal-objects.h", + "src/objects/map-inl.h", + "src/objects/map.h", "src/objects/module-info.h", "src/objects/object-macros-undef.h", "src/objects/object-macros.h", "src/objects/regexp-match-info.h", "src/objects/scope-info.cc", "src/objects/scope-info.h", + "src/objects/string-table.h", "src/ostreams.cc", "src/ostreams.h", - "src/parsing/duplicate-finder.cc", "src/parsing/duplicate-finder.h", "src/parsing/expression-classifier.h", "src/parsing/func-name-inferrer.cc", @@ -1700,9 +1868,9 @@ v8_source_set("v8_base") { "src/runtime/runtime-function.cc", "src/runtime/runtime-futex.cc", "src/runtime/runtime-generator.cc", - "src/runtime/runtime-i18n.cc", "src/runtime/runtime-internal.cc", "src/runtime/runtime-interpreter.cc", + "src/runtime/runtime-intl.cc", "src/runtime/runtime-literals.cc", "src/runtime/runtime-liveedit.cc", "src/runtime/runtime-maths.cc", @@ -1724,6 +1892,7 @@ v8_source_set("v8_base") { "src/runtime/runtime.h", "src/safepoint-table.cc", "src/safepoint-table.h", + "src/setup-isolate.h", "src/signature.h", "src/simulator.h", "src/small-pointer-list.h", @@ -1757,6 +1926,8 @@ v8_source_set("v8_base") { "src/string-builder.h", "src/string-case.cc", "src/string-case.h", + "src/string-hasher-inl.h", + "src/string-hasher.h", "src/string-search.h", "src/string-stream.cc", "src/string-stream.h", @@ -1771,6 +1942,9 @@ v8_source_set("v8_base") { "src/transitions-inl.h", "src/transitions.cc", "src/transitions.h", + "src/trap-handler/handler-outside.cc", + "src/trap-handler/handler-shared.cc", + "src/trap-handler/trap-handler-internal.h", "src/trap-handler/trap-handler.h", "src/type-hints.cc", "src/type-hints.h", @@ -1798,6 +1972,8 @@ v8_source_set("v8_base") { "src/vector.h", "src/version.cc", "src/version.h", + "src/visitors.cc", + "src/visitors.h", "src/vm-state-inl.h", "src/vm-state.h", "src/wasm/decoder.h", @@ -1805,10 +1981,14 @@ v8_source_set("v8_base") { "src/wasm/function-body-decoder.cc", "src/wasm/function-body-decoder.h", "src/wasm/leb-helper.h", + "src/wasm/local-decl-encoder.cc", + "src/wasm/local-decl-encoder.h", "src/wasm/module-decoder.cc", "src/wasm/module-decoder.h", "src/wasm/signature-map.cc", "src/wasm/signature-map.h", + "src/wasm/streaming-decoder.cc", + "src/wasm/streaming-decoder.h", "src/wasm/wasm-code-specialization.cc", "src/wasm/wasm-code-specialization.h", "src/wasm/wasm-debug.cc", @@ -1819,7 +1999,6 @@ v8_source_set("v8_base") { "src/wasm/wasm-js.cc", "src/wasm/wasm-js.h", "src/wasm/wasm-limits.h", - "src/wasm/wasm-macro-gen.h", "src/wasm/wasm-module-builder.cc", "src/wasm/wasm-module-builder.h", "src/wasm/wasm-module.cc", @@ -1847,7 +2026,6 @@ v8_source_set("v8_base") { if (v8_current_cpu == "x86") { sources += [ ### gcmole(arch:ia32) ### - "src/builtins/ia32/builtins-ia32.cc", "src/compiler/ia32/code-generator-ia32.cc", "src/compiler/ia32/instruction-codes-ia32.h", "src/compiler/ia32/instruction-scheduler-ia32.cc", @@ -1877,6 +2055,7 @@ v8_source_set("v8_base") { "src/ia32/macro-assembler-ia32.h", "src/ia32/simulator-ia32.cc", "src/ia32/simulator-ia32.h", + "src/ia32/sse-instr.h", "src/ic/ia32/access-compiler-ia32.cc", "src/ic/ia32/handler-compiler-ia32.cc", "src/ic/ia32/ic-ia32.cc", @@ -1885,7 +2064,6 @@ v8_source_set("v8_base") { ] } else if (v8_current_cpu == "x64") { sources += [ ### gcmole(arch:x64) ### - "src/builtins/x64/builtins-x64.cc", "src/compiler/x64/code-generator-x64.cc", "src/compiler/x64/instruction-codes-x64.h", "src/compiler/x64/instruction-scheduler-x64.cc", @@ -1926,6 +2104,9 @@ v8_source_set("v8_base") { "src/x64/simulator-x64.h", "src/x64/sse-instr.h", ] + if (is_linux) { + sources += [ "src/trap-handler/handler-inside.cc" ] + } } else if (v8_current_cpu == "arm") { sources += [ ### gcmole(arch:arm) ### "src/arm/assembler-arm-inl.h", @@ -1949,7 +2130,6 @@ v8_source_set("v8_base") { "src/arm/macro-assembler-arm.h", "src/arm/simulator-arm.cc", "src/arm/simulator-arm.h", - "src/builtins/arm/builtins-arm.cc", "src/compiler/arm/code-generator-arm.cc", "src/compiler/arm/instruction-codes-arm.h", "src/compiler/arm/instruction-scheduler-arm.cc", @@ -2003,7 +2183,6 @@ v8_source_set("v8_base") { "src/arm64/simulator-arm64.h", "src/arm64/utils-arm64.cc", "src/arm64/utils-arm64.h", - "src/builtins/arm64/builtins-arm64.cc", "src/compiler/arm64/code-generator-arm64.cc", "src/compiler/arm64/instruction-codes-arm64.h", "src/compiler/arm64/instruction-scheduler-arm64.cc", @@ -2029,7 +2208,6 @@ v8_source_set("v8_base") { ] } else if (v8_current_cpu == "mips" || v8_current_cpu == "mipsel") { sources += [ ### gcmole(arch:mipsel) ### - "src/builtins/mips/builtins-mips.cc", "src/compiler/mips/code-generator-mips.cc", "src/compiler/mips/instruction-codes-mips.h", "src/compiler/mips/instruction-scheduler-mips.cc", @@ -2069,7 +2247,6 @@ v8_source_set("v8_base") { ] } else if (v8_current_cpu == "mips64" || v8_current_cpu == "mips64el") { sources += [ ### gcmole(arch:mips64el) ### - "src/builtins/mips64/builtins-mips64.cc", "src/compiler/mips64/code-generator-mips64.cc", "src/compiler/mips64/instruction-codes-mips64.h", "src/compiler/mips64/instruction-scheduler-mips64.cc", @@ -2109,7 +2286,6 @@ v8_source_set("v8_base") { ] } else if (v8_current_cpu == "ppc" || v8_current_cpu == "ppc64") { sources += [ ### gcmole(arch:ppc) ### - "src/builtins/ppc/builtins-ppc.cc", "src/compiler/ppc/code-generator-ppc.cc", "src/compiler/ppc/instruction-codes-ppc.h", "src/compiler/ppc/instruction-scheduler-ppc.cc", @@ -2149,7 +2325,6 @@ v8_source_set("v8_base") { ] } else if (v8_current_cpu == "s390" || v8_current_cpu == "s390x") { sources += [ ### gcmole(arch:s390) ### - "src/builtins/s390/builtins-s390.cc", "src/compiler/s390/code-generator-s390.cc", "src/compiler/s390/instruction-codes-s390.h", "src/compiler/s390/instruction-scheduler-s390.cc", @@ -2189,7 +2364,6 @@ v8_source_set("v8_base") { ] } else if (v8_current_cpu == "x87") { sources += [ ### gcmole(arch:x87) ### - "src/builtins/x87/builtins-x87.cc", "src/compiler/x87/code-generator-x87.cc", "src/compiler/x87/instruction-codes-x87.h", "src/compiler/x87/instruction-scheduler-x87.cc", @@ -2231,28 +2405,27 @@ v8_source_set("v8_base") { defines = [] deps = [ + ":v8_headers", ":v8_libbase", ":v8_libsampler", - ":v8_version", + "src/inspector:inspector", ] - sources += [ v8_generated_peephole_source ] - deps += [ ":run_mkpeephole" ] - - if (is_win) { - # TODO(jschuh): crbug.com/167187 fix size_t to int truncations. - cflags = [ "/wd4267" ] - } - if (v8_enable_i18n_support) { - deps += [ "//third_party/icu" ] + public_deps = [ + "//third_party/icu", + ] if (is_win) { deps += [ "//third_party/icu:icudata" ] } } else { sources -= [ - "src/i18n.cc", - "src/i18n.h", + "src/builtins/builtins-intl.cc", + "src/intl.cc", + "src/intl.h", + "src/objects/intl-objects.cc", + "src/objects/intl-objects.h", + "src/runtime/runtime-intl.cc", ] } @@ -2260,10 +2433,6 @@ v8_source_set("v8_base") { sources += [ "$target_gen_dir/debug-support.cc" ] deps += [ ":postmortem-metadata" ] } - - if (v8_enable_inspector) { - deps += [ "src/inspector:inspector" ] - } } v8_component("v8_libbase") { @@ -2285,6 +2454,7 @@ v8_component("v8_libbase") { "src/base/debug/stack_trace.h", "src/base/division-by-constant.cc", "src/base/division-by-constant.h", + "src/base/export-template.h", "src/base/file-utils.cc", "src/base/file-utils.h", "src/base/flags.h", @@ -2320,6 +2490,7 @@ v8_component("v8_libbase") { "src/base/safe_math_impl.h", "src/base/sys-info.cc", "src/base/sys-info.h", + "src/base/timezone-cache.h", "src/base/utils/random-number-generator.cc", "src/base/utils/random-number-generator.h", ] @@ -2335,7 +2506,10 @@ v8_component("v8_libbase") { } if (is_posix) { - sources += [ "src/base/platform/platform-posix.cc" ] + sources += [ + "src/base/platform/platform-posix.cc", + "src/base/platform/platform-posix.h", + ] } if (is_linux) { @@ -2344,6 +2518,16 @@ v8_component("v8_libbase") { "src/base/platform/platform-linux.cc", ] + libs = [ + "dl", + "rt", + ] + } else if (current_os == "aix") { + sources += [ + "src/base/debug/stack_trace_posix.cc", + "src/base/platform/platform-aix.cc", + ] + libs = [ "dl", "rt", @@ -2464,10 +2648,6 @@ v8_source_set("fuzzer_support") { ":v8_libbase", ":v8_libplatform", ] - - if (v8_enable_i18n_support) { - deps += [ "//third_party/icu" ] - } } ############################################################################### @@ -2486,43 +2666,16 @@ if (current_toolchain == v8_snapshot_toolchain) { deps = [ ":v8_base", + ":v8_builtins_setup", ":v8_libbase", ":v8_libplatform", ":v8_nosnapshot", - "//build/config/sanitizers:deps", + "//build/config:exe_and_shlib_deps", "//build/win:default_exe_manifest", ] } } -v8_executable("mkpeephole") { - # mkpeephole needs to be built for the build host so the peephole lookup - # table can built during build. The table depends on the properties of - # bytecodes that are described in bytecodes.{cc,h}. - visibility = [ ":*" ] # Only targets in this file can depend on this. - - sources = [ - "src/interpreter/bytecode-operands.cc", - "src/interpreter/bytecode-operands.h", - "src/interpreter/bytecode-peephole-optimizer.h", - "src/interpreter/bytecode-traits.h", - "src/interpreter/bytecodes.cc", - "src/interpreter/bytecodes.h", - "src/interpreter/mkpeephole.cc", - ] - - configs = [ - ":external_config", - ":internal_config", - ] - - deps = [ - ":v8_libbase", - "//build/config/sanitizers:deps", - "//build/win:default_exe_manifest", - ] -} - ############################################################################### # Public targets # @@ -2570,6 +2723,12 @@ group("v8_clusterfuzz") { } } +group("v8_archive") { + deps = [ + ":d8", + ] +} + group("v8_fuzzers") { testonly = true deps = [ @@ -2579,6 +2738,7 @@ group("v8_fuzzers") { ":v8_simple_wasm_asmjs_fuzzer", ":v8_simple_wasm_call_fuzzer", ":v8_simple_wasm_code_fuzzer", + ":v8_simple_wasm_compile_fuzzer", ":v8_simple_wasm_data_section_fuzzer", ":v8_simple_wasm_function_sigs_section_fuzzer", ":v8_simple_wasm_fuzzer", @@ -2609,6 +2769,31 @@ if (is_component_build) { public_configs = [ ":external_config" ] } + + v8_component("v8_for_testing") { + testonly = true + + sources = [ + "src/v8dll-main.cc", + ] + + deps = [ + ":v8_dump_build_config", + ] + + public_deps = [ + ":v8_base", + ":v8_maybe_snapshot", + ] + + if (v8_use_snapshot) { + public_deps += [ ":v8_builtins_generators" ] + } + + configs = [ ":internal_config" ] + + public_configs = [ ":external_config" ] + } } else { group("v8") { deps = [ @@ -2622,11 +2807,32 @@ if (is_component_build) { public_configs = [ ":external_config" ] } + + group("v8_for_testing") { + testonly = true + + deps = [ + ":v8_dump_build_config", + ] + + public_deps = [ + ":v8_base", + ":v8_maybe_snapshot", + ] + + if (v8_use_snapshot) { + public_deps += [ ":v8_builtins_generators" ] + } + + public_configs = [ ":external_config" ] + } } v8_executable("d8") { sources = [ "$target_gen_dir/d8-js.cc", + "src/d8-console.cc", + "src/d8-console.h", "src/d8.cc", "src/d8.h", ] @@ -2643,7 +2849,7 @@ v8_executable("d8") { ":v8", ":v8_libbase", ":v8_libplatform", - "//build/config/sanitizers:deps", + "//build/config:exe_and_shlib_deps", "//build/win:default_exe_manifest", ] @@ -2653,18 +2859,11 @@ v8_executable("d8") { sources += [ "src/d8-windows.cc" ] } - if (v8_enable_i18n_support) { - deps += [ "//third_party/icu" ] - } - if (v8_correctness_fuzzer) { deps += [ "tools/foozzie:v8_correctness_fuzzer_resources" ] } defines = [] - if (v8_enable_inspector) { - defines += [ "V8_INSPECTOR_ENABLED" ] - } if (v8_enable_vtunejit) { deps += [ "//src/third_party/vtune:v8_vtune" ] @@ -2695,13 +2894,9 @@ v8_executable("v8_hello_world") { ":v8", ":v8_libbase", ":v8_libplatform", - "//build/config/sanitizers:deps", + "//build/config:exe_and_shlib_deps", "//build/win:default_exe_manifest", ] - - if (v8_enable_i18n_support) { - deps += [ "//third_party/icu" ] - } } v8_executable("v8_sample_process") { @@ -2720,13 +2915,9 @@ v8_executable("v8_sample_process") { ":v8", ":v8_libbase", ":v8_libplatform", - "//build/config/sanitizers:deps", + "//build/config:exe_and_shlib_deps", "//build/win:default_exe_manifest", ] - - if (v8_enable_i18n_support) { - deps += [ "//third_party/icu" ] - } } v8_executable("v8_parser_shell") { @@ -2744,13 +2935,9 @@ v8_executable("v8_parser_shell") { ":v8", ":v8_libbase", ":v8_libplatform", - "//build/config/sanitizers:deps", + "//build/config:exe_and_shlib_deps", "//build/win:default_exe_manifest", ] - - if (v8_enable_i18n_support) { - deps += [ "//third_party/icu" ] - } } if (want_v8_shell) { @@ -2770,13 +2957,9 @@ if (want_v8_shell) { ":v8", ":v8_libbase", ":v8_libplatform", - "//build/config/sanitizers:deps", + "//build/config:exe_and_shlib_deps", "//build/win:default_exe_manifest", ] - - if (v8_enable_i18n_support) { - deps += [ "//third_party/icu" ] - } } } @@ -2786,7 +2969,7 @@ template("v8_fuzzer") { v8_executable("v8_simple_" + name) { deps = [ ":" + name, - "//build/config/sanitizers:deps", + "//build/config:exe_and_shlib_deps", "//build/win:default_exe_manifest", ] @@ -2864,17 +3047,6 @@ v8_source_set("wasm_module_runner") { ] } -v8_source_set("wasm_test_signatures") { - sources = [ - "test/common/wasm/test-signatures.h", - ] - - configs = [ - ":external_config", - ":internal_config_base", - ] -} - v8_source_set("wasm_fuzzer") { sources = [ "test/fuzzer/wasm.cc", @@ -2882,6 +3054,7 @@ v8_source_set("wasm_fuzzer") { deps = [ ":fuzzer_support", + ":lib_wasm_fuzzer_common", ":wasm_module_runner", ] @@ -2901,6 +3074,7 @@ v8_source_set("wasm_asmjs_fuzzer") { deps = [ ":fuzzer_support", + ":lib_wasm_fuzzer_common", ":wasm_module_runner", ] @@ -2915,13 +3089,14 @@ v8_fuzzer("wasm_asmjs_fuzzer") { v8_source_set("wasm_code_fuzzer") { sources = [ + "test/common/wasm/test-signatures.h", "test/fuzzer/wasm-code.cc", ] deps = [ ":fuzzer_support", + ":lib_wasm_fuzzer_common", ":wasm_module_runner", - ":wasm_test_signatures", ] configs = [ @@ -2935,13 +3110,14 @@ v8_fuzzer("wasm_code_fuzzer") { v8_source_set("wasm_call_fuzzer") { sources = [ + "test/common/wasm/test-signatures.h", "test/fuzzer/wasm-call.cc", ] deps = [ ":fuzzer_support", + ":lib_wasm_fuzzer_common", ":wasm_module_runner", - ":wasm_test_signatures", ] configs = [ @@ -2953,10 +3129,10 @@ v8_source_set("wasm_call_fuzzer") { v8_fuzzer("wasm_call_fuzzer") { } -v8_source_set("lib_wasm_section_fuzzer") { +v8_source_set("lib_wasm_fuzzer_common") { sources = [ - "test/fuzzer/wasm-section-fuzzers.cc", - "test/fuzzer/wasm-section-fuzzers.h", + "test/fuzzer/wasm-fuzzer-common.cc", + "test/fuzzer/wasm-fuzzer-common.h", ] configs = [ @@ -2972,7 +3148,7 @@ v8_source_set("wasm_types_section_fuzzer") { deps = [ ":fuzzer_support", - ":lib_wasm_section_fuzzer", + ":lib_wasm_fuzzer_common", ":wasm_module_runner", ] @@ -2992,7 +3168,7 @@ v8_source_set("wasm_names_section_fuzzer") { deps = [ ":fuzzer_support", - ":lib_wasm_section_fuzzer", + ":lib_wasm_fuzzer_common", ":wasm_module_runner", ] @@ -3012,7 +3188,7 @@ v8_source_set("wasm_globals_section_fuzzer") { deps = [ ":fuzzer_support", - ":lib_wasm_section_fuzzer", + ":lib_wasm_fuzzer_common", ":wasm_module_runner", ] @@ -3032,7 +3208,7 @@ v8_source_set("wasm_imports_section_fuzzer") { deps = [ ":fuzzer_support", - ":lib_wasm_section_fuzzer", + ":lib_wasm_fuzzer_common", ":wasm_module_runner", ] @@ -3052,7 +3228,7 @@ v8_source_set("wasm_function_sigs_section_fuzzer") { deps = [ ":fuzzer_support", - ":lib_wasm_section_fuzzer", + ":lib_wasm_fuzzer_common", ":wasm_module_runner", ] @@ -3072,7 +3248,7 @@ v8_source_set("wasm_memory_section_fuzzer") { deps = [ ":fuzzer_support", - ":lib_wasm_section_fuzzer", + ":lib_wasm_fuzzer_common", ":wasm_module_runner", ] @@ -3092,7 +3268,7 @@ v8_source_set("wasm_data_section_fuzzer") { deps = [ ":fuzzer_support", - ":lib_wasm_section_fuzzer", + ":lib_wasm_fuzzer_common", ":wasm_module_runner", ] @@ -3107,13 +3283,14 @@ v8_fuzzer("wasm_data_section_fuzzer") { v8_source_set("wasm_compile_fuzzer") { sources = [ + "test/common/wasm/test-signatures.h", "test/fuzzer/wasm-compile.cc", ] deps = [ ":fuzzer_support", + ":lib_wasm_fuzzer_common", ":wasm_module_runner", - ":wasm_test_signatures", ] configs = [ diff --git a/deps/v8/ChangeLog b/deps/v8/ChangeLog index f3cd421bca11ac..7ee1b37e798c5c 100644 --- a/deps/v8/ChangeLog +++ b/deps/v8/ChangeLog @@ -1,3 +1,2638 @@ +2017-05-20: Version 6.0.286 + + Performance and stability improvements on all platforms. + + +2017-05-19: Version 6.0.285 + + Performance and stability improvements on all platforms. + + +2017-05-19: Version 6.0.284 + + Performance and stability improvements on all platforms. + + +2017-05-19: Version 6.0.283 + + Performance and stability improvements on all platforms. + + +2017-05-19: Version 6.0.282 + + Performance and stability improvements on all platforms. + + +2017-05-19: Version 6.0.281 + + Performance and stability improvements on all platforms. + + +2017-05-19: Version 6.0.280 + + Performance and stability improvements on all platforms. + + +2017-05-19: Version 6.0.279 + + Performance and stability improvements on all platforms. + + +2017-05-19: Version 6.0.278 + + Performance and stability improvements on all platforms. + + +2017-05-19: Version 6.0.277 + + Performance and stability improvements on all platforms. + + +2017-05-19: Version 6.0.276 + + Performance and stability improvements on all platforms. + + +2017-05-19: Version 6.0.275 + + Performance and stability improvements on all platforms. + + +2017-05-19: Version 6.0.274 + + Performance and stability improvements on all platforms. + + +2017-05-19: Version 6.0.273 + + Performance and stability improvements on all platforms. + + +2017-05-19: Version 6.0.272 + + Performance and stability improvements on all platforms. + + +2017-05-19: Version 6.0.271 + + Performance and stability improvements on all platforms. + + +2017-05-18: Version 6.0.270 + + Performance and stability improvements on all platforms. + + +2017-05-18: Version 6.0.269 + + Performance and stability improvements on all platforms. + + +2017-05-18: Version 6.0.268 + + Performance and stability improvements on all platforms. + + +2017-05-18: Version 6.0.267 + + Performance and stability improvements on all platforms. + + +2017-05-18: Version 6.0.266 + + Performance and stability improvements on all platforms. + + +2017-05-18: Version 6.0.265 + + Performance and stability improvements on all platforms. + + +2017-05-18: Version 6.0.264 + + Performance and stability improvements on all platforms. + + +2017-05-18: Version 6.0.263 + + Performance and stability improvements on all platforms. + + +2017-05-18: Version 6.0.262 + + Performance and stability improvements on all platforms. + + +2017-05-18: Version 6.0.261 + + Performance and stability improvements on all platforms. + + +2017-05-18: Version 6.0.260 + + Performance and stability improvements on all platforms. + + +2017-05-18: Version 6.0.259 + + Performance and stability improvements on all platforms. + + +2017-05-18: Version 6.0.258 + + Performance and stability improvements on all platforms. + + +2017-05-18: Version 6.0.257 + + Performance and stability improvements on all platforms. + + +2017-05-18: Version 6.0.256 + + Performance and stability improvements on all platforms. + + +2017-05-18: Version 6.0.255 + + Performance and stability improvements on all platforms. + + +2017-05-18: Version 6.0.254 + + Performance and stability improvements on all platforms. + + +2017-05-17: Version 6.0.253 + + Performance and stability improvements on all platforms. + + +2017-05-17: Version 6.0.252 + + Performance and stability improvements on all platforms. + + +2017-05-17: Version 6.0.251 + + Performance and stability improvements on all platforms. + + +2017-05-17: Version 6.0.250 + + Performance and stability improvements on all platforms. + + +2017-05-17: Version 6.0.249 + + Performance and stability improvements on all platforms. + + +2017-05-17: Version 6.0.248 + + Performance and stability improvements on all platforms. + + +2017-05-17: Version 6.0.247 + + Performance and stability improvements on all platforms. + + +2017-05-17: Version 6.0.246 + + Performance and stability improvements on all platforms. + + +2017-05-17: Version 6.0.245 + + Performance and stability improvements on all platforms. + + +2017-05-17: Version 6.0.244 + + Performance and stability improvements on all platforms. + + +2017-05-17: Version 6.0.243 + + Performance and stability improvements on all platforms. + + +2017-05-17: Version 6.0.242 + + Performance and stability improvements on all platforms. + + +2017-05-17: Version 6.0.241 + + Performance and stability improvements on all platforms. + + +2017-05-17: Version 6.0.240 + + Performance and stability improvements on all platforms. + + +2017-05-16: Version 6.0.239 + + Performance and stability improvements on all platforms. + + +2017-05-16: Version 6.0.238 + + Performance and stability improvements on all platforms. + + +2017-05-16: Version 6.0.237 + + Performance and stability improvements on all platforms. + + +2017-05-16: Version 6.0.236 + + Performance and stability improvements on all platforms. + + +2017-05-16: Version 6.0.235 + + Performance and stability improvements on all platforms. + + +2017-05-16: Version 6.0.234 + + Performance and stability improvements on all platforms. + + +2017-05-16: Version 6.0.233 + + Performance and stability improvements on all platforms. + + +2017-05-16: Version 6.0.232 + + Performance and stability improvements on all platforms. + + +2017-05-16: Version 6.0.231 + + Performance and stability improvements on all platforms. + + +2017-05-16: Version 6.0.230 + + Performance and stability improvements on all platforms. + + +2017-05-16: Version 6.0.229 + + Performance and stability improvements on all platforms. + + +2017-05-16: Version 6.0.228 + + Performance and stability improvements on all platforms. + + +2017-05-16: Version 6.0.227 + + Performance and stability improvements on all platforms. + + +2017-05-15: Version 6.0.226 + + Performance and stability improvements on all platforms. + + +2017-05-15: Version 6.0.225 + + Performance and stability improvements on all platforms. + + +2017-05-15: Version 6.0.224 + + Performance and stability improvements on all platforms. + + +2017-05-15: Version 6.0.223 + + Performance and stability improvements on all platforms. + + +2017-05-15: Version 6.0.222 + + Performance and stability improvements on all platforms. + + +2017-05-15: Version 6.0.221 + + Performance and stability improvements on all platforms. + + +2017-05-15: Version 6.0.220 + + Performance and stability improvements on all platforms. + + +2017-05-15: Version 6.0.219 + + Performance and stability improvements on all platforms. + + +2017-05-15: Version 6.0.218 + + Performance and stability improvements on all platforms. + + +2017-05-15: Version 6.0.217 + + Performance and stability improvements on all platforms. + + +2017-05-15: Version 6.0.216 + + Performance and stability improvements on all platforms. + + +2017-05-15: Version 6.0.215 + + Performance and stability improvements on all platforms. + + +2017-05-15: Version 6.0.214 + + Performance and stability improvements on all platforms. + + +2017-05-15: Version 6.0.213 + + Performance and stability improvements on all platforms. + + +2017-05-15: Version 6.0.212 + + Performance and stability improvements on all platforms. + + +2017-05-15: Version 6.0.211 + + Performance and stability improvements on all platforms. + + +2017-05-15: Version 6.0.210 + + Performance and stability improvements on all platforms. + + +2017-05-15: Version 6.0.209 + + Performance and stability improvements on all platforms. + + +2017-05-15: Version 6.0.208 + + Performance and stability improvements on all platforms. + + +2017-05-15: Version 6.0.207 + + Performance and stability improvements on all platforms. + + +2017-05-14: Version 6.0.206 + + Performance and stability improvements on all platforms. + + +2017-05-13: Version 6.0.205 + + Performance and stability improvements on all platforms. + + +2017-05-12: Version 6.0.204 + + Performance and stability improvements on all platforms. + + +2017-05-12: Version 6.0.203 + + Performance and stability improvements on all platforms. + + +2017-05-12: Version 6.0.202 + + Performance and stability improvements on all platforms. + + +2017-05-12: Version 6.0.201 + + Performance and stability improvements on all platforms. + + +2017-05-12: Version 6.0.200 + + Performance and stability improvements on all platforms. + + +2017-05-12: Version 6.0.199 + + Performance and stability improvements on all platforms. + + +2017-05-12: Version 6.0.198 + + Performance and stability improvements on all platforms. + + +2017-05-11: Version 6.0.197 + + Performance and stability improvements on all platforms. + + +2017-05-11: Version 6.0.196 + + Performance and stability improvements on all platforms. + + +2017-05-11: Version 6.0.195 + + Performance and stability improvements on all platforms. + + +2017-05-11: Version 6.0.194 + + Performance and stability improvements on all platforms. + + +2017-05-11: Version 6.0.193 + + Performance and stability improvements on all platforms. + + +2017-05-10: Version 6.0.192 + + Performance and stability improvements on all platforms. + + +2017-05-10: Version 6.0.191 + + Performance and stability improvements on all platforms. + + +2017-05-10: Version 6.0.190 + + Performance and stability improvements on all platforms. + + +2017-05-10: Version 6.0.189 + + Performance and stability improvements on all platforms. + + +2017-05-10: Version 6.0.188 + + Performance and stability improvements on all platforms. + + +2017-05-09: Version 6.0.187 + + Performance and stability improvements on all platforms. + + +2017-05-08: Version 6.0.186 + + Performance and stability improvements on all platforms. + + +2017-05-08: Version 6.0.185 + + Performance and stability improvements on all platforms. + + +2017-05-08: Version 6.0.184 + + Performance and stability improvements on all platforms. + + +2017-05-08: Version 6.0.183 + + Performance and stability improvements on all platforms. + + +2017-05-08: Version 6.0.182 + + Performance and stability improvements on all platforms. + + +2017-05-08: Version 6.0.181 + + Performance and stability improvements on all platforms. + + +2017-05-08: Version 6.0.180 + + Performance and stability improvements on all platforms. + + +2017-05-08: Version 6.0.179 + + Performance and stability improvements on all platforms. + + +2017-05-08: Version 6.0.178 + + Performance and stability improvements on all platforms. + + +2017-05-06: Version 6.0.177 + + Performance and stability improvements on all platforms. + + +2017-05-06: Version 6.0.176 + + Performance and stability improvements on all platforms. + + +2017-05-06: Version 6.0.175 + + Performance and stability improvements on all platforms. + + +2017-05-05: Version 6.0.174 + + Performance and stability improvements on all platforms. + + +2017-05-05: Version 6.0.173 + + Performance and stability improvements on all platforms. + + +2017-05-05: Version 6.0.172 + + Performance and stability improvements on all platforms. + + +2017-05-05: Version 6.0.171 + + Performance and stability improvements on all platforms. + + +2017-05-05: Version 6.0.170 + + Performance and stability improvements on all platforms. + + +2017-05-05: Version 6.0.169 + + Performance and stability improvements on all platforms. + + +2017-05-05: Version 6.0.168 + + Performance and stability improvements on all platforms. + + +2017-05-05: Version 6.0.167 + + Performance and stability improvements on all platforms. + + +2017-05-05: Version 6.0.166 + + Performance and stability improvements on all platforms. + + +2017-05-05: Version 6.0.165 + + Performance and stability improvements on all platforms. + + +2017-05-05: Version 6.0.164 + + Performance and stability improvements on all platforms. + + +2017-05-05: Version 6.0.163 + + Performance and stability improvements on all platforms. + + +2017-05-05: Version 6.0.162 + + Performance and stability improvements on all platforms. + + +2017-05-05: Version 6.0.161 + + Performance and stability improvements on all platforms. + + +2017-05-05: Version 6.0.160 + + Performance and stability improvements on all platforms. + + +2017-05-05: Version 6.0.159 + + Performance and stability improvements on all platforms. + + +2017-05-05: Version 6.0.158 + + Performance and stability improvements on all platforms. + + +2017-05-05: Version 6.0.157 + + Performance and stability improvements on all platforms. + + +2017-05-04: Version 6.0.156 + + Performance and stability improvements on all platforms. + + +2017-05-04: Version 6.0.155 + + Performance and stability improvements on all platforms. + + +2017-05-04: Version 6.0.154 + + Performance and stability improvements on all platforms. + + +2017-05-04: Version 6.0.153 + + Performance and stability improvements on all platforms. + + +2017-05-04: Version 6.0.152 + + Performance and stability improvements on all platforms. + + +2017-05-04: Version 6.0.151 + + Performance and stability improvements on all platforms. + + +2017-05-03: Version 6.0.150 + + Performance and stability improvements on all platforms. + + +2017-05-03: Version 6.0.149 + + Performance and stability improvements on all platforms. + + +2017-05-03: Version 6.0.148 + + Performance and stability improvements on all platforms. + + +2017-05-03: Version 6.0.147 + + Performance and stability improvements on all platforms. + + +2017-05-03: Version 6.0.146 + + Performance and stability improvements on all platforms. + + +2017-05-03: Version 6.0.145 + + Performance and stability improvements on all platforms. + + +2017-05-03: Version 6.0.144 + + Performance and stability improvements on all platforms. + + +2017-05-03: Version 6.0.143 + + Performance and stability improvements on all platforms. + + +2017-05-03: Version 6.0.142 + + Performance and stability improvements on all platforms. + + +2017-05-02: Version 6.0.141 + + Performance and stability improvements on all platforms. + + +2017-05-02: Version 6.0.140 + + Performance and stability improvements on all platforms. + + +2017-05-02: Version 6.0.139 + + Performance and stability improvements on all platforms. + + +2017-05-02: Version 6.0.138 + + Performance and stability improvements on all platforms. + + +2017-05-02: Version 6.0.137 + + Performance and stability improvements on all platforms. + + +2017-05-02: Version 6.0.136 + + Performance and stability improvements on all platforms. + + +2017-05-02: Version 6.0.135 + + Performance and stability improvements on all platforms. + + +2017-05-02: Version 6.0.134 + + Performance and stability improvements on all platforms. + + +2017-05-02: Version 6.0.133 + + Performance and stability improvements on all platforms. + + +2017-05-02: Version 6.0.132 + + Performance and stability improvements on all platforms. + + +2017-05-02: Version 6.0.131 + + Performance and stability improvements on all platforms. + + +2017-05-02: Version 6.0.130 + + Performance and stability improvements on all platforms. + + +2017-05-01: Version 6.0.129 + + Performance and stability improvements on all platforms. + + +2017-05-01: Version 6.0.128 + + Performance and stability improvements on all platforms. + + +2017-05-01: Version 6.0.127 + + Performance and stability improvements on all platforms. + + +2017-05-01: Version 6.0.126 + + Performance and stability improvements on all platforms. + + +2017-04-30: Version 6.0.125 + + Performance and stability improvements on all platforms. + + +2017-04-30: Version 6.0.124 + + Performance and stability improvements on all platforms. + + +2017-04-29: Version 6.0.123 + + Performance and stability improvements on all platforms. + + +2017-04-29: Version 6.0.122 + + Performance and stability improvements on all platforms. + + +2017-04-29: Version 6.0.121 + + Performance and stability improvements on all platforms. + + +2017-04-29: Version 6.0.120 + + Performance and stability improvements on all platforms. + + +2017-04-29: Version 6.0.119 + + Performance and stability improvements on all platforms. + + +2017-04-28: Version 6.0.118 + + Performance and stability improvements on all platforms. + + +2017-04-28: Version 6.0.117 + + Performance and stability improvements on all platforms. + + +2017-04-28: Version 6.0.116 + + Performance and stability improvements on all platforms. + + +2017-04-28: Version 6.0.115 + + Performance and stability improvements on all platforms. + + +2017-04-28: Version 6.0.114 + + Performance and stability improvements on all platforms. + + +2017-04-28: Version 6.0.113 + + Performance and stability improvements on all platforms. + + +2017-04-28: Version 6.0.112 + + Performance and stability improvements on all platforms. + + +2017-04-28: Version 6.0.111 + + Performance and stability improvements on all platforms. + + +2017-04-28: Version 6.0.110 + + Performance and stability improvements on all platforms. + + +2017-04-28: Version 6.0.109 + + Performance and stability improvements on all platforms. + + +2017-04-28: Version 6.0.108 + + Performance and stability improvements on all platforms. + + +2017-04-27: Version 6.0.107 + + Performance and stability improvements on all platforms. + + +2017-04-27: Version 6.0.106 + + Performance and stability improvements on all platforms. + + +2017-04-27: Version 6.0.105 + + Performance and stability improvements on all platforms. + + +2017-04-27: Version 6.0.104 + + Performance and stability improvements on all platforms. + + +2017-04-27: Version 6.0.103 + + Performance and stability improvements on all platforms. + + +2017-04-27: Version 6.0.102 + + Performance and stability improvements on all platforms. + + +2017-04-27: Version 6.0.101 + + Performance and stability improvements on all platforms. + + +2017-04-27: Version 6.0.100 + + Performance and stability improvements on all platforms. + + +2017-04-27: Version 6.0.99 + + Performance and stability improvements on all platforms. + + +2017-04-27: Version 6.0.98 + + Performance and stability improvements on all platforms. + + +2017-04-27: Version 6.0.97 + + Performance and stability improvements on all platforms. + + +2017-04-27: Version 6.0.96 + + Performance and stability improvements on all platforms. + + +2017-04-27: Version 6.0.95 + + Performance and stability improvements on all platforms. + + +2017-04-27: Version 6.0.94 + + Performance and stability improvements on all platforms. + + +2017-04-27: Version 6.0.93 + + Performance and stability improvements on all platforms. + + +2017-04-27: Version 6.0.92 + + Performance and stability improvements on all platforms. + + +2017-04-27: Version 6.0.91 + + Performance and stability improvements on all platforms. + + +2017-04-26: Version 6.0.90 + + Performance and stability improvements on all platforms. + + +2017-04-26: Version 6.0.89 + + Performance and stability improvements on all platforms. + + +2017-04-26: Version 6.0.88 + + Performance and stability improvements on all platforms. + + +2017-04-26: Version 6.0.87 + + Performance and stability improvements on all platforms. + + +2017-04-26: Version 6.0.86 + + Performance and stability improvements on all platforms. + + +2017-04-25: Version 6.0.85 + + Performance and stability improvements on all platforms. + + +2017-04-25: Version 6.0.84 + + Performance and stability improvements on all platforms. + + +2017-04-25: Version 6.0.83 + + Performance and stability improvements on all platforms. + + +2017-04-25: Version 6.0.82 + + Performance and stability improvements on all platforms. + + +2017-04-25: Version 6.0.81 + + Performance and stability improvements on all platforms. + + +2017-04-25: Version 6.0.80 + + Performance and stability improvements on all platforms. + + +2017-04-24: Version 6.0.79 + + Performance and stability improvements on all platforms. + + +2017-04-24: Version 6.0.78 + + Performance and stability improvements on all platforms. + + +2017-04-24: Version 6.0.77 + + Performance and stability improvements on all platforms. + + +2017-04-24: Version 6.0.76 + + Performance and stability improvements on all platforms. + + +2017-04-24: Version 6.0.75 + + Performance and stability improvements on all platforms. + + +2017-04-24: Version 6.0.74 + + Performance and stability improvements on all platforms. + + +2017-04-24: Version 6.0.73 + + Performance and stability improvements on all platforms. + + +2017-04-24: Version 6.0.72 + + Performance and stability improvements on all platforms. + + +2017-04-24: Version 6.0.71 + + Performance and stability improvements on all platforms. + + +2017-04-24: Version 6.0.70 + + Performance and stability improvements on all platforms. + + +2017-04-24: Version 6.0.69 + + Performance and stability improvements on all platforms. + + +2017-04-24: Version 6.0.68 + + Performance and stability improvements on all platforms. + + +2017-04-24: Version 6.0.67 + + Performance and stability improvements on all platforms. + + +2017-04-24: Version 6.0.66 + + Performance and stability improvements on all platforms. + + +2017-04-24: Version 6.0.65 + + Performance and stability improvements on all platforms. + + +2017-04-24: Version 6.0.64 + + Performance and stability improvements on all platforms. + + +2017-04-24: Version 6.0.63 + + Performance and stability improvements on all platforms. + + +2017-04-24: Version 6.0.62 + + Performance and stability improvements on all platforms. + + +2017-04-22: Version 6.0.61 + + Performance and stability improvements on all platforms. + + +2017-04-21: Version 6.0.60 + + Performance and stability improvements on all platforms. + + +2017-04-21: Version 6.0.59 + + Performance and stability improvements on all platforms. + + +2017-04-21: Version 6.0.58 + + Performance and stability improvements on all platforms. + + +2017-04-21: Version 6.0.57 + + Performance and stability improvements on all platforms. + + +2017-04-21: Version 6.0.56 + + Performance and stability improvements on all platforms. + + +2017-04-21: Version 6.0.55 + + Performance and stability improvements on all platforms. + + +2017-04-21: Version 6.0.54 + + Performance and stability improvements on all platforms. + + +2017-04-21: Version 6.0.53 + + Performance and stability improvements on all platforms. + + +2017-04-21: Version 6.0.52 + + Performance and stability improvements on all platforms. + + +2017-04-20: Version 6.0.51 + + Performance and stability improvements on all platforms. + + +2017-04-20: Version 6.0.50 + + Performance and stability improvements on all platforms. + + +2017-04-20: Version 6.0.49 + + Performance and stability improvements on all platforms. + + +2017-04-20: Version 6.0.48 + + Performance and stability improvements on all platforms. + + +2017-04-20: Version 6.0.47 + + Performance and stability improvements on all platforms. + + +2017-04-20: Version 6.0.46 + + Performance and stability improvements on all platforms. + + +2017-04-20: Version 6.0.45 + + Performance and stability improvements on all platforms. + + +2017-04-20: Version 6.0.44 + + Performance and stability improvements on all platforms. + + +2017-04-20: Version 6.0.43 + + Performance and stability improvements on all platforms. + + +2017-04-20: Version 6.0.42 + + Performance and stability improvements on all platforms. + + +2017-04-19: Version 6.0.41 + + Performance and stability improvements on all platforms. + + +2017-04-19: Version 6.0.40 + + Performance and stability improvements on all platforms. + + +2017-04-19: Version 6.0.39 + + Performance and stability improvements on all platforms. + + +2017-04-19: Version 6.0.38 + + Performance and stability improvements on all platforms. + + +2017-04-19: Version 6.0.37 + + Performance and stability improvements on all platforms. + + +2017-04-19: Version 6.0.36 + + Performance and stability improvements on all platforms. + + +2017-04-19: Version 6.0.35 + + Performance and stability improvements on all platforms. + + +2017-04-19: Version 6.0.34 + + Performance and stability improvements on all platforms. + + +2017-04-19: Version 6.0.33 + + Performance and stability improvements on all platforms. + + +2017-04-19: Version 6.0.32 + + Performance and stability improvements on all platforms. + + +2017-04-19: Version 6.0.31 + + Performance and stability improvements on all platforms. + + +2017-04-19: Version 6.0.30 + + Performance and stability improvements on all platforms. + + +2017-04-19: Version 6.0.29 + + Performance and stability improvements on all platforms. + + +2017-04-19: Version 6.0.28 + + Performance and stability improvements on all platforms. + + +2017-04-19: Version 6.0.27 + + Performance and stability improvements on all platforms. + + +2017-04-19: Version 6.0.26 + + Performance and stability improvements on all platforms. + + +2017-04-19: Version 6.0.25 + + Performance and stability improvements on all platforms. + + +2017-04-19: Version 6.0.24 + + Performance and stability improvements on all platforms. + + +2017-04-18: Version 6.0.23 + + Performance and stability improvements on all platforms. + + +2017-04-18: Version 6.0.22 + + Performance and stability improvements on all platforms. + + +2017-04-18: Version 6.0.21 + + Performance and stability improvements on all platforms. + + +2017-04-18: Version 6.0.20 + + Performance and stability improvements on all platforms. + + +2017-04-18: Version 6.0.19 + + Performance and stability improvements on all platforms. + + +2017-04-18: Version 6.0.18 + + Performance and stability improvements on all platforms. + + +2017-04-18: Version 6.0.17 + + Performance and stability improvements on all platforms. + + +2017-04-18: Version 6.0.16 + + Performance and stability improvements on all platforms. + + +2017-04-18: Version 6.0.15 + + Performance and stability improvements on all platforms. + + +2017-04-18: Version 6.0.14 + + Performance and stability improvements on all platforms. + + +2017-04-18: Version 6.0.13 + + Performance and stability improvements on all platforms. + + +2017-04-18: Version 6.0.12 + + Performance and stability improvements on all platforms. + + +2017-04-18: Version 6.0.11 + + Performance and stability improvements on all platforms. + + +2017-04-17: Version 6.0.10 + + Performance and stability improvements on all platforms. + + +2017-04-17: Version 6.0.9 + + Performance and stability improvements on all platforms. + + +2017-04-17: Version 6.0.8 + + Performance and stability improvements on all platforms. + + +2017-04-17: Version 6.0.7 + + Performance and stability improvements on all platforms. + + +2017-04-17: Version 6.0.6 + + Performance and stability improvements on all platforms. + + +2017-04-17: Version 6.0.5 + + Performance and stability improvements on all platforms. + + +2017-04-16: Version 6.0.4 + + Performance and stability improvements on all platforms. + + +2017-04-15: Version 6.0.3 + + Performance and stability improvements on all platforms. + + +2017-04-15: Version 6.0.2 + + Performance and stability improvements on all platforms. + + +2017-04-14: Version 6.0.1 + + Performance and stability improvements on all platforms. + + +2017-04-13: Version 5.9.223 + + Performance and stability improvements on all platforms. + + +2017-04-13: Version 5.9.222 + + Performance and stability improvements on all platforms. + + +2017-04-13: Version 5.9.221 + + Performance and stability improvements on all platforms. + + +2017-04-12: Version 5.9.220 + + Performance and stability improvements on all platforms. + + +2017-04-12: Version 5.9.219 + + Performance and stability improvements on all platforms. + + +2017-04-12: Version 5.9.218 + + Performance and stability improvements on all platforms. + + +2017-04-12: Version 5.9.217 + + Performance and stability improvements on all platforms. + + +2017-04-12: Version 5.9.216 + + Performance and stability improvements on all platforms. + + +2017-04-12: Version 5.9.215 + + Performance and stability improvements on all platforms. + + +2017-04-12: Version 5.9.214 + + Performance and stability improvements on all platforms. + + +2017-04-12: Version 5.9.213 + + Performance and stability improvements on all platforms. + + +2017-04-11: Version 5.9.212 + + Performance and stability improvements on all platforms. + + +2017-04-11: Version 5.9.211 + + Performance and stability improvements on all platforms. + + +2017-04-11: Version 5.9.210 + + Performance and stability improvements on all platforms. + + +2017-04-11: Version 5.9.209 + + Performance and stability improvements on all platforms. + + +2017-04-11: Version 5.9.208 + + Performance and stability improvements on all platforms. + + +2017-04-11: Version 5.9.207 + + Performance and stability improvements on all platforms. + + +2017-04-11: Version 5.9.206 + + Performance and stability improvements on all platforms. + + +2017-04-11: Version 5.9.205 + + Performance and stability improvements on all platforms. + + +2017-04-11: Version 5.9.204 + + Performance and stability improvements on all platforms. + + +2017-04-11: Version 5.9.203 + + Performance and stability improvements on all platforms. + + +2017-04-10: Version 5.9.202 + + Performance and stability improvements on all platforms. + + +2017-04-10: Version 5.9.201 + + Performance and stability improvements on all platforms. + + +2017-04-10: Version 5.9.200 + + Performance and stability improvements on all platforms. + + +2017-04-10: Version 5.9.199 + + Performance and stability improvements on all platforms. + + +2017-04-10: Version 5.9.198 + + Performance and stability improvements on all platforms. + + +2017-04-10: Version 5.9.197 + + Performance and stability improvements on all platforms. + + +2017-04-09: Version 5.9.196 + + Performance and stability improvements on all platforms. + + +2017-04-08: Version 5.9.195 + + Performance and stability improvements on all platforms. + + +2017-04-07: Version 5.9.194 + + Performance and stability improvements on all platforms. + + +2017-04-07: Version 5.9.193 + + Performance and stability improvements on all platforms. + + +2017-04-07: Version 5.9.192 + + Performance and stability improvements on all platforms. + + +2017-04-07: Version 5.9.191 + + Performance and stability improvements on all platforms. + + +2017-04-07: Version 5.9.190 + + Performance and stability improvements on all platforms. + + +2017-04-07: Version 5.9.189 + + Performance and stability improvements on all platforms. + + +2017-04-07: Version 5.9.188 + + Performance and stability improvements on all platforms. + + +2017-04-06: Version 5.9.187 + + Performance and stability improvements on all platforms. + + +2017-04-06: Version 5.9.186 + + Performance and stability improvements on all platforms. + + +2017-04-06: Version 5.9.185 + + Performance and stability improvements on all platforms. + + +2017-04-06: Version 5.9.184 + + Performance and stability improvements on all platforms. + + +2017-04-06: Version 5.9.183 + + Performance and stability improvements on all platforms. + + +2017-04-06: Version 5.9.182 + + Performance and stability improvements on all platforms. + + +2017-04-06: Version 5.9.181 + + Performance and stability improvements on all platforms. + + +2017-04-06: Version 5.9.180 + + Performance and stability improvements on all platforms. + + +2017-04-06: Version 5.9.179 + + Performance and stability improvements on all platforms. + + +2017-04-06: Version 5.9.178 + + Performance and stability improvements on all platforms. + + +2017-04-06: Version 5.9.177 + + Performance and stability improvements on all platforms. + + +2017-04-05: Version 5.9.176 + + Performance and stability improvements on all platforms. + + +2017-04-06: Version 5.9.175 + + Performance and stability improvements on all platforms. + + +2017-04-05: Version 5.9.174 + + Performance and stability improvements on all platforms. + + +2017-04-05: Version 5.9.173 + + Performance and stability improvements on all platforms. + + +2017-04-05: Version 5.9.172 + + Performance and stability improvements on all platforms. + + +2017-04-05: Version 5.9.171 + + Performance and stability improvements on all platforms. + + +2017-04-05: Version 5.9.170 + + Performance and stability improvements on all platforms. + + +2017-04-05: Version 5.9.169 + + Performance and stability improvements on all platforms. + + +2017-04-05: Version 5.9.168 + + Performance and stability improvements on all platforms. + + +2017-04-05: Version 5.9.167 + + Performance and stability improvements on all platforms. + + +2017-04-05: Version 5.9.166 + + Performance and stability improvements on all platforms. + + +2017-04-04: Version 5.9.165 + + Performance and stability improvements on all platforms. + + +2017-04-04: Version 5.9.164 + + Performance and stability improvements on all platforms. + + +2017-04-04: Version 5.9.163 + + Performance and stability improvements on all platforms. + + +2017-04-04: Version 5.9.162 + + Performance and stability improvements on all platforms. + + +2017-04-04: Version 5.9.161 + + Performance and stability improvements on all platforms. + + +2017-04-03: Version 5.9.160 + + Performance and stability improvements on all platforms. + + +2017-04-03: Version 5.9.159 + + Performance and stability improvements on all platforms. + + +2017-04-03: Version 5.9.158 + + Performance and stability improvements on all platforms. + + +2017-04-03: Version 5.9.157 + + Performance and stability improvements on all platforms. + + +2017-04-03: Version 5.9.156 + + Performance and stability improvements on all platforms. + + +2017-04-03: Version 5.9.155 + + Performance and stability improvements on all platforms. + + +2017-04-01: Version 5.9.154 + + Performance and stability improvements on all platforms. + + +2017-03-31: Version 5.9.153 + + Performance and stability improvements on all platforms. + + +2017-03-31: Version 5.9.152 + + Performance and stability improvements on all platforms. + + +2017-03-31: Version 5.9.151 + + Performance and stability improvements on all platforms. + + +2017-03-31: Version 5.9.150 + + Performance and stability improvements on all platforms. + + +2017-03-31: Version 5.9.149 + + Performance and stability improvements on all platforms. + + +2017-03-31: Version 5.9.148 + + Performance and stability improvements on all platforms. + + +2017-03-31: Version 5.9.147 + + Performance and stability improvements on all platforms. + + +2017-03-31: Version 5.9.146 + + Performance and stability improvements on all platforms. + + +2017-03-31: Version 5.9.145 + + Performance and stability improvements on all platforms. + + +2017-03-31: Version 5.9.144 + + Performance and stability improvements on all platforms. + + +2017-03-31: Version 5.9.143 + + Performance and stability improvements on all platforms. + + +2017-03-30: Version 5.9.142 + + Performance and stability improvements on all platforms. + + +2017-03-30: Version 5.9.141 + + Performance and stability improvements on all platforms. + + +2017-03-30: Version 5.9.140 + + Performance and stability improvements on all platforms. + + +2017-03-30: Version 5.9.139 + + Performance and stability improvements on all platforms. + + +2017-03-29: Version 5.9.138 + + Performance and stability improvements on all platforms. + + +2017-03-29: Version 5.9.137 + + Performance and stability improvements on all platforms. + + +2017-03-29: Version 5.9.136 + + Performance and stability improvements on all platforms. + + +2017-03-29: Version 5.9.135 + + Performance and stability improvements on all platforms. + + +2017-03-29: Version 5.9.134 + + Performance and stability improvements on all platforms. + + +2017-03-29: Version 5.9.133 + + Performance and stability improvements on all platforms. + + +2017-03-29: Version 5.9.132 + + Performance and stability improvements on all platforms. + + +2017-03-29: Version 5.9.131 + + Performance and stability improvements on all platforms. + + +2017-03-29: Version 5.9.130 + + Performance and stability improvements on all platforms. + + +2017-03-29: Version 5.9.129 + + Performance and stability improvements on all platforms. + + +2017-03-29: Version 5.9.128 + + Performance and stability improvements on all platforms. + + +2017-03-28: Version 5.9.127 + + Performance and stability improvements on all platforms. + + +2017-03-28: Version 5.9.126 + + Performance and stability improvements on all platforms. + + +2017-03-28: Version 5.9.125 + + Performance and stability improvements on all platforms. + + +2017-03-28: Version 5.9.124 + + Performance and stability improvements on all platforms. + + +2017-03-28: Version 5.9.123 + + Performance and stability improvements on all platforms. + + +2017-03-28: Version 5.9.122 + + Performance and stability improvements on all platforms. + + +2017-03-28: Version 5.9.121 + + Performance and stability improvements on all platforms. + + +2017-03-28: Version 5.9.120 + + Performance and stability improvements on all platforms. + + +2017-03-28: Version 5.9.119 + + Performance and stability improvements on all platforms. + + +2017-03-28: Version 5.9.118 + + Performance and stability improvements on all platforms. + + +2017-03-28: Version 5.9.117 + + Performance and stability improvements on all platforms. + + +2017-03-28: Version 5.9.116 + + Performance and stability improvements on all platforms. + + +2017-03-28: Version 5.9.115 + + Performance and stability improvements on all platforms. + + +2017-03-28: Version 5.9.114 + + Performance and stability improvements on all platforms. + + +2017-03-28: Version 5.9.113 + + Performance and stability improvements on all platforms. + + +2017-03-28: Version 5.9.112 + + Performance and stability improvements on all platforms. + + +2017-03-28: Version 5.9.111 + + Performance and stability improvements on all platforms. + + +2017-03-28: Version 5.9.110 + + Performance and stability improvements on all platforms. + + +2017-03-27: Version 5.9.109 + + Performance and stability improvements on all platforms. + + +2017-03-27: Version 5.9.108 + + Performance and stability improvements on all platforms. + + +2017-03-27: Version 5.9.107 + + Performance and stability improvements on all platforms. + + +2017-03-27: Version 5.9.106 + + Performance and stability improvements on all platforms. + + +2017-03-27: Version 5.9.105 + + Performance and stability improvements on all platforms. + + +2017-03-27: Version 5.9.104 + + Performance and stability improvements on all platforms. + + +2017-03-27: Version 5.9.103 + + Performance and stability improvements on all platforms. + + +2017-03-27: Version 5.9.102 + + Performance and stability improvements on all platforms. + + +2017-03-27: Version 5.9.101 + + Performance and stability improvements on all platforms. + + +2017-03-27: Version 5.9.100 + + Performance and stability improvements on all platforms. + + +2017-03-27: Version 5.9.99 + + Performance and stability improvements on all platforms. + + +2017-03-26: Version 5.9.98 + + Performance and stability improvements on all platforms. + + +2017-03-24: Version 5.9.97 + + Performance and stability improvements on all platforms. + + +2017-03-24: Version 5.9.96 + + Performance and stability improvements on all platforms. + + +2017-03-24: Version 5.9.95 + + Performance and stability improvements on all platforms. + + +2017-03-24: Version 5.9.94 + + Performance and stability improvements on all platforms. + + +2017-03-24: Version 5.9.93 + + Performance and stability improvements on all platforms. + + +2017-03-24: Version 5.9.92 + + Performance and stability improvements on all platforms. + + +2017-03-24: Version 5.9.91 + + Performance and stability improvements on all platforms. + + +2017-03-23: Version 5.9.90 + + Performance and stability improvements on all platforms. + + +2017-03-23: Version 5.9.89 + + Performance and stability improvements on all platforms. + + +2017-03-23: Version 5.9.88 + + Performance and stability improvements on all platforms. + + +2017-03-23: Version 5.9.87 + + Performance and stability improvements on all platforms. + + +2017-03-23: Version 5.9.86 + + Performance and stability improvements on all platforms. + + +2017-03-23: Version 5.9.85 + + Performance and stability improvements on all platforms. + + +2017-03-23: Version 5.9.84 + + Performance and stability improvements on all platforms. + + +2017-03-23: Version 5.9.83 + + Performance and stability improvements on all platforms. + + +2017-03-23: Version 5.9.82 + + Performance and stability improvements on all platforms. + + +2017-03-23: Version 5.9.81 + + Performance and stability improvements on all platforms. + + +2017-03-22: Version 5.9.80 + + Performance and stability improvements on all platforms. + + +2017-03-22: Version 5.9.79 + + Performance and stability improvements on all platforms. + + +2017-03-22: Version 5.9.78 + + Performance and stability improvements on all platforms. + + +2017-03-22: Version 5.9.77 + + Performance and stability improvements on all platforms. + + +2017-03-22: Version 5.9.76 + + Performance and stability improvements on all platforms. + + +2017-03-22: Version 5.9.75 + + Performance and stability improvements on all platforms. + + +2017-03-22: Version 5.9.74 + + Performance and stability improvements on all platforms. + + +2017-03-22: Version 5.9.73 + + Performance and stability improvements on all platforms. + + +2017-03-22: Version 5.9.72 + + Performance and stability improvements on all platforms. + + +2017-03-22: Version 5.9.71 + + Performance and stability improvements on all platforms. + + +2017-03-22: Version 5.9.70 + + Performance and stability improvements on all platforms. + + +2017-03-22: Version 5.9.69 + + Performance and stability improvements on all platforms. + + +2017-03-22: Version 5.9.68 + + Performance and stability improvements on all platforms. + + +2017-03-21: Version 5.9.67 + + Performance and stability improvements on all platforms. + + +2017-03-21: Version 5.9.66 + + Performance and stability improvements on all platforms. + + +2017-03-21: Version 5.9.65 + + Performance and stability improvements on all platforms. + + +2017-03-21: Version 5.9.64 + + Performance and stability improvements on all platforms. + + +2017-03-21: Version 5.9.63 + + Performance and stability improvements on all platforms. + + +2017-03-21: Version 5.9.62 + + Performance and stability improvements on all platforms. + + +2017-03-20: Version 5.9.61 + + Performance and stability improvements on all platforms. + + +2017-03-20: Version 5.9.60 + + Performance and stability improvements on all platforms. + + +2017-03-20: Version 5.9.59 + + Performance and stability improvements on all platforms. + + +2017-03-20: Version 5.9.58 + + Performance and stability improvements on all platforms. + + +2017-03-17: Version 5.9.57 + + Performance and stability improvements on all platforms. + + +2017-03-17: Version 5.9.56 + + Performance and stability improvements on all platforms. + + +2017-03-17: Version 5.9.55 + + Performance and stability improvements on all platforms. + + +2017-03-17: Version 5.9.54 + + Performance and stability improvements on all platforms. + + +2017-03-17: Version 5.9.53 + + Performance and stability improvements on all platforms. + + +2017-03-17: Version 5.9.52 + + Performance and stability improvements on all platforms. + + +2017-03-16: Version 5.9.51 + + Performance and stability improvements on all platforms. + + +2017-03-14: Version 5.9.50 + + Performance and stability improvements on all platforms. + + +2017-03-14: Version 5.9.49 + + Performance and stability improvements on all platforms. + + +2017-03-14: Version 5.9.48 + + Performance and stability improvements on all platforms. + + +2017-03-14: Version 5.9.47 + + Performance and stability improvements on all platforms. + + +2017-03-14: Version 5.9.46 + + Performance and stability improvements on all platforms. + + +2017-03-14: Version 5.9.45 + + Performance and stability improvements on all platforms. + + +2017-03-14: Version 5.9.44 + + Performance and stability improvements on all platforms. + + +2017-03-14: Version 5.9.43 + + Performance and stability improvements on all platforms. + + +2017-03-14: Version 5.9.42 + + Performance and stability improvements on all platforms. + + +2017-03-14: Version 5.9.41 + + Performance and stability improvements on all platforms. + + +2017-03-14: Version 5.9.40 + + Performance and stability improvements on all platforms. + + +2017-03-13: Version 5.9.39 + + Performance and stability improvements on all platforms. + + +2017-03-13: Version 5.9.38 + + Performance and stability improvements on all platforms. + + +2017-03-13: Version 5.9.37 + + Performance and stability improvements on all platforms. + + +2017-03-13: Version 5.9.36 + + Performance and stability improvements on all platforms. + + +2017-03-10: Version 5.9.35 + + Performance and stability improvements on all platforms. + + +2017-03-08: Version 5.9.34 + + Performance and stability improvements on all platforms. + + +2017-03-08: Version 5.9.33 + + Performance and stability improvements on all platforms. + + +2017-03-08: Version 5.9.32 + + Performance and stability improvements on all platforms. + + +2017-03-08: Version 5.9.31 + + Performance and stability improvements on all platforms. + + +2017-03-08: Version 5.9.30 + + Performance and stability improvements on all platforms. + + +2017-03-08: Version 5.9.29 + + Performance and stability improvements on all platforms. + + +2017-03-08: Version 5.9.28 + + Performance and stability improvements on all platforms. + + +2017-03-07: Version 5.9.27 + + Performance and stability improvements on all platforms. + + +2017-03-07: Version 5.9.26 + + Performance and stability improvements on all platforms. + + +2017-03-07: Version 5.9.25 + + Performance and stability improvements on all platforms. + + +2017-03-07: Version 5.9.24 + + Performance and stability improvements on all platforms. + + +2017-03-07: Version 5.9.23 + + Performance and stability improvements on all platforms. + + +2017-03-07: Version 5.9.22 + + Performance and stability improvements on all platforms. + + +2017-03-07: Version 5.9.21 + + Performance and stability improvements on all platforms. + + +2017-03-07: Version 5.9.20 + + Performance and stability improvements on all platforms. + + +2017-03-07: Version 5.9.19 + + Performance and stability improvements on all platforms. + + +2017-03-07: Version 5.9.18 + + Performance and stability improvements on all platforms. + + +2017-03-07: Version 5.9.17 + + Performance and stability improvements on all platforms. + + +2017-03-07: Version 5.9.16 + + Performance and stability improvements on all platforms. + + +2017-03-07: Version 5.9.15 + + Performance and stability improvements on all platforms. + + +2017-03-07: Version 5.9.14 + + Performance and stability improvements on all platforms. + + +2017-03-07: Version 5.9.13 + + Performance and stability improvements on all platforms. + + +2017-03-06: Version 5.9.12 + + Performance and stability improvements on all platforms. + + +2017-03-06: Version 5.9.11 + + Performance and stability improvements on all platforms. + + +2017-03-06: Version 5.9.10 + + Performance and stability improvements on all platforms. + + +2017-03-06: Version 5.9.9 + + Performance and stability improvements on all platforms. + + +2017-03-06: Version 5.9.8 + + Performance and stability improvements on all platforms. + + +2017-03-06: Version 5.9.7 + + Performance and stability improvements on all platforms. + + +2017-03-06: Version 5.9.6 + + Performance and stability improvements on all platforms. + + +2017-03-05: Version 5.9.5 + + Performance and stability improvements on all platforms. + + +2017-03-05: Version 5.9.4 + + Performance and stability improvements on all platforms. + + +2017-03-04: Version 5.9.3 + + Performance and stability improvements on all platforms. + + +2017-03-04: Version 5.9.2 + + Performance and stability improvements on all platforms. + + +2017-03-03: Version 5.9.1 + + Performance and stability improvements on all platforms. + + +2017-03-01: Version 5.8.301 + + Performance and stability improvements on all platforms. + + +2017-03-01: Version 5.8.300 + + Performance and stability improvements on all platforms. + + +2017-03-01: Version 5.8.299 + + Performance and stability improvements on all platforms. + + +2017-03-01: Version 5.8.298 + + Performance and stability improvements on all platforms. + + +2017-02-28: Version 5.8.297 + + Performance and stability improvements on all platforms. + + +2017-02-28: Version 5.8.296 + + Performance and stability improvements on all platforms. + + +2017-02-28: Version 5.8.295 + + Performance and stability improvements on all platforms. + + +2017-02-28: Version 5.8.294 + + Performance and stability improvements on all platforms. + + +2017-02-27: Version 5.8.293 + + Performance and stability improvements on all platforms. + + +2017-02-27: Version 5.8.292 + + Performance and stability improvements on all platforms. + + +2017-02-27: Version 5.8.291 + + Performance and stability improvements on all platforms. + + +2017-02-27: Version 5.8.290 + + Performance and stability improvements on all platforms. + + +2017-02-27: Version 5.8.289 + + Performance and stability improvements on all platforms. + + +2017-02-27: Version 5.8.288 + + Performance and stability improvements on all platforms. + + +2017-02-27: Version 5.8.287 + + Performance and stability improvements on all platforms. + + +2017-02-27: Version 5.8.286 + + Performance and stability improvements on all platforms. + + +2017-02-27: Version 5.8.285 + + Performance and stability improvements on all platforms. + + +2017-02-26: Version 5.8.284 + + Performance and stability improvements on all platforms. + + 2017-02-25: Version 5.8.283 Performance and stability improvements on all platforms. diff --git a/deps/v8/DEPS b/deps/v8/DEPS index f8e00855d4f3bd..1a55e663c6b17a 100644 --- a/deps/v8/DEPS +++ b/deps/v8/DEPS @@ -8,23 +8,23 @@ vars = { deps = { "v8/build": - Var("chromium_url") + "/chromium/src/build.git" + "@" + "c7c2db69cd571523ce728c4d3dceedbd1896b519", + Var("chromium_url") + "/chromium/src/build.git" + "@" + "1caf3a69f3b0379c9fef2493aa1b3cda96e17d7b", "v8/tools/gyp": - Var("chromium_url") + "/external/gyp.git" + "@" + "e7079f0e0e14108ab0dba58728ff219637458563", + Var("chromium_url") + "/external/gyp.git" + "@" + "eb296f67da078ec01f5e3a9ea9cdc6d26d680161", "v8/third_party/icu": - Var("chromium_url") + "/chromium/deps/icu.git" + "@" + "450be73c9ee8ae29d43d4fdc82febb2a5f62bfb5", + Var("chromium_url") + "/chromium/deps/icu.git" + "@" + "c844075aa0f1758d04f9192825f1b1e7e607992e", "v8/third_party/instrumented_libraries": - Var("chromium_url") + "/chromium/src/third_party/instrumented_libraries.git" + "@" + "5b6f777da671be977f56f0e8fc3469a3ccbb4474", + Var("chromium_url") + "/chromium/src/third_party/instrumented_libraries.git" + "@" + "644afd349826cb68204226a16c38bde13abe9c3c", "v8/buildtools": - Var("chromium_url") + "/chromium/buildtools.git" + "@" + "94cdccbebc7a634c27145a3d84089e85fbb42e69", + Var("chromium_url") + "/chromium/buildtools.git" + "@" + "98f00fa10dbad2cdbb2e297a66c3d6d5bc3994f3", "v8/base/trace_event/common": - Var("chromium_url") + "/chromium/src/base/trace_event/common.git" + "@" + "06294c8a4a6f744ef284cd63cfe54dbf61eea290", + Var("chromium_url") + "/chromium/src/base/trace_event/common.git" + "@" + "39a3450531fc73432e963db8668695d2e8f13053", "v8/third_party/jinja2": Var("chromium_url") + "/chromium/src/third_party/jinja2.git" + "@" + "d34383206fa42d52faa10bb9931d6d538f3a57e0", "v8/third_party/markupsafe": Var("chromium_url") + "/chromium/src/third_party/markupsafe.git" + "@" + "8f45f5cfa0009d2a70589bcda0349b8cb2b72783", "v8/tools/swarming_client": - Var('chromium_url') + '/external/swarming.client.git' + '@' + "11e31afa5d330756ff87aa12064bb5d032896cb5", + Var('chromium_url') + '/external/swarming.client.git' + '@' + "a941a089ff1000403078b74cb628eb430f07d271", "v8/testing/gtest": Var("chromium_url") + "/external/github.com/google/googletest.git" + "@" + "6f8a66431cb592dad629028a50b3dd418a408c87", "v8/testing/gmock": @@ -34,26 +34,22 @@ deps = { "v8/test/mozilla/data": Var("chromium_url") + "/v8/deps/third_party/mozilla-tests.git" + "@" + "f6c578a10ea707b1a8ab0b88943fe5115ce2b9be", "v8/test/test262/data": - Var("chromium_url") + "/external/github.com/tc39/test262.git" + "@" + "a72ee6d91275aa6524e84a9b7070103411ef2689", + Var("chromium_url") + "/external/github.com/tc39/test262.git" + "@" + "230f9fc5688ce76bfaa99aba5f680a159eaac9e2", "v8/test/test262/harness": Var("chromium_url") + "/external/github.com/test262-utils/test262-harness-py.git" + "@" + "0f2acdd882c84cff43b9d60df7574a1901e2cdcd", "v8/tools/clang": - Var("chromium_url") + "/chromium/src/tools/clang.git" + "@" + "9913fb19b687b0c858f697efd7bd2468d789a3d5", + Var("chromium_url") + "/chromium/src/tools/clang.git" + "@" + "05f306039aa5029fa88768690e5c512097419f9d", "v8/test/wasm-js": - Var("chromium_url") + "/external/github.com/WebAssembly/spec.git" + "@" + "b8b919e4a0d52db4d3d762e731e615bc3a38b3b2", + Var("chromium_url") + "/external/github.com/WebAssembly/spec.git" + "@" + "07fd6430f879d36928d179a62d9bdeed82286065", } deps_os = { "android": { "v8/third_party/android_tools": - Var("chromium_url") + "/android_tools.git" + "@" + "b43a6a289a7588b1769814f04dd6c7d7176974cc", + Var("chromium_url") + "/android_tools.git" + "@" + "cb6bc21107001e2f2eeee2707b482b2b755baf51", "v8/third_party/catapult": - Var('chromium_url') + "/external/github.com/catapult-project/catapult.git" + "@" + "246a39a82c2213d913a96fff020a263838dc76e6", + Var('chromium_url') + "/external/github.com/catapult-project/catapult.git" + "@" + "08a6e0ac161db7309d8f9cad0ccd38e0b1fd41e0", }, - "win": { - "v8/third_party/cygwin": - Var("chromium_url") + "/chromium/deps/cygwin.git" + "@" + "c89e446b273697fadf3a10ff1007a97c0b7de6df", - } } recursedeps = [ @@ -206,25 +202,14 @@ hooks = [ ], }, { - "name": "wasm_fuzzer", + "name": "wasm_spec_tests", "pattern": ".", "action": [ "download_from_google_storage", "--no_resume", "--no_auth", "-u", - "--bucket", "v8-wasm-fuzzer", - "-s", "v8/test/fuzzer/wasm.tar.gz.sha1", - ], - }, - { - "name": "wasm_asmjs_fuzzer", - "pattern": ".", - "action": [ "download_from_google_storage", - "--no_resume", - "--no_auth", - "-u", - "--bucket", "v8-wasm-asmjs-fuzzer", - "-s", "v8/test/fuzzer/wasm_asmjs.tar.gz.sha1", + "--bucket", "v8-wasm-spec-tests", + "-s", "v8/test/wasm-spec-tests/tests.tar.gz.sha1", ], }, { diff --git a/deps/v8/Makefile b/deps/v8/Makefile index 299d4aa09c97ac..ed5b3a7fabc325 100644 --- a/deps/v8/Makefile +++ b/deps/v8/Makefile @@ -240,7 +240,6 @@ ifdef android_ndk_root endif # ----------------- available targets: -------------------- -# - "grokdump": rebuilds heap constants lists used by grokdump # - any arch listed in ARCHES (see below) # - any mode listed in MODES # - every combination ., e.g. "ia32.release" @@ -467,12 +466,6 @@ $(ENVFILE).new: $(eval CXX_TARGET_ARCH:=$(subst x86_64,x64,$(CXX_TARGET_ARCH))) @mkdir -p $(OUTDIR); echo "GYPFLAGS=$(GYPFLAGS) -Dtarget_arch=$(CXX_TARGET_ARCH)" > $(ENVFILE).new; -# Heap constants for grokdump. -DUMP_FILE = tools/v8heapconst.py -grokdump: ia32.release - @cat $(DUMP_FILE).tmpl > $(DUMP_FILE) - @$(OUTDIR)/ia32.release/d8 --dump-heap-constants >> $(DUMP_FILE) - # Support for the GNU GLOBAL Source Code Tag System. gtags.files: $(GYPFILES) $(ENVFILE) @find include src test -name '*.h' -o -name '*.cc' -o -name '*.c' > $@ diff --git a/deps/v8/OWNERS b/deps/v8/OWNERS index e375fa65b73326..4a2dcdf74cddb6 100644 --- a/deps/v8/OWNERS +++ b/deps/v8/OWNERS @@ -7,7 +7,6 @@ bradnelson@chromium.org cbruni@chromium.org clemensh@chromium.org danno@chromium.org -epertoso@chromium.org franzih@chromium.org gsathya@chromium.org hablich@chromium.org diff --git a/deps/v8/PRESUBMIT.py b/deps/v8/PRESUBMIT.py index 4cacf811336530..7d7faec69614be 100644 --- a/deps/v8/PRESUBMIT.py +++ b/deps/v8/PRESUBMIT.py @@ -31,6 +31,7 @@ for more details about the presubmit API built into gcl. """ +import re import sys @@ -42,6 +43,12 @@ ) +# Regular expression that matches code which should not be run through cpplint. +_NO_LINT_PATHS = ( + r'src[\\\/]base[\\\/]export-template\.h', +) + + # Regular expression that matches code only used for test binaries # (best effort). _TEST_CODE_EXCLUDED_PATHS = ( @@ -69,9 +76,15 @@ def _V8PresubmitChecks(input_api, output_api): from presubmit import SourceProcessor from presubmit import StatusFilesProcessor + def FilterFile(affected_file): + return input_api.FilterSourceFile( + affected_file, + white_list=None, + black_list=_NO_LINT_PATHS) + results = [] if not CppLintProcessor().RunOnFiles( - input_api.AffectedFiles(include_deletes=False)): + input_api.AffectedFiles(file_filter=FilterFile, include_deletes=False)): results.append(output_api.PresubmitError("C++ lint check failed")) if not SourceProcessor().RunOnFiles( input_api.AffectedFiles(include_deletes=False)): @@ -250,6 +263,7 @@ def _CheckMissingFiles(input_api, output_api): def _CommonChecks(input_api, output_api): """Checks common to both upload and commit.""" results = [] + results.extend(_CheckCommitMessageBugEntry(input_api, output_api)) results.extend(input_api.canned_checks.CheckOwners( input_api, output_api, source_file_filter=None)) results.extend(input_api.canned_checks.CheckPatchFormatted( @@ -276,6 +290,32 @@ def _SkipTreeCheck(input_api, output_api): return input_api.environ.get('PRESUBMIT_TREE_CHECK') == 'skip' +def _CheckCommitMessageBugEntry(input_api, output_api): + """Check that bug entries are well-formed in commit message.""" + bogus_bug_msg = ( + 'Bogus BUG entry: %s. Please specify the issue tracker prefix and the ' + 'issue number, separated by a colon, e.g. v8:123 or chromium:12345.') + results = [] + for bug in (input_api.change.BUG or '').split(','): + bug = bug.strip() + if 'none'.startswith(bug.lower()): + continue + if ':' not in bug: + try: + if int(bug) > 100000: + # Rough indicator for current chromium bugs. + prefix_guess = 'chromium' + else: + prefix_guess = 'v8' + results.append('BUG entry requires issue tracker prefix, e.g. %s:%s' % + (prefix_guess, bug)) + except ValueError: + results.append(bogus_bug_msg % bug) + elif not re.match(r'\w+:\d+', bug): + results.append(bogus_bug_msg % bug) + return [output_api.PresubmitError(r) for r in results] + + def CheckChangeOnUpload(input_api, output_api): results = [] results.extend(_CommonChecks(input_api, output_api)) 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 e87665b8cdb12b..76d3039250ed89 100644 --- a/deps/v8/base/trace_event/common/trace_event_common.h +++ b/deps/v8/base/trace_event/common/trace_event_common.h @@ -258,6 +258,12 @@ TRACE_EVENT_PHASE_INSTANT, category_group, name, timestamp, \ TRACE_EVENT_FLAG_NONE | scope) +#define TRACE_EVENT_INSTANT_WITH_TIMESTAMP1(category_group, name, scope, \ + timestamp, arg_name, arg_val) \ + INTERNAL_TRACE_EVENT_ADD_WITH_TIMESTAMP( \ + TRACE_EVENT_PHASE_INSTANT, category_group, name, timestamp, \ + TRACE_EVENT_FLAG_NONE | scope, arg_name, arg_val) + // Records a single BEGIN event called "name" immediately, with 0, 1 or 2 // associated arguments. If the category is not enabled, then this // does nothing. diff --git a/deps/v8/codereview.settings b/deps/v8/codereview.settings index 532e4b4d7b0c07..bff4e38ba51885 100644 --- a/deps/v8/codereview.settings +++ b/deps/v8/codereview.settings @@ -1,8 +1,6 @@ +PROJECT: v8 +GERRIT_HOST: True CODE_REVIEW_SERVER: https://codereview.chromium.org CC_LIST: v8-reviews@googlegroups.com VIEW_VC: https://chromium.googlesource.com/v8/v8/+/ STATUS: http://v8-status.appspot.com/status -TRY_ON_UPLOAD: False -TRYSERVER_SVN_URL: svn://svn.chromium.org/chrome-try-v8 -PROJECT: v8 -PENDING_REF_PREFIX: refs/pending/ diff --git a/deps/v8/gni/isolate.gni b/deps/v8/gni/isolate.gni index a347eeaa24e1ba..90bc8c5d7fa4b9 100644 --- a/deps/v8/gni/isolate.gni +++ b/deps/v8/gni/isolate.gni @@ -101,11 +101,6 @@ template("v8_isolate_run") { } else { icu_use_data_file_flag = "0" } - if (v8_enable_inspector) { - enable_inspector = "1" - } else { - enable_inspector = "0" - } if (v8_use_external_startup_data) { use_external_startup_data = "1" } else { @@ -177,8 +172,6 @@ template("v8_isolate_run") { "--config-variable", "target_arch=$target_arch", "--config-variable", - "v8_enable_inspector=$enable_inspector", - "--config-variable", "v8_use_external_startup_data=$use_external_startup_data", "--config-variable", "v8_use_snapshot=$use_snapshot", diff --git a/deps/v8/gni/v8.gni b/deps/v8/gni/v8.gni index ea628e00007c87..33f85f989b73e6 100644 --- a/deps/v8/gni/v8.gni +++ b/deps/v8/gni/v8.gni @@ -37,9 +37,6 @@ declare_args() { # add a dependency on the ICU library. v8_enable_i18n_support = true - # Enable inspector. See include/v8-inspector.h. - v8_enable_inspector = true - # Use static libraries instead of source_sets. v8_static_library = false } @@ -66,9 +63,8 @@ v8_inspector_js_protocol = v8_path_prefix + "/src/inspector/js_protocol.json" # # Common configs to remove or add in all v8 targets. -v8_remove_configs = [ "//build/config/compiler:chromium_code" ] +v8_remove_configs = [] v8_add_configs = [ - "//build/config/compiler:no_chromium_code", v8_path_prefix + ":features", v8_path_prefix + ":toolchain", ] diff --git a/deps/v8/gypfiles/all.gyp b/deps/v8/gypfiles/all.gyp index d3e275e10fa552..bc9d9650eb5958 100644 --- a/deps/v8/gypfiles/all.gyp +++ b/deps/v8/gypfiles/all.gyp @@ -9,6 +9,8 @@ 'type': 'none', 'dependencies': [ '../src/d8.gyp:d8', + '../test/inspector/inspector.gyp:*', + '../test/mkgrokdump/mkgrokdump.gyp:*', ], 'conditions': [ ['component!="shared_library"', { @@ -25,20 +27,11 @@ '../test/unittests/unittests.gyp:*', ], }], - ['v8_enable_inspector==1', { - 'dependencies': [ - '../test/inspector/inspector.gyp:*', - ], - }], - ['v8_enable_inspector==1 and test_isolation_mode != "noop"', { - 'dependencies': [ - '../test/debugger/debugger.gyp:*', - ], - }], ['test_isolation_mode != "noop"', { 'dependencies': [ '../test/bot_default.gyp:*', '../test/benchmarks/benchmarks.gyp:*', + '../test/debugger/debugger.gyp:*', '../test/default.gyp:*', '../test/intl/intl.gyp:*', '../test/message/message.gyp:*', diff --git a/deps/v8/gypfiles/coverage_wrapper.py b/deps/v8/gypfiles/coverage_wrapper.py index 5b365d8e63d911..d5fdee43cfb761 100755 --- a/deps/v8/gypfiles/coverage_wrapper.py +++ b/deps/v8/gypfiles/coverage_wrapper.py @@ -31,6 +31,8 @@ def remove_if_exists(string_list, item): remove_if_exists(args, '-fsanitize-coverage=func') remove_if_exists(args, '-fsanitize-coverage=bb') remove_if_exists(args, '-fsanitize-coverage=edge') + remove_if_exists(args, '-fsanitize-coverage=trace-pc-guard') + remove_if_exists(args, '-fsanitize-coverage=bb,trace-pc-guard') break sys.exit(subprocess.check_call(args)) diff --git a/deps/v8/gypfiles/features.gypi b/deps/v8/gypfiles/features.gypi index bd5cd7cd108f1c..b38735e162ec8e 100644 --- a/deps/v8/gypfiles/features.gypi +++ b/deps/v8/gypfiles/features.gypi @@ -95,7 +95,7 @@ 'defines': ['VERIFY_HEAP',], }], ['v8_trace_maps==1', { - 'defines': ['TRACE_MAPS',], + 'defines': ['V8_TRACE_MAPS',], }], ['v8_enable_verify_predictable==1', { 'defines': ['VERIFY_PREDICTABLE',], @@ -110,7 +110,7 @@ 'defines': ['V8_IMMINENT_DEPRECATION_WARNINGS',], }], ['v8_enable_i18n_support==1', { - 'defines': ['V8_I18N_SUPPORT',], + 'defines': ['V8_INTL_SUPPORT',], }], ['v8_use_snapshot=="true" and v8_use_external_startup_data==1', { 'defines': ['V8_USE_EXTERNAL_STARTUP_DATA',], @@ -123,7 +123,7 @@ 'DebugBaseCommon': { 'abstract': 1, 'variables': { - 'v8_enable_handle_zapping%': 1, + 'v8_enable_handle_zapping%': 0, }, 'conditions': [ ['v8_enable_handle_zapping==1', { @@ -133,7 +133,7 @@ }, # Debug 'Release': { 'variables': { - 'v8_enable_handle_zapping%': 0, + 'v8_enable_handle_zapping%': 1, }, 'conditions': [ ['v8_enable_handle_zapping==1', { @@ -142,5 +142,8 @@ ], # conditions }, # Release }, # configurations + 'defines': [ + 'V8_GYP_BUILD', + ], # defines }, # target_defaults } diff --git a/deps/v8/gypfiles/isolate.gypi b/deps/v8/gypfiles/isolate.gypi index c55f3ca782516a..af3b3ae5c8926e 100644 --- a/deps/v8/gypfiles/isolate.gypi +++ b/deps/v8/gypfiles/isolate.gypi @@ -82,7 +82,6 @@ '--config-variable', 'sanitizer_coverage=<(sanitizer_coverage)', '--config-variable', 'component=<(component)', '--config-variable', 'target_arch=<(target_arch)', - '--config-variable', 'v8_enable_inspector=<(v8_enable_inspector)', '--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/gypfiles/standalone.gypi b/deps/v8/gypfiles/standalone.gypi index 862f94fb5c3c0d..4c805bf6432ff3 100644 --- a/deps/v8/gypfiles/standalone.gypi +++ b/deps/v8/gypfiles/standalone.gypi @@ -46,7 +46,6 @@ 'msvs_multi_core_compile%': '1', 'mac_deployment_target%': '10.7', 'release_extra_cflags%': '', - 'v8_enable_inspector%': 0, 'variables': { 'variables': { 'variables': { @@ -93,16 +92,16 @@ ['OS=="linux" and use_sysroot==1', { 'conditions': [ ['target_arch=="arm"', { - 'sysroot%': ' + +namespace v8 { + +constexpr uint32_t CurrentValueSerializerFormatVersion() { return 13; } + +} // namespace v8 + +#endif // INCLUDE_V8_VALUE_SERIALIZER_VERSION_H_ diff --git a/deps/v8/include/v8-version.h b/deps/v8/include/v8-version.h index 70e1a84d09e949..0889459ca778da 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 5 -#define V8_MINOR_VERSION 8 -#define V8_BUILD_NUMBER 283 -#define V8_PATCH_LEVEL 41 +#define V8_MAJOR_VERSION 6 +#define V8_MINOR_VERSION 0 +#define V8_BUILD_NUMBER 286 +#define V8_PATCH_LEVEL 52 // 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 95023ae1c910bc..1b3117ef34c67d 100644 --- a/deps/v8/include/v8.h +++ b/deps/v8/include/v8.h @@ -128,7 +128,6 @@ template class PersistentValueVector; template class WeakCallbackObject; class FunctionTemplate; class ObjectTemplate; -class Data; template class FunctionCallbackInfo; template class PropertyCallbackInfo; class StackTrace; @@ -151,6 +150,9 @@ class FunctionCallbackArguments; class GlobalHandles; } // namespace internal +namespace debug { +class ConsoleCallArguments; +} // namespace debug // --- Handles --- @@ -159,7 +161,6 @@ class GlobalHandles; *(static_cast(0)) = static_cast(0); \ } - /** * An object reference managed by the v8 garbage collector. * @@ -173,10 +174,16 @@ class GlobalHandles; * allocated on the heap. * * There are two types of handles: local and persistent handles. + * * Local handles are light-weight and transient and typically used in - * local operations. They are managed by HandleScopes. Persistent - * handles can be used when storing objects across several independent - * operations and have to be explicitly deallocated when they're no + * local operations. They are managed by HandleScopes. That means that a + * HandleScope must exist on the stack when they are created and that they are + * only valid inside of the HandleScope active during their creation. + * For passing a local handle to an outer HandleScope, an EscapableHandleScope + * and its Escape() method must be used. + * + * Persistent handles can be used when storing objects across several + * independent operations and have to be explicitly deallocated when they're no * longer used. * * It is safe to extract the object stored in the handle by @@ -254,6 +261,11 @@ class Local { return !operator==(that); } + /** + * Cast a handle to a subclass, e.g. Local to Local. + * This is only valid if the handle actually refers to a value of the + * target type. + */ template V8_INLINE static Local Cast(Local that) { #ifdef V8_ENABLE_CHECKS // If we're going to perform the type check then we have to check @@ -263,6 +275,11 @@ class Local { return Local(T::Cast(*that)); } + /** + * Calling this is equivalent to Local::Cast(). + * In particular, this is only valid if the handle actually refers to a value + * of the target type. + */ template V8_INLINE Local As() const { return Local::Cast(*this); @@ -339,15 +356,26 @@ class MaybeLocal { V8_INLINE bool IsEmpty() const { return val_ == nullptr; } + /** + * Converts this MaybeLocal<> to a Local<>. If this MaybeLocal<> is empty, + * |false| is returned and |out| is left untouched. + */ template V8_WARN_UNUSED_RESULT V8_INLINE bool ToLocal(Local* out) const { out->val_ = IsEmpty() ? nullptr : this->val_; return !IsEmpty(); } - // Will crash if the MaybeLocal<> is empty. + /** + * Converts this MaybeLocal<> to a Local<>. If this MaybeLocal<> is empty, + * V8 will crash the process. + */ V8_INLINE Local ToLocalChecked(); + /** + * Converts this MaybeLocal<> to a Local<>, using a default value if this + * MaybeLocal<> is empty. + */ template V8_INLINE Local FromMaybe(Local default_value) const { return IsEmpty() ? default_value : Local(val_); @@ -357,8 +385,10 @@ class MaybeLocal { T* val_; }; - -// Eternal handles are set-once handles that live for the life of the isolate. +/** + * Eternal handles are set-once handles that live for the lifetime of the + * isolate. + */ template class Eternal { public: V8_INLINE Eternal() : val_(nullptr) {} @@ -377,7 +407,7 @@ template class Eternal { static const int kInternalFieldsInWeakCallback = 2; - +static const int kEmbedderFieldsInWeakCallback = 2; template class WeakCallbackInfo { @@ -385,11 +415,11 @@ class WeakCallbackInfo { typedef void (*Callback)(const WeakCallbackInfo& data); WeakCallbackInfo(Isolate* isolate, T* parameter, - void* internal_fields[kInternalFieldsInWeakCallback], + void* embedder_fields[kEmbedderFieldsInWeakCallback], Callback* callback) : isolate_(isolate), parameter_(parameter), callback_(callback) { - for (int i = 0; i < kInternalFieldsInWeakCallback; ++i) { - internal_fields_[i] = internal_fields[i]; + for (int i = 0; i < kEmbedderFieldsInWeakCallback; ++i) { + embedder_fields_[i] = embedder_fields[i]; } } @@ -399,11 +429,11 @@ class WeakCallbackInfo { V8_INLINE V8_DEPRECATED("use indexed version", void* GetInternalField1() const) { - return internal_fields_[0]; + return embedder_fields_[0]; } V8_INLINE V8_DEPRECATED("use indexed version", void* GetInternalField2() const) { - return internal_fields_[1]; + return embedder_fields_[1]; } V8_DEPRECATED("Not realiable once SetSecondPassCallback() was used.", @@ -423,7 +453,7 @@ class WeakCallbackInfo { Isolate* isolate_; T* parameter_; Callback* callback_; - void* internal_fields_[kInternalFieldsInWeakCallback]; + void* embedder_fields_[kEmbedderFieldsInWeakCallback]; }; @@ -438,10 +468,10 @@ enum class WeakCallbackType { kParameter, kInternalFields, kFinalizer }; * An object reference that is independent of any handle scope. Where * a Local handle only lives as long as the HandleScope in which it was * allocated, a PersistentBase handle remains valid until it is explicitly - * disposed. + * disposed using Reset(). * * A persistent handle contains a reference to a storage cell within - * the v8 engine which holds an object value and which is updated by + * the V8 engine which holds an object value and which is updated by * the garbage collector whenever the object is moved. A new storage * cell can be created using the constructor or PersistentBase::Reset and * existing handles can be disposed using PersistentBase::Reset. @@ -899,6 +929,11 @@ class V8_EXPORT EscapableHandleScope : public HandleScope { internal::Object** escape_slot_; }; +/** + * A SealHandleScope acts like a handle scope in which no handle allocations + * are allowed. It can be useful for debugging handle leaks. + * Handles can be allocated within inner normal HandleScopes. + */ class V8_EXPORT SealHandleScope { public: SealHandleScope(Isolate* isolate); @@ -1060,19 +1095,41 @@ class V8_EXPORT Module { /** * ModuleDeclarationInstantiation * - * Returns false if an exception occurred during instantiation. + * Returns false if an exception occurred during instantiation. (In the case + * where the callback throws an exception, that exception is propagated.) */ V8_WARN_UNUSED_RESULT bool Instantiate(Local context, ResolveCallback callback); /** * ModuleEvaluation + * + * Returns the completion value. */ V8_WARN_UNUSED_RESULT MaybeLocal Evaluate(Local context); }; -// Node.js-specific: This will be implemented by a later V8 upgrade! -class DynamicImportResult; +/** + * This is an unfinished experimental feature, and is only exposed + * here for internal testing purposes. DO NOT USE. + * + * A compiled JavaScript module. + */ +class V8_EXPORT DynamicImportResult { + public: + /** + * Resolves the promise with the namespace object of the given + * module. + */ + V8_WARN_UNUSED_RESULT bool FinishDynamicImportSuccess(Local context, + Local module); + + /** + * Rejects the promise with the given exception. + */ + V8_WARN_UNUSED_RESULT bool FinishDynamicImportFailure(Local context, + Local exception); +}; /** * A compiled JavaScript script, tied to a Context which was active when the @@ -1364,7 +1421,7 @@ class V8_EXPORT ScriptCompiler { * CachedData instance is still valid; the tag has no other meaing. * * Background: The data carried by CachedData may depend on the exact - * V8 version number or currently compiler flags. This means when + * V8 version number or current compiler flags. This means that when * persisting CachedData, the embedder must take care to not pass in * data from another V8 version, or the same version with different * features enabled. @@ -1615,6 +1672,11 @@ class V8_EXPORT StackFrame { * constructor via "new". */ bool IsConstructor() const; + + /** + * Returns whether or not the associated functions is defined in wasm. + */ + bool IsWasm() const; }; @@ -1684,21 +1746,21 @@ class V8_EXPORT ValueSerializer { public: virtual ~Delegate() {} - /* + /** * Handles the case where a DataCloneError would be thrown in the structured * clone spec. Other V8 embedders may throw some other appropriate exception * type. */ virtual void ThrowDataCloneError(Local message) = 0; - /* + /** * The embedder overrides this method to write some kind of host object, if * possible. If not, a suitable exception should be thrown and * Nothing() returned. */ virtual Maybe WriteHostObject(Isolate* isolate, Local object); - /* + /** * Called when the ValueSerializer is going to serialize a * SharedArrayBuffer object. The embedder must return an ID for the * object, using the same ID if this SharedArrayBuffer has already been @@ -1713,7 +1775,7 @@ class V8_EXPORT ValueSerializer { virtual Maybe GetWasmModuleTransferId( Isolate* isolate, Local module); - /* + /** * Allocates memory for the buffer of at least the size provided. The actual * size (which may be greater or equal) is written to |actual_size|. If no * buffer has been allocated yet, nullptr will be provided. @@ -1725,7 +1787,7 @@ class V8_EXPORT ValueSerializer { virtual void* ReallocateBufferMemory(void* old_buffer, size_t size, size_t* actual_size); - /* + /** * Frees a buffer allocated with |ReallocateBufferMemory|. */ virtual void FreeBufferMemory(void* buffer); @@ -1735,24 +1797,24 @@ class V8_EXPORT ValueSerializer { ValueSerializer(Isolate* isolate, Delegate* delegate); ~ValueSerializer(); - /* + /** * Writes out a header, which includes the format version. */ void WriteHeader(); - /* + /** * Serializes a JavaScript value into the buffer. */ V8_WARN_UNUSED_RESULT Maybe WriteValue(Local context, Local value); - /* + /** * Returns the stored data. This serializer should not be used once the buffer * is released. The contents are undefined if a previous write has failed. */ V8_DEPRECATE_SOON("Use Release()", std::vector ReleaseBuffer()); - /* + /** * Returns the stored data (allocated using the delegate's * AllocateBufferMemory) and its size. This serializer should not be used once * the buffer is released. The contents are undefined if a previous write has @@ -1760,7 +1822,7 @@ class V8_EXPORT ValueSerializer { */ V8_WARN_UNUSED_RESULT std::pair Release(); - /* + /** * Marks an ArrayBuffer as havings its contents transferred out of band. * Pass the corresponding ArrayBuffer in the deserializing context to * ValueDeserializer::TransferArrayBuffer. @@ -1768,7 +1830,7 @@ class V8_EXPORT ValueSerializer { void TransferArrayBuffer(uint32_t transfer_id, Local array_buffer); - /* + /** * Similar to TransferArrayBuffer, but for SharedArrayBuffer. */ V8_DEPRECATE_SOON("Use Delegate::GetSharedArrayBufferId", @@ -1776,7 +1838,7 @@ class V8_EXPORT ValueSerializer { uint32_t transfer_id, Local shared_array_buffer)); - /* + /** * Indicate whether to treat ArrayBufferView objects as host objects, * i.e. pass them to Delegate::WriteHostObject. This should not be * called when no Delegate was passed. @@ -1785,7 +1847,7 @@ class V8_EXPORT ValueSerializer { */ void SetTreatArrayBufferViewsAsHostObjects(bool mode); - /* + /** * Write raw data in various common formats to the buffer. * Note that integer types are written in base-128 varint format, not with a * binary copy. For use during an override of Delegate::WriteHostObject. @@ -1817,14 +1879,14 @@ class V8_EXPORT ValueDeserializer { public: virtual ~Delegate() {} - /* + /** * The embedder overrides this method to read some kind of host object, if * possible. If not, a suitable exception should be thrown and * MaybeLocal() returned. */ virtual MaybeLocal ReadHostObject(Isolate* isolate); - /* + /** * Get a WasmCompiledModule given a transfer_id previously provided * by ValueSerializer::GetWasmModuleTransferId */ @@ -1837,25 +1899,25 @@ class V8_EXPORT ValueDeserializer { Delegate* delegate); ~ValueDeserializer(); - /* + /** * Reads and validates a header (including the format version). * May, for example, reject an invalid or unsupported wire format. */ V8_WARN_UNUSED_RESULT Maybe ReadHeader(Local context); - /* + /** * Deserializes a JavaScript value from the buffer. */ V8_WARN_UNUSED_RESULT MaybeLocal ReadValue(Local context); - /* + /** * Accepts the array buffer corresponding to the one passed previously to * ValueSerializer::TransferArrayBuffer. */ void TransferArrayBuffer(uint32_t transfer_id, Local array_buffer); - /* + /** * Similar to TransferArrayBuffer, but for SharedArrayBuffer. * The id is not necessarily in the same namespace as unshared ArrayBuffer * objects. @@ -1863,7 +1925,7 @@ class V8_EXPORT ValueDeserializer { void TransferSharedArrayBuffer(uint32_t id, Local shared_array_buffer); - /* + /** * Must be called before ReadHeader to enable support for reading the legacy * wire format (i.e., which predates this being shipped). * @@ -1872,14 +1934,19 @@ class V8_EXPORT ValueDeserializer { */ void SetSupportsLegacyWireFormat(bool supports_legacy_wire_format); - /* + /** + * Expect inline wasm in the data stream (rather than in-memory transfer) + */ + void SetExpectInlineWasm(bool allow_inline_wasm); + + /** * Reads the underlying wire format version. Likely mostly to be useful to * legacy code reading old wire format versions. Must be called after * ReadHeader. */ uint32_t GetWireFormatVersion() const; - /* + /** * Reads raw data in various common formats to the buffer. * Note that integer types are read in base-128 varint format, not with a * binary copy. For use during an override of Delegate::ReadHostObject. @@ -1906,7 +1973,7 @@ class V8_EXPORT NativeWeakMap : public Data { public: static Local New(Isolate* isolate); void Set(Local key, Local value); - Local Get(Local key); + Local Get(Local key) const; bool Has(Local key); bool Delete(Local key); }; @@ -2252,6 +2319,8 @@ class V8_EXPORT Value : public Data { Local TypeOf(Isolate*); + Maybe InstanceOf(Local context, Local object); + private: V8_INLINE bool QuickIsUndefined() const; V8_INLINE bool QuickIsNull() const; @@ -2304,9 +2373,25 @@ class V8_EXPORT Name : public Primitive { static void CheckCast(Value* obj); }; +/** + * A flag describing different modes of string creation. + * + * Aside from performance implications there are no differences between the two + * creation modes. + */ +enum class NewStringType { + /** + * Create a new string, always allocating new storage memory. + */ + kNormal, -enum class NewStringType { kNormal, kInternalized }; - + /** + * Acts as a hint that the string should be created in the + * old generation heap space and be deduplicated if an identical string + * already exists. + */ + kInternalized +}; /** * A JavaScript string value (ECMA-262, 4.3.17). @@ -2321,7 +2406,7 @@ class V8_EXPORT String : public Name { ONE_BYTE_ENCODING = 0x8 }; /** - * Returns the number of characters in this string. + * Returns the number of characters (UTF-16 code units) in this string. */ int Length() const; @@ -2332,14 +2417,16 @@ class V8_EXPORT String : public Name { int Utf8Length() const; /** - * Returns whether this string is known to contain only one byte data. + * Returns whether this string is known to contain only one byte data, + * i.e. ISO-8859-1 code points. * Does not read the string. * False negatives are possible. */ bool IsOneByte() const; /** - * Returns whether this string contain only one byte data. + * Returns whether this string contain only one byte data, + * i.e. ISO-8859-1 code points. * Will read the entire string in some cases. */ bool ContainsOnlyOneByte() const; @@ -2646,7 +2733,7 @@ class V8_EXPORT String : public Name { }; /** - * Converts an object to a two-byte string. + * Converts an object to a two-byte (UTF-16-encoded) string. * If conversion to a string fails (eg. due to an exception in the toString() * method of the object) then the length() method returns 0 and the * operator * returns NULL. @@ -2681,30 +2768,43 @@ class V8_EXPORT String : public Name { */ class V8_EXPORT Symbol : public Name { public: - // Returns the print name string of the symbol, or undefined if none. + /** + * Returns the print name string of the symbol, or undefined if none. + */ Local Name() const; - // Create a symbol. If name is not empty, it will be used as the description. + /** + * Create a symbol. If name is not empty, it will be used as the description. + */ static Local New(Isolate* isolate, Local name = Local()); - // Access global symbol registry. - // Note that symbols created this way are never collected, so - // they should only be used for statically fixed properties. - // Also, there is only one global name space for the names used as keys. - // To minimize the potential for clashes, use qualified names as keys. + /** + * Access global symbol registry. + * Note that symbols created this way are never collected, so + * they should only be used for statically fixed properties. + * Also, there is only one global name space for the names used as keys. + * To minimize the potential for clashes, use qualified names as keys. + */ static Local For(Isolate *isolate, Local name); - // Retrieve a global symbol. Similar to |For|, but using a separate - // registry that is not accessible by (and cannot clash with) JavaScript code. + /** + * Retrieve a global symbol. Similar to |For|, but using a separate + * registry that is not accessible by (and cannot clash with) JavaScript code. + */ static Local ForApi(Isolate *isolate, Local name); // Well-known symbols + static Local GetHasInstance(Isolate* isolate); + static Local GetIsConcatSpreadable(Isolate* isolate); static Local GetIterator(Isolate* isolate); - static Local GetUnscopables(Isolate* isolate); + static Local GetMatch(Isolate* isolate); + static Local GetReplace(Isolate* isolate); + static Local GetSearch(Isolate* isolate); + static Local GetSplit(Isolate* isolate); static Local GetToPrimitive(Isolate* isolate); static Local GetToStringTag(Isolate* isolate); - static Local GetIsConcatSpreadable(Isolate* isolate); + static Local GetUnscopables(Isolate* isolate); V8_INLINE static Symbol* Cast(Value* obj); @@ -2721,20 +2821,26 @@ class V8_EXPORT Symbol : public Name { */ class V8_EXPORT Private : public Data { public: - // Returns the print name string of the private symbol, or undefined if none. + /** + * Returns the print name string of the private symbol, or undefined if none. + */ Local Name() const; - // Create a private symbol. If name is not empty, it will be the description. + /** + * Create a private symbol. If name is not empty, it will be the description. + */ static Local New(Isolate* isolate, Local name = Local()); - // Retrieve a global private symbol. If a symbol with this name has not - // been retrieved in the same isolate before, it is created. - // Note that private symbols created this way are never collected, so - // they should only be used for statically fixed properties. - // Also, there is only one global name space for the names used as keys. - // To minimize the potential for clashes, use qualified names as keys, - // e.g., "Class#property". + /** + * Retrieve a global private symbol. If a symbol with this name has not + * been retrieved in the same isolate before, it is created. + * Note that private symbols created this way are never collected, so + * they should only be used for statically fixed properties. + * Also, there is only one global name space for the names used as keys. + * To minimize the potential for clashes, use qualified names as keys, + * e.g., "Class#property". + */ static Local ForApi(Isolate* isolate, Local name); private: @@ -3000,15 +3106,16 @@ class V8_EXPORT Object : public Value { Local key); V8_DEPRECATE_SOON("Use maybe version", bool Delete(Local key)); - // TODO(dcarney): mark V8_WARN_UNUSED_RESULT - Maybe Delete(Local context, Local key); + V8_WARN_UNUSED_RESULT Maybe Delete(Local context, + Local key); V8_DEPRECATED("Use maybe version", bool Has(uint32_t index)); - V8_WARN_UNUSED_RESULT Maybe Has(Local context, uint32_t index); + V8_WARN_UNUSED_RESULT Maybe Has(Local context, + uint32_t index); V8_DEPRECATED("Use maybe version", bool Delete(uint32_t index)); - // TODO(dcarney): mark V8_WARN_UNUSED_RESULT - Maybe Delete(Local context, uint32_t index); + V8_WARN_UNUSED_RESULT Maybe Delete(Local context, + uint32_t index); V8_DEPRECATED("Use maybe version", bool SetAccessor(Local name, @@ -3024,8 +3131,8 @@ class V8_EXPORT Object : public Value { Local data = Local(), AccessControl settings = DEFAULT, PropertyAttribute attribute = None)); - // TODO(dcarney): mark V8_WARN_UNUSED_RESULT - Maybe SetAccessor(Local context, Local name, + V8_WARN_UNUSED_RESULT Maybe SetAccessor(Local context, + Local name, AccessorNameGetterCallback getter, AccessorNameSetterCallback setter = 0, MaybeLocal data = MaybeLocal(), @@ -3037,6 +3144,16 @@ class V8_EXPORT Object : public Value { PropertyAttribute attribute = None, AccessControl settings = DEFAULT); + /** + * Sets a native data property like Template::SetNativeDataProperty, but + * this method sets on this object directly. + */ + V8_WARN_UNUSED_RESULT Maybe SetNativeDataProperty( + Local context, Local name, + AccessorNameGetterCallback getter, + AccessorNameSetterCallback setter = nullptr, + Local data = Local(), PropertyAttribute attributes = None); + /** * Functionality for private properties. * This is an experimental feature, use at your own risk. @@ -3515,6 +3632,7 @@ class FunctionCallbackInfo { protected: friend class internal::FunctionCallbackArguments; friend class internal::CustomArguments; + friend class debug::ConsoleCallArguments; static const int kHolderIndex = 0; static const int kIsolateIndex = 1; static const int kReturnValueDefaultValueIndex = 2; @@ -3779,12 +3897,12 @@ class V8_EXPORT Promise : public Object { * Ignored if the promise is no longer pending. */ V8_DEPRECATE_SOON("Use maybe version", void Resolve(Local value)); - // TODO(dcarney): mark V8_WARN_UNUSED_RESULT - Maybe Resolve(Local context, Local value); + V8_WARN_UNUSED_RESULT Maybe Resolve(Local context, + Local value); V8_DEPRECATE_SOON("Use maybe version", void Reject(Local value)); - // TODO(dcarney): mark V8_WARN_UNUSED_RESULT - Maybe Reject(Local context, Local value); + V8_WARN_UNUSED_RESULT Maybe Reject(Local context, + Local value); V8_INLINE static Resolver* Cast(Value* obj); @@ -3933,11 +4051,46 @@ class V8_EXPORT Proxy : public Object { static void CheckCast(Value* obj); }; +// TODO(mtrofin): rename WasmCompiledModule to WasmModuleObject, for +// consistency with internal APIs. class V8_EXPORT WasmCompiledModule : public Object { public: typedef std::pair, size_t> SerializedModule; // A buffer that is owned by the caller. typedef std::pair CallerOwnedBuffer; + + // An opaque, native heap object for transferring wasm modules. It + // supports move semantics, and does not support copy semantics. + class TransferrableModule final { + public: + TransferrableModule(TransferrableModule&& src) + : compiled_code(std::move(src.compiled_code)), + wire_bytes(std::move(src.wire_bytes)) {} + TransferrableModule(const TransferrableModule& src) = delete; + + TransferrableModule& operator=(TransferrableModule&& src); + TransferrableModule& operator=(const TransferrableModule& src) = delete; + + private: + typedef std::pair, size_t> OwnedBuffer; + friend class WasmCompiledModule; + TransferrableModule(OwnedBuffer&& code, OwnedBuffer&& bytes) + : compiled_code(std::move(code)), wire_bytes(std::move(bytes)) {} + + OwnedBuffer compiled_code = {nullptr, 0}; + OwnedBuffer wire_bytes = {nullptr, 0}; + }; + + // Get an in-memory, non-persistable, and context-independent (meaning, + // suitable for transfer to another Isolate and Context) representation + // of this wasm compiled module. + TransferrableModule GetTransferrableModule(); + + // Efficiently re-create a WasmCompiledModule, without recompiling, from + // a TransferrableModule. + static MaybeLocal FromTransferrableModule( + Isolate* isolate, const TransferrableModule&); + // Get the wasm-encoded bytes that were used to compile this module. Local GetWasmWireBytes(); @@ -3953,16 +4106,51 @@ class V8_EXPORT WasmCompiledModule : public Object { V8_INLINE static WasmCompiledModule* Cast(Value* obj); private: + // TODO(ahaas): please remove the friend once streamed compilation is + // implemented + friend class WasmModuleObjectBuilder; + static MaybeLocal Deserialize( Isolate* isolate, const CallerOwnedBuffer& serialized_module, const CallerOwnedBuffer& wire_bytes); static MaybeLocal Compile(Isolate* isolate, const uint8_t* start, size_t length); + static CallerOwnedBuffer AsCallerOwned( + const TransferrableModule::OwnedBuffer& buff) { + return {buff.first.get(), buff.second}; + } + WasmCompiledModule(); static void CheckCast(Value* obj); }; +class V8_EXPORT WasmModuleObjectBuilder final { + public: + WasmModuleObjectBuilder(Isolate* isolate) : isolate_(isolate) {} + // The buffer passed into OnBytesReceived is owned by the caller. + void OnBytesReceived(const uint8_t*, size_t size); + MaybeLocal Finish(); + + private: + Isolate* isolate_ = nullptr; + // TODO(ahaas): We probably need none of this below here once streamed + // compilation is implemented. + typedef std::pair, size_t> Buffer; + + // Disable copy semantics *in this implementation*. We can choose to + // relax this, albeit it's not clear why. + WasmModuleObjectBuilder(const WasmModuleObjectBuilder&) = delete; + WasmModuleObjectBuilder(WasmModuleObjectBuilder&& src) + : received_buffers_(std::move(src.received_buffers_)), + total_size_(src.total_size_) {} + WasmModuleObjectBuilder& operator=(const WasmModuleObjectBuilder&) = delete; + WasmModuleObjectBuilder& operator=(WasmModuleObjectBuilder&&); + + std::vector received_buffers_; + size_t total_size_ = 0; +}; + #ifndef V8_ARRAY_BUFFER_INTERNAL_FIELD_COUNT // The number of required internal fields can be defined by embedder. #define V8_ARRAY_BUFFER_INTERNAL_FIELD_COUNT 2 @@ -4008,6 +4196,11 @@ class V8_EXPORT ArrayBuffer : public Object { */ virtual void* AllocateUninitialized(size_t length) = 0; + /** + * Reserved |length| bytes, but do not commit the memory. Must call + * |SetProtection| to make memory accessible. + */ + // TODO(eholk): make this pure virtual once blink implements this. virtual void* Reserve(size_t length); /** @@ -4017,15 +4210,33 @@ class V8_EXPORT ArrayBuffer : public Object { virtual void Free(void* data, size_t length) = 0; enum class AllocationMode { kNormal, kReservation }; + + /** + * Free the memory block of size |length|, pointed to by |data|. + * That memory is guaranteed to be previously allocated by |Allocate| or + * |Reserve|, depending on |mode|. + */ + // TODO(eholk): make this pure virtual once blink implements this. virtual void Free(void* data, size_t length, AllocationMode mode); + enum class Protection { kNoAccess, kReadWrite }; + + /** + * Change the protection on a region of memory. + * + * On platforms that make a distinction between reserving and committing + * memory, changing the protection to kReadWrite must also ensure the memory + * is committed. + */ + // TODO(eholk): make this pure virtual once blink implements this. virtual void SetProtection(void* data, size_t length, Protection protection); /** * malloc/free based convenience allocator. * - * Caller takes ownership. + * Caller takes ownership, i.e. the returned object needs to be freed using + * |delete allocator| once it is no longer in use. */ static Allocator* NewDefaultAllocator(); }; @@ -4069,8 +4280,11 @@ class V8_EXPORT ArrayBuffer : public Object { /** * Create a new ArrayBuffer over an existing memory block. * The created array buffer is by default immediately in externalized state. - * The memory block will not be reclaimed when a created ArrayBuffer - * is garbage-collected. + * In externalized state, the memory block will not be reclaimed when a + * created ArrayBuffer is garbage-collected. + * In internalized state, the memory block will be released using + * |Allocator::Free| once all ArrayBuffers referencing it are collected by + * the garbage collector. */ static Local New( Isolate* isolate, void* data, size_t byte_length, @@ -4121,6 +4335,7 @@ class V8_EXPORT ArrayBuffer : public Object { V8_INLINE static ArrayBuffer* Cast(Value* obj); static const int kInternalFieldCount = V8_ARRAY_BUFFER_INTERNAL_FIELD_COUNT; + static const int kEmbedderFieldCount = V8_ARRAY_BUFFER_INTERNAL_FIELD_COUNT; private: ArrayBuffer(); @@ -4174,6 +4389,8 @@ class V8_EXPORT ArrayBufferView : public Object { static const int kInternalFieldCount = V8_ARRAY_BUFFER_VIEW_INTERNAL_FIELD_COUNT; + static const int kEmbedderFieldCount = + V8_ARRAY_BUFFER_VIEW_INTERNAL_FIELD_COUNT; private: ArrayBufferView(); @@ -4583,11 +4800,12 @@ class V8_EXPORT RegExp : public Object { */ enum Flags { kNone = 0, - kGlobal = 1, - kIgnoreCase = 2, - kMultiline = 4, - kSticky = 8, - kUnicode = 16 + kGlobal = 1 << 0, + kIgnoreCase = 1 << 1, + kMultiline = 1 << 2, + kSticky = 1 << 3, + kUnicode = 1 << 4, + kDotAll = 1 << 5, }; /** @@ -4642,7 +4860,8 @@ class V8_EXPORT External : public Value { F(ArrayProto_entries, array_entries_iterator) \ F(ArrayProto_forEach, array_for_each_iterator) \ F(ArrayProto_keys, array_keys_iterator) \ - F(ArrayProto_values, array_values_iterator) + F(ArrayProto_values, array_values_iterator) \ + F(IteratorPrototype, initial_iterator_prototype) enum Intrinsic { #define V8_DECL_INTRINSIC(name, iname) k##name, @@ -5980,19 +6199,7 @@ typedef void (*FailedAccessCheckCallback)(Local target, typedef bool (*AllowCodeGenerationFromStringsCallback)(Local context); // --- WASM compilation callbacks --- - -/** - * Callback to check if a buffer source may be compiled to WASM, given - * the compilation is attempted as a promise or not. - */ - -typedef bool (*AllowWasmCompileCallback)(Isolate* isolate, Local source, - bool as_promise); - -typedef bool (*AllowWasmInstantiateCallback)(Isolate* isolate, - Local module_or_bytes, - MaybeLocal ffi, - bool as_promise); +typedef bool (*ExtensionCallback)(const FunctionCallbackInfo&); // --- Garbage Collection Callbacks --- @@ -6058,6 +6265,11 @@ class V8_EXPORT HeapStatistics { size_t heap_size_limit() { return heap_size_limit_; } size_t malloced_memory() { return malloced_memory_; } size_t peak_malloced_memory() { return peak_malloced_memory_; } + + /** + * Returns a 0/1 boolean, which signifies whether the V8 overwrite heap + * garbage with a bit pattern. + */ size_t does_zap_garbage() { return does_zap_garbage_; } private: @@ -6306,7 +6518,7 @@ class V8_EXPORT EmbedderHeapTracer { * wrappers from them when called through |AdvanceTracing|. */ virtual void RegisterV8References( - const std::vector >& internal_fields) = 0; + const std::vector >& embedder_fields) = 0; /** * Called at the beginning of a GC cycle. @@ -6369,6 +6581,9 @@ struct SerializeInternalFieldsCallback { CallbackFunction callback; void* data; }; +// Note that these fields are called "internal fields" in the API and called +// "embedder fields" within V8. +typedef SerializeInternalFieldsCallback SerializeEmbedderFieldsCallback; /** * Callback and supporting data used to implement embedder logic to deserialize @@ -6384,6 +6599,7 @@ struct DeserializeInternalFieldsCallback { void* data); void* data; }; +typedef DeserializeInternalFieldsCallback DeserializeEmbedderFieldsCallback; /** * Isolate represents an isolated instance of the V8 engine. V8 isolates have @@ -6415,8 +6631,9 @@ class V8_EXPORT Isolate { * The optional entry_hook allows the host application to provide the * address of a function that's invoked on entry to every V8-generated * function. Note that entry_hook is invoked at the very start of each - * generated function. Furthermore, if an entry_hook is given, V8 will - * not use a snapshot, including custom snapshots. + * generated function. + * An entry_hook can only be provided in no-snapshot builds; in snapshot + * builds it must be nullptr. */ FunctionEntryHook entry_hook; @@ -6468,7 +6685,7 @@ class V8_EXPORT Isolate { /** * Whether calling Atomics.wait (a function that may block) is allowed in - * this isolate. + * this isolate. This can also be configured via SetAllowAtomicsWait. */ bool allow_atomics_wait; @@ -6706,6 +6923,12 @@ class V8_EXPORT Isolate { */ void Dispose(); + /** + * Dumps activated low-level V8 internal stats. This can be used instead + * of performing a full isolate disposal. + */ + void DumpAndResetStats(); + /** * Discards all V8 thread-specific data for the Isolate. Should be used * if a thread is terminating and it has used an Isolate that will outlive @@ -7230,6 +7453,14 @@ class V8_EXPORT Isolate { void SetAllowCodeGenerationFromStringsCallback( AllowCodeGenerationFromStringsCallback callback); + /** + * Embedder over{ride|load} injection points for wasm APIs. + */ + void SetWasmModuleCallback(ExtensionCallback callback); + void SetWasmCompileCallback(ExtensionCallback callback); + void SetWasmInstanceCallback(ExtensionCallback callback); + void SetWasmInstantiateCallback(ExtensionCallback callback); + /** * Check if V8 is dead and therefore unusable. This is the case after * fatal errors such as out-of-memory situations. @@ -7314,6 +7545,13 @@ class V8_EXPORT Isolate { */ bool IsInUse(); + /** + * Set whether calling Atomics.wait (a function that may block) is allowed in + * this isolate. This can also be configured via + * CreateParams::allow_atomics_wait. + */ + void SetAllowAtomicsWait(bool allow); + Isolate() = delete; ~Isolate() = delete; Isolate(const Isolate&) = delete; @@ -7685,6 +7923,35 @@ class V8_EXPORT V8 { */ static void ShutdownPlatform(); +#if V8_OS_LINUX && V8_TARGET_ARCH_X64 && !V8_OS_ANDROID + /** + * Give the V8 signal handler a chance to handle a fault. + * + * This function determines whether a memory access violation can be recovered + * by V8. If so, it will return true and modify context to return to a code + * fragment that can recover from the fault. Otherwise, TryHandleSignal will + * return false. + * + * The parameters to this function correspond to those passed to a Linux + * signal handler. + * + * \param signal_number The signal number. + * + * \param info A pointer to the siginfo_t structure provided to the signal + * handler. + * + * \param context The third argument passed to the Linux signal handler, which + * points to a ucontext_t structure. + */ + static bool TryHandleSignal(int signal_number, void* info, void* context); +#endif // V8_OS_LINUX + + /** + * Enable the default signal handler rather than using one provided by the + * embedder. + */ + static bool RegisterDefaultSignalHandler(); + private: V8(); @@ -7811,20 +8078,33 @@ class Maybe { V8_INLINE bool IsNothing() const { return !has_value_; } V8_INLINE bool IsJust() const { return has_value_; } - // Will crash if the Maybe<> is nothing. + /** + * An alias for |FromJust|. Will crash if the Maybe<> is nothing. + */ V8_INLINE T ToChecked() const { return FromJust(); } + /** + * Converts this Maybe<> to a value of type T. If this Maybe<> is + * nothing (empty), |false| is returned and |out| is left untouched. + */ V8_WARN_UNUSED_RESULT V8_INLINE bool To(T* out) const { if (V8_LIKELY(IsJust())) *out = value_; return IsJust(); } - // Will crash if the Maybe<> is nothing. + /** + * Converts this Maybe<> to a value of type T. If this Maybe<> is + * nothing (empty), V8 will crash the process. + */ V8_INLINE T FromJust() const { if (V8_UNLIKELY(!IsJust())) V8::FromJustIsNothing(); return value_; } + /** + * Converts this Maybe<> to a value of type T, using a default value if this + * Maybe<> is nothing (empty). + */ V8_INLINE T FromMaybe(const T& default_value) const { return has_value_ ? value_ : default_value; } @@ -8103,7 +8383,7 @@ class V8_EXPORT Context { * \param context_snapshot_index The index of the context snapshot to * deserialize from. Use v8::Context::New for the default snapshot. * - * \param internal_fields_deserializer Optional callback to deserialize + * \param embedder_fields_deserializer Optional callback to deserialize * internal fields. It should match the SerializeInternalFieldCallback used * to serialize. * @@ -8114,7 +8394,7 @@ class V8_EXPORT Context { static MaybeLocal FromSnapshot( Isolate* isolate, size_t context_snapshot_index, - DeserializeInternalFieldsCallback internal_fields_deserializer = + DeserializeInternalFieldsCallback embedder_fields_deserializer = DeserializeInternalFieldsCallback(), ExtensionConfiguration* extensions = nullptr, MaybeLocal global_object = MaybeLocal()); @@ -8170,16 +8450,14 @@ class V8_EXPORT Context { Isolate* GetIsolate(); /** - * The field at kDebugIdIndex is reserved for V8 debugger implementation. - * The value is propagated to the scripts compiled in given Context and - * can be used for filtering scripts. + * The field at kDebugIdIndex used to be reserved for the inspector. + * It now serves no purpose. */ enum EmbedderDataFields { kDebugIdIndex = 0 }; /** * Gets the embedder data with the given index, which must have been set by a - * previous call to SetEmbedderData with the same index. Note that index 0 - * currently has a special meaning for Chrome's debugger. + * previous call to SetEmbedderData with the same index. */ V8_INLINE Local GetEmbedderData(int index); @@ -8695,11 +8973,11 @@ Local MaybeLocal::ToLocalChecked() { template void* WeakCallbackInfo::GetInternalField(int index) const { #ifdef V8_ENABLE_CHECKS - if (index < 0 || index >= kInternalFieldsInWeakCallback) { + if (index < 0 || index >= kEmbedderFieldsInWeakCallback) { V8::InternalFieldOutOfBounds(index); } #endif - return internal_fields_[index]; + return embedder_fields_[index]; } diff --git a/deps/v8/include/v8config.h b/deps/v8/include/v8config.h index c34cb69a89112e..964949c24c3293 100644 --- a/deps/v8/include/v8config.h +++ b/deps/v8/include/v8config.h @@ -316,7 +316,7 @@ // V8_NORETURN void MyAbort() { abort(); } #if V8_HAS_ATTRIBUTE_NORETURN # define V8_NORETURN __attribute__((noreturn)) -#elif HAS_DECLSPEC_NORETURN +#elif V8_HAS_DECLSPEC_NORETURN # define V8_NORETURN __declspec(noreturn) #else # define V8_NORETURN /* NOT SUPPORTED */ diff --git a/deps/v8/infra/config/cq.cfg b/deps/v8/infra/config/cq.cfg index 72381ee38801c8..dcf8e5c0b726e1 100644 --- a/deps/v8/infra/config/cq.cfg +++ b/deps/v8/infra/config/cq.cfg @@ -32,6 +32,7 @@ verifiers { buckets { name: "master.tryserver.v8" builders { name: "v8_android_arm_compile_rel" } + builders { name: "v8_node_linux64_rel" } builders { name: "v8_linux64_asan_rel_ng" } builders { name: "v8_linux64_asan_rel_ng_triggered" @@ -42,6 +43,7 @@ verifiers { name: "v8_linux64_avx2_rel_ng_triggered" triggered_by: "v8_linux64_avx2_rel_ng" } + builders { name: "v8_linux64_gcc_compile_dbg" } builders { name: "v8_linux64_gyp_rel_ng" } builders { name: "v8_linux64_gyp_rel_ng_triggered" @@ -119,7 +121,7 @@ verifiers { } builders { name: "v8_linux64_sanitizer_coverage_rel" - experiment_percentage: 20 + experiment_percentage: 100 } } buckets { diff --git a/deps/v8/infra/mb/mb_config.pyl b/deps/v8/infra/mb/mb_config.pyl index 2a78d8627f52c0..1a8247fc2b71af 100644 --- a/deps/v8/infra/mb/mb_config.pyl +++ b/deps/v8/infra/mb/mb_config.pyl @@ -24,6 +24,18 @@ 'mips64el.debug': 'default_debug_mips64el', 'mips64el.optdebug': 'default_optdebug_mips64el', 'mips64el.release': 'default_release_mips64el', + 'ppc.debug': 'default_debug_ppc', + 'ppc.optdebug': 'default_optdebug_ppc', + 'ppc.release': 'default_release_ppc', + 'ppc64.debug': 'default_debug_ppc64', + 'ppc64.optdebug': 'default_optdebug_ppc64', + 'ppc64.release': 'default_release_ppc64', + 's390.debug': 'default_debug_s390', + 's390.optdebug': 'default_optdebug_s390', + 's390.release': 'default_release_s390', + 's390x.debug': 'default_debug_s390x', + 's390x.optdebug': 'default_optdebug_s390x', + 's390x.release': 'default_release_s390x', 'x64.debug': 'default_debug_x64', 'x64.optdebug': 'default_optdebug_x64', 'x64.release': 'default_release_x64', @@ -72,6 +84,8 @@ # Sanitizers. 'V8 Linux64 ASAN': 'gn_release_x64_asan', 'V8 Linux64 TSAN': 'gn_release_x64_tsan', + 'V8 Linux64 TSAN - concurrent marking': + 'gn_release_x64_tsan_concurrent_marking', 'V8 Linux - arm64 - sim - MSAN': 'gn_release_simulate_arm64_msan', # Clusterfuzz. 'V8 Linux64 - release builder': 'gn_release_x64_correctness_fuzzer', @@ -86,17 +100,18 @@ 'gn_debug_simulate_mipsel_asan_edge', # Misc. 'V8 Linux gcc 4.8': 'gn_release_x86_gcc', + 'V8 Linux64 gcc 4.8 - debug': 'gn_debug_x64_gcc', # FYI. 'V8 Linux - swarming staging': 'gn_release_x64', # TODO(machenbach): Figure out if symbolized is still needed. The # original config also specified -O1, which we dropped because chromium # doesn't have it (anymore). 'V8 Linux64 - cfi': 'gyp_release_x64_cfi_symbolized', - 'V8 Linux - vtunejit': 'gyp_debug_x86_vtunejit', + 'V8 Linux - vtunejit': 'gn_debug_x86_vtunejit', 'V8 Linux64 - gcov coverage': 'gyp_release_x64_gcc_coverage', - 'V8 Linux - predictable': 'gyp_release_x86_predictable', + 'V8 Linux - predictable': 'gn_release_x86_predictable', 'V8 Linux - full debug': 'gyp_full_debug_x86', - 'V8 Linux - interpreted regexp': 'gyp_release_x86_interpreted_regexp', + 'V8 Linux - interpreted regexp': 'gn_release_x86_interpreted_regexp', 'V8 Random Deopt Fuzzer - debug': 'gyp_debug_x86', }, @@ -165,6 +180,7 @@ 'v8_linux_nosnap_dbg': 'gn_debug_x86_no_snap_trybot', 'v8_linux_gcc_compile_rel': 'gn_release_x86_gcc_minimal_symbols', 'v8_linux_gcc_rel': 'gn_release_x86_gcc_minimal_symbols', + 'v8_linux64_gcc_compile_dbg': 'gn_debug_x64_gcc', 'v8_linux64_rel_ng': 'gn_release_x64_valgrind_trybot', 'v8_linux64_verify_csa_rel_ng': 'gn_release_x64_verify_csa', 'v8_linux64_gyp_rel_ng': 'gyp_release_x64', @@ -175,6 +191,8 @@ 'v8_linux64_sanitizer_coverage_rel': 'gyp_release_x64_asan_minimal_symbols_coverage', 'v8_linux64_tsan_rel': 'gn_release_x64_tsan_minimal_symbols', + 'v8_linux64_tsan_concurrent_marking_rel_ng': + 'gn_release_x64_tsan_concurrent_marking_minimal_symbols', 'v8_win_dbg': 'gn_debug_x86_trybot', 'v8_win_compile_dbg': 'gn_debug_x86_trybot', 'v8_win_rel_ng': 'gn_release_x86_trybot', @@ -234,6 +252,34 @@ 'gn', 'debug', 'simulate_mips64el', 'v8_enable_slow_dchecks'], 'default_release_mips64el': [ 'gn', 'release', 'simulate_mips64el'], + 'default_debug_ppc': [ + 'gn', 'debug', 'simulate_ppc', 'v8_enable_slow_dchecks', + 'v8_full_debug'], + 'default_optdebug_ppc': [ + 'gn', 'debug', 'simulate_ppc', 'v8_enable_slow_dchecks'], + 'default_release_ppc': [ + 'gn', 'release', 'simulate_ppc'], + 'default_debug_ppc64': [ + 'gn', 'debug', 'simulate_ppc64', 'v8_enable_slow_dchecks', + 'v8_full_debug'], + 'default_optdebug_ppc64': [ + 'gn', 'debug', 'simulate_ppc64', 'v8_enable_slow_dchecks'], + 'default_release_ppc64': [ + 'gn', 'release', 'simulate_ppc64'], + 'default_debug_s390': [ + 'gn', 'debug', 'simulate_s390', 'v8_enable_slow_dchecks', + 'v8_full_debug'], + 'default_optdebug_s390': [ + 'gn', 'debug', 'simulate_s390', 'v8_enable_slow_dchecks'], + 'default_release_s390': [ + 'gn', 'release', 'simulate_s390'], + 'default_debug_s390x': [ + 'gn', 'debug', 'simulate_s390x', 'v8_enable_slow_dchecks', + 'v8_full_debug'], + 'default_optdebug_s390x': [ + 'gn', 'debug', 'simulate_s390x', 'v8_enable_slow_dchecks'], + 'default_release_s390x': [ + 'gn', 'release', 'simulate_s390x'], 'default_debug_x64': [ 'gn', 'debug', 'x64', 'v8_enable_slow_dchecks', 'v8_full_debug'], 'default_optdebug_x64': [ @@ -258,7 +304,8 @@ 'gn_debug_simulate_arm64_asan_edge': [ 'gn', 'debug_bot', 'simulate_arm64', 'asan', 'lsan', 'edge'], 'gn_debug_simulate_arm64_no_snap': [ - 'gn', 'debug_bot', 'simulate_arm64', 'swarming', 'v8_snapshot_none'], + 'gn', 'debug', 'simulate_arm64', 'shared', 'goma', + 'v8_optimized_debug', 'swarming', 'v8_snapshot_none'], 'gn_debug_simulate_mipsel_asan_edge': [ 'gn', 'debug_bot', 'simulate_mipsel', 'asan', 'edge'], @@ -320,6 +367,12 @@ 'gn', 'release_trybot', 'x64', 'swarming'], 'gn_release_x64_tsan': [ 'gn', 'release_bot', 'x64', 'tsan', 'swarming'], + 'gn_release_x64_tsan_concurrent_marking': [ + 'gn', 'release_bot', 'x64', 'v8_enable_concurrent_marking', 'tsan', + 'swarming'], + 'gn_release_x64_tsan_concurrent_marking_minimal_symbols': [ + 'gn', 'release_bot', 'x64', 'v8_enable_concurrent_marking', 'tsan', + 'minimal_symbols', 'swarming'], 'gn_release_x64_tsan_minimal_symbols': [ 'gn', 'release_bot', 'x64', 'tsan', 'minimal_symbols', 'swarming'], 'gn_release_x64_valgrind': [ @@ -337,6 +390,8 @@ 'gn', 'debug_bot', 'x64', 'asan', 'lsan', 'edge'], 'gn_debug_x64_custom': [ 'gn', 'debug_bot', 'x64', 'swarming', 'v8_snapshot_custom'], + 'gn_debug_x64_gcc': [ + 'gn', 'debug_bot', 'x64', 'gcc'], 'gn_debug_x64_minimal_symbols': [ 'gn', 'debug_bot', 'x64', 'minimal_symbols', 'swarming'], 'gn_debug_x64_trybot': [ @@ -350,14 +405,15 @@ 'gn_debug_x86_minimal_symbols': [ 'gn', 'debug_bot', 'x86', 'minimal_symbols', 'swarming'], 'gn_debug_x86_no_i18n': [ - 'gn', 'debug_bot', 'x86', 'swarming', 'v8_disable_inspector', - 'v8_no_i18n'], + 'gn', 'debug_bot', 'x86', 'swarming', 'v8_no_i18n'], 'gn_debug_x86_no_snap': [ 'gn', 'debug_bot', 'x86', 'swarming', 'v8_snapshot_none'], 'gn_debug_x86_no_snap_trybot': [ 'gn', 'debug_trybot', 'x86', 'swarming', 'v8_snapshot_none'], 'gn_debug_x86_trybot': [ 'gn', 'debug_trybot', 'x86', 'swarming'], + 'gn_debug_x86_vtunejit': [ + 'gn', 'debug_bot', 'x86', 'v8_enable_vtunejit'], # GN release configs for x86. 'gn_release_x86': [ @@ -370,11 +426,12 @@ 'gn', 'release_bot', 'x86', 'gcmole', 'swarming'], 'gn_release_x86_gcmole_trybot': [ 'gn', 'release_trybot', 'x86', 'gcmole', 'swarming'], + 'gn_release_x86_interpreted_regexp': [ + 'gn', 'release_bot', 'x86', 'v8_interpreted_regexp'], 'gn_release_x86_minimal_symbols': [ 'gn', 'release_bot', 'x86', 'minimal_symbols', 'swarming'], 'gn_release_x86_no_i18n_trybot': [ - 'gn', 'release_trybot', 'x86', 'swarming', 'v8_disable_inspector', - 'v8_no_i18n'], + 'gn', 'release_trybot', 'x86', 'swarming', 'v8_no_i18n'], 'gn_release_x86_no_snap': [ 'gn', 'release_bot', 'x86', 'swarming', 'v8_snapshot_none'], 'gn_release_x86_no_snap_shared_minimal_symbols': [ @@ -382,6 +439,8 @@ 'v8_snapshot_none'], 'gn_release_x86_no_snap_trybot': [ 'gn', 'release_trybot', 'x86', 'swarming', 'v8_snapshot_none'], + 'gn_release_x86_predictable': [ + 'gn', 'release_bot', 'x86', 'v8_enable_verify_predictable'], 'gn_release_x86_shared_verify_heap': [ 'gn', 'release', 'x86', 'goma', 'shared', 'swarming', 'v8_verify_heap'], 'gn_release_x86_trybot': [ @@ -397,8 +456,6 @@ # Gyp debug configs for x86. 'gyp_debug_x86': [ 'gyp', 'debug_bot', 'x86', 'swarming'], - 'gyp_debug_x86_vtunejit': [ - 'gyp', 'debug_bot', 'x86', 'v8_enable_vtunejit'], 'gyp_full_debug_x86': [ 'gyp', 'debug', 'x86', 'goma', 'static', 'v8_enable_slow_dchecks', 'v8_full_debug'], @@ -432,10 +489,6 @@ # Gyp release configs for x86. 'gyp_release_x86_disassembler': [ 'gyp', 'release_bot', 'x86', 'v8_enable_disassembler'], - 'gyp_release_x86_interpreted_regexp': [ - 'gyp', 'release_bot', 'x86', 'v8_interpreted_regexp'], - 'gyp_release_x86_predictable': [ - 'gyp', 'release_bot', 'x86', 'v8_enable_verify_predictable'], }, 'mixins': { @@ -460,8 +513,8 @@ }, 'bb': { - 'gn_args': 'sanitizer_coverage_flags="bb"', - 'gyp_defines': 'sanitizer_coverage=bb', + 'gn_args': 'sanitizer_coverage_flags="bb,trace-pc-guard"', + 'gyp_defines': 'sanitizer_coverage=bb,trace-pc-guard', }, 'cfi': { @@ -510,8 +563,8 @@ }, 'edge': { - 'gn_args': 'sanitizer_coverage_flags="edge"', - 'gyp_defines': 'sanitizer_coverage=edge', + 'gn_args': 'sanitizer_coverage_flags="trace-pc-guard"', + 'gyp_defines': 'sanitizer_coverage=trace-pc-guard', }, 'gcc': { @@ -657,13 +710,12 @@ 'gyp_defines': 'v8_enable_i18n_support=0 icu_use_data_file_flag=0', }, - 'v8_correctness_fuzzer': { - 'gn_args': 'v8_correctness_fuzzer=true v8_multi_arch_build=true', + 'v8_enable_concurrent_marking': { + 'gn_args': 'v8_enable_concurrent_marking=true', }, - 'v8_disable_inspector': { - 'gn_args': 'v8_enable_inspector=false', - 'gyp_defines': 'v8_enable_inspector=0 ', + 'v8_correctness_fuzzer': { + 'gn_args': 'v8_correctness_fuzzer=true v8_multi_arch_build=true', }, 'v8_enable_disassembler': { diff --git a/deps/v8/src/DEPS b/deps/v8/src/DEPS index e9026b130d6bf3..bbf47e61071faf 100644 --- a/deps/v8/src/DEPS +++ b/deps/v8/src/DEPS @@ -1,6 +1,8 @@ include_rules = [ "+base/trace_event/common/trace_event_common.h", "+src", + "-src/asmjs", + "+src/asmjs/asm-js.h", "-src/compiler", "+src/compiler/pipeline.h", "+src/compiler/code-assembler.h", @@ -18,6 +20,9 @@ include_rules = [ "+src/interpreter/bytecode-register.h", "+src/interpreter/bytecodes.h", "+src/interpreter/interpreter.h", + "+src/interpreter/setup-interpreter.h", + "-src/trap-handler", + "+src/trap-handler/trap-handler.h", "+testing/gtest/include/gtest/gtest_prod.h", "-src/libplatform", "-include/libplatform" diff --git a/deps/v8/src/OWNERS b/deps/v8/src/OWNERS index 94b7fbb32e7b9a..8bbbab6ecb7287 100644 --- a/deps/v8/src/OWNERS +++ b/deps/v8/src/OWNERS @@ -1,4 +1,5 @@ -per-file i18n.*=cira@chromium.org -per-file i18n.*=mnita@google.com +per-file intl.*=cira@chromium.org +per-file intl.*=mnita@google.com +per-file intl.*=jshin@chromium.org per-file typing-asm.*=aseemgarg@chromium.org per-file typing-asm.*=bradnelson@chromium.org diff --git a/deps/v8/src/accessors.cc b/deps/v8/src/accessors.cc index 1f2ce97240f5d1..98f780d5895dbd 100644 --- a/deps/v8/src/accessors.cc +++ b/deps/v8/src/accessors.cc @@ -681,23 +681,6 @@ static Handle GetFunctionPrototype(Isolate* isolate, return Handle(function->prototype(), isolate); } - -MUST_USE_RESULT static MaybeHandle SetFunctionPrototype( - Isolate* isolate, Handle function, Handle value) { - JSFunction::SetPrototype(function, value); - DCHECK(function->prototype() == *value); - return function; -} - - -MaybeHandle Accessors::FunctionSetPrototype(Handle function, - Handle prototype) { - DCHECK(function->IsConstructor()); - Isolate* isolate = function->GetIsolate(); - return SetFunctionPrototype(isolate, function, prototype); -} - - void Accessors::FunctionPrototypeGetter( v8::Local name, const v8::PropertyCallbackInfo& info) { @@ -719,11 +702,8 @@ void Accessors::FunctionPrototypeSetter( Handle value = Utils::OpenHandle(*val); Handle object = Handle::cast(Utils::OpenHandle(*info.Holder())); - if (SetFunctionPrototype(isolate, object, value).is_null()) { - isolate->OptionalRescheduleException(false); - } else { - info.GetReturnValue().Set(true); - } + JSFunction::SetPrototype(object, value); + info.GetReturnValue().Set(true); } diff --git a/deps/v8/src/accessors.h b/deps/v8/src/accessors.h index a4d51fd18abfc4..52420d91de347d 100644 --- a/deps/v8/src/accessors.h +++ b/deps/v8/src/accessors.h @@ -90,8 +90,6 @@ 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); // Returns true for properties that are accessors to object fields. diff --git a/deps/v8/src/api-arguments.h b/deps/v8/src/api-arguments.h index 6c9ad7ad6b93f2..ca7b4833e9947e 100644 --- a/deps/v8/src/api-arguments.h +++ b/deps/v8/src/api-arguments.h @@ -7,6 +7,7 @@ #include "src/api.h" #include "src/isolate.h" +#include "src/visitors.h" namespace v8 { namespace internal { @@ -17,8 +18,8 @@ namespace internal { template class CustomArgumentsBase : public Relocatable { public: - virtual inline void IterateInstance(ObjectVisitor* v) { - v->VisitPointers(values_, values_ + kArrayLength); + virtual inline void IterateInstance(RootVisitor* v) { + v->VisitRootPointers(Root::kRelocatable, values_, values_ + kArrayLength); } protected: diff --git a/deps/v8/src/api-natives.cc b/deps/v8/src/api-natives.cc index 045ff470ab232e..ef51f950a5ecb8 100644 --- a/deps/v8/src/api-natives.cc +++ b/deps/v8/src/api-natives.cc @@ -36,7 +36,8 @@ class InvokeScope { MaybeHandle InstantiateObject(Isolate* isolate, Handle data, Handle new_target, - bool is_hidden_prototype); + bool is_hidden_prototype, + bool is_prototype); MaybeHandle InstantiateFunction(Isolate* isolate, Handle data, @@ -49,7 +50,7 @@ MaybeHandle Instantiate(Isolate* isolate, Handle data, Handle::cast(data), name); } else if (data->IsObjectTemplateInfo()) { return InstantiateObject(isolate, Handle::cast(data), - Handle(), false); + Handle(), false, false); } else { return data; } @@ -260,14 +261,25 @@ MaybeHandle ConfigureInstance(Isolate* isolate, Handle obj, return obj; } +// Whether or not to cache every instance: when we materialize a getter or +// setter from an lazy AccessorPair, we rely on this cache to be able to always +// return the same getter or setter. However, objects will be cloned anyways, +// so it's not observable if we didn't cache an instance. Furthermore, a badly +// behaved embedder might create an unlimited number of objects, so we limit +// the cache for those cases. +enum class CachingMode { kLimited, kUnlimited }; + MaybeHandle ProbeInstantiationsCache(Isolate* isolate, - int serial_number) { + int serial_number, + CachingMode caching_mode) { DCHECK_LE(1, serial_number); if (serial_number <= TemplateInfo::kFastTemplateInstantiationsCacheSize) { Handle fast_cache = isolate->fast_template_instantiations_cache(); return fast_cache->GetValue(isolate, serial_number - 1); - } else { + } else if (caching_mode == CachingMode::kUnlimited || + (serial_number <= + TemplateInfo::kSlowTemplateInstantiationsCacheSize)) { Handle slow_cache = isolate->slow_template_instantiations_cache(); int entry = slow_cache->FindEntry(serial_number); @@ -275,10 +287,13 @@ MaybeHandle ProbeInstantiationsCache(Isolate* isolate, return MaybeHandle(); } return handle(JSObject::cast(slow_cache->ValueAt(entry)), isolate); + } else { + return MaybeHandle(); } } void CacheTemplateInstantiation(Isolate* isolate, int serial_number, + CachingMode caching_mode, Handle object) { DCHECK_LE(1, serial_number); if (serial_number <= TemplateInfo::kFastTemplateInstantiationsCacheSize) { @@ -290,7 +305,9 @@ void CacheTemplateInstantiation(Isolate* isolate, int serial_number, isolate->native_context()->set_fast_template_instantiations_cache( *new_cache); } - } else { + } else if (caching_mode == CachingMode::kUnlimited || + (serial_number <= + TemplateInfo::kSlowTemplateInstantiationsCacheSize)) { Handle cache = isolate->slow_template_instantiations_cache(); auto new_cache = @@ -302,14 +319,17 @@ void CacheTemplateInstantiation(Isolate* isolate, int serial_number, } } -void UncacheTemplateInstantiation(Isolate* isolate, int serial_number) { +void UncacheTemplateInstantiation(Isolate* isolate, int serial_number, + CachingMode caching_mode) { DCHECK_LE(1, serial_number); if (serial_number <= TemplateInfo::kFastTemplateInstantiationsCacheSize) { Handle fast_cache = isolate->fast_template_instantiations_cache(); DCHECK(!fast_cache->get(serial_number - 1)->IsUndefined(isolate)); fast_cache->set_undefined(serial_number - 1); - } else { + } else if (caching_mode == CachingMode::kUnlimited || + (serial_number <= + TemplateInfo::kSlowTemplateInstantiationsCacheSize)) { Handle cache = isolate->slow_template_instantiations_cache(); int entry = cache->FindEntry(serial_number); @@ -338,7 +358,8 @@ bool IsSimpleInstantiation(Isolate* isolate, ObjectTemplateInfo* info, MaybeHandle InstantiateObject(Isolate* isolate, Handle info, Handle new_target, - bool is_hidden_prototype) { + bool is_hidden_prototype, + bool is_prototype) { Handle constructor; int serial_number = Smi::cast(info->serial_number())->value(); if (!new_target.is_null()) { @@ -352,7 +373,8 @@ MaybeHandle InstantiateObject(Isolate* isolate, // Fast path. Handle result; if (serial_number) { - if (ProbeInstantiationsCache(isolate, serial_number).ToHandle(&result)) { + if (ProbeInstantiationsCache(isolate, serial_number, CachingMode::kLimited) + .ToHandle(&result)) { return isolate->factory()->CopyJSObject(result); } } @@ -379,19 +401,27 @@ MaybeHandle InstantiateObject(Isolate* isolate, Handle object; ASSIGN_RETURN_ON_EXCEPTION(isolate, object, JSObject::New(constructor, new_target), JSObject); + + if (is_prototype) JSObject::OptimizeAsPrototype(object, FAST_PROTOTYPE); + ASSIGN_RETURN_ON_EXCEPTION( isolate, result, ConfigureInstance(isolate, object, info, is_hidden_prototype), JSObject); if (info->immutable_proto()) { JSObject::SetImmutableProto(object); } - // TODO(dcarney): is this necessary? - JSObject::MigrateSlowToFast(result, 0, "ApiNatives::InstantiateObject"); - - if (serial_number) { - CacheTemplateInstantiation(isolate, serial_number, result); - result = isolate->factory()->CopyJSObject(result); + if (!is_prototype) { + // Keep prototypes in slow-mode. Let them be lazily turned fast later on. + // TODO(dcarney): is this necessary? + JSObject::MigrateSlowToFast(result, 0, "ApiNatives::InstantiateObject"); + // Don't cache prototypes. + if (serial_number) { + CacheTemplateInstantiation(isolate, serial_number, CachingMode::kLimited, + result); + result = isolate->factory()->CopyJSObject(result); + } } + return result; } @@ -424,7 +454,9 @@ MaybeHandle InstantiateFunction(Isolate* isolate, int serial_number = Smi::cast(data->serial_number())->value(); if (serial_number) { Handle result; - if (ProbeInstantiationsCache(isolate, serial_number).ToHandle(&result)) { + if (ProbeInstantiationsCache(isolate, serial_number, + CachingMode::kUnlimited) + .ToHandle(&result)) { return Handle::cast(result); } } @@ -446,7 +478,7 @@ MaybeHandle InstantiateFunction(Isolate* isolate, InstantiateObject( isolate, handle(ObjectTemplateInfo::cast(prototype_templ), isolate), - Handle(), data->hidden_prototype()), + Handle(), data->hidden_prototype(), true), JSFunction); } Object* parent = data->parent_template(); @@ -466,14 +498,16 @@ MaybeHandle InstantiateFunction(Isolate* isolate, } if (serial_number) { // Cache the function. - CacheTemplateInstantiation(isolate, serial_number, function); + CacheTemplateInstantiation(isolate, serial_number, CachingMode::kUnlimited, + function); } MaybeHandle result = ConfigureInstance(isolate, function, data, data->hidden_prototype()); if (result.is_null()) { // Uncache on error. if (serial_number) { - UncacheTemplateInstantiation(isolate, serial_number); + UncacheTemplateInstantiation(isolate, serial_number, + CachingMode::kUnlimited); } return MaybeHandle(); } @@ -514,7 +548,8 @@ MaybeHandle ApiNatives::InstantiateObject( Handle data, Handle new_target) { Isolate* isolate = data->GetIsolate(); InvokeScope invoke_scope(isolate); - return ::v8::internal::InstantiateObject(isolate, data, new_target, false); + return ::v8::internal::InstantiateObject(isolate, data, new_target, false, + false); } MaybeHandle ApiNatives::InstantiateRemoteObject( @@ -524,22 +559,14 @@ MaybeHandle ApiNatives::InstantiateRemoteObject( Handle constructor( FunctionTemplateInfo::cast(data->constructor())); - Handle shared = - FunctionTemplateInfo::GetOrCreateSharedFunctionInfo(isolate, constructor); - Handle initial_map = isolate->factory()->CreateSloppyFunctionMap( - FUNCTION_WITH_WRITEABLE_PROTOTYPE); - Handle object_function = - isolate->factory()->NewFunctionFromSharedFunctionInfo( - initial_map, shared, isolate->factory()->undefined_value()); Handle object_map = isolate->factory()->NewMap( JS_SPECIAL_API_OBJECT_TYPE, - JSObject::kHeaderSize + data->internal_field_count() * kPointerSize, + JSObject::kHeaderSize + data->embedder_field_count() * kPointerSize, FAST_HOLEY_SMI_ELEMENTS); - JSFunction::SetInitialMap(object_function, object_map, - isolate->factory()->null_value()); + object_map->SetConstructor(*constructor); object_map->set_is_access_check_needed(true); - Handle object = isolate->factory()->NewJSObject(object_function); + Handle object = isolate->factory()->NewJSObjectFromMap(object_map); JSObject::ForceSetPrototype(object, isolate->factory()->null_value()); return object; @@ -629,18 +656,18 @@ Handle ApiNatives::CreateApiFunction( DONT_ENUM); } - int internal_field_count = 0; + int embedder_field_count = 0; bool immutable_proto = false; if (!obj->instance_template()->IsUndefined(isolate)) { Handle instance_template = Handle( ObjectTemplateInfo::cast(obj->instance_template())); - internal_field_count = instance_template->internal_field_count(); + embedder_field_count = instance_template->embedder_field_count(); immutable_proto = instance_template->immutable_proto(); } // TODO(svenpanne) Kill ApiInstanceType and refactor things by generalizing // JSObject::GetHeaderSize. - int instance_size = kPointerSize * internal_field_count; + int instance_size = kPointerSize * embedder_field_count; InstanceType type; switch (instance_type) { case JavaScriptObjectType: diff --git a/deps/v8/src/api.cc b/deps/v8/src/api.cc index 2610dc17104822..818dfa1e22e69a 100644 --- a/deps/v8/src/api.cc +++ b/deps/v8/src/api.cc @@ -25,11 +25,11 @@ #include "src/base/safe_conversions.h" #include "src/base/utils/random-number-generator.h" #include "src/bootstrapper.h" +#include "src/builtins/builtins-utils.h" #include "src/char-predicates-inl.h" #include "src/code-stubs.h" #include "src/compiler-dispatcher/compiler-dispatcher.h" #include "src/compiler.h" -#include "src/context-measure.h" #include "src/contexts.h" #include "src/conversions-inl.h" #include "src/counters.h" @@ -67,6 +67,7 @@ #include "src/snapshot/snapshot.h" #include "src/startup-data-util.h" #include "src/tracing/trace-event.h" +#include "src/trap-handler/trap-handler.h" #include "src/unicode-inl.h" #include "src/v8.h" #include "src/v8threads.h" @@ -84,7 +85,7 @@ namespace v8 { isolate, &i::RuntimeCallStats::API_##class_name##_##function_name); \ LOG(isolate, ApiEntryCall("v8::" #class_name "::" #function_name)) -#define ENTER_V8(isolate) i::VMState __state__((isolate)) +#define ENTER_V8_DO_NOT_USE(isolate) i::VMState __state__((isolate)) #define PREPARE_FOR_EXECUTION_GENERIC(isolate, context, class_name, \ function_name, bailout_value, \ @@ -95,7 +96,7 @@ namespace v8 { HandleScopeClass handle_scope(isolate); \ CallDepthScope call_depth_scope(isolate, context); \ LOG_API(isolate, class_name, function_name); \ - ENTER_V8(isolate); \ + ENTER_V8_DO_NOT_USE(isolate); \ bool has_pending_exception = false #define PREPARE_FOR_DEBUG_INTERFACE_EXECUTION_WITH_ISOLATE(isolate, T) \ @@ -104,7 +105,7 @@ namespace v8 { } \ InternalEscapableScope handle_scope(isolate); \ CallDepthScope call_depth_scope(isolate, v8::Local()); \ - ENTER_V8(isolate); \ + ENTER_V8_DO_NOT_USE(isolate); \ bool has_pending_exception = false #define PREPARE_FOR_EXECUTION_WITH_CONTEXT(context, class_name, function_name, \ @@ -231,17 +232,20 @@ class CallDepthScope { i::Handle env = Utils::OpenHandle(*context); i::HandleScopeImplementer* impl = isolate->handle_scope_implementer(); if (isolate->context() != nullptr && - isolate->context()->native_context() == env->native_context() && - impl->LastEnteredContextWas(env)) { + isolate->context()->native_context() == env->native_context()) { context_ = Local(); } else { - context_->Enter(); + impl->SaveContext(isolate->context()); + isolate->set_context(*env); } } if (do_callback) isolate_->FireBeforeCallEnteredCallback(); } ~CallDepthScope() { - if (!context_.IsEmpty()) context_->Exit(); + if (!context_.IsEmpty()) { + i::HandleScopeImplementer* impl = isolate_->handle_scope_implementer(); + isolate_->set_context(impl->RestoreContext()); + } if (!escaped_) isolate_->handle_scope_implementer()->DecrementCallDepth(); if (do_callback) isolate_->FireCallCompletedCallback(); #ifdef DEBUG @@ -437,14 +441,20 @@ void V8::SetSnapshotDataBlob(StartupData* snapshot_blob) { i::V8::SetSnapshotBlob(snapshot_blob); } -void* v8::ArrayBuffer::Allocator::Reserve(size_t length) { - UNIMPLEMENTED(); - return nullptr; -} +void* v8::ArrayBuffer::Allocator::Reserve(size_t length) { UNIMPLEMENTED(); } void v8::ArrayBuffer::Allocator::Free(void* data, size_t length, AllocationMode mode) { - UNIMPLEMENTED(); + switch (mode) { + case AllocationMode::kNormal: { + Free(data, length); + return; + } + case AllocationMode::kReservation: { + UNIMPLEMENTED(); + return; + } + } } void v8::ArrayBuffer::Allocator::SetProtection( @@ -463,6 +473,39 @@ class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator { } virtual void* AllocateUninitialized(size_t length) { return malloc(length); } virtual void Free(void* data, size_t) { free(data); } + + virtual void* Reserve(size_t length) { + return base::VirtualMemory::ReserveRegion(length); + } + + virtual void Free(void* data, size_t length, + v8::ArrayBuffer::Allocator::AllocationMode mode) { + switch (mode) { + case v8::ArrayBuffer::Allocator::AllocationMode::kNormal: { + return Free(data, length); + } + case v8::ArrayBuffer::Allocator::AllocationMode::kReservation: { + base::VirtualMemory::ReleaseRegion(data, length); + return; + } + } + } + + virtual void SetProtection( + void* data, size_t length, + v8::ArrayBuffer::Allocator::Protection protection) { + switch (protection) { + case v8::ArrayBuffer::Allocator::Protection::kNoAccess: { + base::VirtualMemory::UncommitRegion(data, length); + return; + } + case v8::ArrayBuffer::Allocator::Protection::kReadWrite: { + const bool is_executable = false; + base::VirtualMemory::CommitRegion(data, length, is_executable); + return; + } + } + } }; bool RunExtraCode(Isolate* isolate, Local context, @@ -510,7 +553,7 @@ struct SnapshotCreatorData { Persistent default_context_; PersistentValueVector contexts_; PersistentValueVector