summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit
diff options
context:
space:
mode:
authorMichaël Zasso <targos@protonmail.com>2018-09-07 17:07:13 +0200
committerMichaël Zasso <targos@protonmail.com>2018-09-07 20:59:13 +0200
commit586db2414a338e1bf6eaf6e672a3adc7ce309f6a (patch)
tree139fa972aef648481ddee22a3a85b99707d28df5 /deps/v8/test/mjsunit
parent12ed7c94e5160aa6d38e3d2cb2a73dae0a6f9342 (diff)
downloadandroid-node-v8-586db2414a338e1bf6eaf6e672a3adc7ce309f6a.tar.gz
android-node-v8-586db2414a338e1bf6eaf6e672a3adc7ce309f6a.tar.bz2
android-node-v8-586db2414a338e1bf6eaf6e672a3adc7ce309f6a.zip
deps: update V8 to 6.9.427.22
PR-URL: https://github.com/nodejs/node/pull/21983 Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Ujjwal Sharma <usharma1998@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Diffstat (limited to 'deps/v8/test/mjsunit')
-rw-r--r--deps/v8/test/mjsunit/allocation-site-info.js6
-rw-r--r--deps/v8/test/mjsunit/apply.js1
-rw-r--r--deps/v8/test/mjsunit/array-constructor.js51
-rw-r--r--deps/v8/test/mjsunit/array-sort.js77
-rw-r--r--deps/v8/test/mjsunit/async-hooks/api-methods.js76
-rw-r--r--deps/v8/test/mjsunit/async-hooks/async-await-tree.js74
-rw-r--r--deps/v8/test/mjsunit/async-hooks/chained-promises.js (renamed from deps/v8/test/mjsunit/regress/regress-2988.js)33
-rw-r--r--deps/v8/test/mjsunit/async-hooks/execution-order.js65
-rw-r--r--deps/v8/test/mjsunit/async-hooks/promises-async-await.js70
-rw-r--r--deps/v8/test/mjsunit/code-coverage-utils.js2
-rw-r--r--deps/v8/test/mjsunit/compiler/alloc-number.js35
-rw-r--r--deps/v8/test/mjsunit/compiler/array-species.js33
-rw-r--r--deps/v8/test/mjsunit/compiler/dataview-get.js173
-rw-r--r--deps/v8/test/mjsunit/compiler/dataview-set.js133
-rw-r--r--deps/v8/test/mjsunit/compiler/object-create.js27
-rw-r--r--deps/v8/test/mjsunit/compiler/osr-nested.js11
-rw-r--r--deps/v8/test/mjsunit/compiler/osr-one.js36
-rw-r--r--deps/v8/test/mjsunit/compiler/osr-two.js38
-rw-r--r--deps/v8/test/mjsunit/compiler/promise-species.js29
-rw-r--r--deps/v8/test/mjsunit/es6/dataview-length.js7
-rw-r--r--deps/v8/test/mjsunit/es6/typedarray-keyedstore-tonumber.js69
-rw-r--r--deps/v8/test/mjsunit/es6/typedarray-sort.js1
-rw-r--r--deps/v8/test/mjsunit/es8/async-await-interleaved.js61
-rw-r--r--deps/v8/test/mjsunit/generated-transition-stub.js67
-rw-r--r--deps/v8/test/mjsunit/harmony/array-flat-species.js31
-rw-r--r--deps/v8/test/mjsunit/harmony/array-flat.js65
-rw-r--r--deps/v8/test/mjsunit/harmony/array-flatMap-species.js31
-rw-r--r--deps/v8/test/mjsunit/harmony/array-flatMap.js174
-rw-r--r--deps/v8/test/mjsunit/harmony/array-flatten.js38
-rw-r--r--deps/v8/test/mjsunit/harmony/async-generators-basic.js25
-rw-r--r--deps/v8/test/mjsunit/harmony/bigint/dataview.js10
-rw-r--r--deps/v8/test/mjsunit/harmony/bigintarray-keyedstore-tobigint.js64
-rw-r--r--deps/v8/test/mjsunit/harmony/function-tostring.js24
-rw-r--r--deps/v8/test/mjsunit/harmony/modules-import-9.js2
-rw-r--r--deps/v8/test/mjsunit/harmony/optional-catch-binding-breaks.js2
-rw-r--r--deps/v8/test/mjsunit/harmony/optional-catch-binding.js2
-rw-r--r--deps/v8/test/mjsunit/harmony/promise-prototype-finally.js2
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-named-captures.js2
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-property-binary.js2
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-property-char-class.js2
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-property-disabled.js18
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-property-enumerated.js2
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-property-exact-match.js2
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-property-general-category.js2
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-property-invalid.js2
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-property-lu-ui0.js1
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-property-lu-ui1.js1
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-property-lu-ui2.js1
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-property-lu-ui3.js1
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-property-lu-ui4.js1
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-property-lu-ui5.js1
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-property-lu-ui6.js1
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-property-lu-ui7.js1
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-property-lu-ui8.js1
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-property-lu-ui9.js1
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-property-script-extensions.js3044
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-property-scripts.js2
-rw-r--r--deps/v8/test/mjsunit/harmony/regexp-property-special.js2
-rw-r--r--deps/v8/test/mjsunit/harmony/symbol-description.js53
-rw-r--r--deps/v8/test/mjsunit/ignition/throw-if-hole.js2
-rw-r--r--deps/v8/test/mjsunit/ignition/throw-if-not-hole.js6
-rw-r--r--deps/v8/test/mjsunit/ignition/throw-super-not-called.js2
-rw-r--r--deps/v8/test/mjsunit/intl-numberformat-formattoparts.js6
-rw-r--r--deps/v8/test/mjsunit/lexicographic-compare.js62
-rw-r--r--deps/v8/test/mjsunit/mjsunit.js4
-rw-r--r--deps/v8/test/mjsunit/mjsunit.status80
-rw-r--r--deps/v8/test/mjsunit/object-keys.js58
-rw-r--r--deps/v8/test/mjsunit/regexp-modifiers-autogenerated-i18n.js2
-rw-r--r--deps/v8/test/mjsunit/regexp-modifiers-autogenerated.js2
-rw-r--r--deps/v8/test/mjsunit/regress/regress-165637.js51
-rw-r--r--deps/v8/test/mjsunit/regress/regress-2185-2.js145
-rw-r--r--deps/v8/test/mjsunit/regress/regress-298269.js35
-rw-r--r--deps/v8/test/mjsunit/regress/regress-373283.js18
-rw-r--r--deps/v8/test/mjsunit/regress/regress-705934.js4
-rw-r--r--deps/v8/test/mjsunit/regress/regress-747075.js9
-rw-r--r--deps/v8/test/mjsunit/regress/regress-7791.js120
-rw-r--r--deps/v8/test/mjsunit/regress/regress-7893.js18
-rw-r--r--deps/v8/test/mjsunit/regress/regress-793588.js2
-rw-r--r--deps/v8/test/mjsunit/regress/regress-793793.js2
-rw-r--r--deps/v8/test/mjsunit/regress/regress-800651.js8
-rw-r--r--deps/v8/test/mjsunit/regress/regress-843062-1.js18
-rw-r--r--deps/v8/test/mjsunit/regress/regress-843062-2.js8
-rw-r--r--deps/v8/test/mjsunit/regress/regress-843062-3.js10
-rw-r--r--deps/v8/test/mjsunit/regress/regress-852258.js11
-rw-r--r--deps/v8/test/mjsunit/regress/regress-852765.js17
-rw-r--r--deps/v8/test/mjsunit/regress/regress-862433.js9
-rw-r--r--deps/v8/test/mjsunit/regress/regress-863155.js10
-rw-r--r--deps/v8/test/mjsunit/regress/regress-863810.js19
-rw-r--r--deps/v8/test/mjsunit/regress/regress-crbug-217858.js32
-rw-r--r--deps/v8/test/mjsunit/regress/regress-crbug-410033.js7
-rw-r--r--deps/v8/test/mjsunit/regress/regress-crbug-469480.js13
-rw-r--r--deps/v8/test/mjsunit/regress/regress-crbug-491062.js2
-rw-r--r--deps/v8/test/mjsunit/regress/regress-crbug-505007-1.js18
-rw-r--r--deps/v8/test/mjsunit/regress/regress-crbug-506443.js89
-rw-r--r--deps/v8/test/mjsunit/regress/regress-crbug-582703.js8
-rw-r--r--deps/v8/test/mjsunit/regress/regress-crbug-724153.js2
-rw-r--r--deps/v8/test/mjsunit/regress/regress-crbug-7907.js9
-rw-r--r--deps/v8/test/mjsunit/regress/regress-crbug-848165.js9
-rw-r--r--deps/v8/test/mjsunit/regress/regress-crbug-849024.js43
-rw-r--r--deps/v8/test/mjsunit/regress/regress-crbug-850005.js11
-rw-r--r--deps/v8/test/mjsunit/regress/regress-crbug-852592.js25
-rw-r--r--deps/v8/test/mjsunit/regress/regress-crbug-854299.js27
-rw-r--r--deps/v8/test/mjsunit/regress/regress-crbug-856095.js14
-rw-r--r--deps/v8/test/mjsunit/regress/regress-crbug-859809.js21
-rw-r--r--deps/v8/test/mjsunit/regress/regress-crbug-860788.js30
-rw-r--r--deps/v8/test/mjsunit/regress/regress-crbug-862538.js13
-rw-r--r--deps/v8/test/mjsunit/regress/regress-crbug-869313.js15
-rw-r--r--deps/v8/test/mjsunit/regress/regress-deep-proto.js16
-rw-r--r--deps/v8/test/mjsunit/regress/wasm/regress-7785.js44
-rw-r--r--deps/v8/test/mjsunit/regress/wasm/regress-7914.js18
-rw-r--r--deps/v8/test/mjsunit/regress/wasm/regress-799952.js23
-rw-r--r--deps/v8/test/mjsunit/regress/wasm/regress-808848.js18
-rw-r--r--deps/v8/test/mjsunit/regress/wasm/regress-837417.js15
-rw-r--r--deps/v8/test/mjsunit/regress/wasm/regress-853453.js18
-rw-r--r--deps/v8/test/mjsunit/regress/wasm/regress-854011.js47
-rw-r--r--deps/v8/test/mjsunit/regress/wasm/regress-854050.js28
-rw-r--r--deps/v8/test/mjsunit/regress/wasm/regress-864509.js62
-rw-r--r--deps/v8/test/mjsunit/stack-traces-2.js17
-rw-r--r--deps/v8/test/mjsunit/tools/profviz-test.default20
-rw-r--r--deps/v8/test/mjsunit/wasm/compiled-module-management.js27
-rw-r--r--deps/v8/test/mjsunit/wasm/compiled-module-serialization.js89
-rw-r--r--deps/v8/test/mjsunit/wasm/default-liftoff-setting.js21
-rw-r--r--deps/v8/test/mjsunit/wasm/export-global.js34
-rw-r--r--deps/v8/test/mjsunit/wasm/export-mutable-global.js15
-rw-r--r--deps/v8/test/mjsunit/wasm/globals.js8
-rw-r--r--deps/v8/test/mjsunit/wasm/import-mutable-global.js18
-rw-r--r--deps/v8/test/mjsunit/wasm/import-table.js244
-rw-r--r--deps/v8/test/mjsunit/wasm/interpreter.js25
-rw-r--r--deps/v8/test/mjsunit/wasm/liftoff.js2
-rw-r--r--deps/v8/test/mjsunit/wasm/module-memory.js14
-rw-r--r--deps/v8/test/mjsunit/wasm/mutable-globals.js12
-rw-r--r--deps/v8/test/mjsunit/wasm/print-code.js32
-rw-r--r--deps/v8/test/mjsunit/wasm/serialize-lazy-module.js68
-rw-r--r--deps/v8/test/mjsunit/wasm/tier-up-testing-flag.js46
-rw-r--r--deps/v8/test/mjsunit/wasm/trap-handler-fallback.js202
-rw-r--r--deps/v8/test/mjsunit/wasm/worker-memory.js16
-rw-r--r--deps/v8/test/mjsunit/wasm/worker-module.js34
137 files changed, 3416 insertions, 3731 deletions
diff --git a/deps/v8/test/mjsunit/allocation-site-info.js b/deps/v8/test/mjsunit/allocation-site-info.js
index 7a5f2c70bf..66ebe49369 100644
--- a/deps/v8/test/mjsunit/allocation-site-info.js
+++ b/deps/v8/test/mjsunit/allocation-site-info.js
@@ -258,6 +258,12 @@ assertKind(elements_kind.fast, obj);
obj = newarraycase_list_smiobj(2);
assertKind(elements_kind.fast, obj);
+// Perform a gc because without it the test below can experience an
+// allocation failure at an inconvenient point. Allocation mementos get
+// cleared on gc, and they can't deliver elements kind feedback when that
+// happens.
+gc();
+
// Case: array constructor calls with out of date feedback.
// The boilerplate should incorporate all feedback, but the input array
// should be minimally transitioned based on immediate need.
diff --git a/deps/v8/test/mjsunit/apply.js b/deps/v8/test/mjsunit/apply.js
index c52a23f91f..07639c940e 100644
--- a/deps/v8/test/mjsunit/apply.js
+++ b/deps/v8/test/mjsunit/apply.js
@@ -110,6 +110,7 @@ function s() {
assertEquals("bar42foofishhorse", s.apply("bar", arr), "apply to string");
function al() {
+ print(this);
assertEquals(Object(345), this);
return arguments.length + arguments[arguments.length - 1];
}
diff --git a/deps/v8/test/mjsunit/array-constructor.js b/deps/v8/test/mjsunit/array-constructor.js
index c9707b9654..94f444c051 100644
--- a/deps/v8/test/mjsunit/array-constructor.js
+++ b/deps/v8/test/mjsunit/array-constructor.js
@@ -1,29 +1,6 @@
// Copyright 2008 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following
-// disclaimer in the documentation and/or other materials provided
-// with the distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived
-// from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
var loop_count = 5
@@ -84,26 +61,26 @@ function innerArrayLiteral(n) {
return a.join();
}
-
-function testConstructOfSizeSize(n) {
- var str = innerArrayLiteral(n);
- var a = eval('[' + str + ']');
- var b = eval('new Array(' + str + ')')
- var c = eval('Array(' + str + ')')
- assertEquals(n, a.length);
+function testConstruction(len, elements_str) {
+ var a = eval('[' + elements_str + ']');
+ var b = eval('new Array(' + elements_str + ')')
+ var c = eval('Array(' + elements_str + ')')
+ assertEquals(len, a.length);
assertArrayEquals(a, b);
assertArrayEquals(a, c);
}
-
for (var i = 0; i < loop_count; i++) {
- // JSObject::kInitialMaxFastElementArray is 10000.
- for (var j = 1000; j < 12000; j += 1000) {
- testConstructOfSizeSize(j);
+ const N = 2000;
+ const literal = innerArrayLiteral(N);
+ let str = literal;
+ // JSObject::kInitialMaxFastElementArray is approximately 10000.
+ for (var j = N; j <= 12000; j += N) {
+ testConstruction(j, str);
+ str += ", " + literal;
}
}
-
for (var i = 0; i < loop_count; i++) {
assertArrayEquals(['xxx'], new Array('xxx'));
assertArrayEquals(['xxx'], Array('xxx'));
diff --git a/deps/v8/test/mjsunit/array-sort.js b/deps/v8/test/mjsunit/array-sort.js
index 34b31ae51d..8c2c6fca63 100644
--- a/deps/v8/test/mjsunit/array-sort.js
+++ b/deps/v8/test/mjsunit/array-sort.js
@@ -1,29 +1,6 @@
// Copyright 2010 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following
-// disclaimer in the documentation and/or other materials provided
-// with the distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived
-// from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
// Flags: --allow-natives-syntax
@@ -75,56 +52,6 @@ function TestNumberSort() {
TestNumberSort();
-function TestSmiLexicographicCompare() {
-
- assertFalse(%_IsSmi(2147483648), 'Update test for >32 bit Smi');
-
- // Collect a list of interesting Smis.
- var seen = {};
- var smis = [];
- function add(x) {
- if (x | 0 == x) {
- x = x | 0; // Canonicalizes to Smi if 32-bit signed and fits in Smi.
- }
- if (%_IsSmi(x) && !seen[x]) {
- seen[x] = 1;
- smis.push(x);
- }
- }
- function addSigned(x) {
- add(x);
- add(-x);
- }
-
- var BIGGER_THAN_ANY_SMI = 10 * 1000 * 1000 * 1000;
- for (var xb = 1; xb <= BIGGER_THAN_ANY_SMI; xb *= 10) {
- for (var xf = 0; xf <= 9; xf++) {
- for (var xo = -1; xo <= 1; xo++) {
- addSigned(xb * xf + xo);
- }
- }
- }
-
- for (var yb = 1; yb <= BIGGER_THAN_ANY_SMI; yb *= 2) {
- for (var yo = -2; yo <= 2; yo++) {
- addSigned(yb + yo);
- }
- }
-
- for (var i = 0; i < smis.length; i++) {
- for (var j = 0; j < smis.length; j++) {
- var x = smis[i];
- var y = smis[j];
- var lex = %SmiLexicographicCompare(x, y);
- var expected = (x == y) ? 0 : ((x + "") < (y + "") ? -1 : 1);
- assertEquals(lex, expected, x + " < " + y);
- }
- }
-}
-
-TestSmiLexicographicCompare();
-
-
// Test lexicographical string sorting.
function TestStringSort() {
var a = [ "cc", "c", "aa", "a", "bb", "b", "ab", "ac" ];
diff --git a/deps/v8/test/mjsunit/async-hooks/api-methods.js b/deps/v8/test/mjsunit/async-hooks/api-methods.js
new file mode 100644
index 0000000000..c013b7a50a
--- /dev/null
+++ b/deps/v8/test/mjsunit/async-hooks/api-methods.js
@@ -0,0 +1,76 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --expose-async-hooks
+
+// Check for invalid arguments handling
+(function() {
+ assertTrue(async_hooks.hasOwnProperty('createHook'),
+ 'Async hooks missing createHook method');
+
+ assertThrows(() => async_hooks.createHook());
+ assertThrows(() => async_hooks.createHook(123));
+ assertThrows(() => async_hooks.createHook('str'));
+})();
+
+// Check for correct API methods
+(function() {
+ assertTrue(async_hooks.hasOwnProperty('executionAsyncId'),
+ 'Async hooks missing executionAsyncId method');
+ assertTrue(async_hooks.hasOwnProperty('triggerAsyncId'),
+ 'Async hooks missing triggerAsyncId method');
+
+ let ah = async_hooks.createHook({});
+ assertTrue(ah.hasOwnProperty('enable'), 'Async hooks missing enable method');
+ assertTrue(ah.hasOwnProperty('disable'),
+ 'Async hooks missing disable method');
+})();
+
+// Check for correct enabling/disabling of async hooks
+(function() {
+ let storedPromise;
+ let ah = async_hooks.createHook({
+ init(asyncId, type, triggerAsyncId, resource) {
+ storedPromise = resource.promise || resource;
+ }
+ });
+ ah.enable();
+
+ let createdPromise = new Promise(function(resolve) {
+ resolve(42);
+ });
+ assertSame(storedPromise, createdPromise,
+ "Async hooks weren't enabled correctly");
+ ah.disable();
+ createdPromise = Promise.resolve(52);
+ assertNotSame(storedPromise, createdPromise,
+ "Async hooks weren't disabled correctly");
+ ah.enable();
+ createdPromise = Promise.resolve(62);
+ assertSame(storedPromise, createdPromise,
+ "Async hooks weren't enabled correctly");
+})();
diff --git a/deps/v8/test/mjsunit/async-hooks/async-await-tree.js b/deps/v8/test/mjsunit/async-hooks/async-await-tree.js
new file mode 100644
index 0000000000..955355cf31
--- /dev/null
+++ b/deps/v8/test/mjsunit/async-hooks/async-await-tree.js
@@ -0,0 +1,74 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --expose-async-hooks
+
+// Check for async/await asyncIds relation
+(function() {
+ let asyncIds = [], triggerIds = [];
+ let ah = async_hooks.createHook({
+ init(asyncId, type, triggerAsyncId, resource) {
+ if (type !== 'PROMISE') {
+ return;
+ }
+ asyncIds.push(asyncId);
+ triggerIds.push(triggerAsyncId);
+ },
+ });
+ ah.enable();
+
+ // Simplified version of Node.js util.promisify(setTimeout)
+ function sleep(callback, timeout) {
+ const promise = new Promise(function(resolve, reject) {
+ try {
+ setTimeout((err, ...values) => {
+ if (err) {
+ reject(err);
+ } else {
+ resolve(values[0]);
+ }
+ }, timeout);
+ } catch (err) {
+ reject(err);
+ }
+ });
+ return promise;
+ }
+
+ async function foo() {
+ await sleep(10);
+ }
+
+ foo().then(function() {
+ assertEquals(asyncIds.length, 6);
+ assertEquals(triggerIds.length, 6);
+ assertEquals(triggerIds[2], asyncIds[0]);
+ assertEquals(triggerIds[3], asyncIds[2]);
+ assertEquals(triggerIds[4], asyncIds[0]);
+ assertEquals(triggerIds[5], asyncIds[1]);
+ });
+})();
diff --git a/deps/v8/test/mjsunit/regress/regress-2988.js b/deps/v8/test/mjsunit/async-hooks/chained-promises.js
index 0311d2b76d..8b346530eb 100644
--- a/deps/v8/test/mjsunit/regress/regress-2988.js
+++ b/deps/v8/test/mjsunit/async-hooks/chained-promises.js
@@ -1,4 +1,4 @@
-// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright 2018 the V8 project authors. All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
@@ -25,15 +25,24 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-// Flags: --allow-natives-syntax --gc-global --throws
+// Flags: --expose-async-hooks
-var f = eval("(function f() { throw 'kaboom'; })");
-
-// Prepare that next MessageHandler::MakeMessageObject will result in
-// reclamation of existing script wrapper while weak handle is used.
-%FunctionGetScript(f);
-%SetAllocationTimeout(1000, 2);
-
-// This call throws to the console but the --throws flag passed to this
-// test will make sure we don't count it as an actual failure.
-f();
+// Check for chained promises asyncIds relation
+(function() {
+ let asyncIds = [], triggerIds = [];
+ let ah = async_hooks.createHook({
+ init(asyncId, type, triggerAsyncId, resource) {
+ asyncIds.push(asyncId);
+ triggerIds.push(triggerAsyncId);
+ },
+ });
+ ah.enable();
+ let createdPromise = new Promise(function(resolve) {
+ resolve(42);
+ }).then(function() {
+ assertEquals(asyncIds.length, 2, 'Exactly 2 promises should be inited');
+ assertEquals(triggerIds.length, 2, 'Exactly 2 promises should be inited');
+ assertEquals(triggerIds[1], asyncIds[0],
+ "Parent promise asyncId doesn't correspond to child triggerAsyncId");
+ });
+})();
diff --git a/deps/v8/test/mjsunit/async-hooks/execution-order.js b/deps/v8/test/mjsunit/async-hooks/execution-order.js
new file mode 100644
index 0000000000..f63ecf0032
--- /dev/null
+++ b/deps/v8/test/mjsunit/async-hooks/execution-order.js
@@ -0,0 +1,65 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --expose-async-hooks
+
+// Check for correct execution of available hooks and asyncIds
+(function() {
+ let inited = false, resolved = false, before = false, after = false;
+ let storedAsyncId;
+ let ah = async_hooks.createHook({
+ init(asyncId, type, triggerAsyncId, resource) {
+ if (type !== 'PROMISE') {
+ return;
+ }
+ inited = true;
+ storedAsyncId = asyncId;
+ },
+ promiseResolve(asyncId) {
+ assertEquals(asyncId, storedAsyncId, 'AsyncId mismatch in resolve hook');
+ resolved = true;
+ },
+ before(asyncId) {
+ assertEquals(asyncId, storedAsyncId, 'AsyncId mismatch in before hook');
+ before = true;
+ },
+ after(asyncId) {
+ assertEquals(asyncId, storedAsyncId, 'AsyncId mismatch in after hook');
+ after = true;
+ },
+ });
+ ah.enable();
+
+ new Promise(function(resolve) {
+ resolve(42);
+ }).then(function() {
+ assertTrue(inited, "Didn't call init hook");
+ assertTrue(resolved, "Didn't call resolve hook");
+ assertTrue(before, "Didn't call before hook before the callback");
+ assertFalse(after, "Called after hook before the callback");
+ });
+})();
diff --git a/deps/v8/test/mjsunit/async-hooks/promises-async-await.js b/deps/v8/test/mjsunit/async-hooks/promises-async-await.js
new file mode 100644
index 0000000000..2eba6ba6c5
--- /dev/null
+++ b/deps/v8/test/mjsunit/async-hooks/promises-async-await.js
@@ -0,0 +1,70 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --expose-async-hooks
+
+// Check for executionAsyncId/triggerAsyncId when chained promises and
+// async/await are combined
+(function() {
+ let p;
+ let outerExecutionAsyncId = -1, outerTriggerAsyncId = -1;
+
+ function inIrrelevantContext(resolve) {
+ resolve(42);
+ }
+
+ function inContext1(foo) {
+ foo();
+ }
+
+ function inContext2(foo) {
+ foo();
+ }
+
+ outerExecutionAsyncId = async_hooks.executionAsyncId();
+ outerTriggerAsyncId = async_hooks.triggerAsyncId();
+
+ inContext1(() => {
+ p = new Promise(resolve => {
+ assertEquals(outerExecutionAsyncId, async_hooks.executionAsyncId());
+ assertEquals(outerTriggerAsyncId, async_hooks.triggerAsyncId());
+ inIrrelevantContext(resolve);
+ }).then(() => {
+ assertNotEquals(outerExecutionAsyncId, async_hooks.executionAsyncId());
+ assertNotEquals(outerTriggerAsyncId, async_hooks.triggerAsyncId());
+ });
+ });
+
+ inContext2(async () => {
+ assertEquals(outerExecutionAsyncId, async_hooks.executionAsyncId());
+ assertEquals(outerTriggerAsyncId, async_hooks.triggerAsyncId());
+ await p;
+ assertNotEquals(outerExecutionAsyncId, async_hooks.executionAsyncId());
+ assertNotEquals(outerTriggerAsyncId, async_hooks.triggerAsyncId());
+ });
+
+})();
diff --git a/deps/v8/test/mjsunit/code-coverage-utils.js b/deps/v8/test/mjsunit/code-coverage-utils.js
index 009aa55e20..5783390222 100644
--- a/deps/v8/test/mjsunit/code-coverage-utils.js
+++ b/deps/v8/test/mjsunit/code-coverage-utils.js
@@ -13,7 +13,7 @@ let gen;
!function() {
function GetCoverage(source) {
for (var script of %DebugCollectCoverage()) {
- if (script.script.source == source) return script;
+ if (script.script === source) return script;
}
return undefined;
};
diff --git a/deps/v8/test/mjsunit/compiler/alloc-number.js b/deps/v8/test/mjsunit/compiler/alloc-number.js
index 85c39de431..cd062cafba 100644
--- a/deps/v8/test/mjsunit/compiler/alloc-number.js
+++ b/deps/v8/test/mjsunit/compiler/alloc-number.js
@@ -1,39 +1,20 @@
// Copyright 2010 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following
-// disclaimer in the documentation and/or other materials provided
-// with the distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived
-// from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+// Flags: --max-semi-space-size=1 --max-old-space-size=10
+
+// This test is specific to release builds. alloc-number-debug.js
+// has a fast version for debug builds.
// Try to get a GC because of a heap number allocation while we
// have live values (o) in a register.
function f(o) {
var x = 1.5;
var y = 2.5;
- for (var i = 1; i < 100000; i+=2) o.val = x + y + i;
+ for (var i = 1; i < 10000; i+=2) o.val = x + y + i;
return o;
}
var o = { val: 0 };
-for (var i = 0; i < 100; i++) f(o);
+for (var i = 0; i < 10; i++) f(o);
diff --git a/deps/v8/test/mjsunit/compiler/array-species.js b/deps/v8/test/mjsunit/compiler/array-species.js
new file mode 100644
index 0000000000..d1e8a1d180
--- /dev/null
+++ b/deps/v8/test/mjsunit/compiler/array-species.js
@@ -0,0 +1,33 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --allow-natives-syntax
+
+function Foo() {}
+
+function f() {
+ return [42].map(_ => 88);
+}
+
+let y;
+
+y = f();
+assertFalse(y instanceof Foo);
+assertInstanceof(y, Array);
+
+y = f();
+assertFalse(y instanceof Foo);
+assertInstanceof(y, Array);
+
+%OptimizeFunctionOnNextCall(f);
+
+y = f();
+assertFalse(y instanceof Foo);
+assertInstanceof(y, Array);
+
+assertTrue(Reflect.defineProperty(Array, Symbol.species, {value: Foo}));
+
+y = f();
+assertInstanceof(y, Foo);
+assertFalse(y instanceof Array);
diff --git a/deps/v8/test/mjsunit/compiler/dataview-get.js b/deps/v8/test/mjsunit/compiler/dataview-get.js
new file mode 100644
index 0000000000..6c64410344
--- /dev/null
+++ b/deps/v8/test/mjsunit/compiler/dataview-get.js
@@ -0,0 +1,173 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --allow-natives-syntax --opt --no-always-opt
+
+var buffer = new ArrayBuffer(64);
+var dataview = new DataView(buffer, 8, 24);
+
+var values = [-1, 2, -3, 42];
+
+function readUint8(offset) {
+ return dataview.getUint8(offset);
+}
+
+function readInt8Handled(offset) {
+ try {
+ return dataview.getInt8(offset);
+ } catch (e) {
+ return e;
+ }
+}
+
+function readUint16(offset, little_endian) {
+ return dataview.getUint16(offset, little_endian);
+}
+
+function readInt16Handled(offset, little_endian) {
+ try {
+ return dataview.getInt16(offset, little_endian);
+ } catch (e) {
+ return e;
+ }
+}
+
+function readUint32(offset, little_endian) {
+ return dataview.getUint32(offset, little_endian);
+}
+
+function readInt32Handled(offset, little_endian) {
+ try {
+ return dataview.getInt32(offset, little_endian);
+ } catch (e) {
+ return e;
+ }
+}
+
+function readFloat32(offset, little_endian) {
+ return dataview.getFloat32(offset, little_endian);
+}
+
+function readFloat64(offset, little_endian) {
+ return dataview.getFloat64(offset, little_endian);
+}
+
+function warmup(f) {
+ f(0);
+ f(1);
+ %OptimizeFunctionOnNextCall(f);
+ f(2);
+ f(3);
+}
+
+// TurboFan valid getInt8.
+for (var i = 0; i < values.length; i++) {
+ dataview.setInt8(i, values[i]);
+}
+warmup(readInt8Handled);
+assertOptimized(readInt8Handled);
+assertEquals(values[0], readInt8Handled(0));
+assertEquals(values[1], readInt8Handled(1));
+assertEquals(values[2], readInt8Handled(2));
+assertEquals(values[3], readInt8Handled(3));
+
+// TurboFan valid getUint8.
+dataview.setUint32(4, 0xdeadbeef);
+warmup(readUint8);
+assertOptimized(readUint8);
+assertEquals(0xde, readUint8(4));
+assertEquals(0xad, readUint8(5));
+assertEquals(0xbe, readUint8(6));
+assertEquals(0xef, readUint8(7));
+
+// TurboFan valid getUint16.
+dataview.setUint16(8, 0xabcd);
+warmup(readUint16);
+assertOptimized(readUint16);
+assertEquals(0xabcd, readUint16(8));
+assertEquals(0xcdab, readUint16(8, true));
+
+// TurboFan valid getInt16.
+let b1 = -0x1234;
+dataview.setInt16(10, b1);
+warmup(readInt16Handled);
+assertOptimized(readInt16Handled);
+assertEquals(b1, readInt16Handled(10));
+dataview.setInt16(10, b1, true);
+assertEquals(b1, readInt16Handled(10, true));
+
+// TurboFan valid getUint32.
+dataview.setUint32(12, 0xabcdef12);
+warmup(readUint32);
+assertOptimized(readUint32);
+assertEquals(0xabcdef12, readUint32(12));
+assertEquals(0x12efcdab, readUint32(12, true));
+
+// TurboFan valid getInt32.
+let b2 = -0x12345678;
+dataview.setInt32(16, b2);
+warmup(readInt32Handled);
+assertOptimized(readInt32Handled);
+assertEquals(b2, readInt32Handled(16));
+dataview.setInt32(16, b2, true);
+assertEquals(b2, readInt32Handled(16, true));
+
+// TurboFan valid getFloat32.
+let b3 = Math.fround(Math.E); // Round Math.E to float32.
+dataview.setFloat32(16, b3);
+warmup(readFloat32);
+assertOptimized(readFloat32);
+assertEquals(b3, readFloat32(16));
+dataview.setFloat32(16, b3, true);
+assertEquals(b3, readFloat32(16, true));
+
+// TurboFan valid getFloat64.
+let b4 = Math.PI;
+dataview.setFloat64(16, b4);
+warmup(readFloat64);
+assertOptimized(readFloat64);
+assertEquals(b4, readFloat64(16));
+dataview.setFloat64(16, b4, true);
+assertEquals(b4, readFloat64(16, true));
+
+
+// TurboFan out of bounds read, throw with exception handler.
+assertOptimized(readInt8Handled);
+assertInstanceof(readInt8Handled(24), RangeError);
+assertOptimized(readInt8Handled);
+assertOptimized(readInt16Handled);
+assertInstanceof(readInt16Handled(23), RangeError);
+assertOptimized(readInt16Handled);
+assertOptimized(readInt32Handled);
+assertInstanceof(readInt32Handled(21), RangeError);
+assertOptimized(readInt32Handled);
+
+// Without exception handler.
+assertOptimized(readUint8);
+assertThrows(() => readUint8(24));
+assertOptimized(readUint8);
+assertOptimized(readFloat32);
+assertThrows(() => readFloat32(21));
+assertOptimized(readFloat32);
+assertOptimized(readFloat64);
+assertThrows(() => readFloat64(17));
+assertOptimized(readFloat64);
+
+
+// TurboFan deoptimizations.
+assertOptimized(readInt8Handled);
+assertInstanceof(readInt8Handled(-1), RangeError); // Negative Smi deopts.
+assertUnoptimized(readInt8Handled);
+
+warmup(readInt8Handled);
+assertOptimized(readInt8Handled);
+assertEquals(values[3], readInt8Handled(3.14)); // Non-Smi index deopts.
+assertUnoptimized(readInt8Handled);
+
+// TurboFan neutered buffer.
+warmup(readInt8Handled);
+assertOptimized(readInt8Handled);
+%ArrayBufferNeuter(buffer);
+assertInstanceof(readInt8Handled(0), TypeError);
+assertOptimized(readInt8Handled);
diff --git a/deps/v8/test/mjsunit/compiler/dataview-set.js b/deps/v8/test/mjsunit/compiler/dataview-set.js
new file mode 100644
index 0000000000..07bcb8d93c
--- /dev/null
+++ b/deps/v8/test/mjsunit/compiler/dataview-set.js
@@ -0,0 +1,133 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --allow-natives-syntax --opt --no-always-opt
+
+var buffer = new ArrayBuffer(64);
+var dataview = new DataView(buffer, 8, 24);
+
+function writeUint8(offset, value) {
+ dataview.setUint8(offset, value);
+}
+
+function writeInt8Handled(offset, value) {
+ try {
+ dataview.setInt8(offset, value);
+ } catch(e) {
+ return e;
+ }
+}
+
+function writeUint16(offset, value, little_endian) {
+ dataview.setUint16(offset, value, little_endian);
+}
+
+function writeInt16(offset, value, little_endian) {
+ dataview.setInt16(offset, value, little_endian);
+}
+
+function writeUint32(offset, value, little_endian) {
+ dataview.setUint32(offset, value, little_endian);
+}
+
+function writeInt32(offset, value, little_endian) {
+ dataview.setInt32(offset, value, little_endian);
+}
+
+function writeFloat32(offset, value, little_endian) {
+ dataview.setFloat32(offset, value, little_endian);
+}
+
+function writeFloat64(offset, value, little_endian) {
+ dataview.setFloat64(offset, value, little_endian);
+}
+
+function warmup(f) {
+ f(0, 0);
+ f(0, 1);
+ %OptimizeFunctionOnNextCall(f);
+ f(0, 2);
+ f(0, 3);
+}
+
+// TurboFan valid setUint8.
+warmup(writeUint8);
+assertOptimized(writeUint8);
+writeUint8(0, 0xde);
+writeUint8(1, 0xad);
+writeUint8(2, 0xbe);
+writeUint8(3, 0xef);
+assertEquals(0xdeadbeef, dataview.getUint32(0));
+
+// TurboFan valid setInt8.
+warmup(writeInt8Handled);
+assertOptimized(writeInt8Handled);
+writeInt8Handled(0, -34);
+writeInt8Handled(1, -83);
+writeInt8Handled(2, -66);
+writeInt8Handled(3, -17);
+assertEquals(0xdeadbeef, dataview.getUint32(0));
+
+// TurboFan valid setUint16.
+warmup(writeUint16);
+assertOptimized(writeUint16);
+writeUint16(0, 0xdead);
+writeUint16(2, 0xefbe, true);
+assertEquals(0xdeadbeef, dataview.getUint32(0));
+
+// TurboFan valid setInt16.
+warmup(writeInt16);
+assertOptimized(writeInt16);
+writeInt16(0, -8531);
+writeInt16(2, -4162, true);
+assertEquals(0xdeadbeef, dataview.getUint32(0));
+
+// TurboFan valid setUint32.
+warmup(writeUint32);
+assertOptimized(writeUint32);
+writeUint32(0, 0xdeadbeef);
+assertEquals(0xdeadbeef, dataview.getUint32(0));
+writeUint32(0, 0xefbeadde, true);
+assertEquals(0xdeadbeef, dataview.getUint32(0));
+
+// TurboFan valid setInt32.
+warmup(writeInt32);
+assertOptimized(writeInt32);
+writeInt32(0, -559038737);
+assertEquals(0xdeadbeef, dataview.getUint32(0));
+writeInt32(0, -272716322, true);
+assertEquals(0xdeadbeef, dataview.getUint32(0));
+
+// TurboFan valid setFloat32.
+let b3 = Math.fround(Math.E); // Round Math.E to float32.
+warmup(writeFloat32);
+assertOptimized(writeFloat32);
+writeFloat32(4, b3);
+assertEquals(b3, dataview.getFloat32(4));
+writeFloat32(4, b3, true);
+assertEquals(b3, dataview.getFloat32(4, true));
+
+// TurboFan valid setFloat64.
+let b4 = Math.PI;
+warmup(writeFloat64);
+assertOptimized(writeFloat64);
+writeFloat64(8, b4);
+assertEquals(b4, dataview.getFloat64(8));
+writeFloat64(8, b4, true);
+assertEquals(b4, dataview.getFloat64(8, true));
+
+// TurboFan out of bounds read, throw with exception handler.
+assertOptimized(writeInt8Handled);
+assertInstanceof(writeInt8Handled(24, 0), RangeError);
+assertOptimized(writeInt8Handled);
+
+// Without exception handler.
+assertOptimized(writeUint8);
+assertThrows(() => writeUint8(24, 0));
+assertOptimized(writeUint8);
+
+// None of the stores wrote out of bounds.
+var bytes = new Uint8Array(buffer);
+for (var i = 0; i < 8; i++) assertEquals(0, bytes[i]);
+for (var i = 32; i < 64; i++) assertEquals(0, bytes[i]);
diff --git a/deps/v8/test/mjsunit/compiler/object-create.js b/deps/v8/test/mjsunit/compiler/object-create.js
new file mode 100644
index 0000000000..bd366fe0b0
--- /dev/null
+++ b/deps/v8/test/mjsunit/compiler/object-create.js
@@ -0,0 +1,27 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --allow-natives-syntax
+
+(function TestWithNullPrototype() {
+ function f() { return Object.create(null); }
+ f();
+ %OptimizeFunctionOnNextCall(f);
+ assertEquals(undefined, f().foo);
+})();
+
+(function TestWithCustomPrototype() {
+ const x = {foo: 42}; // This must be defined here for context specialization.
+ function f() { return Object.create(x); }
+ f();
+ %OptimizeFunctionOnNextCall(f);
+ assertEquals(42, f().foo);
+})();
+
+(function TestWithObjectPrototype() {
+ function f() { return Object.create(Object.prototype); }
+ f();
+ %OptimizeFunctionOnNextCall(f);
+ assertEquals("[object Object]", f().toString());
+})();
diff --git a/deps/v8/test/mjsunit/compiler/osr-nested.js b/deps/v8/test/mjsunit/compiler/osr-nested.js
index 4bdb0828ca..28c42c8f73 100644
--- a/deps/v8/test/mjsunit/compiler/osr-nested.js
+++ b/deps/v8/test/mjsunit/compiler/osr-nested.js
@@ -25,22 +25,23 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-// Flags: --use-osr
+// Flags: --use-osr --allow-natives-syntax
function f() {
var sum = 0;
for (var i = 0; i < 10; i++) {
- for (var j = 0; j < 100000; j++) {
+ for (var j = 0; j < 10; j++) {
var x = i + 2;
var y = x + 5;
var z = y + 3;
sum += z;
+ if (j == 5) %OptimizeOsr();
}
}
return sum;
}
-assertEquals(14500000, f());
-assertEquals(14500000, f());
-assertEquals(14500000, f());
+assertEquals(1450, f());
+assertEquals(1450, f());
+assertEquals(1450, f());
diff --git a/deps/v8/test/mjsunit/compiler/osr-one.js b/deps/v8/test/mjsunit/compiler/osr-one.js
index 2c27192d27..d52a1c8089 100644
--- a/deps/v8/test/mjsunit/compiler/osr-one.js
+++ b/deps/v8/test/mjsunit/compiler/osr-one.js
@@ -1,40 +1,20 @@
// Copyright 2013 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following
-// disclaimer in the documentation and/or other materials provided
-// with the distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived
-// from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
-// Flags: --use-osr
+// Flags: --use-osr --allow-natives-syntax
function f(x) {
var sum = 0;
- var count = 10000000;
+ var count = 10;
while (count > 0) {
sum += x;
count--;
+ if (count == 5) {
+ %OptimizeOsr();
+ }
}
return sum;
}
-assertEquals(50000000, f(5));
+assertEquals(50, f(5));
diff --git a/deps/v8/test/mjsunit/compiler/osr-two.js b/deps/v8/test/mjsunit/compiler/osr-two.js
index 8ac4c2cc12..36842b4beb 100644
--- a/deps/v8/test/mjsunit/compiler/osr-two.js
+++ b/deps/v8/test/mjsunit/compiler/osr-two.js
@@ -1,44 +1,24 @@
// Copyright 2013 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following
-// disclaimer in the documentation and/or other materials provided
-// with the distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived
-// from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
-// Flags: --use-osr
+// Flags: --use-osr --allow-natives-syntax
function f(x) {
var sum = 0;
- var outer = 100;
+ var outer = 10;
while (outer > 0) {
- var inner = 100000;
+ var inner = 10;
while (inner > 0) {
sum += x;
inner--;
+ if (inner == 5) {
+ %OptimizeOsr();
+ }
}
outer--;
}
return sum;
}
-assertEquals(50000000, f(5));
+assertEquals(500, f(5));
diff --git a/deps/v8/test/mjsunit/compiler/promise-species.js b/deps/v8/test/mjsunit/compiler/promise-species.js
new file mode 100644
index 0000000000..f029e3aad5
--- /dev/null
+++ b/deps/v8/test/mjsunit/compiler/promise-species.js
@@ -0,0 +1,29 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --allow-natives-syntax
+
+class Foo extends Promise {};
+
+function f() {
+ return new Promise(r => 88).then(x => 88);
+}
+
+let y;
+
+y = f();
+assertFalse(y instanceof Foo);
+
+y = f();
+assertFalse(y instanceof Foo);
+
+%OptimizeFunctionOnNextCall(f);
+
+y = f();
+assertFalse(y instanceof Foo);
+
+assertTrue(Reflect.defineProperty(Promise, Symbol.species, {value: Foo}));
+
+y = f();
+assertInstanceof(y, Foo);
diff --git a/deps/v8/test/mjsunit/es6/dataview-length.js b/deps/v8/test/mjsunit/es6/dataview-length.js
new file mode 100644
index 0000000000..925403924d
--- /dev/null
+++ b/deps/v8/test/mjsunit/es6/dataview-length.js
@@ -0,0 +1,7 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+"use strict";
+
+assertEquals(DataView.length, 1);
diff --git a/deps/v8/test/mjsunit/es6/typedarray-keyedstore-tonumber.js b/deps/v8/test/mjsunit/es6/typedarray-keyedstore-tonumber.js
new file mode 100644
index 0000000000..ca4861819d
--- /dev/null
+++ b/deps/v8/test/mjsunit/es6/typedarray-keyedstore-tonumber.js
@@ -0,0 +1,69 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+let TypedArrayConstructors = [
+ Float64Array,
+ Float32Array,
+ Uint32Array,
+ Int32Array,
+ Uint16Array,
+ Int16Array,
+ Uint8Array,
+ Uint8ClampedArray,
+ Int8Array,
+];
+
+// Test KeyedStore in uninitialized and monomorphic states.
+for (let C of TypedArrayConstructors) {
+ let keyedSta = function(array) {
+ var didRun = false;
+ array[0] = {
+ valueOf() {
+ didRun = true;
+ return 42;
+ }
+ };
+
+ return { didRun, array };
+ };
+
+ for (var i = 0; i < 3; ++i) {
+ var { didRun, array } = keyedSta(new C(1));
+ assertTrue(didRun);
+ assertEquals(array[0], 42);
+
+ // OOB store
+ // FIXME: Throw a TypeError when storing OOB in a TypedArray.
+ var { didRun } = keyedSta(new C);
+ assertTrue(didRun);
+ }
+}
+
+// Test KeyedStore in polymorphic and megamorphic states.
+do {
+ let keyedSta = function(array) {
+ var didRun = false;
+ array[0] = {
+ valueOf() {
+ didRun = true;
+ return 42;
+ }
+ };
+
+ return { didRun, array };
+ };
+
+ for (var i = 0; i < 3; ++i) {
+ for (var C of TypedArrayConstructors) {
+ var { didRun, array } = keyedSta(new C(1));
+ assertTrue(didRun);
+ assertEquals(array[0], 42);
+
+ // OOB store
+ // FIXME: Throw a TypeError when storing OOB in a TypedArray.
+ var { didRun } = keyedSta(new C);
+ assertTrue(didRun);
+ }
+ }
+} while (false);
diff --git a/deps/v8/test/mjsunit/es6/typedarray-sort.js b/deps/v8/test/mjsunit/es6/typedarray-sort.js
index d0a2810ccc..e2618ade6b 100644
--- a/deps/v8/test/mjsunit/es6/typedarray-sort.js
+++ b/deps/v8/test/mjsunit/es6/typedarray-sort.js
@@ -97,6 +97,7 @@ let constructorsWithArrays = [
ctor: Float64Array,
array: [2 ** 53, 2 ** 53 - 1, 1, 0, -1, -(2 ** 53 - 1), -(2 ** 53)]
},
+ {ctor: Uint8ClampedArray, array: [255, 254, 4, 3, 2, 1, 0]},
{
ctor: BigUint64Array,
array: [2n ** 64n - 1n, 2n ** 64n - 2n, 4n, 3n, 2n, 1n, 0n]
diff --git a/deps/v8/test/mjsunit/es8/async-await-interleaved.js b/deps/v8/test/mjsunit/es8/async-await-interleaved.js
new file mode 100644
index 0000000000..edc5a420ac
--- /dev/null
+++ b/deps/v8/test/mjsunit/es8/async-await-interleaved.js
@@ -0,0 +1,61 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Check for correct interleaving of Promises and async/await
+(function () {
+ const iterations = 10;
+ let promiseCounter = iterations;
+ let awaitCounter = 0;
+
+ async function check(v) {
+ awaitCounter = v;
+ // The following checks ensure that "await" takes 3 ticks on the
+ // microtask queue. Note: this will change in the future
+ if (awaitCounter === 0) {
+ assertEquals(iterations, promiseCounter);
+ } else if (awaitCounter <= Math.floor(iterations / 3)) {
+ assertEquals(iterations - awaitCounter * 3, promiseCounter);
+ } else {
+ assertEquals(0, promiseCounter);
+ }
+ }
+
+ async function f() {
+ for (let i = 0; i < iterations; i++) {
+ await check(i);
+ }
+ return 0;
+ }
+
+ function countdown(v) {
+ promiseCounter = v;
+ if (v > 0) Promise.resolve(v - 1).then(countdown);
+ }
+
+ countdown(iterations);
+ f();
+})();
diff --git a/deps/v8/test/mjsunit/generated-transition-stub.js b/deps/v8/test/mjsunit/generated-transition-stub.js
index dadaa3c99e..e6d949bbaa 100644
--- a/deps/v8/test/mjsunit/generated-transition-stub.js
+++ b/deps/v8/test/mjsunit/generated-transition-stub.js
@@ -1,36 +1,13 @@
// Copyright 2013 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following
-// disclaimer in the documentation and/or other materials provided
-// with the distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived
-// from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
// Flags: --allow-natives-syntax
%NeverOptimizeFunction(test);
function test() {
- var iteration_count = 1;
+ const iteration_count = 1;
function transition1(a, i, v) {
a[i] = v;
@@ -40,14 +17,14 @@ function test() {
// Test PACKED SMI -> PACKED DOUBLE
//
- var a1 = [0, 1, 2, 3, 4];
+ const a1 = [0, 1, 2, 3, 4];
transition1(a1, 0, 2.5);
- var a2 = [0, 1, 2, 3, 4];
+ const a2 = [0, 1, 2, 3, 4];
transition1(a2, 0, 2.5);
assertFalse(%HasHoleyElements(a2));
%OptimizeFunctionOnNextCall(transition1);
- var a3 = [0, 1, 2, 3, 4];
+ const a3 = [0, 1, 2, 3, 4];
assertTrue(%HasSmiElements(a3));
transition1(a3, 0, 2.5);
assertFalse(%HasHoleyElements(a3));
@@ -55,7 +32,7 @@ function test() {
assertEquals(2.5, a3[0]);
// Test handling of hole.
- var a4 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
+ const a4 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
a4.length = 7;
assertTrue(%HasSmiElements(a4));
transition1(a4, 0, 2.5);
@@ -65,7 +42,7 @@ function test() {
// Large array should deopt to runtimea
for (j = 0; j < iteration_count; ++j) {
- a5 = new Array();
+ const a5 = new Array();
for (i = 0; i < 0x40000; ++i) {
a5[i] = 0;
}
@@ -82,14 +59,14 @@ function test() {
a[i] = v;
}
- var b1 = [0, 1, 2, , 4];
+ const b1 = [0, 1, 2, , 4];
transition2(b1, 0, 2.5);
- var b2 = [0, 1, 2, , 4];
+ const b2 = [0, 1, 2, , 4];
transition2(b2, 0, 2.5);
assertTrue(%HasHoleyElements(b2));
%OptimizeFunctionOnNextCall(transition2);
- var b3 = [0, 1, 2, , 4];
+ const b3 = [0, 1, 2, , 4];
assertTrue(%HasSmiElements(b3));
assertTrue(%HasHoleyElements(b3));
transition2(b3, 0, 2.5);
@@ -99,7 +76,7 @@ function test() {
// Large array should deopt to runtime
for (j = 0; j < iteration_count; ++j) {
- b4 = [0, ,0];
+ const b4 = [0, ,0];
for (i = 3; i < 0x40000; ++i) {
b4[i] = 0;
}
@@ -116,15 +93,15 @@ function test() {
a[i] = v;
}
- var c1 = [0, 1, 2, 3.5, 4];
+ const c1 = [0, 1, 2, 3.5, 4];
transition3(c1, 0, new Object());
- var c2 = [0, 1, 2, 3.5, 4];
+ const c2 = [0, 1, 2, 3.5, 4];
transition3(c2, 0, new Object());
assertTrue(%HasObjectElements(c2));
assertTrue(!%HasHoleyElements(c2));
%OptimizeFunctionOnNextCall(transition3);
- var c3 = [0, 1, 2, 3.5, 4];
+ const c3 = [0, 1, 2, 3.5, 4];
assertTrue(%HasDoubleElements(c3));
assertTrue(!%HasHoleyElements(c3));
transition3(c3, 0, new Array());
@@ -136,7 +113,7 @@ function test() {
// Large array under the deopt threshold should be able to trigger GC without
// causing crashes.
for (j = 0; j < iteration_count; ++j) {
- c4 = [0, 2.5, 0];
+ const c4 = [0, 2.5, 0];
for (i = 3; i < 0xa000; ++i) {
c4[i] = 0;
}
@@ -150,7 +127,7 @@ function test() {
// Large array should deopt to runtime
for (j = 0; j < iteration_count; ++j) {
- c5 = [0, 2.5, 0];
+ const c5 = [0, 2.5, 0];
for (i = 3; i < 0x40000; ++i) {
c5[i] = 0;
}
@@ -170,15 +147,15 @@ function test() {
a[i] = v;
}
- var d1 = [0, 1, , 3.5, 4];
+ const d1 = [0, 1, , 3.5, 4];
transition4(d1, 0, new Object());
- var d2 = [0, 1, , 3.5, 4];
+ const d2 = [0, 1, , 3.5, 4];
transition4(d2, 0, new Object());
assertTrue(%HasObjectElements(d2));
assertTrue(%HasHoleyElements(d2));
%OptimizeFunctionOnNextCall(transition4);
- var d3 = [0, 1, , 3.5, 4];
+ const d3 = [0, 1, , 3.5, 4];
assertTrue(%HasDoubleElements(d3));
assertTrue(%HasHoleyElements(d3));
transition4(d3, 0, new Array());
@@ -190,7 +167,7 @@ function test() {
// Large array under the deopt threshold should be able to trigger GC without
// causing crashes.
for (j = 0; j < iteration_count; ++j) {
- d4 = [, 2.5, ,];
+ const d4 = [, 2.5, ,];
for (i = 3; i < 0xa000; ++i) {
d4[i] = 0;
}
@@ -205,7 +182,7 @@ function test() {
// Large array should deopt to runtime
for (j = 0; j < iteration_count; ++j) {
- d5 = [, 2.5, ,];
+ const d5 = [, 2.5, ,];
for (i = 3; i < 0x40000; ++i) {
d5[i] = 0;
}
diff --git a/deps/v8/test/mjsunit/harmony/array-flat-species.js b/deps/v8/test/mjsunit/harmony/array-flat-species.js
new file mode 100644
index 0000000000..d04f8a0875
--- /dev/null
+++ b/deps/v8/test/mjsunit/harmony/array-flat-species.js
@@ -0,0 +1,31 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --harmony-array-flat
+
+{
+ class MyArray extends Array {
+ static get [Symbol.species]() {
+ return Array;
+ }
+ }
+
+ const wannabe = new MyArray();
+ const flattened = wannabe.flat(Infinity);
+ assertEquals(false, flattened instanceof MyArray);
+ assertEquals(true, flattened instanceof Array);
+}
+
+{
+ class MyArray extends Array {
+ static get [Symbol.species]() {
+ return this;
+ }
+ }
+
+ const wannabe = new MyArray();
+ const flattened = wannabe.flat(Infinity);
+ assertEquals(true, flattened instanceof MyArray);
+ assertEquals(true, flattened instanceof Array);
+}
diff --git a/deps/v8/test/mjsunit/harmony/array-flat.js b/deps/v8/test/mjsunit/harmony/array-flat.js
new file mode 100644
index 0000000000..86571e8dce
--- /dev/null
+++ b/deps/v8/test/mjsunit/harmony/array-flat.js
@@ -0,0 +1,65 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --harmony-array-flat
+
+assertEquals(Array.prototype.flat.length, 0);
+assertEquals(Array.prototype.flat.name, 'flat');
+
+{
+ const input = [1, [2], [[3]]];
+
+ assertEquals(input.flat(), [1, 2, [3]]);
+ assertEquals(input.flat(1), [1, 2, [3]]);
+ assertEquals(input.flat(true), [1, 2, [3]]);
+ assertEquals(input.flat(undefined), [1, 2, [3]]);
+
+ assertEquals(input.flat(-Infinity), [1, [2], [[3]]]);
+ assertEquals(input.flat(-1), [1, [2], [[3]]]);
+ assertEquals(input.flat(-0), [1, [2], [[3]]]);
+ assertEquals(input.flat(0), [1, [2], [[3]]]);
+ assertEquals(input.flat(false), [1, [2], [[3]]]);
+ assertEquals(input.flat(null), [1, [2], [[3]]]);
+ assertEquals(input.flat(''), [1, [2], [[3]]]);
+ assertEquals(input.flat('foo'), [1, [2], [[3]]]);
+ assertEquals(input.flat(/./), [1, [2], [[3]]]);
+ assertEquals(input.flat([]), [1, [2], [[3]]]);
+ assertEquals(input.flat({}), [1, [2], [[3]]]);
+ assertEquals(
+ input.flat(new Proxy({}, {})), [1, [2], [[3]]]);
+ assertEquals(input.flat((x) => x), [1, [2], [[3]]]);
+ assertEquals(
+ input.flat(String), [1, [2], [[3]]]);
+
+ assertEquals(input.flat(2), [1, 2, 3]);
+ assertEquals(input.flat(Infinity), [1, 2, 3]);
+
+ assertThrows(() => { input.flat(Symbol()); }, TypeError);
+ assertThrows(() => { input.flat(Object.create(null)); }, TypeError);
+}
+
+{
+ const input = { 0: 'a', 1: 'b', 2: 'c', length: 'wat' };
+ assertEquals(Array.prototype.flat.call(input, Infinity), []);
+}
+
+{
+ let count = 0;
+ const input = {
+ get length() { ++count; return 0; }
+ };
+ const result = Array.prototype.flat.call(input, Infinity);
+ assertEquals(count, 1);
+}
+
+{
+ const descriptor = Object.getOwnPropertyDescriptor(
+ Array.prototype,
+ 'flat'
+ );
+ assertEquals(descriptor.value, Array.prototype.flat);
+ assertEquals(descriptor.writable, true);
+ assertEquals(descriptor.enumerable, false);
+ assertEquals(descriptor.configurable, true);
+}
diff --git a/deps/v8/test/mjsunit/harmony/array-flatMap-species.js b/deps/v8/test/mjsunit/harmony/array-flatMap-species.js
new file mode 100644
index 0000000000..d4159b4801
--- /dev/null
+++ b/deps/v8/test/mjsunit/harmony/array-flatMap-species.js
@@ -0,0 +1,31 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --harmony-array-flat
+
+{
+ class MyArray extends Array {
+ static get [Symbol.species]() {
+ return Array;
+ }
+ }
+
+ const wannabe = new MyArray();
+ const result = wannabe.flatMap(x => [x, x]);
+ assertEquals(false, result instanceof MyArray);
+ assertEquals(true, result instanceof Array);
+}
+
+{
+ class MyArray extends Array {
+ static get [Symbol.species]() {
+ return this;
+ }
+ }
+
+ const wannabe = new MyArray();
+ const result = wannabe.flatMap(x => [x, x]);
+ assertEquals(true, result instanceof MyArray);
+ assertEquals(true, result instanceof Array);
+}
diff --git a/deps/v8/test/mjsunit/harmony/array-flatMap.js b/deps/v8/test/mjsunit/harmony/array-flatMap.js
index d129c32e03..9f0426fe7f 100644
--- a/deps/v8/test/mjsunit/harmony/array-flatMap.js
+++ b/deps/v8/test/mjsunit/harmony/array-flatMap.js
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-array-flatten --allow-natives-syntax
+// Flags: --harmony-array-flat --allow-natives-syntax
assertEquals(Array.prototype.flatMap.length, 1);
assertEquals(Array.prototype.flatMap.name, 'flatMap');
@@ -16,78 +16,86 @@ assertEquals(
[[1, 1], [2, 4], [3, 9], [4, 16]]
);
-const elements = new Set([
- -Infinity,
- -1,
- -0,
- +0,
- +1,
- Infinity,
- null,
- undefined,
- true,
- false,
- '',
- 'foo',
- /./,
- [],
- {},
- Object.create(null),
- new Proxy({}, {}),
- Symbol(),
- x => x ** 2,
- String
-]);
+{
+ const elements = new Set([
+ -Infinity,
+ -1,
+ -0,
+ +0,
+ +1,
+ Infinity,
+ null,
+ undefined,
+ true,
+ false,
+ '',
+ 'foo',
+ /./,
+ [],
+ {},
+ Object.create(null),
+ new Proxy({}, {}),
+ Symbol(),
+ x => x ** 2,
+ String
+ ]);
-for (const value of elements) {
+ for (const value of elements) {
+ assertEquals(
+ [value].flatMap((element) => [element, element]),
+ [value, value]
+ );
+ }
+}
+
+{
+ const array = [42];
assertEquals(
- [value].flatMap((element) => [element, element]),
- [value, value]
+ [array].flatMap((element) => [element, element]),
+ [array, array]
);
}
-const array = [42];
-assertEquals(
- [array].flatMap((element) => [element, element]),
- [array, array]
-);
-
-const nonCallables = new Set([
- -Infinity,
- -1,
- -0,
- +0,
- +1,
- Infinity,
- null,
- undefined,
- true,
- false,
- '',
- 'foo',
- /./,
- [],
- {},
- Object.create(null),
- new Proxy({}, {}),
- Symbol(),
-]);
-for (const nonCallable of nonCallables) {
- assertThrows(() => {
- [].flatMap(nonCallable);
- }, TypeError);
+{
+ const nonCallables = new Set([
+ -Infinity,
+ -1,
+ -0,
+ +0,
+ +1,
+ Infinity,
+ null,
+ undefined,
+ true,
+ false,
+ '',
+ 'foo',
+ /./,
+ [],
+ {},
+ Object.create(null),
+ new Proxy({}, {}),
+ Symbol(),
+ ]);
+ for (const nonCallable of nonCallables) {
+ assertThrows(() => {
+ [].flatMap(nonCallable);
+ }, TypeError);
+ }
}
-const object = {
- foo: 42,
- get length() {
- object.foo = 0;
- }
-};
-const result = [object].flatMap((element) => [element, element]);
-%HeapObjectVerify(result);
-assertEquals(result, [object, object]);
-assertEquals(result[0].foo, 42);
+{
+ const object = {
+ foo: 42,
+ get length() {
+ object.foo = 0;
+ }
+ };
+ const result = [object].flatMap((element) => [element, element]);
+ %HeapObjectVerify(result);
+ assertEquals(result, [object, object]);
+ assertEquals(result[0].foo, 42);
+}
assertThrows(() => {
Array.prototype.flatMap.call(null, (element) => element);
@@ -118,3 +126,37 @@ assertEquals(
),
['a', 'b']
);
+
+{
+ const result = [1, 2, 3].flatMap(function() {
+ return [this];
+ }, 'abc');
+ assertEquals(true, result[0] == 'abc');
+ assertEquals(true, result[1] == 'abc');
+ assertEquals(true, result[2] == 'abc');
+}
+
+{
+ const input = { 0: 'a', 1: 'b', 2: 'c', length: 'wat' };
+ assertEquals(Array.prototype.flatMap.call(input, x => [x]), []);
+}
+
+{
+ let count = 0;
+ const input = {
+ get length() { ++count; return 0; }
+ };
+ const result = Array.prototype.flatMap.call(input, x => [x]);
+ assertEquals(count, 1);
+}
+
+{
+ const descriptor = Object.getOwnPropertyDescriptor(
+ Array.prototype,
+ 'flatMap'
+ );
+ assertEquals(descriptor.value, Array.prototype.flatMap);
+ assertEquals(descriptor.writable, true);
+ assertEquals(descriptor.enumerable, false);
+ assertEquals(descriptor.configurable, true);
+}
diff --git a/deps/v8/test/mjsunit/harmony/array-flatten.js b/deps/v8/test/mjsunit/harmony/array-flatten.js
deleted file mode 100644
index 7ca6218ed8..0000000000
--- a/deps/v8/test/mjsunit/harmony/array-flatten.js
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2018 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Flags: --harmony-array-flatten
-
-assertEquals(Array.prototype.flatten.length, 0);
-assertEquals(Array.prototype.flatten.name, 'flatten');
-
-const input = [1, [2], [[3]]];
-
-assertEquals(input.flatten(), [1, 2, [3]]);
-assertEquals(input.flatten(1), [1, 2, [3]]);
-assertEquals(input.flatten(true), [1, 2, [3]]);
-assertEquals(input.flatten(undefined), [1, 2, [3]]);
-
-assertEquals(input.flatten(-Infinity), [1, [2], [[3]]]);
-assertEquals(input.flatten(-1), [1, [2], [[3]]]);
-assertEquals(input.flatten(-0), [1, [2], [[3]]]);
-assertEquals(input.flatten(0), [1, [2], [[3]]]);
-assertEquals(input.flatten(false), [1, [2], [[3]]]);
-assertEquals(input.flatten(null), [1, [2], [[3]]]);
-assertEquals(input.flatten(''), [1, [2], [[3]]]);
-assertEquals(input.flatten('foo'), [1, [2], [[3]]]);
-assertEquals(input.flatten(/./), [1, [2], [[3]]]);
-assertEquals(input.flatten([]), [1, [2], [[3]]]);
-assertEquals(input.flatten({}), [1, [2], [[3]]]);
-assertEquals(
- input.flatten(new Proxy({}, {})), [1, [2], [[3]]]);
-assertEquals(input.flatten((x) => x), [1, [2], [[3]]]);
-assertEquals(
- input.flatten(String), [1, [2], [[3]]]);
-
-assertEquals(input.flatten(2), [1, 2, 3]);
-assertEquals(input.flatten(Infinity), [1, 2, 3]);
-
-assertThrows(() => { input.flatten(Symbol()); }, TypeError);
-assertThrows(() => { input.flatten(Object.create(null)); }, TypeError);
diff --git a/deps/v8/test/mjsunit/harmony/async-generators-basic.js b/deps/v8/test/mjsunit/harmony/async-generators-basic.js
index 12240e6114..cf21d9a8c8 100644
--- a/deps/v8/test/mjsunit/harmony/async-generators-basic.js
+++ b/deps/v8/test/mjsunit/harmony/async-generators-basic.js
@@ -103,12 +103,35 @@ function AbortUnreachable() {
// ----------------------------------------------------------------------------
// Do not install `AsyncGeneratorFunction` constructor on global object
assertEquals(undefined, this.AsyncGeneratorFunction);
-let AsyncGeneratorFunction = (async function*() {}).constructor;
+
+// ----------------------------------------------------------------------------
+let AsyncGenerator = Object.getPrototypeOf(async function*() {});
+let AsyncGeneratorPrototype = AsyncGenerator.prototype;
+
+// %AsyncGenerator% and %AsyncGeneratorPrototype% are both ordinary objects
+assertEquals("object", typeof AsyncGenerator);
+assertEquals("object", typeof AsyncGeneratorPrototype);
+
+// %AsyncGenerator% <---> %AsyncGeneratorPrototype% circular reference
+assertEquals(AsyncGenerator, AsyncGeneratorPrototype.constructor);
+assertEquals(AsyncGeneratorPrototype, AsyncGenerator.prototype);
+
+let protoDesc = Object.getOwnPropertyDescriptor(AsyncGenerator, 'prototype');
+assertFalse(protoDesc.enumerable);
+assertFalse(protoDesc.writable);
+assertTrue(protoDesc.configurable);
+
+let ctorDesc =
+ Object.getOwnPropertyDescriptor(AsyncGeneratorPrototype, 'constructor');
+assertFalse(ctorDesc.enumerable);
+assertFalse(ctorDesc.writable);
+assertTrue(ctorDesc.configurable);
// ----------------------------------------------------------------------------
// The AsyncGeneratorFunction Constructor is the %AsyncGeneratorFunction%
// intrinsic object and is a subclass of Function.
// (proposal-async-iteration/#sec-asyncgeneratorfunction-constructor)
+let AsyncGeneratorFunction = AsyncGenerator.constructor;
assertEquals(Object.getPrototypeOf(AsyncGeneratorFunction), Function);
assertEquals(Object.getPrototypeOf(AsyncGeneratorFunction.prototype),
Function.prototype);
diff --git a/deps/v8/test/mjsunit/harmony/bigint/dataview.js b/deps/v8/test/mjsunit/harmony/bigint/dataview.js
index c34a42ac1d..5ead649909 100644
--- a/deps/v8/test/mjsunit/harmony/bigint/dataview.js
+++ b/deps/v8/test/mjsunit/harmony/bigint/dataview.js
@@ -68,6 +68,16 @@ assertEquals(0x89, bytes[23]);
assertEquals(b2, dataview.getBigInt64(8, true));
assertEquals(0x89abcdef01234568n, dataview.getBigUint64(8, true));
+var b3 = -0x8000000000000000n; // The int64_t minimum value.
+dataview.setBigInt64(8, b3);
+assertEquals(b3, dataview.getBigInt64(8));
+assertEquals(-b3, dataview.getBigUint64(8));
+
+var b4 = 0x8000000000000000n;
+dataview.setBigInt64(8, b4);
+assertEquals(-b4, dataview.getBigInt64(8));
+assertEquals(b4, dataview.getBigUint64(8));
+
assertThrows(() => dataview.setBigInt64(0, 1), TypeError);
assertThrows(() => dataview.setBigUint64(0, 1), TypeError);
assertThrows(() => dataview.setInt32(0, 1n), TypeError);
diff --git a/deps/v8/test/mjsunit/harmony/bigintarray-keyedstore-tobigint.js b/deps/v8/test/mjsunit/harmony/bigintarray-keyedstore-tobigint.js
new file mode 100644
index 0000000000..29b44472c9
--- /dev/null
+++ b/deps/v8/test/mjsunit/harmony/bigintarray-keyedstore-tobigint.js
@@ -0,0 +1,64 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --harmony-bigint
+
+let TypedArrayConstructors = [
+ BigUint64Array,
+ BigInt64Array,
+];
+
+// Test KeyedStore in uninitialized and monomorphic states.
+for (let C of TypedArrayConstructors) {
+ let keyedSta = function(array) {
+ var didRun = false;
+ array[0] = {
+ valueOf() {
+ didRun = true;
+ return 42n;
+ }
+ };
+
+ return { didRun, array };
+ };
+
+ for (var i = 0; i < 3; ++i) {
+ var { didRun, array } = keyedSta(new C(1));
+ assertTrue(didRun);
+ assertEquals(array[0], 42n);
+
+ // OOB store
+ // FIXME: Throw a TypeError when storing OOB in a TypedArray.
+ var { didRun } = keyedSta(new C);
+ assertTrue(didRun);
+ }
+}
+
+// Test KeyedStore in polymorphic and megamorphic states.
+do {
+ let keyedSta = function(array) {
+ var didRun = false;
+ array[0] = {
+ valueOf() {
+ didRun = true;
+ return 42n;
+ }
+ };
+
+ return { didRun, array };
+ };
+
+ for (var i = 0; i < 3; ++i) {
+ for (var C of TypedArrayConstructors) {
+ var { didRun, array } = keyedSta(new C(1));
+ assertTrue(didRun);
+ assertEquals(array[0], 42n);
+
+ // OOB store
+ // FIXME: Throw a TypeError when storing OOB in a TypedArray.
+ var { didRun } = keyedSta(new C);
+ assertTrue(didRun);
+ }
+ }
+} while (false);
diff --git a/deps/v8/test/mjsunit/harmony/function-tostring.js b/deps/v8/test/mjsunit/harmony/function-tostring.js
index 8fccf0dacd..4a7e93cd3b 100644
--- a/deps/v8/test/mjsunit/harmony/function-tostring.js
+++ b/deps/v8/test/mjsunit/harmony/function-tostring.js
@@ -141,6 +141,30 @@ assertEquals("function () { [native code] }",
assertEquals("function () { [native code] }",
new Proxy({ method() { hidden } }.method, {}).toString());
+// Assert that we return a NativeFunction for script that has too large an
+// offset between function token position and start position for us to return
+// an exact representation of the source code.
+function testLongFunctionTokenOffset(functionType) {
+ var expected = "function f() { [native code] }";
+ // Spec requires that we return something that will cause eval to throws if we
+ // can't reproduce the function's source code.
+ assertThrows(() => eval(expected), SyntaxError);
+
+ var functionSource = functionType + " ".repeat(65535) + " f(){}";
+
+ // Function declaration
+ eval(functionSource);
+ assertEquals(expected, f.toString());
+
+ // Function expression
+ var f = eval("(" + functionSource + ")");
+ assertEquals(expected, f.toString());
+}
+testLongFunctionTokenOffset("function");
+testLongFunctionTokenOffset("function*");
+testLongFunctionTokenOffset("async function");
+testLongFunctionTokenOffset("async function*");
+
// Non-callable proxies still throw.
assertThrows(() => Function.prototype.toString.call(new Proxy({}, {})),
TypeError);
diff --git a/deps/v8/test/mjsunit/harmony/modules-import-9.js b/deps/v8/test/mjsunit/harmony/modules-import-9.js
index b39c7a519c..6794311305 100644
--- a/deps/v8/test/mjsunit/harmony/modules-import-9.js
+++ b/deps/v8/test/mjsunit/harmony/modules-import-9.js
@@ -8,7 +8,7 @@ var ran = false;
async function test() {
try {
- let namespace = await import('modules-skip-5.js');
+ let namespace = await import('modules-skip-5.js').then(x => x);
assertSame(namespace.static_life, namespace.dynamic_life);
assertSame(namespace.relative_static_life, namespace.dynamic_life);
ran = true;
diff --git a/deps/v8/test/mjsunit/harmony/optional-catch-binding-breaks.js b/deps/v8/test/mjsunit/harmony/optional-catch-binding-breaks.js
index 82be60cda1..7ba4ad03ab 100644
--- a/deps/v8/test/mjsunit/harmony/optional-catch-binding-breaks.js
+++ b/deps/v8/test/mjsunit/harmony/optional-catch-binding-breaks.js
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-optional-catch-binding
-
let state = 'initial';
x: try {
throw new Error('caught');
diff --git a/deps/v8/test/mjsunit/harmony/optional-catch-binding.js b/deps/v8/test/mjsunit/harmony/optional-catch-binding.js
index 093288c4e6..eaedc82a42 100644
--- a/deps/v8/test/mjsunit/harmony/optional-catch-binding.js
+++ b/deps/v8/test/mjsunit/harmony/optional-catch-binding.js
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-optional-catch-binding
-
let state = 'initial';
try {
throw new Error('caught');
diff --git a/deps/v8/test/mjsunit/harmony/promise-prototype-finally.js b/deps/v8/test/mjsunit/harmony/promise-prototype-finally.js
index 4e91f2e6d1..3051c91d2b 100644
--- a/deps/v8/test/mjsunit/harmony/promise-prototype-finally.js
+++ b/deps/v8/test/mjsunit/harmony/promise-prototype-finally.js
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-promise-finally --allow-natives-syntax
+// Flags: --allow-natives-syntax
assertThrows(() => Promise.prototype.finally.call(5), TypeError);
diff --git a/deps/v8/test/mjsunit/harmony/regexp-named-captures.js b/deps/v8/test/mjsunit/harmony/regexp-named-captures.js
index aab8393392..e1fa60dca4 100644
--- a/deps/v8/test/mjsunit/harmony/regexp-named-captures.js
+++ b/deps/v8/test/mjsunit/harmony/regexp-named-captures.js
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-named-captures --allow-natives-syntax
+// Flags: --allow-natives-syntax
// Malformed named captures.
assertThrows("/(?<>a)/u", SyntaxError); // Empty name.
diff --git a/deps/v8/test/mjsunit/harmony/regexp-property-binary.js b/deps/v8/test/mjsunit/harmony/regexp-property-binary.js
index d0c4dc577b..793e6ac540 100644
--- a/deps/v8/test/mjsunit/harmony/regexp-property-binary.js
+++ b/deps/v8/test/mjsunit/harmony/regexp-property-binary.js
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-property
-
function t(re, s) { assertTrue(re.test(s)); }
function f(re, s) { assertFalse(re.test(s)); }
diff --git a/deps/v8/test/mjsunit/harmony/regexp-property-char-class.js b/deps/v8/test/mjsunit/harmony/regexp-property-char-class.js
index 1de8acb5f2..7a64a9eb76 100644
--- a/deps/v8/test/mjsunit/harmony/regexp-property-char-class.js
+++ b/deps/v8/test/mjsunit/harmony/regexp-property-char-class.js
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-property
-
assertThrows("/[\\p]/u");
assertThrows("/[\\p{garbage}]/u");
assertThrows("/[\\p{}]/u");
diff --git a/deps/v8/test/mjsunit/harmony/regexp-property-disabled.js b/deps/v8/test/mjsunit/harmony/regexp-property-disabled.js
deleted file mode 100644
index f471ef4d9d..0000000000
--- a/deps/v8/test/mjsunit/harmony/regexp-property-disabled.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2016 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Flags: --no-harmony-regexp-property
-
-function test(source, message) {
- try {
- eval(source);
- } catch (e) {
- assertEquals(message, e.message);
- return;
- }
- assertUnreachable();
-}
-
-test("/\\pL/u", "Invalid regular expression: /\\pL/: Invalid escape");
-test("/[\\p{L}]/u", "Invalid regular expression: /[\\p{L}]/: Invalid escape");
diff --git a/deps/v8/test/mjsunit/harmony/regexp-property-enumerated.js b/deps/v8/test/mjsunit/harmony/regexp-property-enumerated.js
index e1db74c890..c58d2ae997 100644
--- a/deps/v8/test/mjsunit/harmony/regexp-property-enumerated.js
+++ b/deps/v8/test/mjsunit/harmony/regexp-property-enumerated.js
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-property
-
assertThrows("/\\p{Bidi_Class=L}+/u");
assertThrows("/\\p{bc=Left_To_Right}+/u");
assertThrows("/\\p{bc=AL}+/u");
diff --git a/deps/v8/test/mjsunit/harmony/regexp-property-exact-match.js b/deps/v8/test/mjsunit/harmony/regexp-property-exact-match.js
index 09d129eab2..d192f46c92 100644
--- a/deps/v8/test/mjsunit/harmony/regexp-property-exact-match.js
+++ b/deps/v8/test/mjsunit/harmony/regexp-property-exact-match.js
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-property
-
assertThrows("/\\p{In CJK}/u");
assertThrows("/\\p{InCJKUnifiedIdeographs}/u");
assertThrows("/\\p{InCJK}/u");
diff --git a/deps/v8/test/mjsunit/harmony/regexp-property-general-category.js b/deps/v8/test/mjsunit/harmony/regexp-property-general-category.js
index 3d514b03fe..fe39441d71 100644
--- a/deps/v8/test/mjsunit/harmony/regexp-property-general-category.js
+++ b/deps/v8/test/mjsunit/harmony/regexp-property-general-category.js
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-property
-
assertThrows("/\\p/u");
assertThrows("/\\p{garbage}/u");
assertThrows("/\\p{}/u");
diff --git a/deps/v8/test/mjsunit/harmony/regexp-property-invalid.js b/deps/v8/test/mjsunit/harmony/regexp-property-invalid.js
index 56c27ba500..83c7b2e209 100644
--- a/deps/v8/test/mjsunit/harmony/regexp-property-invalid.js
+++ b/deps/v8/test/mjsunit/harmony/regexp-property-invalid.js
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-property
-
assertThrows("/\p{Block=ASCII}+/u");
assertThrows("/\p{Block=ASCII}+/u");
assertThrows("/\p{Block=Basic_Latin}+/u");
diff --git a/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui0.js b/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui0.js
index 27911e7d6f..45aeb3f317 100644
--- a/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui0.js
+++ b/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui0.js
@@ -2,7 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-property
// Files: test/mjsunit/harmony/regexp-property-lu-ui.js
testCodePointRange(0);
diff --git a/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui1.js b/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui1.js
index e0177b835f..2cfad37eaa 100644
--- a/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui1.js
+++ b/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui1.js
@@ -2,7 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-property
// Files: test/mjsunit/harmony/regexp-property-lu-ui.js
testCodePointRange(1);
diff --git a/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui2.js b/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui2.js
index 7a916b0193..2d2457540d 100644
--- a/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui2.js
+++ b/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui2.js
@@ -2,7 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-property
// Files: test/mjsunit/harmony/regexp-property-lu-ui.js
testCodePointRange(2);
diff --git a/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui3.js b/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui3.js
index 51cf5224a1..788ab7dd85 100644
--- a/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui3.js
+++ b/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui3.js
@@ -2,7 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-property
// Files: test/mjsunit/harmony/regexp-property-lu-ui.js
testCodePointRange(3);
diff --git a/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui4.js b/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui4.js
index ab22e7f33d..0d5f5d7e15 100644
--- a/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui4.js
+++ b/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui4.js
@@ -2,7 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-property
// Files: test/mjsunit/harmony/regexp-property-lu-ui.js
testCodePointRange(4);
diff --git a/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui5.js b/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui5.js
index 668ddbf8f9..3d8bb814fb 100644
--- a/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui5.js
+++ b/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui5.js
@@ -2,7 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-property
// Files: test/mjsunit/harmony/regexp-property-lu-ui.js
testCodePointRange(5);
diff --git a/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui6.js b/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui6.js
index 51669e1afa..267c3759d1 100644
--- a/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui6.js
+++ b/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui6.js
@@ -2,7 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-property
// Files: test/mjsunit/harmony/regexp-property-lu-ui.js
testCodePointRange(6);
diff --git a/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui7.js b/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui7.js
index 68f3e0f66e..463d1cd75f 100644
--- a/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui7.js
+++ b/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui7.js
@@ -2,7 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-property
// Files: test/mjsunit/harmony/regexp-property-lu-ui.js
testCodePointRange(7);
diff --git a/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui8.js b/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui8.js
index b38abe2d23..f4bba8d1b9 100644
--- a/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui8.js
+++ b/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui8.js
@@ -2,7 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-property
// Files: test/mjsunit/harmony/regexp-property-lu-ui.js
testCodePointRange(8);
diff --git a/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui9.js b/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui9.js
index 5c9ca06e16..7eb4b318bb 100644
--- a/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui9.js
+++ b/deps/v8/test/mjsunit/harmony/regexp-property-lu-ui9.js
@@ -2,7 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-property
// Files: test/mjsunit/harmony/regexp-property-lu-ui.js
testCodePointRange(9);
diff --git a/deps/v8/test/mjsunit/harmony/regexp-property-script-extensions.js b/deps/v8/test/mjsunit/harmony/regexp-property-script-extensions.js
index e208c99abb..149ee90449 100644
--- a/deps/v8/test/mjsunit/harmony/regexp-property-script-extensions.js
+++ b/deps/v8/test/mjsunit/harmony/regexp-property-script-extensions.js
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-property
-
function t(re, s) { assertTrue(re.test(s)); }
function f(re, s) { assertFalse(re.test(s)); }
@@ -25,7 +23,7 @@ t(/\p{Script_Extensions=Cypriot}+/u, "\u{10107}");
f(/\p{Script=Cypriot}+/u, "\u{10107}");
f(/\p{scx=Cprt}+/u, "\u3003");
-/* Auto-generated from unicode data file using following script
+/* Auto-generated from Unicode data file using following script
let data = read("ScriptExtensions.txt");
let map = new Map();
for (let line of data.split("\n")) {
@@ -45,10 +43,6 @@ for (let line of data.split("\n")) {
for (let s of map.keys()){
let codepoints = map.get(s);
print(`// Script_Extension=${s}`);
- for (let c of codepoints.values()) {
- print(`t(/\\p{scx=${s}}/u, "\\u{${c.toString(16)}}");`);
- print(`f(/\\P{scx=${s}}/u, "\\u{${c.toString(16)}}");`);
- }
for (let i = 0; i < 5;) {
let c = (Math.random() * 0x110000) | 0;
if (codepoints.has(c)) continue;
@@ -58,2764 +52,384 @@ for (let s of map.keys()){
}
*/
-// Unicode version 9.0.0
+// Unicode version 11.0.0
+// https://unicode.org/Public/10.0.0/ucd/ScriptExtensions.txt
+
+// Script_Extension=Beng
+f(/(?=\P{sc=Beng})\p{scx=Beng}/u, "\u{e52ee}");
+f(/(?=\P{sc=Beng})\p{scx=Beng}/u, "\u{78b48}");
+f(/(?=\P{sc=Beng})\p{scx=Beng}/u, "\u{59987}");
+f(/(?=\P{sc=Beng})\p{scx=Beng}/u, "\u{d18a8}");
+f(/(?=\P{sc=Beng})\p{scx=Beng}/u, "\u{2b84e}");
// Script_Extension=Deva
-t(/\p{scx=Deva}/u, "\u{1cd1}");
-f(/\P{scx=Deva}/u, "\u{1cd1}");
-t(/\p{scx=Deva}/u, "\u{1cd4}");
-f(/\P{scx=Deva}/u, "\u{1cd4}");
-t(/\p{scx=Deva}/u, "\u{1cd5}");
-f(/\P{scx=Deva}/u, "\u{1cd5}");
-t(/\p{scx=Deva}/u, "\u{1cd6}");
-f(/\P{scx=Deva}/u, "\u{1cd6}");
-t(/\p{scx=Deva}/u, "\u{1cd8}");
-f(/\P{scx=Deva}/u, "\u{1cd8}");
-t(/\p{scx=Deva}/u, "\u{1cdb}");
-f(/\P{scx=Deva}/u, "\u{1cdb}");
-t(/\p{scx=Deva}/u, "\u{1cde}");
-f(/\P{scx=Deva}/u, "\u{1cde}");
-t(/\p{scx=Deva}/u, "\u{1cdf}");
-f(/\P{scx=Deva}/u, "\u{1cdf}");
-t(/\p{scx=Deva}/u, "\u{1ce1}");
-f(/\P{scx=Deva}/u, "\u{1ce1}");
-t(/\p{scx=Deva}/u, "\u{1ce2}");
-f(/\P{scx=Deva}/u, "\u{1ce2}");
-t(/\p{scx=Deva}/u, "\u{1ce3}");
-f(/\P{scx=Deva}/u, "\u{1ce3}");
-t(/\p{scx=Deva}/u, "\u{1ce4}");
-f(/\P{scx=Deva}/u, "\u{1ce4}");
-t(/\p{scx=Deva}/u, "\u{1ce5}");
-f(/\P{scx=Deva}/u, "\u{1ce5}");
-t(/\p{scx=Deva}/u, "\u{1ce6}");
-f(/\P{scx=Deva}/u, "\u{1ce6}");
-t(/\p{scx=Deva}/u, "\u{1ce7}");
-f(/\P{scx=Deva}/u, "\u{1ce7}");
-t(/\p{scx=Deva}/u, "\u{1ce8}");
-f(/\P{scx=Deva}/u, "\u{1ce8}");
-t(/\p{scx=Deva}/u, "\u{1ce9}");
-f(/\P{scx=Deva}/u, "\u{1ce9}");
-t(/\p{scx=Deva}/u, "\u{1cea}");
-f(/\P{scx=Deva}/u, "\u{1cea}");
-t(/\p{scx=Deva}/u, "\u{1ceb}");
-f(/\P{scx=Deva}/u, "\u{1ceb}");
-t(/\p{scx=Deva}/u, "\u{1cec}");
-f(/\P{scx=Deva}/u, "\u{1cec}");
-t(/\p{scx=Deva}/u, "\u{1ced}");
-f(/\P{scx=Deva}/u, "\u{1ced}");
-t(/\p{scx=Deva}/u, "\u{1cee}");
-f(/\P{scx=Deva}/u, "\u{1cee}");
-t(/\p{scx=Deva}/u, "\u{1cef}");
-f(/\P{scx=Deva}/u, "\u{1cef}");
-t(/\p{scx=Deva}/u, "\u{1cf0}");
-f(/\P{scx=Deva}/u, "\u{1cf0}");
-t(/\p{scx=Deva}/u, "\u{1cf1}");
-f(/\P{scx=Deva}/u, "\u{1cf1}");
-t(/\p{scx=Deva}/u, "\u{1cf6}");
-f(/\P{scx=Deva}/u, "\u{1cf6}");
-t(/\p{scx=Deva}/u, "\u{a8f1}");
-f(/\P{scx=Deva}/u, "\u{a8f1}");
-t(/\p{scx=Deva}/u, "\u{1cd0}");
-f(/\P{scx=Deva}/u, "\u{1cd0}");
-t(/\p{scx=Deva}/u, "\u{1cd2}");
-f(/\P{scx=Deva}/u, "\u{1cd2}");
-t(/\p{scx=Deva}/u, "\u{1cd3}");
-f(/\P{scx=Deva}/u, "\u{1cd3}");
-t(/\p{scx=Deva}/u, "\u{1cf2}");
-f(/\P{scx=Deva}/u, "\u{1cf2}");
-t(/\p{scx=Deva}/u, "\u{1cf3}");
-f(/\P{scx=Deva}/u, "\u{1cf3}");
-t(/\p{scx=Deva}/u, "\u{1cf4}");
-f(/\P{scx=Deva}/u, "\u{1cf4}");
-t(/\p{scx=Deva}/u, "\u{1cf8}");
-f(/\P{scx=Deva}/u, "\u{1cf8}");
-t(/\p{scx=Deva}/u, "\u{1cf9}");
-f(/\P{scx=Deva}/u, "\u{1cf9}");
-t(/\p{scx=Deva}/u, "\u{1cf5}");
-f(/\P{scx=Deva}/u, "\u{1cf5}");
-t(/\p{scx=Deva}/u, "\u{1cd7}");
-f(/\P{scx=Deva}/u, "\u{1cd7}");
-t(/\p{scx=Deva}/u, "\u{1cd9}");
-f(/\P{scx=Deva}/u, "\u{1cd9}");
-t(/\p{scx=Deva}/u, "\u{1cdc}");
-f(/\P{scx=Deva}/u, "\u{1cdc}");
-t(/\p{scx=Deva}/u, "\u{1cdd}");
-f(/\P{scx=Deva}/u, "\u{1cdd}");
-t(/\p{scx=Deva}/u, "\u{1ce0}");
-f(/\P{scx=Deva}/u, "\u{1ce0}");
-t(/\p{scx=Deva}/u, "\u{a8f3}");
-f(/\P{scx=Deva}/u, "\u{a8f3}");
-t(/\p{scx=Deva}/u, "\u{20f0}");
-f(/\P{scx=Deva}/u, "\u{20f0}");
-t(/\p{scx=Deva}/u, "\u{966}");
-f(/\P{scx=Deva}/u, "\u{966}");
-t(/\p{scx=Deva}/u, "\u{967}");
-f(/\P{scx=Deva}/u, "\u{967}");
-t(/\p{scx=Deva}/u, "\u{968}");
-f(/\P{scx=Deva}/u, "\u{968}");
-t(/\p{scx=Deva}/u, "\u{969}");
-f(/\P{scx=Deva}/u, "\u{969}");
-t(/\p{scx=Deva}/u, "\u{96a}");
-f(/\P{scx=Deva}/u, "\u{96a}");
-t(/\p{scx=Deva}/u, "\u{96b}");
-f(/\P{scx=Deva}/u, "\u{96b}");
-t(/\p{scx=Deva}/u, "\u{96c}");
-f(/\P{scx=Deva}/u, "\u{96c}");
-t(/\p{scx=Deva}/u, "\u{96d}");
-f(/\P{scx=Deva}/u, "\u{96d}");
-t(/\p{scx=Deva}/u, "\u{96e}");
-f(/\P{scx=Deva}/u, "\u{96e}");
-t(/\p{scx=Deva}/u, "\u{96f}");
-f(/\P{scx=Deva}/u, "\u{96f}");
-t(/\p{scx=Deva}/u, "\u{1cda}");
-f(/\P{scx=Deva}/u, "\u{1cda}");
-t(/\p{scx=Deva}/u, "\u{a836}");
-f(/\P{scx=Deva}/u, "\u{a836}");
-t(/\p{scx=Deva}/u, "\u{a837}");
-f(/\P{scx=Deva}/u, "\u{a837}");
-t(/\p{scx=Deva}/u, "\u{a838}");
-f(/\P{scx=Deva}/u, "\u{a838}");
-t(/\p{scx=Deva}/u, "\u{a839}");
-f(/\P{scx=Deva}/u, "\u{a839}");
-t(/\p{scx=Deva}/u, "\u{a830}");
-f(/\P{scx=Deva}/u, "\u{a830}");
-t(/\p{scx=Deva}/u, "\u{a831}");
-f(/\P{scx=Deva}/u, "\u{a831}");
-t(/\p{scx=Deva}/u, "\u{a832}");
-f(/\P{scx=Deva}/u, "\u{a832}");
-t(/\p{scx=Deva}/u, "\u{a833}");
-f(/\P{scx=Deva}/u, "\u{a833}");
-t(/\p{scx=Deva}/u, "\u{a834}");
-f(/\P{scx=Deva}/u, "\u{a834}");
-t(/\p{scx=Deva}/u, "\u{a835}");
-f(/\P{scx=Deva}/u, "\u{a835}");
-t(/\p{scx=Deva}/u, "\u{952}");
-f(/\P{scx=Deva}/u, "\u{952}");
-t(/\p{scx=Deva}/u, "\u{951}");
-f(/\P{scx=Deva}/u, "\u{951}");
-t(/\p{scx=Deva}/u, "\u{964}");
-f(/\P{scx=Deva}/u, "\u{964}");
-t(/\p{scx=Deva}/u, "\u{965}");
-f(/\P{scx=Deva}/u, "\u{965}");
-f(/(?=\P{sc=Deva})\p{scx=Deva}/u, "\u{ce0}");
-f(/(?=\P{sc=Deva})\p{scx=Deva}/u, "\u{98eb0}");
-f(/(?=\P{sc=Deva})\p{scx=Deva}/u, "\u{1b381}");
-f(/(?=\P{sc=Deva})\p{scx=Deva}/u, "\u{558ed}");
-f(/(?=\P{sc=Deva})\p{scx=Deva}/u, "\u{36998}");
+f(/(?=\P{sc=Deva})\p{scx=Deva}/u, "\u{757f8}");
+f(/(?=\P{sc=Deva})\p{scx=Deva}/u, "\u{2cb44}");
+f(/(?=\P{sc=Deva})\p{scx=Deva}/u, "\u{7624d}");
+f(/(?=\P{sc=Deva})\p{scx=Deva}/u, "\u{9a219}");
+f(/(?=\P{sc=Deva})\p{scx=Deva}/u, "\u{e41a8}");
// Script_Extension=Dupl
-t(/\p{scx=Dupl}/u, "\u{1bca0}");
-f(/\P{scx=Dupl}/u, "\u{1bca0}");
-t(/\p{scx=Dupl}/u, "\u{1bca1}");
-f(/\P{scx=Dupl}/u, "\u{1bca1}");
-t(/\p{scx=Dupl}/u, "\u{1bca2}");
-f(/\P{scx=Dupl}/u, "\u{1bca2}");
-t(/\p{scx=Dupl}/u, "\u{1bca3}");
-f(/\P{scx=Dupl}/u, "\u{1bca3}");
-f(/(?=\P{sc=Dupl})\p{scx=Dupl}/u, "\u{42ba7}");
-f(/(?=\P{sc=Dupl})\p{scx=Dupl}/u, "\u{fa669}");
-f(/(?=\P{sc=Dupl})\p{scx=Dupl}/u, "\u{8a725}");
-f(/(?=\P{sc=Dupl})\p{scx=Dupl}/u, "\u{4d069}");
-f(/(?=\P{sc=Dupl})\p{scx=Dupl}/u, "\u{b3c09}");
+f(/(?=\P{sc=Dupl})\p{scx=Dupl}/u, "\u{4ae62}");
+f(/(?=\P{sc=Dupl})\p{scx=Dupl}/u, "\u{b80a}");
+f(/(?=\P{sc=Dupl})\p{scx=Dupl}/u, "\u{c856c}");
+f(/(?=\P{sc=Dupl})\p{scx=Dupl}/u, "\u{36c5f}");
+f(/(?=\P{sc=Dupl})\p{scx=Dupl}/u, "\u{42ef3}");
// Script_Extension=Grek
-t(/\p{scx=Grek}/u, "\u{342}");
-f(/\P{scx=Grek}/u, "\u{342}");
-t(/\p{scx=Grek}/u, "\u{345}");
-f(/\P{scx=Grek}/u, "\u{345}");
-t(/\p{scx=Grek}/u, "\u{1dc0}");
-f(/\P{scx=Grek}/u, "\u{1dc0}");
-t(/\p{scx=Grek}/u, "\u{1dc1}");
-f(/\P{scx=Grek}/u, "\u{1dc1}");
-f(/(?=\P{sc=Grek})\p{scx=Grek}/u, "\u{dd38b}");
-f(/(?=\P{sc=Grek})\p{scx=Grek}/u, "\u{121bd}");
-f(/(?=\P{sc=Grek})\p{scx=Grek}/u, "\u{f8499}");
-f(/(?=\P{sc=Grek})\p{scx=Grek}/u, "\u{29b57}");
-f(/(?=\P{sc=Grek})\p{scx=Grek}/u, "\u{6e536}");
+f(/(?=\P{sc=Grek})\p{scx=Grek}/u, "\u{85c59}");
+f(/(?=\P{sc=Grek})\p{scx=Grek}/u, "\u{bd40}");
+f(/(?=\P{sc=Grek})\p{scx=Grek}/u, "\u{7ffef}");
+f(/(?=\P{sc=Grek})\p{scx=Grek}/u, "\u{b4a21}");
+f(/(?=\P{sc=Grek})\p{scx=Grek}/u, "\u{b97b3}");
// Script_Extension=Hani
-t(/\p{scx=Hani}/u, "\u{3006}");
-f(/\P{scx=Hani}/u, "\u{3006}");
-t(/\p{scx=Hani}/u, "\u{303e}");
-f(/\P{scx=Hani}/u, "\u{303e}");
-t(/\p{scx=Hani}/u, "\u{303f}");
-f(/\P{scx=Hani}/u, "\u{303f}");
-t(/\p{scx=Hani}/u, "\u{3190}");
-f(/\P{scx=Hani}/u, "\u{3190}");
-t(/\p{scx=Hani}/u, "\u{3191}");
-f(/\P{scx=Hani}/u, "\u{3191}");
-t(/\p{scx=Hani}/u, "\u{3192}");
-f(/\P{scx=Hani}/u, "\u{3192}");
-t(/\p{scx=Hani}/u, "\u{3193}");
-f(/\P{scx=Hani}/u, "\u{3193}");
-t(/\p{scx=Hani}/u, "\u{3194}");
-f(/\P{scx=Hani}/u, "\u{3194}");
-t(/\p{scx=Hani}/u, "\u{3195}");
-f(/\P{scx=Hani}/u, "\u{3195}");
-t(/\p{scx=Hani}/u, "\u{3196}");
-f(/\P{scx=Hani}/u, "\u{3196}");
-t(/\p{scx=Hani}/u, "\u{3197}");
-f(/\P{scx=Hani}/u, "\u{3197}");
-t(/\p{scx=Hani}/u, "\u{3198}");
-f(/\P{scx=Hani}/u, "\u{3198}");
-t(/\p{scx=Hani}/u, "\u{3199}");
-f(/\P{scx=Hani}/u, "\u{3199}");
-t(/\p{scx=Hani}/u, "\u{319a}");
-f(/\P{scx=Hani}/u, "\u{319a}");
-t(/\p{scx=Hani}/u, "\u{319b}");
-f(/\P{scx=Hani}/u, "\u{319b}");
-t(/\p{scx=Hani}/u, "\u{319c}");
-f(/\P{scx=Hani}/u, "\u{319c}");
-t(/\p{scx=Hani}/u, "\u{319d}");
-f(/\P{scx=Hani}/u, "\u{319d}");
-t(/\p{scx=Hani}/u, "\u{319e}");
-f(/\P{scx=Hani}/u, "\u{319e}");
-t(/\p{scx=Hani}/u, "\u{319f}");
-f(/\P{scx=Hani}/u, "\u{319f}");
-t(/\p{scx=Hani}/u, "\u{31c0}");
-f(/\P{scx=Hani}/u, "\u{31c0}");
-t(/\p{scx=Hani}/u, "\u{31c1}");
-f(/\P{scx=Hani}/u, "\u{31c1}");
-t(/\p{scx=Hani}/u, "\u{31c2}");
-f(/\P{scx=Hani}/u, "\u{31c2}");
-t(/\p{scx=Hani}/u, "\u{31c3}");
-f(/\P{scx=Hani}/u, "\u{31c3}");
-t(/\p{scx=Hani}/u, "\u{31c4}");
-f(/\P{scx=Hani}/u, "\u{31c4}");
-t(/\p{scx=Hani}/u, "\u{31c5}");
-f(/\P{scx=Hani}/u, "\u{31c5}");
-t(/\p{scx=Hani}/u, "\u{31c6}");
-f(/\P{scx=Hani}/u, "\u{31c6}");
-t(/\p{scx=Hani}/u, "\u{31c7}");
-f(/\P{scx=Hani}/u, "\u{31c7}");
-t(/\p{scx=Hani}/u, "\u{31c8}");
-f(/\P{scx=Hani}/u, "\u{31c8}");
-t(/\p{scx=Hani}/u, "\u{31c9}");
-f(/\P{scx=Hani}/u, "\u{31c9}");
-t(/\p{scx=Hani}/u, "\u{31ca}");
-f(/\P{scx=Hani}/u, "\u{31ca}");
-t(/\p{scx=Hani}/u, "\u{31cb}");
-f(/\P{scx=Hani}/u, "\u{31cb}");
-t(/\p{scx=Hani}/u, "\u{31cc}");
-f(/\P{scx=Hani}/u, "\u{31cc}");
-t(/\p{scx=Hani}/u, "\u{31cd}");
-f(/\P{scx=Hani}/u, "\u{31cd}");
-t(/\p{scx=Hani}/u, "\u{31ce}");
-f(/\P{scx=Hani}/u, "\u{31ce}");
-t(/\p{scx=Hani}/u, "\u{31cf}");
-f(/\P{scx=Hani}/u, "\u{31cf}");
-t(/\p{scx=Hani}/u, "\u{31d0}");
-f(/\P{scx=Hani}/u, "\u{31d0}");
-t(/\p{scx=Hani}/u, "\u{31d1}");
-f(/\P{scx=Hani}/u, "\u{31d1}");
-t(/\p{scx=Hani}/u, "\u{31d2}");
-f(/\P{scx=Hani}/u, "\u{31d2}");
-t(/\p{scx=Hani}/u, "\u{31d3}");
-f(/\P{scx=Hani}/u, "\u{31d3}");
-t(/\p{scx=Hani}/u, "\u{31d4}");
-f(/\P{scx=Hani}/u, "\u{31d4}");
-t(/\p{scx=Hani}/u, "\u{31d5}");
-f(/\P{scx=Hani}/u, "\u{31d5}");
-t(/\p{scx=Hani}/u, "\u{31d6}");
-f(/\P{scx=Hani}/u, "\u{31d6}");
-t(/\p{scx=Hani}/u, "\u{31d7}");
-f(/\P{scx=Hani}/u, "\u{31d7}");
-t(/\p{scx=Hani}/u, "\u{31d8}");
-f(/\P{scx=Hani}/u, "\u{31d8}");
-t(/\p{scx=Hani}/u, "\u{31d9}");
-f(/\P{scx=Hani}/u, "\u{31d9}");
-t(/\p{scx=Hani}/u, "\u{31da}");
-f(/\P{scx=Hani}/u, "\u{31da}");
-t(/\p{scx=Hani}/u, "\u{31db}");
-f(/\P{scx=Hani}/u, "\u{31db}");
-t(/\p{scx=Hani}/u, "\u{31dc}");
-f(/\P{scx=Hani}/u, "\u{31dc}");
-t(/\p{scx=Hani}/u, "\u{31dd}");
-f(/\P{scx=Hani}/u, "\u{31dd}");
-t(/\p{scx=Hani}/u, "\u{31de}");
-f(/\P{scx=Hani}/u, "\u{31de}");
-t(/\p{scx=Hani}/u, "\u{31df}");
-f(/\P{scx=Hani}/u, "\u{31df}");
-t(/\p{scx=Hani}/u, "\u{31e0}");
-f(/\P{scx=Hani}/u, "\u{31e0}");
-t(/\p{scx=Hani}/u, "\u{31e1}");
-f(/\P{scx=Hani}/u, "\u{31e1}");
-t(/\p{scx=Hani}/u, "\u{31e2}");
-f(/\P{scx=Hani}/u, "\u{31e2}");
-t(/\p{scx=Hani}/u, "\u{31e3}");
-f(/\P{scx=Hani}/u, "\u{31e3}");
-t(/\p{scx=Hani}/u, "\u{3220}");
-f(/\P{scx=Hani}/u, "\u{3220}");
-t(/\p{scx=Hani}/u, "\u{3221}");
-f(/\P{scx=Hani}/u, "\u{3221}");
-t(/\p{scx=Hani}/u, "\u{3222}");
-f(/\P{scx=Hani}/u, "\u{3222}");
-t(/\p{scx=Hani}/u, "\u{3223}");
-f(/\P{scx=Hani}/u, "\u{3223}");
-t(/\p{scx=Hani}/u, "\u{3224}");
-f(/\P{scx=Hani}/u, "\u{3224}");
-t(/\p{scx=Hani}/u, "\u{3225}");
-f(/\P{scx=Hani}/u, "\u{3225}");
-t(/\p{scx=Hani}/u, "\u{3226}");
-f(/\P{scx=Hani}/u, "\u{3226}");
-t(/\p{scx=Hani}/u, "\u{3227}");
-f(/\P{scx=Hani}/u, "\u{3227}");
-t(/\p{scx=Hani}/u, "\u{3228}");
-f(/\P{scx=Hani}/u, "\u{3228}");
-t(/\p{scx=Hani}/u, "\u{3229}");
-f(/\P{scx=Hani}/u, "\u{3229}");
-t(/\p{scx=Hani}/u, "\u{322a}");
-f(/\P{scx=Hani}/u, "\u{322a}");
-t(/\p{scx=Hani}/u, "\u{322b}");
-f(/\P{scx=Hani}/u, "\u{322b}");
-t(/\p{scx=Hani}/u, "\u{322c}");
-f(/\P{scx=Hani}/u, "\u{322c}");
-t(/\p{scx=Hani}/u, "\u{322d}");
-f(/\P{scx=Hani}/u, "\u{322d}");
-t(/\p{scx=Hani}/u, "\u{322e}");
-f(/\P{scx=Hani}/u, "\u{322e}");
-t(/\p{scx=Hani}/u, "\u{322f}");
-f(/\P{scx=Hani}/u, "\u{322f}");
-t(/\p{scx=Hani}/u, "\u{3230}");
-f(/\P{scx=Hani}/u, "\u{3230}");
-t(/\p{scx=Hani}/u, "\u{3231}");
-f(/\P{scx=Hani}/u, "\u{3231}");
-t(/\p{scx=Hani}/u, "\u{3232}");
-f(/\P{scx=Hani}/u, "\u{3232}");
-t(/\p{scx=Hani}/u, "\u{3233}");
-f(/\P{scx=Hani}/u, "\u{3233}");
-t(/\p{scx=Hani}/u, "\u{3234}");
-f(/\P{scx=Hani}/u, "\u{3234}");
-t(/\p{scx=Hani}/u, "\u{3235}");
-f(/\P{scx=Hani}/u, "\u{3235}");
-t(/\p{scx=Hani}/u, "\u{3236}");
-f(/\P{scx=Hani}/u, "\u{3236}");
-t(/\p{scx=Hani}/u, "\u{3237}");
-f(/\P{scx=Hani}/u, "\u{3237}");
-t(/\p{scx=Hani}/u, "\u{3238}");
-f(/\P{scx=Hani}/u, "\u{3238}");
-t(/\p{scx=Hani}/u, "\u{3239}");
-f(/\P{scx=Hani}/u, "\u{3239}");
-t(/\p{scx=Hani}/u, "\u{323a}");
-f(/\P{scx=Hani}/u, "\u{323a}");
-t(/\p{scx=Hani}/u, "\u{323b}");
-f(/\P{scx=Hani}/u, "\u{323b}");
-t(/\p{scx=Hani}/u, "\u{323c}");
-f(/\P{scx=Hani}/u, "\u{323c}");
-t(/\p{scx=Hani}/u, "\u{323d}");
-f(/\P{scx=Hani}/u, "\u{323d}");
-t(/\p{scx=Hani}/u, "\u{323e}");
-f(/\P{scx=Hani}/u, "\u{323e}");
-t(/\p{scx=Hani}/u, "\u{323f}");
-f(/\P{scx=Hani}/u, "\u{323f}");
-t(/\p{scx=Hani}/u, "\u{3240}");
-f(/\P{scx=Hani}/u, "\u{3240}");
-t(/\p{scx=Hani}/u, "\u{3241}");
-f(/\P{scx=Hani}/u, "\u{3241}");
-t(/\p{scx=Hani}/u, "\u{3242}");
-f(/\P{scx=Hani}/u, "\u{3242}");
-t(/\p{scx=Hani}/u, "\u{3243}");
-f(/\P{scx=Hani}/u, "\u{3243}");
-t(/\p{scx=Hani}/u, "\u{3244}");
-f(/\P{scx=Hani}/u, "\u{3244}");
-t(/\p{scx=Hani}/u, "\u{3245}");
-f(/\P{scx=Hani}/u, "\u{3245}");
-t(/\p{scx=Hani}/u, "\u{3246}");
-f(/\P{scx=Hani}/u, "\u{3246}");
-t(/\p{scx=Hani}/u, "\u{3247}");
-f(/\P{scx=Hani}/u, "\u{3247}");
-t(/\p{scx=Hani}/u, "\u{3280}");
-f(/\P{scx=Hani}/u, "\u{3280}");
-t(/\p{scx=Hani}/u, "\u{3281}");
-f(/\P{scx=Hani}/u, "\u{3281}");
-t(/\p{scx=Hani}/u, "\u{3282}");
-f(/\P{scx=Hani}/u, "\u{3282}");
-t(/\p{scx=Hani}/u, "\u{3283}");
-f(/\P{scx=Hani}/u, "\u{3283}");
-t(/\p{scx=Hani}/u, "\u{3284}");
-f(/\P{scx=Hani}/u, "\u{3284}");
-t(/\p{scx=Hani}/u, "\u{3285}");
-f(/\P{scx=Hani}/u, "\u{3285}");
-t(/\p{scx=Hani}/u, "\u{3286}");
-f(/\P{scx=Hani}/u, "\u{3286}");
-t(/\p{scx=Hani}/u, "\u{3287}");
-f(/\P{scx=Hani}/u, "\u{3287}");
-t(/\p{scx=Hani}/u, "\u{3288}");
-f(/\P{scx=Hani}/u, "\u{3288}");
-t(/\p{scx=Hani}/u, "\u{3289}");
-f(/\P{scx=Hani}/u, "\u{3289}");
-t(/\p{scx=Hani}/u, "\u{328a}");
-f(/\P{scx=Hani}/u, "\u{328a}");
-t(/\p{scx=Hani}/u, "\u{328b}");
-f(/\P{scx=Hani}/u, "\u{328b}");
-t(/\p{scx=Hani}/u, "\u{328c}");
-f(/\P{scx=Hani}/u, "\u{328c}");
-t(/\p{scx=Hani}/u, "\u{328d}");
-f(/\P{scx=Hani}/u, "\u{328d}");
-t(/\p{scx=Hani}/u, "\u{328e}");
-f(/\P{scx=Hani}/u, "\u{328e}");
-t(/\p{scx=Hani}/u, "\u{328f}");
-f(/\P{scx=Hani}/u, "\u{328f}");
-t(/\p{scx=Hani}/u, "\u{3290}");
-f(/\P{scx=Hani}/u, "\u{3290}");
-t(/\p{scx=Hani}/u, "\u{3291}");
-f(/\P{scx=Hani}/u, "\u{3291}");
-t(/\p{scx=Hani}/u, "\u{3292}");
-f(/\P{scx=Hani}/u, "\u{3292}");
-t(/\p{scx=Hani}/u, "\u{3293}");
-f(/\P{scx=Hani}/u, "\u{3293}");
-t(/\p{scx=Hani}/u, "\u{3294}");
-f(/\P{scx=Hani}/u, "\u{3294}");
-t(/\p{scx=Hani}/u, "\u{3295}");
-f(/\P{scx=Hani}/u, "\u{3295}");
-t(/\p{scx=Hani}/u, "\u{3296}");
-f(/\P{scx=Hani}/u, "\u{3296}");
-t(/\p{scx=Hani}/u, "\u{3297}");
-f(/\P{scx=Hani}/u, "\u{3297}");
-t(/\p{scx=Hani}/u, "\u{3298}");
-f(/\P{scx=Hani}/u, "\u{3298}");
-t(/\p{scx=Hani}/u, "\u{3299}");
-f(/\P{scx=Hani}/u, "\u{3299}");
-t(/\p{scx=Hani}/u, "\u{329a}");
-f(/\P{scx=Hani}/u, "\u{329a}");
-t(/\p{scx=Hani}/u, "\u{329b}");
-f(/\P{scx=Hani}/u, "\u{329b}");
-t(/\p{scx=Hani}/u, "\u{329c}");
-f(/\P{scx=Hani}/u, "\u{329c}");
-t(/\p{scx=Hani}/u, "\u{329d}");
-f(/\P{scx=Hani}/u, "\u{329d}");
-t(/\p{scx=Hani}/u, "\u{329e}");
-f(/\P{scx=Hani}/u, "\u{329e}");
-t(/\p{scx=Hani}/u, "\u{329f}");
-f(/\P{scx=Hani}/u, "\u{329f}");
-t(/\p{scx=Hani}/u, "\u{32a0}");
-f(/\P{scx=Hani}/u, "\u{32a0}");
-t(/\p{scx=Hani}/u, "\u{32a1}");
-f(/\P{scx=Hani}/u, "\u{32a1}");
-t(/\p{scx=Hani}/u, "\u{32a2}");
-f(/\P{scx=Hani}/u, "\u{32a2}");
-t(/\p{scx=Hani}/u, "\u{32a3}");
-f(/\P{scx=Hani}/u, "\u{32a3}");
-t(/\p{scx=Hani}/u, "\u{32a4}");
-f(/\P{scx=Hani}/u, "\u{32a4}");
-t(/\p{scx=Hani}/u, "\u{32a5}");
-f(/\P{scx=Hani}/u, "\u{32a5}");
-t(/\p{scx=Hani}/u, "\u{32a6}");
-f(/\P{scx=Hani}/u, "\u{32a6}");
-t(/\p{scx=Hani}/u, "\u{32a7}");
-f(/\P{scx=Hani}/u, "\u{32a7}");
-t(/\p{scx=Hani}/u, "\u{32a8}");
-f(/\P{scx=Hani}/u, "\u{32a8}");
-t(/\p{scx=Hani}/u, "\u{32a9}");
-f(/\P{scx=Hani}/u, "\u{32a9}");
-t(/\p{scx=Hani}/u, "\u{32aa}");
-f(/\P{scx=Hani}/u, "\u{32aa}");
-t(/\p{scx=Hani}/u, "\u{32ab}");
-f(/\P{scx=Hani}/u, "\u{32ab}");
-t(/\p{scx=Hani}/u, "\u{32ac}");
-f(/\P{scx=Hani}/u, "\u{32ac}");
-t(/\p{scx=Hani}/u, "\u{32ad}");
-f(/\P{scx=Hani}/u, "\u{32ad}");
-t(/\p{scx=Hani}/u, "\u{32ae}");
-f(/\P{scx=Hani}/u, "\u{32ae}");
-t(/\p{scx=Hani}/u, "\u{32af}");
-f(/\P{scx=Hani}/u, "\u{32af}");
-t(/\p{scx=Hani}/u, "\u{32b0}");
-f(/\P{scx=Hani}/u, "\u{32b0}");
-t(/\p{scx=Hani}/u, "\u{32c0}");
-f(/\P{scx=Hani}/u, "\u{32c0}");
-t(/\p{scx=Hani}/u, "\u{32c1}");
-f(/\P{scx=Hani}/u, "\u{32c1}");
-t(/\p{scx=Hani}/u, "\u{32c2}");
-f(/\P{scx=Hani}/u, "\u{32c2}");
-t(/\p{scx=Hani}/u, "\u{32c3}");
-f(/\P{scx=Hani}/u, "\u{32c3}");
-t(/\p{scx=Hani}/u, "\u{32c4}");
-f(/\P{scx=Hani}/u, "\u{32c4}");
-t(/\p{scx=Hani}/u, "\u{32c5}");
-f(/\P{scx=Hani}/u, "\u{32c5}");
-t(/\p{scx=Hani}/u, "\u{32c6}");
-f(/\P{scx=Hani}/u, "\u{32c6}");
-t(/\p{scx=Hani}/u, "\u{32c7}");
-f(/\P{scx=Hani}/u, "\u{32c7}");
-t(/\p{scx=Hani}/u, "\u{32c8}");
-f(/\P{scx=Hani}/u, "\u{32c8}");
-t(/\p{scx=Hani}/u, "\u{32c9}");
-f(/\P{scx=Hani}/u, "\u{32c9}");
-t(/\p{scx=Hani}/u, "\u{32ca}");
-f(/\P{scx=Hani}/u, "\u{32ca}");
-t(/\p{scx=Hani}/u, "\u{32cb}");
-f(/\P{scx=Hani}/u, "\u{32cb}");
-t(/\p{scx=Hani}/u, "\u{3358}");
-f(/\P{scx=Hani}/u, "\u{3358}");
-t(/\p{scx=Hani}/u, "\u{3359}");
-f(/\P{scx=Hani}/u, "\u{3359}");
-t(/\p{scx=Hani}/u, "\u{335a}");
-f(/\P{scx=Hani}/u, "\u{335a}");
-t(/\p{scx=Hani}/u, "\u{335b}");
-f(/\P{scx=Hani}/u, "\u{335b}");
-t(/\p{scx=Hani}/u, "\u{335c}");
-f(/\P{scx=Hani}/u, "\u{335c}");
-t(/\p{scx=Hani}/u, "\u{335d}");
-f(/\P{scx=Hani}/u, "\u{335d}");
-t(/\p{scx=Hani}/u, "\u{335e}");
-f(/\P{scx=Hani}/u, "\u{335e}");
-t(/\p{scx=Hani}/u, "\u{335f}");
-f(/\P{scx=Hani}/u, "\u{335f}");
-t(/\p{scx=Hani}/u, "\u{3360}");
-f(/\P{scx=Hani}/u, "\u{3360}");
-t(/\p{scx=Hani}/u, "\u{3361}");
-f(/\P{scx=Hani}/u, "\u{3361}");
-t(/\p{scx=Hani}/u, "\u{3362}");
-f(/\P{scx=Hani}/u, "\u{3362}");
-t(/\p{scx=Hani}/u, "\u{3363}");
-f(/\P{scx=Hani}/u, "\u{3363}");
-t(/\p{scx=Hani}/u, "\u{3364}");
-f(/\P{scx=Hani}/u, "\u{3364}");
-t(/\p{scx=Hani}/u, "\u{3365}");
-f(/\P{scx=Hani}/u, "\u{3365}");
-t(/\p{scx=Hani}/u, "\u{3366}");
-f(/\P{scx=Hani}/u, "\u{3366}");
-t(/\p{scx=Hani}/u, "\u{3367}");
-f(/\P{scx=Hani}/u, "\u{3367}");
-t(/\p{scx=Hani}/u, "\u{3368}");
-f(/\P{scx=Hani}/u, "\u{3368}");
-t(/\p{scx=Hani}/u, "\u{3369}");
-f(/\P{scx=Hani}/u, "\u{3369}");
-t(/\p{scx=Hani}/u, "\u{336a}");
-f(/\P{scx=Hani}/u, "\u{336a}");
-t(/\p{scx=Hani}/u, "\u{336b}");
-f(/\P{scx=Hani}/u, "\u{336b}");
-t(/\p{scx=Hani}/u, "\u{336c}");
-f(/\P{scx=Hani}/u, "\u{336c}");
-t(/\p{scx=Hani}/u, "\u{336d}");
-f(/\P{scx=Hani}/u, "\u{336d}");
-t(/\p{scx=Hani}/u, "\u{336e}");
-f(/\P{scx=Hani}/u, "\u{336e}");
-t(/\p{scx=Hani}/u, "\u{336f}");
-f(/\P{scx=Hani}/u, "\u{336f}");
-t(/\p{scx=Hani}/u, "\u{3370}");
-f(/\P{scx=Hani}/u, "\u{3370}");
-t(/\p{scx=Hani}/u, "\u{337b}");
-f(/\P{scx=Hani}/u, "\u{337b}");
-t(/\p{scx=Hani}/u, "\u{337c}");
-f(/\P{scx=Hani}/u, "\u{337c}");
-t(/\p{scx=Hani}/u, "\u{337d}");
-f(/\P{scx=Hani}/u, "\u{337d}");
-t(/\p{scx=Hani}/u, "\u{337e}");
-f(/\P{scx=Hani}/u, "\u{337e}");
-t(/\p{scx=Hani}/u, "\u{337f}");
-f(/\P{scx=Hani}/u, "\u{337f}");
-t(/\p{scx=Hani}/u, "\u{33e0}");
-f(/\P{scx=Hani}/u, "\u{33e0}");
-t(/\p{scx=Hani}/u, "\u{33e1}");
-f(/\P{scx=Hani}/u, "\u{33e1}");
-t(/\p{scx=Hani}/u, "\u{33e2}");
-f(/\P{scx=Hani}/u, "\u{33e2}");
-t(/\p{scx=Hani}/u, "\u{33e3}");
-f(/\P{scx=Hani}/u, "\u{33e3}");
-t(/\p{scx=Hani}/u, "\u{33e4}");
-f(/\P{scx=Hani}/u, "\u{33e4}");
-t(/\p{scx=Hani}/u, "\u{33e5}");
-f(/\P{scx=Hani}/u, "\u{33e5}");
-t(/\p{scx=Hani}/u, "\u{33e6}");
-f(/\P{scx=Hani}/u, "\u{33e6}");
-t(/\p{scx=Hani}/u, "\u{33e7}");
-f(/\P{scx=Hani}/u, "\u{33e7}");
-t(/\p{scx=Hani}/u, "\u{33e8}");
-f(/\P{scx=Hani}/u, "\u{33e8}");
-t(/\p{scx=Hani}/u, "\u{33e9}");
-f(/\P{scx=Hani}/u, "\u{33e9}");
-t(/\p{scx=Hani}/u, "\u{33ea}");
-f(/\P{scx=Hani}/u, "\u{33ea}");
-t(/\p{scx=Hani}/u, "\u{33eb}");
-f(/\P{scx=Hani}/u, "\u{33eb}");
-t(/\p{scx=Hani}/u, "\u{33ec}");
-f(/\P{scx=Hani}/u, "\u{33ec}");
-t(/\p{scx=Hani}/u, "\u{33ed}");
-f(/\P{scx=Hani}/u, "\u{33ed}");
-t(/\p{scx=Hani}/u, "\u{33ee}");
-f(/\P{scx=Hani}/u, "\u{33ee}");
-t(/\p{scx=Hani}/u, "\u{33ef}");
-f(/\P{scx=Hani}/u, "\u{33ef}");
-t(/\p{scx=Hani}/u, "\u{33f0}");
-f(/\P{scx=Hani}/u, "\u{33f0}");
-t(/\p{scx=Hani}/u, "\u{33f1}");
-f(/\P{scx=Hani}/u, "\u{33f1}");
-t(/\p{scx=Hani}/u, "\u{33f2}");
-f(/\P{scx=Hani}/u, "\u{33f2}");
-t(/\p{scx=Hani}/u, "\u{33f3}");
-f(/\P{scx=Hani}/u, "\u{33f3}");
-t(/\p{scx=Hani}/u, "\u{33f4}");
-f(/\P{scx=Hani}/u, "\u{33f4}");
-t(/\p{scx=Hani}/u, "\u{33f5}");
-f(/\P{scx=Hani}/u, "\u{33f5}");
-t(/\p{scx=Hani}/u, "\u{33f6}");
-f(/\P{scx=Hani}/u, "\u{33f6}");
-t(/\p{scx=Hani}/u, "\u{33f7}");
-f(/\P{scx=Hani}/u, "\u{33f7}");
-t(/\p{scx=Hani}/u, "\u{33f8}");
-f(/\P{scx=Hani}/u, "\u{33f8}");
-t(/\p{scx=Hani}/u, "\u{33f9}");
-f(/\P{scx=Hani}/u, "\u{33f9}");
-t(/\p{scx=Hani}/u, "\u{33fa}");
-f(/\P{scx=Hani}/u, "\u{33fa}");
-t(/\p{scx=Hani}/u, "\u{33fb}");
-f(/\P{scx=Hani}/u, "\u{33fb}");
-t(/\p{scx=Hani}/u, "\u{33fc}");
-f(/\P{scx=Hani}/u, "\u{33fc}");
-t(/\p{scx=Hani}/u, "\u{33fd}");
-f(/\P{scx=Hani}/u, "\u{33fd}");
-t(/\p{scx=Hani}/u, "\u{33fe}");
-f(/\P{scx=Hani}/u, "\u{33fe}");
-t(/\p{scx=Hani}/u, "\u{1d360}");
-f(/\P{scx=Hani}/u, "\u{1d360}");
-t(/\p{scx=Hani}/u, "\u{1d361}");
-f(/\P{scx=Hani}/u, "\u{1d361}");
-t(/\p{scx=Hani}/u, "\u{1d362}");
-f(/\P{scx=Hani}/u, "\u{1d362}");
-t(/\p{scx=Hani}/u, "\u{1d363}");
-f(/\P{scx=Hani}/u, "\u{1d363}");
-t(/\p{scx=Hani}/u, "\u{1d364}");
-f(/\P{scx=Hani}/u, "\u{1d364}");
-t(/\p{scx=Hani}/u, "\u{1d365}");
-f(/\P{scx=Hani}/u, "\u{1d365}");
-t(/\p{scx=Hani}/u, "\u{1d366}");
-f(/\P{scx=Hani}/u, "\u{1d366}");
-t(/\p{scx=Hani}/u, "\u{1d367}");
-f(/\P{scx=Hani}/u, "\u{1d367}");
-t(/\p{scx=Hani}/u, "\u{1d368}");
-f(/\P{scx=Hani}/u, "\u{1d368}");
-t(/\p{scx=Hani}/u, "\u{1d369}");
-f(/\P{scx=Hani}/u, "\u{1d369}");
-t(/\p{scx=Hani}/u, "\u{1d36a}");
-f(/\P{scx=Hani}/u, "\u{1d36a}");
-t(/\p{scx=Hani}/u, "\u{1d36b}");
-f(/\P{scx=Hani}/u, "\u{1d36b}");
-t(/\p{scx=Hani}/u, "\u{1d36c}");
-f(/\P{scx=Hani}/u, "\u{1d36c}");
-t(/\p{scx=Hani}/u, "\u{1d36d}");
-f(/\P{scx=Hani}/u, "\u{1d36d}");
-t(/\p{scx=Hani}/u, "\u{1d36e}");
-f(/\P{scx=Hani}/u, "\u{1d36e}");
-t(/\p{scx=Hani}/u, "\u{1d36f}");
-f(/\P{scx=Hani}/u, "\u{1d36f}");
-t(/\p{scx=Hani}/u, "\u{1d370}");
-f(/\P{scx=Hani}/u, "\u{1d370}");
-t(/\p{scx=Hani}/u, "\u{1d371}");
-f(/\P{scx=Hani}/u, "\u{1d371}");
-t(/\p{scx=Hani}/u, "\u{1f250}");
-f(/\P{scx=Hani}/u, "\u{1f250}");
-t(/\p{scx=Hani}/u, "\u{1f251}");
-f(/\P{scx=Hani}/u, "\u{1f251}");
-t(/\p{scx=Hani}/u, "\u{302a}");
-f(/\P{scx=Hani}/u, "\u{302a}");
-t(/\p{scx=Hani}/u, "\u{302b}");
-f(/\P{scx=Hani}/u, "\u{302b}");
-t(/\p{scx=Hani}/u, "\u{302c}");
-f(/\P{scx=Hani}/u, "\u{302c}");
-t(/\p{scx=Hani}/u, "\u{302d}");
-f(/\P{scx=Hani}/u, "\u{302d}");
-t(/\p{scx=Hani}/u, "\u{303c}");
-f(/\P{scx=Hani}/u, "\u{303c}");
-t(/\p{scx=Hani}/u, "\u{303d}");
-f(/\P{scx=Hani}/u, "\u{303d}");
-t(/\p{scx=Hani}/u, "\u{3003}");
-f(/\P{scx=Hani}/u, "\u{3003}");
-t(/\p{scx=Hani}/u, "\u{3013}");
-f(/\P{scx=Hani}/u, "\u{3013}");
-t(/\p{scx=Hani}/u, "\u{301c}");
-f(/\P{scx=Hani}/u, "\u{301c}");
-t(/\p{scx=Hani}/u, "\u{301d}");
-f(/\P{scx=Hani}/u, "\u{301d}");
-t(/\p{scx=Hani}/u, "\u{301e}");
-f(/\P{scx=Hani}/u, "\u{301e}");
-t(/\p{scx=Hani}/u, "\u{301f}");
-f(/\P{scx=Hani}/u, "\u{301f}");
-t(/\p{scx=Hani}/u, "\u{3030}");
-f(/\P{scx=Hani}/u, "\u{3030}");
-t(/\p{scx=Hani}/u, "\u{3037}");
-f(/\P{scx=Hani}/u, "\u{3037}");
-t(/\p{scx=Hani}/u, "\u{fe45}");
-f(/\P{scx=Hani}/u, "\u{fe45}");
-t(/\p{scx=Hani}/u, "\u{fe46}");
-f(/\P{scx=Hani}/u, "\u{fe46}");
-t(/\p{scx=Hani}/u, "\u{3001}");
-f(/\P{scx=Hani}/u, "\u{3001}");
-t(/\p{scx=Hani}/u, "\u{3002}");
-f(/\P{scx=Hani}/u, "\u{3002}");
-t(/\p{scx=Hani}/u, "\u{3008}");
-f(/\P{scx=Hani}/u, "\u{3008}");
-t(/\p{scx=Hani}/u, "\u{3009}");
-f(/\P{scx=Hani}/u, "\u{3009}");
-t(/\p{scx=Hani}/u, "\u{300a}");
-f(/\P{scx=Hani}/u, "\u{300a}");
-t(/\p{scx=Hani}/u, "\u{300b}");
-f(/\P{scx=Hani}/u, "\u{300b}");
-t(/\p{scx=Hani}/u, "\u{300c}");
-f(/\P{scx=Hani}/u, "\u{300c}");
-t(/\p{scx=Hani}/u, "\u{300d}");
-f(/\P{scx=Hani}/u, "\u{300d}");
-t(/\p{scx=Hani}/u, "\u{300e}");
-f(/\P{scx=Hani}/u, "\u{300e}");
-t(/\p{scx=Hani}/u, "\u{300f}");
-f(/\P{scx=Hani}/u, "\u{300f}");
-t(/\p{scx=Hani}/u, "\u{3010}");
-f(/\P{scx=Hani}/u, "\u{3010}");
-t(/\p{scx=Hani}/u, "\u{3011}");
-f(/\P{scx=Hani}/u, "\u{3011}");
-t(/\p{scx=Hani}/u, "\u{3014}");
-f(/\P{scx=Hani}/u, "\u{3014}");
-t(/\p{scx=Hani}/u, "\u{3015}");
-f(/\P{scx=Hani}/u, "\u{3015}");
-t(/\p{scx=Hani}/u, "\u{3016}");
-f(/\P{scx=Hani}/u, "\u{3016}");
-t(/\p{scx=Hani}/u, "\u{3017}");
-f(/\P{scx=Hani}/u, "\u{3017}");
-t(/\p{scx=Hani}/u, "\u{3018}");
-f(/\P{scx=Hani}/u, "\u{3018}");
-t(/\p{scx=Hani}/u, "\u{3019}");
-f(/\P{scx=Hani}/u, "\u{3019}");
-t(/\p{scx=Hani}/u, "\u{301a}");
-f(/\P{scx=Hani}/u, "\u{301a}");
-t(/\p{scx=Hani}/u, "\u{301b}");
-f(/\P{scx=Hani}/u, "\u{301b}");
-t(/\p{scx=Hani}/u, "\u{30fb}");
-f(/\P{scx=Hani}/u, "\u{30fb}");
-t(/\p{scx=Hani}/u, "\u{ff61}");
-f(/\P{scx=Hani}/u, "\u{ff61}");
-t(/\p{scx=Hani}/u, "\u{ff62}");
-f(/\P{scx=Hani}/u, "\u{ff62}");
-t(/\p{scx=Hani}/u, "\u{ff63}");
-f(/\P{scx=Hani}/u, "\u{ff63}");
-t(/\p{scx=Hani}/u, "\u{ff64}");
-f(/\P{scx=Hani}/u, "\u{ff64}");
-t(/\p{scx=Hani}/u, "\u{ff65}");
-f(/\P{scx=Hani}/u, "\u{ff65}");
-f(/(?=\P{sc=Hani})\p{scx=Hani}/u, "\u{a7c}");
-f(/(?=\P{sc=Hani})\p{scx=Hani}/u, "\u{9c8f4}");
-f(/(?=\P{sc=Hani})\p{scx=Hani}/u, "\u{54f00}");
-f(/(?=\P{sc=Hani})\p{scx=Hani}/u, "\u{6c549}");
-f(/(?=\P{sc=Hani})\p{scx=Hani}/u, "\u{c5c5}");
+f(/(?=\P{sc=Hani})\p{scx=Hani}/u, "\u{d59d4}");
+f(/(?=\P{sc=Hani})\p{scx=Hani}/u, "\u{8da54}");
+f(/(?=\P{sc=Hani})\p{scx=Hani}/u, "\u{77a36}");
+f(/(?=\P{sc=Hani})\p{scx=Hani}/u, "\u{8d66b}");
+f(/(?=\P{sc=Hani})\p{scx=Hani}/u, "\u{b2371}");
// Script_Extension=Latn
-t(/\p{scx=Latn}/u, "\u{363}");
-f(/\P{scx=Latn}/u, "\u{363}");
-t(/\p{scx=Latn}/u, "\u{364}");
-f(/\P{scx=Latn}/u, "\u{364}");
-t(/\p{scx=Latn}/u, "\u{365}");
-f(/\P{scx=Latn}/u, "\u{365}");
-t(/\p{scx=Latn}/u, "\u{366}");
-f(/\P{scx=Latn}/u, "\u{366}");
-t(/\p{scx=Latn}/u, "\u{367}");
-f(/\P{scx=Latn}/u, "\u{367}");
-t(/\p{scx=Latn}/u, "\u{368}");
-f(/\P{scx=Latn}/u, "\u{368}");
-t(/\p{scx=Latn}/u, "\u{369}");
-f(/\P{scx=Latn}/u, "\u{369}");
-t(/\p{scx=Latn}/u, "\u{36a}");
-f(/\P{scx=Latn}/u, "\u{36a}");
-t(/\p{scx=Latn}/u, "\u{36b}");
-f(/\P{scx=Latn}/u, "\u{36b}");
-t(/\p{scx=Latn}/u, "\u{36c}");
-f(/\P{scx=Latn}/u, "\u{36c}");
-t(/\p{scx=Latn}/u, "\u{36d}");
-f(/\P{scx=Latn}/u, "\u{36d}");
-t(/\p{scx=Latn}/u, "\u{36e}");
-f(/\P{scx=Latn}/u, "\u{36e}");
-t(/\p{scx=Latn}/u, "\u{36f}");
-f(/\P{scx=Latn}/u, "\u{36f}");
-t(/\p{scx=Latn}/u, "\u{485}");
-f(/\P{scx=Latn}/u, "\u{485}");
-t(/\p{scx=Latn}/u, "\u{486}");
-f(/\P{scx=Latn}/u, "\u{486}");
-t(/\p{scx=Latn}/u, "\u{10fb}");
-f(/\P{scx=Latn}/u, "\u{10fb}");
-t(/\p{scx=Latn}/u, "\u{20f0}");
-f(/\P{scx=Latn}/u, "\u{20f0}");
-t(/\p{scx=Latn}/u, "\u{a92e}");
-f(/\P{scx=Latn}/u, "\u{a92e}");
-t(/\p{scx=Latn}/u, "\u{952}");
-f(/\P{scx=Latn}/u, "\u{952}");
-t(/\p{scx=Latn}/u, "\u{951}");
-f(/\P{scx=Latn}/u, "\u{951}");
-f(/(?=\P{sc=Latn})\p{scx=Latn}/u, "\u{fcf93}");
-f(/(?=\P{sc=Latn})\p{scx=Latn}/u, "\u{f40d2}");
-f(/(?=\P{sc=Latn})\p{scx=Latn}/u, "\u{7f2e4}");
-f(/(?=\P{sc=Latn})\p{scx=Latn}/u, "\u{5ccdd}");
-f(/(?=\P{sc=Latn})\p{scx=Latn}/u, "\u{1010dd}");
+f(/(?=\P{sc=Latn})\p{scx=Latn}/u, "\u{10d47b}");
+f(/(?=\P{sc=Latn})\p{scx=Latn}/u, "\u{7a184}");
+f(/(?=\P{sc=Latn})\p{scx=Latn}/u, "\u{a64ac}");
+f(/(?=\P{sc=Latn})\p{scx=Latn}/u, "\u{ea450}");
+f(/(?=\P{sc=Latn})\p{scx=Latn}/u, "\u{ab23e}");
// Script_Extension=Arab
-t(/\p{scx=Arab}/u, "\u{102e0}");
-f(/\P{scx=Arab}/u, "\u{102e0}");
-t(/\p{scx=Arab}/u, "\u{102e1}");
-f(/\P{scx=Arab}/u, "\u{102e1}");
-t(/\p{scx=Arab}/u, "\u{102e2}");
-f(/\P{scx=Arab}/u, "\u{102e2}");
-t(/\p{scx=Arab}/u, "\u{102e3}");
-f(/\P{scx=Arab}/u, "\u{102e3}");
-t(/\p{scx=Arab}/u, "\u{102e4}");
-f(/\P{scx=Arab}/u, "\u{102e4}");
-t(/\p{scx=Arab}/u, "\u{102e5}");
-f(/\P{scx=Arab}/u, "\u{102e5}");
-t(/\p{scx=Arab}/u, "\u{102e6}");
-f(/\P{scx=Arab}/u, "\u{102e6}");
-t(/\p{scx=Arab}/u, "\u{102e7}");
-f(/\P{scx=Arab}/u, "\u{102e7}");
-t(/\p{scx=Arab}/u, "\u{102e8}");
-f(/\P{scx=Arab}/u, "\u{102e8}");
-t(/\p{scx=Arab}/u, "\u{102e9}");
-f(/\P{scx=Arab}/u, "\u{102e9}");
-t(/\p{scx=Arab}/u, "\u{102ea}");
-f(/\P{scx=Arab}/u, "\u{102ea}");
-t(/\p{scx=Arab}/u, "\u{102eb}");
-f(/\P{scx=Arab}/u, "\u{102eb}");
-t(/\p{scx=Arab}/u, "\u{102ec}");
-f(/\P{scx=Arab}/u, "\u{102ec}");
-t(/\p{scx=Arab}/u, "\u{102ed}");
-f(/\P{scx=Arab}/u, "\u{102ed}");
-t(/\p{scx=Arab}/u, "\u{102ee}");
-f(/\P{scx=Arab}/u, "\u{102ee}");
-t(/\p{scx=Arab}/u, "\u{102ef}");
-f(/\P{scx=Arab}/u, "\u{102ef}");
-t(/\p{scx=Arab}/u, "\u{102f0}");
-f(/\P{scx=Arab}/u, "\u{102f0}");
-t(/\p{scx=Arab}/u, "\u{102f1}");
-f(/\P{scx=Arab}/u, "\u{102f1}");
-t(/\p{scx=Arab}/u, "\u{102f2}");
-f(/\P{scx=Arab}/u, "\u{102f2}");
-t(/\p{scx=Arab}/u, "\u{102f3}");
-f(/\P{scx=Arab}/u, "\u{102f3}");
-t(/\p{scx=Arab}/u, "\u{102f4}");
-f(/\P{scx=Arab}/u, "\u{102f4}");
-t(/\p{scx=Arab}/u, "\u{102f5}");
-f(/\P{scx=Arab}/u, "\u{102f5}");
-t(/\p{scx=Arab}/u, "\u{102f6}");
-f(/\P{scx=Arab}/u, "\u{102f6}");
-t(/\p{scx=Arab}/u, "\u{102f7}");
-f(/\P{scx=Arab}/u, "\u{102f7}");
-t(/\p{scx=Arab}/u, "\u{102f8}");
-f(/\P{scx=Arab}/u, "\u{102f8}");
-t(/\p{scx=Arab}/u, "\u{102f9}");
-f(/\P{scx=Arab}/u, "\u{102f9}");
-t(/\p{scx=Arab}/u, "\u{102fa}");
-f(/\P{scx=Arab}/u, "\u{102fa}");
-t(/\p{scx=Arab}/u, "\u{102fb}");
-f(/\P{scx=Arab}/u, "\u{102fb}");
-t(/\p{scx=Arab}/u, "\u{64b}");
-f(/\P{scx=Arab}/u, "\u{64b}");
-t(/\p{scx=Arab}/u, "\u{64c}");
-f(/\P{scx=Arab}/u, "\u{64c}");
-t(/\p{scx=Arab}/u, "\u{64d}");
-f(/\P{scx=Arab}/u, "\u{64d}");
-t(/\p{scx=Arab}/u, "\u{64e}");
-f(/\P{scx=Arab}/u, "\u{64e}");
-t(/\p{scx=Arab}/u, "\u{64f}");
-f(/\P{scx=Arab}/u, "\u{64f}");
-t(/\p{scx=Arab}/u, "\u{650}");
-f(/\P{scx=Arab}/u, "\u{650}");
-t(/\p{scx=Arab}/u, "\u{651}");
-f(/\P{scx=Arab}/u, "\u{651}");
-t(/\p{scx=Arab}/u, "\u{652}");
-f(/\P{scx=Arab}/u, "\u{652}");
-t(/\p{scx=Arab}/u, "\u{653}");
-f(/\P{scx=Arab}/u, "\u{653}");
-t(/\p{scx=Arab}/u, "\u{654}");
-f(/\P{scx=Arab}/u, "\u{654}");
-t(/\p{scx=Arab}/u, "\u{655}");
-f(/\P{scx=Arab}/u, "\u{655}");
-t(/\p{scx=Arab}/u, "\u{670}");
-f(/\P{scx=Arab}/u, "\u{670}");
-t(/\p{scx=Arab}/u, "\u{660}");
-f(/\P{scx=Arab}/u, "\u{660}");
-t(/\p{scx=Arab}/u, "\u{661}");
-f(/\P{scx=Arab}/u, "\u{661}");
-t(/\p{scx=Arab}/u, "\u{662}");
-f(/\P{scx=Arab}/u, "\u{662}");
-t(/\p{scx=Arab}/u, "\u{663}");
-f(/\P{scx=Arab}/u, "\u{663}");
-t(/\p{scx=Arab}/u, "\u{664}");
-f(/\P{scx=Arab}/u, "\u{664}");
-t(/\p{scx=Arab}/u, "\u{665}");
-f(/\P{scx=Arab}/u, "\u{665}");
-t(/\p{scx=Arab}/u, "\u{666}");
-f(/\P{scx=Arab}/u, "\u{666}");
-t(/\p{scx=Arab}/u, "\u{667}");
-f(/\P{scx=Arab}/u, "\u{667}");
-t(/\p{scx=Arab}/u, "\u{668}");
-f(/\P{scx=Arab}/u, "\u{668}");
-t(/\p{scx=Arab}/u, "\u{669}");
-f(/\P{scx=Arab}/u, "\u{669}");
-t(/\p{scx=Arab}/u, "\u{fdf2}");
-f(/\P{scx=Arab}/u, "\u{fdf2}");
-t(/\p{scx=Arab}/u, "\u{fdfd}");
-f(/\P{scx=Arab}/u, "\u{fdfd}");
-t(/\p{scx=Arab}/u, "\u{60c}");
-f(/\P{scx=Arab}/u, "\u{60c}");
-t(/\p{scx=Arab}/u, "\u{61b}");
-f(/\P{scx=Arab}/u, "\u{61b}");
-t(/\p{scx=Arab}/u, "\u{61f}");
-f(/\P{scx=Arab}/u, "\u{61f}");
-t(/\p{scx=Arab}/u, "\u{640}");
-f(/\P{scx=Arab}/u, "\u{640}");
-f(/(?=\P{sc=Arab})\p{scx=Arab}/u, "\u{8901f}");
-f(/(?=\P{sc=Arab})\p{scx=Arab}/u, "\u{91256}");
-f(/(?=\P{sc=Arab})\p{scx=Arab}/u, "\u{71d97}");
-f(/(?=\P{sc=Arab})\p{scx=Arab}/u, "\u{3c94d}");
-f(/(?=\P{sc=Arab})\p{scx=Arab}/u, "\u{f9299}");
+f(/(?=\P{sc=Arab})\p{scx=Arab}/u, "\u{43609}");
+f(/(?=\P{sc=Arab})\p{scx=Arab}/u, "\u{bea28}");
+f(/(?=\P{sc=Arab})\p{scx=Arab}/u, "\u{f9ef}");
+f(/(?=\P{sc=Arab})\p{scx=Arab}/u, "\u{7b3fc}");
+f(/(?=\P{sc=Arab})\p{scx=Arab}/u, "\u{3a64a}");
// Script_Extension=Copt
-t(/\p{scx=Copt}/u, "\u{102e0}");
-f(/\P{scx=Copt}/u, "\u{102e0}");
-t(/\p{scx=Copt}/u, "\u{102e1}");
-f(/\P{scx=Copt}/u, "\u{102e1}");
-t(/\p{scx=Copt}/u, "\u{102e2}");
-f(/\P{scx=Copt}/u, "\u{102e2}");
-t(/\p{scx=Copt}/u, "\u{102e3}");
-f(/\P{scx=Copt}/u, "\u{102e3}");
-t(/\p{scx=Copt}/u, "\u{102e4}");
-f(/\P{scx=Copt}/u, "\u{102e4}");
-t(/\p{scx=Copt}/u, "\u{102e5}");
-f(/\P{scx=Copt}/u, "\u{102e5}");
-t(/\p{scx=Copt}/u, "\u{102e6}");
-f(/\P{scx=Copt}/u, "\u{102e6}");
-t(/\p{scx=Copt}/u, "\u{102e7}");
-f(/\P{scx=Copt}/u, "\u{102e7}");
-t(/\p{scx=Copt}/u, "\u{102e8}");
-f(/\P{scx=Copt}/u, "\u{102e8}");
-t(/\p{scx=Copt}/u, "\u{102e9}");
-f(/\P{scx=Copt}/u, "\u{102e9}");
-t(/\p{scx=Copt}/u, "\u{102ea}");
-f(/\P{scx=Copt}/u, "\u{102ea}");
-t(/\p{scx=Copt}/u, "\u{102eb}");
-f(/\P{scx=Copt}/u, "\u{102eb}");
-t(/\p{scx=Copt}/u, "\u{102ec}");
-f(/\P{scx=Copt}/u, "\u{102ec}");
-t(/\p{scx=Copt}/u, "\u{102ed}");
-f(/\P{scx=Copt}/u, "\u{102ed}");
-t(/\p{scx=Copt}/u, "\u{102ee}");
-f(/\P{scx=Copt}/u, "\u{102ee}");
-t(/\p{scx=Copt}/u, "\u{102ef}");
-f(/\P{scx=Copt}/u, "\u{102ef}");
-t(/\p{scx=Copt}/u, "\u{102f0}");
-f(/\P{scx=Copt}/u, "\u{102f0}");
-t(/\p{scx=Copt}/u, "\u{102f1}");
-f(/\P{scx=Copt}/u, "\u{102f1}");
-t(/\p{scx=Copt}/u, "\u{102f2}");
-f(/\P{scx=Copt}/u, "\u{102f2}");
-t(/\p{scx=Copt}/u, "\u{102f3}");
-f(/\P{scx=Copt}/u, "\u{102f3}");
-t(/\p{scx=Copt}/u, "\u{102f4}");
-f(/\P{scx=Copt}/u, "\u{102f4}");
-t(/\p{scx=Copt}/u, "\u{102f5}");
-f(/\P{scx=Copt}/u, "\u{102f5}");
-t(/\p{scx=Copt}/u, "\u{102f6}");
-f(/\P{scx=Copt}/u, "\u{102f6}");
-t(/\p{scx=Copt}/u, "\u{102f7}");
-f(/\P{scx=Copt}/u, "\u{102f7}");
-t(/\p{scx=Copt}/u, "\u{102f8}");
-f(/\P{scx=Copt}/u, "\u{102f8}");
-t(/\p{scx=Copt}/u, "\u{102f9}");
-f(/\P{scx=Copt}/u, "\u{102f9}");
-t(/\p{scx=Copt}/u, "\u{102fa}");
-f(/\P{scx=Copt}/u, "\u{102fa}");
-t(/\p{scx=Copt}/u, "\u{102fb}");
-f(/\P{scx=Copt}/u, "\u{102fb}");
-f(/(?=\P{sc=Copt})\p{scx=Copt}/u, "\u{b543e}");
-f(/(?=\P{sc=Copt})\p{scx=Copt}/u, "\u{10ce3f}");
-f(/(?=\P{sc=Copt})\p{scx=Copt}/u, "\u{ea3a9}");
-f(/(?=\P{sc=Copt})\p{scx=Copt}/u, "\u{83f15}");
-f(/(?=\P{sc=Copt})\p{scx=Copt}/u, "\u{8b9a5}");
+f(/(?=\P{sc=Copt})\p{scx=Copt}/u, "\u{a7927}");
+f(/(?=\P{sc=Copt})\p{scx=Copt}/u, "\u{e11a5}");
+f(/(?=\P{sc=Copt})\p{scx=Copt}/u, "\u{a7afe}");
+f(/(?=\P{sc=Copt})\p{scx=Copt}/u, "\u{68bd4}");
+f(/(?=\P{sc=Copt})\p{scx=Copt}/u, "\u{4c963}");
+// Script_Extension=Rohg
+f(/(?=\P{sc=Rohg})\p{scx=Rohg}/u, "\u{cd74e}");
+f(/(?=\P{sc=Rohg})\p{scx=Rohg}/u, "\u{c4e3c}");
+f(/(?=\P{sc=Rohg})\p{scx=Rohg}/u, "\u{1f2de}");
+f(/(?=\P{sc=Rohg})\p{scx=Rohg}/u, "\u{999ca}");
+f(/(?=\P{sc=Rohg})\p{scx=Rohg}/u, "\u{f25d9}");
// Script_Extension=Syrc
-t(/\p{scx=Syrc}/u, "\u{64b}");
-f(/\P{scx=Syrc}/u, "\u{64b}");
-t(/\p{scx=Syrc}/u, "\u{64c}");
-f(/\P{scx=Syrc}/u, "\u{64c}");
-t(/\p{scx=Syrc}/u, "\u{64d}");
-f(/\P{scx=Syrc}/u, "\u{64d}");
-t(/\p{scx=Syrc}/u, "\u{64e}");
-f(/\P{scx=Syrc}/u, "\u{64e}");
-t(/\p{scx=Syrc}/u, "\u{64f}");
-f(/\P{scx=Syrc}/u, "\u{64f}");
-t(/\p{scx=Syrc}/u, "\u{650}");
-f(/\P{scx=Syrc}/u, "\u{650}");
-t(/\p{scx=Syrc}/u, "\u{651}");
-f(/\P{scx=Syrc}/u, "\u{651}");
-t(/\p{scx=Syrc}/u, "\u{652}");
-f(/\P{scx=Syrc}/u, "\u{652}");
-t(/\p{scx=Syrc}/u, "\u{653}");
-f(/\P{scx=Syrc}/u, "\u{653}");
-t(/\p{scx=Syrc}/u, "\u{654}");
-f(/\P{scx=Syrc}/u, "\u{654}");
-t(/\p{scx=Syrc}/u, "\u{655}");
-f(/\P{scx=Syrc}/u, "\u{655}");
-t(/\p{scx=Syrc}/u, "\u{670}");
-f(/\P{scx=Syrc}/u, "\u{670}");
-t(/\p{scx=Syrc}/u, "\u{60c}");
-f(/\P{scx=Syrc}/u, "\u{60c}");
-t(/\p{scx=Syrc}/u, "\u{61b}");
-f(/\P{scx=Syrc}/u, "\u{61b}");
-t(/\p{scx=Syrc}/u, "\u{61f}");
-f(/\P{scx=Syrc}/u, "\u{61f}");
-t(/\p{scx=Syrc}/u, "\u{640}");
-f(/\P{scx=Syrc}/u, "\u{640}");
-f(/(?=\P{sc=Syrc})\p{scx=Syrc}/u, "\u{dab32}");
-f(/(?=\P{sc=Syrc})\p{scx=Syrc}/u, "\u{6b768}");
-f(/(?=\P{sc=Syrc})\p{scx=Syrc}/u, "\u{877e7}");
-f(/(?=\P{sc=Syrc})\p{scx=Syrc}/u, "\u{66f8b}");
-f(/(?=\P{sc=Syrc})\p{scx=Syrc}/u, "\u{12a45}");
+f(/(?=\P{sc=Syrc})\p{scx=Syrc}/u, "\u{dd913}");
+f(/(?=\P{sc=Syrc})\p{scx=Syrc}/u, "\u{81cdc}");
+f(/(?=\P{sc=Syrc})\p{scx=Syrc}/u, "\u{32fb2}");
+f(/(?=\P{sc=Syrc})\p{scx=Syrc}/u, "\u{cc6ec}");
+f(/(?=\P{sc=Syrc})\p{scx=Syrc}/u, "\u{adba2}");
// Script_Extension=Thaa
-t(/\p{scx=Thaa}/u, "\u{660}");
-f(/\P{scx=Thaa}/u, "\u{660}");
-t(/\p{scx=Thaa}/u, "\u{661}");
-f(/\P{scx=Thaa}/u, "\u{661}");
-t(/\p{scx=Thaa}/u, "\u{662}");
-f(/\P{scx=Thaa}/u, "\u{662}");
-t(/\p{scx=Thaa}/u, "\u{663}");
-f(/\P{scx=Thaa}/u, "\u{663}");
-t(/\p{scx=Thaa}/u, "\u{664}");
-f(/\P{scx=Thaa}/u, "\u{664}");
-t(/\p{scx=Thaa}/u, "\u{665}");
-f(/\P{scx=Thaa}/u, "\u{665}");
-t(/\p{scx=Thaa}/u, "\u{666}");
-f(/\P{scx=Thaa}/u, "\u{666}");
-t(/\p{scx=Thaa}/u, "\u{667}");
-f(/\P{scx=Thaa}/u, "\u{667}");
-t(/\p{scx=Thaa}/u, "\u{668}");
-f(/\P{scx=Thaa}/u, "\u{668}");
-t(/\p{scx=Thaa}/u, "\u{669}");
-f(/\P{scx=Thaa}/u, "\u{669}");
-t(/\p{scx=Thaa}/u, "\u{fdf2}");
-f(/\P{scx=Thaa}/u, "\u{fdf2}");
-t(/\p{scx=Thaa}/u, "\u{fdfd}");
-f(/\P{scx=Thaa}/u, "\u{fdfd}");
-t(/\p{scx=Thaa}/u, "\u{60c}");
-f(/\P{scx=Thaa}/u, "\u{60c}");
-t(/\p{scx=Thaa}/u, "\u{61b}");
-f(/\P{scx=Thaa}/u, "\u{61b}");
-t(/\p{scx=Thaa}/u, "\u{61f}");
-f(/\P{scx=Thaa}/u, "\u{61f}");
-f(/(?=\P{sc=Thaa})\p{scx=Thaa}/u, "\u{bf3cb}");
-f(/(?=\P{sc=Thaa})\p{scx=Thaa}/u, "\u{33196}");
-f(/(?=\P{sc=Thaa})\p{scx=Thaa}/u, "\u{5bc9e}");
-f(/(?=\P{sc=Thaa})\p{scx=Thaa}/u, "\u{b350c}");
-f(/(?=\P{sc=Thaa})\p{scx=Thaa}/u, "\u{1a475}");
+f(/(?=\P{sc=Thaa})\p{scx=Thaa}/u, "\u{782b1}");
+f(/(?=\P{sc=Thaa})\p{scx=Thaa}/u, "\u{ca567}");
+f(/(?=\P{sc=Thaa})\p{scx=Thaa}/u, "\u{c1506}");
+f(/(?=\P{sc=Thaa})\p{scx=Thaa}/u, "\u{e783}");
+f(/(?=\P{sc=Thaa})\p{scx=Thaa}/u, "\u{fc8e1}");
// Script_Extension=Armn
-t(/\p{scx=Armn}/u, "\u{589}");
-f(/\P{scx=Armn}/u, "\u{589}");
-f(/(?=\P{sc=Armn})\p{scx=Armn}/u, "\u{a4bc3}");
-f(/(?=\P{sc=Armn})\p{scx=Armn}/u, "\u{7e5df}");
-f(/(?=\P{sc=Armn})\p{scx=Armn}/u, "\u{619d5}");
-f(/(?=\P{sc=Armn})\p{scx=Armn}/u, "\u{6299c}");
-f(/(?=\P{sc=Armn})\p{scx=Armn}/u, "\u{ecd52}");
+f(/(?=\P{sc=Armn})\p{scx=Armn}/u, "\u{36a6d}");
+f(/(?=\P{sc=Armn})\p{scx=Armn}/u, "\u{6c98}");
+f(/(?=\P{sc=Armn})\p{scx=Armn}/u, "\u{c4326}");
+f(/(?=\P{sc=Armn})\p{scx=Armn}/u, "\u{25eb6}");
+f(/(?=\P{sc=Armn})\p{scx=Armn}/u, "\u{db9d9}");
// Script_Extension=Geor
-t(/\p{scx=Geor}/u, "\u{589}");
-f(/\P{scx=Geor}/u, "\u{589}");
-t(/\p{scx=Geor}/u, "\u{10fb}");
-f(/\P{scx=Geor}/u, "\u{10fb}");
-f(/(?=\P{sc=Geor})\p{scx=Geor}/u, "\u{1b0d2}");
-f(/(?=\P{sc=Geor})\p{scx=Geor}/u, "\u{9e197}");
-f(/(?=\P{sc=Geor})\p{scx=Geor}/u, "\u{413c6}");
-f(/(?=\P{sc=Geor})\p{scx=Geor}/u, "\u{25864}");
-f(/(?=\P{sc=Geor})\p{scx=Geor}/u, "\u{3cec4}");
-// Script_Extension=Beng
-t(/\p{scx=Beng}/u, "\u{a8f1}");
-f(/\P{scx=Beng}/u, "\u{a8f1}");
-t(/\p{scx=Beng}/u, "\u{9e6}");
-f(/\P{scx=Beng}/u, "\u{9e6}");
-t(/\p{scx=Beng}/u, "\u{9e7}");
-f(/\P{scx=Beng}/u, "\u{9e7}");
-t(/\p{scx=Beng}/u, "\u{9e8}");
-f(/\P{scx=Beng}/u, "\u{9e8}");
-t(/\p{scx=Beng}/u, "\u{9e9}");
-f(/\P{scx=Beng}/u, "\u{9e9}");
-t(/\p{scx=Beng}/u, "\u{9ea}");
-f(/\P{scx=Beng}/u, "\u{9ea}");
-t(/\p{scx=Beng}/u, "\u{9eb}");
-f(/\P{scx=Beng}/u, "\u{9eb}");
-t(/\p{scx=Beng}/u, "\u{9ec}");
-f(/\P{scx=Beng}/u, "\u{9ec}");
-t(/\p{scx=Beng}/u, "\u{9ed}");
-f(/\P{scx=Beng}/u, "\u{9ed}");
-t(/\p{scx=Beng}/u, "\u{9ee}");
-f(/\P{scx=Beng}/u, "\u{9ee}");
-t(/\p{scx=Beng}/u, "\u{9ef}");
-f(/\P{scx=Beng}/u, "\u{9ef}");
-t(/\p{scx=Beng}/u, "\u{952}");
-f(/\P{scx=Beng}/u, "\u{952}");
-t(/\p{scx=Beng}/u, "\u{951}");
-f(/\P{scx=Beng}/u, "\u{951}");
-t(/\p{scx=Beng}/u, "\u{964}");
-f(/\P{scx=Beng}/u, "\u{964}");
-t(/\p{scx=Beng}/u, "\u{965}");
-f(/\P{scx=Beng}/u, "\u{965}");
-f(/(?=\P{sc=Beng})\p{scx=Beng}/u, "\u{10b8e0}");
-f(/(?=\P{sc=Beng})\p{scx=Beng}/u, "\u{a1a3d}");
-f(/(?=\P{sc=Beng})\p{scx=Beng}/u, "\u{63024}");
-f(/(?=\P{sc=Beng})\p{scx=Beng}/u, "\u{e1e3a}");
-f(/(?=\P{sc=Beng})\p{scx=Beng}/u, "\u{732a7}");
+f(/(?=\P{sc=Geor})\p{scx=Geor}/u, "\u{e48f5}");
+f(/(?=\P{sc=Geor})\p{scx=Geor}/u, "\u{9914e}");
+f(/(?=\P{sc=Geor})\p{scx=Geor}/u, "\u{49dad}");
+f(/(?=\P{sc=Geor})\p{scx=Geor}/u, "\u{9d193}");
+f(/(?=\P{sc=Geor})\p{scx=Geor}/u, "\u{10ce35}");
// Script_Extension=Bopo
-t(/\p{scx=Bopo}/u, "\u{302a}");
-f(/\P{scx=Bopo}/u, "\u{302a}");
-t(/\p{scx=Bopo}/u, "\u{302b}");
-f(/\P{scx=Bopo}/u, "\u{302b}");
-t(/\p{scx=Bopo}/u, "\u{302c}");
-f(/\P{scx=Bopo}/u, "\u{302c}");
-t(/\p{scx=Bopo}/u, "\u{302d}");
-f(/\P{scx=Bopo}/u, "\u{302d}");
-t(/\p{scx=Bopo}/u, "\u{3003}");
-f(/\P{scx=Bopo}/u, "\u{3003}");
-t(/\p{scx=Bopo}/u, "\u{3013}");
-f(/\P{scx=Bopo}/u, "\u{3013}");
-t(/\p{scx=Bopo}/u, "\u{301c}");
-f(/\P{scx=Bopo}/u, "\u{301c}");
-t(/\p{scx=Bopo}/u, "\u{301d}");
-f(/\P{scx=Bopo}/u, "\u{301d}");
-t(/\p{scx=Bopo}/u, "\u{301e}");
-f(/\P{scx=Bopo}/u, "\u{301e}");
-t(/\p{scx=Bopo}/u, "\u{301f}");
-f(/\P{scx=Bopo}/u, "\u{301f}");
-t(/\p{scx=Bopo}/u, "\u{3030}");
-f(/\P{scx=Bopo}/u, "\u{3030}");
-t(/\p{scx=Bopo}/u, "\u{3037}");
-f(/\P{scx=Bopo}/u, "\u{3037}");
-t(/\p{scx=Bopo}/u, "\u{fe45}");
-f(/\P{scx=Bopo}/u, "\u{fe45}");
-t(/\p{scx=Bopo}/u, "\u{fe46}");
-f(/\P{scx=Bopo}/u, "\u{fe46}");
-t(/\p{scx=Bopo}/u, "\u{3001}");
-f(/\P{scx=Bopo}/u, "\u{3001}");
-t(/\p{scx=Bopo}/u, "\u{3002}");
-f(/\P{scx=Bopo}/u, "\u{3002}");
-t(/\p{scx=Bopo}/u, "\u{3008}");
-f(/\P{scx=Bopo}/u, "\u{3008}");
-t(/\p{scx=Bopo}/u, "\u{3009}");
-f(/\P{scx=Bopo}/u, "\u{3009}");
-t(/\p{scx=Bopo}/u, "\u{300a}");
-f(/\P{scx=Bopo}/u, "\u{300a}");
-t(/\p{scx=Bopo}/u, "\u{300b}");
-f(/\P{scx=Bopo}/u, "\u{300b}");
-t(/\p{scx=Bopo}/u, "\u{300c}");
-f(/\P{scx=Bopo}/u, "\u{300c}");
-t(/\p{scx=Bopo}/u, "\u{300d}");
-f(/\P{scx=Bopo}/u, "\u{300d}");
-t(/\p{scx=Bopo}/u, "\u{300e}");
-f(/\P{scx=Bopo}/u, "\u{300e}");
-t(/\p{scx=Bopo}/u, "\u{300f}");
-f(/\P{scx=Bopo}/u, "\u{300f}");
-t(/\p{scx=Bopo}/u, "\u{3010}");
-f(/\P{scx=Bopo}/u, "\u{3010}");
-t(/\p{scx=Bopo}/u, "\u{3011}");
-f(/\P{scx=Bopo}/u, "\u{3011}");
-t(/\p{scx=Bopo}/u, "\u{3014}");
-f(/\P{scx=Bopo}/u, "\u{3014}");
-t(/\p{scx=Bopo}/u, "\u{3015}");
-f(/\P{scx=Bopo}/u, "\u{3015}");
-t(/\p{scx=Bopo}/u, "\u{3016}");
-f(/\P{scx=Bopo}/u, "\u{3016}");
-t(/\p{scx=Bopo}/u, "\u{3017}");
-f(/\P{scx=Bopo}/u, "\u{3017}");
-t(/\p{scx=Bopo}/u, "\u{3018}");
-f(/\P{scx=Bopo}/u, "\u{3018}");
-t(/\p{scx=Bopo}/u, "\u{3019}");
-f(/\P{scx=Bopo}/u, "\u{3019}");
-t(/\p{scx=Bopo}/u, "\u{301a}");
-f(/\P{scx=Bopo}/u, "\u{301a}");
-t(/\p{scx=Bopo}/u, "\u{301b}");
-f(/\P{scx=Bopo}/u, "\u{301b}");
-t(/\p{scx=Bopo}/u, "\u{30fb}");
-f(/\P{scx=Bopo}/u, "\u{30fb}");
-t(/\p{scx=Bopo}/u, "\u{ff61}");
-f(/\P{scx=Bopo}/u, "\u{ff61}");
-t(/\p{scx=Bopo}/u, "\u{ff62}");
-f(/\P{scx=Bopo}/u, "\u{ff62}");
-t(/\p{scx=Bopo}/u, "\u{ff63}");
-f(/\P{scx=Bopo}/u, "\u{ff63}");
-t(/\p{scx=Bopo}/u, "\u{ff64}");
-f(/\P{scx=Bopo}/u, "\u{ff64}");
-t(/\p{scx=Bopo}/u, "\u{ff65}");
-f(/\P{scx=Bopo}/u, "\u{ff65}");
-f(/(?=\P{sc=Bopo})\p{scx=Bopo}/u, "\u{d9494}");
-f(/(?=\P{sc=Bopo})\p{scx=Bopo}/u, "\u{c8328}");
-f(/(?=\P{sc=Bopo})\p{scx=Bopo}/u, "\u{fbf6e}");
-f(/(?=\P{sc=Bopo})\p{scx=Bopo}/u, "\u{1b8cc}");
-f(/(?=\P{sc=Bopo})\p{scx=Bopo}/u, "\u{10477}");
+f(/(?=\P{sc=Bopo})\p{scx=Bopo}/u, "\u{36ac1}");
+f(/(?=\P{sc=Bopo})\p{scx=Bopo}/u, "\u{73ae5}");
+f(/(?=\P{sc=Bopo})\p{scx=Bopo}/u, "\u{cd0a}");
+f(/(?=\P{sc=Bopo})\p{scx=Bopo}/u, "\u{bd8bd}");
+f(/(?=\P{sc=Bopo})\p{scx=Bopo}/u, "\u{eb174}");
// Script_Extension=Bugi
-t(/\p{scx=Bugi}/u, "\u{a9cf}");
-f(/\P{scx=Bugi}/u, "\u{a9cf}");
-f(/(?=\P{sc=Bugi})\p{scx=Bugi}/u, "\u{ec046}");
-f(/(?=\P{sc=Bugi})\p{scx=Bugi}/u, "\u{a8402}");
-f(/(?=\P{sc=Bugi})\p{scx=Bugi}/u, "\u{85530}");
-f(/(?=\P{sc=Bugi})\p{scx=Bugi}/u, "\u{86942}");
-f(/(?=\P{sc=Bugi})\p{scx=Bugi}/u, "\u{c6ded}");
+f(/(?=\P{sc=Bugi})\p{scx=Bugi}/u, "\u{7dcfc}");
+f(/(?=\P{sc=Bugi})\p{scx=Bugi}/u, "\u{b17d1}");
+f(/(?=\P{sc=Bugi})\p{scx=Bugi}/u, "\u{15cb5}");
+f(/(?=\P{sc=Bugi})\p{scx=Bugi}/u, "\u{10d4f6}");
+f(/(?=\P{sc=Bugi})\p{scx=Bugi}/u, "\u{12bbe}");
// Script_Extension=Java
-t(/\p{scx=Java}/u, "\u{a9cf}");
-f(/\P{scx=Java}/u, "\u{a9cf}");
-f(/(?=\P{sc=Java})\p{scx=Java}/u, "\u{d4343}");
-f(/(?=\P{sc=Java})\p{scx=Java}/u, "\u{6d000}");
-f(/(?=\P{sc=Java})\p{scx=Java}/u, "\u{c72a4}");
-f(/(?=\P{sc=Java})\p{scx=Java}/u, "\u{9ad6f}");
-f(/(?=\P{sc=Java})\p{scx=Java}/u, "\u{fb350}");
+f(/(?=\P{sc=Java})\p{scx=Java}/u, "\u{10f6f3}");
+f(/(?=\P{sc=Java})\p{scx=Java}/u, "\u{75579}");
+f(/(?=\P{sc=Java})\p{scx=Java}/u, "\u{b39e4}");
+f(/(?=\P{sc=Java})\p{scx=Java}/u, "\u{104b64}");
+f(/(?=\P{sc=Java})\p{scx=Java}/u, "\u{102995}");
// Script_Extension=Cprt
-t(/\p{scx=Cprt}/u, "\u{10100}");
-f(/\P{scx=Cprt}/u, "\u{10100}");
-t(/\p{scx=Cprt}/u, "\u{10101}");
-f(/\P{scx=Cprt}/u, "\u{10101}");
-t(/\p{scx=Cprt}/u, "\u{10102}");
-f(/\P{scx=Cprt}/u, "\u{10102}");
-t(/\p{scx=Cprt}/u, "\u{10137}");
-f(/\P{scx=Cprt}/u, "\u{10137}");
-t(/\p{scx=Cprt}/u, "\u{10138}");
-f(/\P{scx=Cprt}/u, "\u{10138}");
-t(/\p{scx=Cprt}/u, "\u{10139}");
-f(/\P{scx=Cprt}/u, "\u{10139}");
-t(/\p{scx=Cprt}/u, "\u{1013a}");
-f(/\P{scx=Cprt}/u, "\u{1013a}");
-t(/\p{scx=Cprt}/u, "\u{1013b}");
-f(/\P{scx=Cprt}/u, "\u{1013b}");
-t(/\p{scx=Cprt}/u, "\u{1013c}");
-f(/\P{scx=Cprt}/u, "\u{1013c}");
-t(/\p{scx=Cprt}/u, "\u{1013d}");
-f(/\P{scx=Cprt}/u, "\u{1013d}");
-t(/\p{scx=Cprt}/u, "\u{1013e}");
-f(/\P{scx=Cprt}/u, "\u{1013e}");
-t(/\p{scx=Cprt}/u, "\u{1013f}");
-f(/\P{scx=Cprt}/u, "\u{1013f}");
-t(/\p{scx=Cprt}/u, "\u{10107}");
-f(/\P{scx=Cprt}/u, "\u{10107}");
-t(/\p{scx=Cprt}/u, "\u{10108}");
-f(/\P{scx=Cprt}/u, "\u{10108}");
-t(/\p{scx=Cprt}/u, "\u{10109}");
-f(/\P{scx=Cprt}/u, "\u{10109}");
-t(/\p{scx=Cprt}/u, "\u{1010a}");
-f(/\P{scx=Cprt}/u, "\u{1010a}");
-t(/\p{scx=Cprt}/u, "\u{1010b}");
-f(/\P{scx=Cprt}/u, "\u{1010b}");
-t(/\p{scx=Cprt}/u, "\u{1010c}");
-f(/\P{scx=Cprt}/u, "\u{1010c}");
-t(/\p{scx=Cprt}/u, "\u{1010d}");
-f(/\P{scx=Cprt}/u, "\u{1010d}");
-t(/\p{scx=Cprt}/u, "\u{1010e}");
-f(/\P{scx=Cprt}/u, "\u{1010e}");
-t(/\p{scx=Cprt}/u, "\u{1010f}");
-f(/\P{scx=Cprt}/u, "\u{1010f}");
-t(/\p{scx=Cprt}/u, "\u{10110}");
-f(/\P{scx=Cprt}/u, "\u{10110}");
-t(/\p{scx=Cprt}/u, "\u{10111}");
-f(/\P{scx=Cprt}/u, "\u{10111}");
-t(/\p{scx=Cprt}/u, "\u{10112}");
-f(/\P{scx=Cprt}/u, "\u{10112}");
-t(/\p{scx=Cprt}/u, "\u{10113}");
-f(/\P{scx=Cprt}/u, "\u{10113}");
-t(/\p{scx=Cprt}/u, "\u{10114}");
-f(/\P{scx=Cprt}/u, "\u{10114}");
-t(/\p{scx=Cprt}/u, "\u{10115}");
-f(/\P{scx=Cprt}/u, "\u{10115}");
-t(/\p{scx=Cprt}/u, "\u{10116}");
-f(/\P{scx=Cprt}/u, "\u{10116}");
-t(/\p{scx=Cprt}/u, "\u{10117}");
-f(/\P{scx=Cprt}/u, "\u{10117}");
-t(/\p{scx=Cprt}/u, "\u{10118}");
-f(/\P{scx=Cprt}/u, "\u{10118}");
-t(/\p{scx=Cprt}/u, "\u{10119}");
-f(/\P{scx=Cprt}/u, "\u{10119}");
-t(/\p{scx=Cprt}/u, "\u{1011a}");
-f(/\P{scx=Cprt}/u, "\u{1011a}");
-t(/\p{scx=Cprt}/u, "\u{1011b}");
-f(/\P{scx=Cprt}/u, "\u{1011b}");
-t(/\p{scx=Cprt}/u, "\u{1011c}");
-f(/\P{scx=Cprt}/u, "\u{1011c}");
-t(/\p{scx=Cprt}/u, "\u{1011d}");
-f(/\P{scx=Cprt}/u, "\u{1011d}");
-t(/\p{scx=Cprt}/u, "\u{1011e}");
-f(/\P{scx=Cprt}/u, "\u{1011e}");
-t(/\p{scx=Cprt}/u, "\u{1011f}");
-f(/\P{scx=Cprt}/u, "\u{1011f}");
-t(/\p{scx=Cprt}/u, "\u{10120}");
-f(/\P{scx=Cprt}/u, "\u{10120}");
-t(/\p{scx=Cprt}/u, "\u{10121}");
-f(/\P{scx=Cprt}/u, "\u{10121}");
-t(/\p{scx=Cprt}/u, "\u{10122}");
-f(/\P{scx=Cprt}/u, "\u{10122}");
-t(/\p{scx=Cprt}/u, "\u{10123}");
-f(/\P{scx=Cprt}/u, "\u{10123}");
-t(/\p{scx=Cprt}/u, "\u{10124}");
-f(/\P{scx=Cprt}/u, "\u{10124}");
-t(/\p{scx=Cprt}/u, "\u{10125}");
-f(/\P{scx=Cprt}/u, "\u{10125}");
-t(/\p{scx=Cprt}/u, "\u{10126}");
-f(/\P{scx=Cprt}/u, "\u{10126}");
-t(/\p{scx=Cprt}/u, "\u{10127}");
-f(/\P{scx=Cprt}/u, "\u{10127}");
-t(/\p{scx=Cprt}/u, "\u{10128}");
-f(/\P{scx=Cprt}/u, "\u{10128}");
-t(/\p{scx=Cprt}/u, "\u{10129}");
-f(/\P{scx=Cprt}/u, "\u{10129}");
-t(/\p{scx=Cprt}/u, "\u{1012a}");
-f(/\P{scx=Cprt}/u, "\u{1012a}");
-t(/\p{scx=Cprt}/u, "\u{1012b}");
-f(/\P{scx=Cprt}/u, "\u{1012b}");
-t(/\p{scx=Cprt}/u, "\u{1012c}");
-f(/\P{scx=Cprt}/u, "\u{1012c}");
-t(/\p{scx=Cprt}/u, "\u{1012d}");
-f(/\P{scx=Cprt}/u, "\u{1012d}");
-t(/\p{scx=Cprt}/u, "\u{1012e}");
-f(/\P{scx=Cprt}/u, "\u{1012e}");
-t(/\p{scx=Cprt}/u, "\u{1012f}");
-f(/\P{scx=Cprt}/u, "\u{1012f}");
-t(/\p{scx=Cprt}/u, "\u{10130}");
-f(/\P{scx=Cprt}/u, "\u{10130}");
-t(/\p{scx=Cprt}/u, "\u{10131}");
-f(/\P{scx=Cprt}/u, "\u{10131}");
-t(/\p{scx=Cprt}/u, "\u{10132}");
-f(/\P{scx=Cprt}/u, "\u{10132}");
-t(/\p{scx=Cprt}/u, "\u{10133}");
-f(/\P{scx=Cprt}/u, "\u{10133}");
-f(/(?=\P{sc=Cprt})\p{scx=Cprt}/u, "\u{27a83}");
-f(/(?=\P{sc=Cprt})\p{scx=Cprt}/u, "\u{172f5}");
-f(/(?=\P{sc=Cprt})\p{scx=Cprt}/u, "\u{6ef51}");
-f(/(?=\P{sc=Cprt})\p{scx=Cprt}/u, "\u{7837}");
-f(/(?=\P{sc=Cprt})\p{scx=Cprt}/u, "\u{c5ce1}");
+f(/(?=\P{sc=Cprt})\p{scx=Cprt}/u, "\u{46b94}");
+f(/(?=\P{sc=Cprt})\p{scx=Cprt}/u, "\u{3eaa1}");
+f(/(?=\P{sc=Cprt})\p{scx=Cprt}/u, "\u{3dd9a}");
+f(/(?=\P{sc=Cprt})\p{scx=Cprt}/u, "\u{c3e90}");
+f(/(?=\P{sc=Cprt})\p{scx=Cprt}/u, "\u{75301}");
// Script_Extension=Linb
-t(/\p{scx=Linb}/u, "\u{10100}");
-f(/\P{scx=Linb}/u, "\u{10100}");
-t(/\p{scx=Linb}/u, "\u{10101}");
-f(/\P{scx=Linb}/u, "\u{10101}");
-t(/\p{scx=Linb}/u, "\u{10102}");
-f(/\P{scx=Linb}/u, "\u{10102}");
-t(/\p{scx=Linb}/u, "\u{10137}");
-f(/\P{scx=Linb}/u, "\u{10137}");
-t(/\p{scx=Linb}/u, "\u{10138}");
-f(/\P{scx=Linb}/u, "\u{10138}");
-t(/\p{scx=Linb}/u, "\u{10139}");
-f(/\P{scx=Linb}/u, "\u{10139}");
-t(/\p{scx=Linb}/u, "\u{1013a}");
-f(/\P{scx=Linb}/u, "\u{1013a}");
-t(/\p{scx=Linb}/u, "\u{1013b}");
-f(/\P{scx=Linb}/u, "\u{1013b}");
-t(/\p{scx=Linb}/u, "\u{1013c}");
-f(/\P{scx=Linb}/u, "\u{1013c}");
-t(/\p{scx=Linb}/u, "\u{1013d}");
-f(/\P{scx=Linb}/u, "\u{1013d}");
-t(/\p{scx=Linb}/u, "\u{1013e}");
-f(/\P{scx=Linb}/u, "\u{1013e}");
-t(/\p{scx=Linb}/u, "\u{1013f}");
-f(/\P{scx=Linb}/u, "\u{1013f}");
-t(/\p{scx=Linb}/u, "\u{10107}");
-f(/\P{scx=Linb}/u, "\u{10107}");
-t(/\p{scx=Linb}/u, "\u{10108}");
-f(/\P{scx=Linb}/u, "\u{10108}");
-t(/\p{scx=Linb}/u, "\u{10109}");
-f(/\P{scx=Linb}/u, "\u{10109}");
-t(/\p{scx=Linb}/u, "\u{1010a}");
-f(/\P{scx=Linb}/u, "\u{1010a}");
-t(/\p{scx=Linb}/u, "\u{1010b}");
-f(/\P{scx=Linb}/u, "\u{1010b}");
-t(/\p{scx=Linb}/u, "\u{1010c}");
-f(/\P{scx=Linb}/u, "\u{1010c}");
-t(/\p{scx=Linb}/u, "\u{1010d}");
-f(/\P{scx=Linb}/u, "\u{1010d}");
-t(/\p{scx=Linb}/u, "\u{1010e}");
-f(/\P{scx=Linb}/u, "\u{1010e}");
-t(/\p{scx=Linb}/u, "\u{1010f}");
-f(/\P{scx=Linb}/u, "\u{1010f}");
-t(/\p{scx=Linb}/u, "\u{10110}");
-f(/\P{scx=Linb}/u, "\u{10110}");
-t(/\p{scx=Linb}/u, "\u{10111}");
-f(/\P{scx=Linb}/u, "\u{10111}");
-t(/\p{scx=Linb}/u, "\u{10112}");
-f(/\P{scx=Linb}/u, "\u{10112}");
-t(/\p{scx=Linb}/u, "\u{10113}");
-f(/\P{scx=Linb}/u, "\u{10113}");
-t(/\p{scx=Linb}/u, "\u{10114}");
-f(/\P{scx=Linb}/u, "\u{10114}");
-t(/\p{scx=Linb}/u, "\u{10115}");
-f(/\P{scx=Linb}/u, "\u{10115}");
-t(/\p{scx=Linb}/u, "\u{10116}");
-f(/\P{scx=Linb}/u, "\u{10116}");
-t(/\p{scx=Linb}/u, "\u{10117}");
-f(/\P{scx=Linb}/u, "\u{10117}");
-t(/\p{scx=Linb}/u, "\u{10118}");
-f(/\P{scx=Linb}/u, "\u{10118}");
-t(/\p{scx=Linb}/u, "\u{10119}");
-f(/\P{scx=Linb}/u, "\u{10119}");
-t(/\p{scx=Linb}/u, "\u{1011a}");
-f(/\P{scx=Linb}/u, "\u{1011a}");
-t(/\p{scx=Linb}/u, "\u{1011b}");
-f(/\P{scx=Linb}/u, "\u{1011b}");
-t(/\p{scx=Linb}/u, "\u{1011c}");
-f(/\P{scx=Linb}/u, "\u{1011c}");
-t(/\p{scx=Linb}/u, "\u{1011d}");
-f(/\P{scx=Linb}/u, "\u{1011d}");
-t(/\p{scx=Linb}/u, "\u{1011e}");
-f(/\P{scx=Linb}/u, "\u{1011e}");
-t(/\p{scx=Linb}/u, "\u{1011f}");
-f(/\P{scx=Linb}/u, "\u{1011f}");
-t(/\p{scx=Linb}/u, "\u{10120}");
-f(/\P{scx=Linb}/u, "\u{10120}");
-t(/\p{scx=Linb}/u, "\u{10121}");
-f(/\P{scx=Linb}/u, "\u{10121}");
-t(/\p{scx=Linb}/u, "\u{10122}");
-f(/\P{scx=Linb}/u, "\u{10122}");
-t(/\p{scx=Linb}/u, "\u{10123}");
-f(/\P{scx=Linb}/u, "\u{10123}");
-t(/\p{scx=Linb}/u, "\u{10124}");
-f(/\P{scx=Linb}/u, "\u{10124}");
-t(/\p{scx=Linb}/u, "\u{10125}");
-f(/\P{scx=Linb}/u, "\u{10125}");
-t(/\p{scx=Linb}/u, "\u{10126}");
-f(/\P{scx=Linb}/u, "\u{10126}");
-t(/\p{scx=Linb}/u, "\u{10127}");
-f(/\P{scx=Linb}/u, "\u{10127}");
-t(/\p{scx=Linb}/u, "\u{10128}");
-f(/\P{scx=Linb}/u, "\u{10128}");
-t(/\p{scx=Linb}/u, "\u{10129}");
-f(/\P{scx=Linb}/u, "\u{10129}");
-t(/\p{scx=Linb}/u, "\u{1012a}");
-f(/\P{scx=Linb}/u, "\u{1012a}");
-t(/\p{scx=Linb}/u, "\u{1012b}");
-f(/\P{scx=Linb}/u, "\u{1012b}");
-t(/\p{scx=Linb}/u, "\u{1012c}");
-f(/\P{scx=Linb}/u, "\u{1012c}");
-t(/\p{scx=Linb}/u, "\u{1012d}");
-f(/\P{scx=Linb}/u, "\u{1012d}");
-t(/\p{scx=Linb}/u, "\u{1012e}");
-f(/\P{scx=Linb}/u, "\u{1012e}");
-t(/\p{scx=Linb}/u, "\u{1012f}");
-f(/\P{scx=Linb}/u, "\u{1012f}");
-t(/\p{scx=Linb}/u, "\u{10130}");
-f(/\P{scx=Linb}/u, "\u{10130}");
-t(/\p{scx=Linb}/u, "\u{10131}");
-f(/\P{scx=Linb}/u, "\u{10131}");
-t(/\p{scx=Linb}/u, "\u{10132}");
-f(/\P{scx=Linb}/u, "\u{10132}");
-t(/\p{scx=Linb}/u, "\u{10133}");
-f(/\P{scx=Linb}/u, "\u{10133}");
-f(/(?=\P{sc=Linb})\p{scx=Linb}/u, "\u{42fd8}");
-f(/(?=\P{sc=Linb})\p{scx=Linb}/u, "\u{5847b}");
-f(/(?=\P{sc=Linb})\p{scx=Linb}/u, "\u{71859}");
-f(/(?=\P{sc=Linb})\p{scx=Linb}/u, "\u{6b485}");
-f(/(?=\P{sc=Linb})\p{scx=Linb}/u, "\u{ba1f}");
+f(/(?=\P{sc=Linb})\p{scx=Linb}/u, "\u{b0cc}");
+f(/(?=\P{sc=Linb})\p{scx=Linb}/u, "\u{2759a}");
+f(/(?=\P{sc=Linb})\p{scx=Linb}/u, "\u{a6482}");
+f(/(?=\P{sc=Linb})\p{scx=Linb}/u, "\u{11c84}");
+f(/(?=\P{sc=Linb})\p{scx=Linb}/u, "\u{a3931}");
// Script_Extension=Cyrl
-t(/\p{scx=Cyrl}/u, "\u{484}");
-f(/\P{scx=Cyrl}/u, "\u{484}");
-t(/\p{scx=Cyrl}/u, "\u{487}");
-f(/\P{scx=Cyrl}/u, "\u{487}");
-t(/\p{scx=Cyrl}/u, "\u{2e43}");
-f(/\P{scx=Cyrl}/u, "\u{2e43}");
-t(/\p{scx=Cyrl}/u, "\u{a66f}");
-f(/\P{scx=Cyrl}/u, "\u{a66f}");
-t(/\p{scx=Cyrl}/u, "\u{485}");
-f(/\P{scx=Cyrl}/u, "\u{485}");
-t(/\p{scx=Cyrl}/u, "\u{486}");
-f(/\P{scx=Cyrl}/u, "\u{486}");
-t(/\p{scx=Cyrl}/u, "\u{483}");
-f(/\P{scx=Cyrl}/u, "\u{483}");
-f(/(?=\P{sc=Cyrl})\p{scx=Cyrl}/u, "\u{a7c62}");
-f(/(?=\P{sc=Cyrl})\p{scx=Cyrl}/u, "\u{d4e8}");
-f(/(?=\P{sc=Cyrl})\p{scx=Cyrl}/u, "\u{95699}");
-f(/(?=\P{sc=Cyrl})\p{scx=Cyrl}/u, "\u{2175f}");
-f(/(?=\P{sc=Cyrl})\p{scx=Cyrl}/u, "\u{10000c}");
+f(/(?=\P{sc=Cyrl})\p{scx=Cyrl}/u, "\u{2d4a3}");
+f(/(?=\P{sc=Cyrl})\p{scx=Cyrl}/u, "\u{394c9}");
+f(/(?=\P{sc=Cyrl})\p{scx=Cyrl}/u, "\u{aa2e7}");
+f(/(?=\P{sc=Cyrl})\p{scx=Cyrl}/u, "\u{823e3}");
+f(/(?=\P{sc=Cyrl})\p{scx=Cyrl}/u, "\u{f753e}");
// Script_Extension=Glag
-t(/\p{scx=Glag}/u, "\u{484}");
-f(/\P{scx=Glag}/u, "\u{484}");
-t(/\p{scx=Glag}/u, "\u{487}");
-f(/\P{scx=Glag}/u, "\u{487}");
-t(/\p{scx=Glag}/u, "\u{2e43}");
-f(/\P{scx=Glag}/u, "\u{2e43}");
-t(/\p{scx=Glag}/u, "\u{a66f}");
-f(/\P{scx=Glag}/u, "\u{a66f}");
-f(/(?=\P{sc=Glag})\p{scx=Glag}/u, "\u{bcabd}");
-f(/(?=\P{sc=Glag})\p{scx=Glag}/u, "\u{d05c1}");
-f(/(?=\P{sc=Glag})\p{scx=Glag}/u, "\u{b9e24}");
-f(/(?=\P{sc=Glag})\p{scx=Glag}/u, "\u{22e2e}");
-f(/(?=\P{sc=Glag})\p{scx=Glag}/u, "\u{d3d37}");
+f(/(?=\P{sc=Glag})\p{scx=Glag}/u, "\u{f060c}");
+f(/(?=\P{sc=Glag})\p{scx=Glag}/u, "\u{f4430}");
+f(/(?=\P{sc=Glag})\p{scx=Glag}/u, "\u{89208}");
+f(/(?=\P{sc=Glag})\p{scx=Glag}/u, "\u{3b2fa}");
+f(/(?=\P{sc=Glag})\p{scx=Glag}/u, "\u{5a463}");
// Script_Extension=Perm
-t(/\p{scx=Perm}/u, "\u{483}");
-f(/\P{scx=Perm}/u, "\u{483}");
-f(/(?=\P{sc=Perm})\p{scx=Perm}/u, "\u{10d33d}");
-f(/(?=\P{sc=Perm})\p{scx=Perm}/u, "\u{4c279}");
-f(/(?=\P{sc=Perm})\p{scx=Perm}/u, "\u{73666}");
-f(/(?=\P{sc=Perm})\p{scx=Perm}/u, "\u{2e79d}");
-f(/(?=\P{sc=Perm})\p{scx=Perm}/u, "\u{680f8}");
+f(/(?=\P{sc=Perm})\p{scx=Perm}/u, "\u{f4f29}");
+f(/(?=\P{sc=Perm})\p{scx=Perm}/u, "\u{154a1}");
+f(/(?=\P{sc=Perm})\p{scx=Perm}/u, "\u{8d2e1}");
+f(/(?=\P{sc=Perm})\p{scx=Perm}/u, "\u{6ddec}");
+f(/(?=\P{sc=Perm})\p{scx=Perm}/u, "\u{2859e}");
// Script_Extension=Gran
-t(/\p{scx=Gran}/u, "\u{1cd0}");
-f(/\P{scx=Gran}/u, "\u{1cd0}");
-t(/\p{scx=Gran}/u, "\u{1cd2}");
-f(/\P{scx=Gran}/u, "\u{1cd2}");
-t(/\p{scx=Gran}/u, "\u{1cd3}");
-f(/\P{scx=Gran}/u, "\u{1cd3}");
-t(/\p{scx=Gran}/u, "\u{1cf2}");
-f(/\P{scx=Gran}/u, "\u{1cf2}");
-t(/\p{scx=Gran}/u, "\u{1cf3}");
-f(/\P{scx=Gran}/u, "\u{1cf3}");
-t(/\p{scx=Gran}/u, "\u{1cf4}");
-f(/\P{scx=Gran}/u, "\u{1cf4}");
-t(/\p{scx=Gran}/u, "\u{1cf8}");
-f(/\P{scx=Gran}/u, "\u{1cf8}");
-t(/\p{scx=Gran}/u, "\u{1cf9}");
-f(/\P{scx=Gran}/u, "\u{1cf9}");
-t(/\p{scx=Gran}/u, "\u{baa}");
-f(/\P{scx=Gran}/u, "\u{baa}");
-t(/\p{scx=Gran}/u, "\u{bb5}");
-f(/\P{scx=Gran}/u, "\u{bb5}");
-t(/\p{scx=Gran}/u, "\u{be6}");
-f(/\P{scx=Gran}/u, "\u{be6}");
-t(/\p{scx=Gran}/u, "\u{be7}");
-f(/\P{scx=Gran}/u, "\u{be7}");
-t(/\p{scx=Gran}/u, "\u{be8}");
-f(/\P{scx=Gran}/u, "\u{be8}");
-t(/\p{scx=Gran}/u, "\u{be9}");
-f(/\P{scx=Gran}/u, "\u{be9}");
-t(/\p{scx=Gran}/u, "\u{bea}");
-f(/\P{scx=Gran}/u, "\u{bea}");
-t(/\p{scx=Gran}/u, "\u{beb}");
-f(/\P{scx=Gran}/u, "\u{beb}");
-t(/\p{scx=Gran}/u, "\u{bec}");
-f(/\P{scx=Gran}/u, "\u{bec}");
-t(/\p{scx=Gran}/u, "\u{bed}");
-f(/\P{scx=Gran}/u, "\u{bed}");
-t(/\p{scx=Gran}/u, "\u{bee}");
-f(/\P{scx=Gran}/u, "\u{bee}");
-t(/\p{scx=Gran}/u, "\u{bef}");
-f(/\P{scx=Gran}/u, "\u{bef}");
-t(/\p{scx=Gran}/u, "\u{bf0}");
-f(/\P{scx=Gran}/u, "\u{bf0}");
-t(/\p{scx=Gran}/u, "\u{bf1}");
-f(/\P{scx=Gran}/u, "\u{bf1}");
-t(/\p{scx=Gran}/u, "\u{bf2}");
-f(/\P{scx=Gran}/u, "\u{bf2}");
-t(/\p{scx=Gran}/u, "\u{11303}");
-f(/\P{scx=Gran}/u, "\u{11303}");
-t(/\p{scx=Gran}/u, "\u{1133c}");
-f(/\P{scx=Gran}/u, "\u{1133c}");
-t(/\p{scx=Gran}/u, "\u{20f0}");
-f(/\P{scx=Gran}/u, "\u{20f0}");
-t(/\p{scx=Gran}/u, "\u{952}");
-f(/\P{scx=Gran}/u, "\u{952}");
-t(/\p{scx=Gran}/u, "\u{951}");
-f(/\P{scx=Gran}/u, "\u{951}");
-t(/\p{scx=Gran}/u, "\u{964}");
-f(/\P{scx=Gran}/u, "\u{964}");
-t(/\p{scx=Gran}/u, "\u{965}");
-f(/\P{scx=Gran}/u, "\u{965}");
-f(/(?=\P{sc=Gran})\p{scx=Gran}/u, "\u{bb28a}");
-f(/(?=\P{sc=Gran})\p{scx=Gran}/u, "\u{ede3d}");
-f(/(?=\P{sc=Gran})\p{scx=Gran}/u, "\u{5a3a1}");
-f(/(?=\P{sc=Gran})\p{scx=Gran}/u, "\u{a9d70}");
-f(/(?=\P{sc=Gran})\p{scx=Gran}/u, "\u{d1d5e}");
-// Script_Extension=Knda
-t(/\p{scx=Knda}/u, "\u{1cf5}");
-f(/\P{scx=Knda}/u, "\u{1cf5}");
-t(/\p{scx=Knda}/u, "\u{1cda}");
-f(/\P{scx=Knda}/u, "\u{1cda}");
-t(/\p{scx=Knda}/u, "\u{a830}");
-f(/\P{scx=Knda}/u, "\u{a830}");
-t(/\p{scx=Knda}/u, "\u{a831}");
-f(/\P{scx=Knda}/u, "\u{a831}");
-t(/\p{scx=Knda}/u, "\u{a832}");
-f(/\P{scx=Knda}/u, "\u{a832}");
-t(/\p{scx=Knda}/u, "\u{a833}");
-f(/\P{scx=Knda}/u, "\u{a833}");
-t(/\p{scx=Knda}/u, "\u{a834}");
-f(/\P{scx=Knda}/u, "\u{a834}");
-t(/\p{scx=Knda}/u, "\u{a835}");
-f(/\P{scx=Knda}/u, "\u{a835}");
-t(/\p{scx=Knda}/u, "\u{952}");
-f(/\P{scx=Knda}/u, "\u{952}");
-t(/\p{scx=Knda}/u, "\u{951}");
-f(/\P{scx=Knda}/u, "\u{951}");
-t(/\p{scx=Knda}/u, "\u{964}");
-f(/\P{scx=Knda}/u, "\u{964}");
-t(/\p{scx=Knda}/u, "\u{965}");
-f(/\P{scx=Knda}/u, "\u{965}");
-f(/(?=\P{sc=Knda})\p{scx=Knda}/u, "\u{1571e}");
-f(/(?=\P{sc=Knda})\p{scx=Knda}/u, "\u{8e880}");
-f(/(?=\P{sc=Knda})\p{scx=Knda}/u, "\u{5995d}");
-f(/(?=\P{sc=Knda})\p{scx=Knda}/u, "\u{8516e}");
-f(/(?=\P{sc=Knda})\p{scx=Knda}/u, "\u{108a91}");
+f(/(?=\P{sc=Gran})\p{scx=Gran}/u, "\u{dcc3b}");
+f(/(?=\P{sc=Gran})\p{scx=Gran}/u, "\u{240a1}");
+f(/(?=\P{sc=Gran})\p{scx=Gran}/u, "\u{d94fd}");
+f(/(?=\P{sc=Gran})\p{scx=Gran}/u, "\u{3e537}");
+f(/(?=\P{sc=Gran})\p{scx=Gran}/u, "\u{ddf65}");
// Script_Extension=Shrd
-t(/\p{scx=Shrd}/u, "\u{1cd7}");
-f(/\P{scx=Shrd}/u, "\u{1cd7}");
-t(/\p{scx=Shrd}/u, "\u{1cd9}");
-f(/\P{scx=Shrd}/u, "\u{1cd9}");
-t(/\p{scx=Shrd}/u, "\u{1cdc}");
-f(/\P{scx=Shrd}/u, "\u{1cdc}");
-t(/\p{scx=Shrd}/u, "\u{1cdd}");
-f(/\P{scx=Shrd}/u, "\u{1cdd}");
-t(/\p{scx=Shrd}/u, "\u{1ce0}");
-f(/\P{scx=Shrd}/u, "\u{1ce0}");
-t(/\p{scx=Shrd}/u, "\u{951}");
-f(/\P{scx=Shrd}/u, "\u{951}");
-f(/(?=\P{sc=Shrd})\p{scx=Shrd}/u, "\u{5c32b}");
-f(/(?=\P{sc=Shrd})\p{scx=Shrd}/u, "\u{10fe3a}");
-f(/(?=\P{sc=Shrd})\p{scx=Shrd}/u, "\u{4e2d9}");
-f(/(?=\P{sc=Shrd})\p{scx=Shrd}/u, "\u{ea40}");
-f(/(?=\P{sc=Shrd})\p{scx=Shrd}/u, "\u{cc847}");
+f(/(?=\P{sc=Shrd})\p{scx=Shrd}/u, "\u{c17cc}");
+f(/(?=\P{sc=Shrd})\p{scx=Shrd}/u, "\u{2d717}");
+f(/(?=\P{sc=Shrd})\p{scx=Shrd}/u, "\u{93c84}");
+f(/(?=\P{sc=Shrd})\p{scx=Shrd}/u, "\u{e4d57}");
+f(/(?=\P{sc=Shrd})\p{scx=Shrd}/u, "\u{4449a}");
// Script_Extension=Taml
-t(/\p{scx=Taml}/u, "\u{a8f3}");
-f(/\P{scx=Taml}/u, "\u{a8f3}");
-t(/\p{scx=Taml}/u, "\u{baa}");
-f(/\P{scx=Taml}/u, "\u{baa}");
-t(/\p{scx=Taml}/u, "\u{bb5}");
-f(/\P{scx=Taml}/u, "\u{bb5}");
-t(/\p{scx=Taml}/u, "\u{be6}");
-f(/\P{scx=Taml}/u, "\u{be6}");
-t(/\p{scx=Taml}/u, "\u{be7}");
-f(/\P{scx=Taml}/u, "\u{be7}");
-t(/\p{scx=Taml}/u, "\u{be8}");
-f(/\P{scx=Taml}/u, "\u{be8}");
-t(/\p{scx=Taml}/u, "\u{be9}");
-f(/\P{scx=Taml}/u, "\u{be9}");
-t(/\p{scx=Taml}/u, "\u{bea}");
-f(/\P{scx=Taml}/u, "\u{bea}");
-t(/\p{scx=Taml}/u, "\u{beb}");
-f(/\P{scx=Taml}/u, "\u{beb}");
-t(/\p{scx=Taml}/u, "\u{bec}");
-f(/\P{scx=Taml}/u, "\u{bec}");
-t(/\p{scx=Taml}/u, "\u{bed}");
-f(/\P{scx=Taml}/u, "\u{bed}");
-t(/\p{scx=Taml}/u, "\u{bee}");
-f(/\P{scx=Taml}/u, "\u{bee}");
-t(/\p{scx=Taml}/u, "\u{bef}");
-f(/\P{scx=Taml}/u, "\u{bef}");
-t(/\p{scx=Taml}/u, "\u{bf0}");
-f(/\P{scx=Taml}/u, "\u{bf0}");
-t(/\p{scx=Taml}/u, "\u{bf1}");
-f(/\P{scx=Taml}/u, "\u{bf1}");
-t(/\p{scx=Taml}/u, "\u{bf2}");
-f(/\P{scx=Taml}/u, "\u{bf2}");
-t(/\p{scx=Taml}/u, "\u{11303}");
-f(/\P{scx=Taml}/u, "\u{11303}");
-t(/\p{scx=Taml}/u, "\u{1133c}");
-f(/\P{scx=Taml}/u, "\u{1133c}");
-t(/\p{scx=Taml}/u, "\u{1cda}");
-f(/\P{scx=Taml}/u, "\u{1cda}");
-t(/\p{scx=Taml}/u, "\u{952}");
-f(/\P{scx=Taml}/u, "\u{952}");
-t(/\p{scx=Taml}/u, "\u{951}");
-f(/\P{scx=Taml}/u, "\u{951}");
-t(/\p{scx=Taml}/u, "\u{964}");
-f(/\P{scx=Taml}/u, "\u{964}");
-t(/\p{scx=Taml}/u, "\u{965}");
-f(/\P{scx=Taml}/u, "\u{965}");
-f(/(?=\P{sc=Taml})\p{scx=Taml}/u, "\u{cd2c8}");
-f(/(?=\P{sc=Taml})\p{scx=Taml}/u, "\u{3b11}");
-f(/(?=\P{sc=Taml})\p{scx=Taml}/u, "\u{4c056}");
-f(/(?=\P{sc=Taml})\p{scx=Taml}/u, "\u{f32f7}");
-f(/(?=\P{sc=Taml})\p{scx=Taml}/u, "\u{b753f}");
+f(/(?=\P{sc=Taml})\p{scx=Taml}/u, "\u{fb7ab}");
+f(/(?=\P{sc=Taml})\p{scx=Taml}/u, "\u{d687c}");
+f(/(?=\P{sc=Taml})\p{scx=Taml}/u, "\u{b6aea}");
+f(/(?=\P{sc=Taml})\p{scx=Taml}/u, "\u{e42bc}");
+f(/(?=\P{sc=Taml})\p{scx=Taml}/u, "\u{77534}");
// Script_Extension=Gujr
-t(/\p{scx=Gujr}/u, "\u{ae6}");
-f(/\P{scx=Gujr}/u, "\u{ae6}");
-t(/\p{scx=Gujr}/u, "\u{ae7}");
-f(/\P{scx=Gujr}/u, "\u{ae7}");
-t(/\p{scx=Gujr}/u, "\u{ae8}");
-f(/\P{scx=Gujr}/u, "\u{ae8}");
-t(/\p{scx=Gujr}/u, "\u{ae9}");
-f(/\P{scx=Gujr}/u, "\u{ae9}");
-t(/\p{scx=Gujr}/u, "\u{aea}");
-f(/\P{scx=Gujr}/u, "\u{aea}");
-t(/\p{scx=Gujr}/u, "\u{aeb}");
-f(/\P{scx=Gujr}/u, "\u{aeb}");
-t(/\p{scx=Gujr}/u, "\u{aec}");
-f(/\P{scx=Gujr}/u, "\u{aec}");
-t(/\p{scx=Gujr}/u, "\u{aed}");
-f(/\P{scx=Gujr}/u, "\u{aed}");
-t(/\p{scx=Gujr}/u, "\u{aee}");
-f(/\P{scx=Gujr}/u, "\u{aee}");
-t(/\p{scx=Gujr}/u, "\u{aef}");
-f(/\P{scx=Gujr}/u, "\u{aef}");
-t(/\p{scx=Gujr}/u, "\u{a836}");
-f(/\P{scx=Gujr}/u, "\u{a836}");
-t(/\p{scx=Gujr}/u, "\u{a837}");
-f(/\P{scx=Gujr}/u, "\u{a837}");
-t(/\p{scx=Gujr}/u, "\u{a838}");
-f(/\P{scx=Gujr}/u, "\u{a838}");
-t(/\p{scx=Gujr}/u, "\u{a839}");
-f(/\P{scx=Gujr}/u, "\u{a839}");
-t(/\p{scx=Gujr}/u, "\u{a830}");
-f(/\P{scx=Gujr}/u, "\u{a830}");
-t(/\p{scx=Gujr}/u, "\u{a831}");
-f(/\P{scx=Gujr}/u, "\u{a831}");
-t(/\p{scx=Gujr}/u, "\u{a832}");
-f(/\P{scx=Gujr}/u, "\u{a832}");
-t(/\p{scx=Gujr}/u, "\u{a833}");
-f(/\P{scx=Gujr}/u, "\u{a833}");
-t(/\p{scx=Gujr}/u, "\u{a834}");
-f(/\P{scx=Gujr}/u, "\u{a834}");
-t(/\p{scx=Gujr}/u, "\u{a835}");
-f(/\P{scx=Gujr}/u, "\u{a835}");
-t(/\p{scx=Gujr}/u, "\u{952}");
-f(/\P{scx=Gujr}/u, "\u{952}");
-t(/\p{scx=Gujr}/u, "\u{951}");
-f(/\P{scx=Gujr}/u, "\u{951}");
-t(/\p{scx=Gujr}/u, "\u{964}");
-f(/\P{scx=Gujr}/u, "\u{964}");
-t(/\p{scx=Gujr}/u, "\u{965}");
-f(/\P{scx=Gujr}/u, "\u{965}");
-f(/(?=\P{sc=Gujr})\p{scx=Gujr}/u, "\u{6e146}");
-f(/(?=\P{sc=Gujr})\p{scx=Gujr}/u, "\u{6c1e2}");
-f(/(?=\P{sc=Gujr})\p{scx=Gujr}/u, "\u{122b2}");
-f(/(?=\P{sc=Gujr})\p{scx=Gujr}/u, "\u{1084c8}");
-f(/(?=\P{sc=Gujr})\p{scx=Gujr}/u, "\u{e13be}");
+f(/(?=\P{sc=Gujr})\p{scx=Gujr}/u, "\u{4b35c}");
+f(/(?=\P{sc=Gujr})\p{scx=Gujr}/u, "\u{889e5}");
+f(/(?=\P{sc=Gujr})\p{scx=Gujr}/u, "\u{107d78}");
+f(/(?=\P{sc=Gujr})\p{scx=Gujr}/u, "\u{c68d8}");
+f(/(?=\P{sc=Gujr})\p{scx=Gujr}/u, "\u{a5b0a}");
// Script_Extension=Khoj
-t(/\p{scx=Khoj}/u, "\u{ae6}");
-f(/\P{scx=Khoj}/u, "\u{ae6}");
-t(/\p{scx=Khoj}/u, "\u{ae7}");
-f(/\P{scx=Khoj}/u, "\u{ae7}");
-t(/\p{scx=Khoj}/u, "\u{ae8}");
-f(/\P{scx=Khoj}/u, "\u{ae8}");
-t(/\p{scx=Khoj}/u, "\u{ae9}");
-f(/\P{scx=Khoj}/u, "\u{ae9}");
-t(/\p{scx=Khoj}/u, "\u{aea}");
-f(/\P{scx=Khoj}/u, "\u{aea}");
-t(/\p{scx=Khoj}/u, "\u{aeb}");
-f(/\P{scx=Khoj}/u, "\u{aeb}");
-t(/\p{scx=Khoj}/u, "\u{aec}");
-f(/\P{scx=Khoj}/u, "\u{aec}");
-t(/\p{scx=Khoj}/u, "\u{aed}");
-f(/\P{scx=Khoj}/u, "\u{aed}");
-t(/\p{scx=Khoj}/u, "\u{aee}");
-f(/\P{scx=Khoj}/u, "\u{aee}");
-t(/\p{scx=Khoj}/u, "\u{aef}");
-f(/\P{scx=Khoj}/u, "\u{aef}");
-f(/(?=\P{sc=Khoj})\p{scx=Khoj}/u, "\u{54d2e}");
-f(/(?=\P{sc=Khoj})\p{scx=Khoj}/u, "\u{7f810}");
-f(/(?=\P{sc=Khoj})\p{scx=Khoj}/u, "\u{1b6a5}");
-f(/(?=\P{sc=Khoj})\p{scx=Khoj}/u, "\u{25b08}");
-f(/(?=\P{sc=Khoj})\p{scx=Khoj}/u, "\u{3f5a4}");
+f(/(?=\P{sc=Khoj})\p{scx=Khoj}/u, "\u{2da77}");
+f(/(?=\P{sc=Khoj})\p{scx=Khoj}/u, "\u{9fb5}");
+f(/(?=\P{sc=Khoj})\p{scx=Khoj}/u, "\u{a0268}");
+f(/(?=\P{sc=Khoj})\p{scx=Khoj}/u, "\u{10d835}");
+f(/(?=\P{sc=Khoj})\p{scx=Khoj}/u, "\u{49e92}");
// Script_Extension=Guru
-t(/\p{scx=Guru}/u, "\u{a66}");
-f(/\P{scx=Guru}/u, "\u{a66}");
-t(/\p{scx=Guru}/u, "\u{a67}");
-f(/\P{scx=Guru}/u, "\u{a67}");
-t(/\p{scx=Guru}/u, "\u{a68}");
-f(/\P{scx=Guru}/u, "\u{a68}");
-t(/\p{scx=Guru}/u, "\u{a69}");
-f(/\P{scx=Guru}/u, "\u{a69}");
-t(/\p{scx=Guru}/u, "\u{a6a}");
-f(/\P{scx=Guru}/u, "\u{a6a}");
-t(/\p{scx=Guru}/u, "\u{a6b}");
-f(/\P{scx=Guru}/u, "\u{a6b}");
-t(/\p{scx=Guru}/u, "\u{a6c}");
-f(/\P{scx=Guru}/u, "\u{a6c}");
-t(/\p{scx=Guru}/u, "\u{a6d}");
-f(/\P{scx=Guru}/u, "\u{a6d}");
-t(/\p{scx=Guru}/u, "\u{a6e}");
-f(/\P{scx=Guru}/u, "\u{a6e}");
-t(/\p{scx=Guru}/u, "\u{a6f}");
-f(/\P{scx=Guru}/u, "\u{a6f}");
-t(/\p{scx=Guru}/u, "\u{a836}");
-f(/\P{scx=Guru}/u, "\u{a836}");
-t(/\p{scx=Guru}/u, "\u{a837}");
-f(/\P{scx=Guru}/u, "\u{a837}");
-t(/\p{scx=Guru}/u, "\u{a838}");
-f(/\P{scx=Guru}/u, "\u{a838}");
-t(/\p{scx=Guru}/u, "\u{a839}");
-f(/\P{scx=Guru}/u, "\u{a839}");
-t(/\p{scx=Guru}/u, "\u{a830}");
-f(/\P{scx=Guru}/u, "\u{a830}");
-t(/\p{scx=Guru}/u, "\u{a831}");
-f(/\P{scx=Guru}/u, "\u{a831}");
-t(/\p{scx=Guru}/u, "\u{a832}");
-f(/\P{scx=Guru}/u, "\u{a832}");
-t(/\p{scx=Guru}/u, "\u{a833}");
-f(/\P{scx=Guru}/u, "\u{a833}");
-t(/\p{scx=Guru}/u, "\u{a834}");
-f(/\P{scx=Guru}/u, "\u{a834}");
-t(/\p{scx=Guru}/u, "\u{a835}");
-f(/\P{scx=Guru}/u, "\u{a835}");
-t(/\p{scx=Guru}/u, "\u{952}");
-f(/\P{scx=Guru}/u, "\u{952}");
-t(/\p{scx=Guru}/u, "\u{951}");
-f(/\P{scx=Guru}/u, "\u{951}");
-t(/\p{scx=Guru}/u, "\u{964}");
-f(/\P{scx=Guru}/u, "\u{964}");
-t(/\p{scx=Guru}/u, "\u{965}");
-f(/\P{scx=Guru}/u, "\u{965}");
-f(/(?=\P{sc=Guru})\p{scx=Guru}/u, "\u{c01ee}");
-f(/(?=\P{sc=Guru})\p{scx=Guru}/u, "\u{8b95a}");
-f(/(?=\P{sc=Guru})\p{scx=Guru}/u, "\u{bf5a}");
-f(/(?=\P{sc=Guru})\p{scx=Guru}/u, "\u{171c5}");
-f(/(?=\P{sc=Guru})\p{scx=Guru}/u, "\u{89de9}");
+f(/(?=\P{sc=Guru})\p{scx=Guru}/u, "\u{54186}");
+f(/(?=\P{sc=Guru})\p{scx=Guru}/u, "\u{a2fff}");
+f(/(?=\P{sc=Guru})\p{scx=Guru}/u, "\u{e25c3}");
+f(/(?=\P{sc=Guru})\p{scx=Guru}/u, "\u{10496}");
+f(/(?=\P{sc=Guru})\p{scx=Guru}/u, "\u{10ad15}");
// Script_Extension=Mult
-t(/\p{scx=Mult}/u, "\u{a66}");
-f(/\P{scx=Mult}/u, "\u{a66}");
-t(/\p{scx=Mult}/u, "\u{a67}");
-f(/\P{scx=Mult}/u, "\u{a67}");
-t(/\p{scx=Mult}/u, "\u{a68}");
-f(/\P{scx=Mult}/u, "\u{a68}");
-t(/\p{scx=Mult}/u, "\u{a69}");
-f(/\P{scx=Mult}/u, "\u{a69}");
-t(/\p{scx=Mult}/u, "\u{a6a}");
-f(/\P{scx=Mult}/u, "\u{a6a}");
-t(/\p{scx=Mult}/u, "\u{a6b}");
-f(/\P{scx=Mult}/u, "\u{a6b}");
-t(/\p{scx=Mult}/u, "\u{a6c}");
-f(/\P{scx=Mult}/u, "\u{a6c}");
-t(/\p{scx=Mult}/u, "\u{a6d}");
-f(/\P{scx=Mult}/u, "\u{a6d}");
-t(/\p{scx=Mult}/u, "\u{a6e}");
-f(/\P{scx=Mult}/u, "\u{a6e}");
-t(/\p{scx=Mult}/u, "\u{a6f}");
-f(/\P{scx=Mult}/u, "\u{a6f}");
-f(/(?=\P{sc=Mult})\p{scx=Mult}/u, "\u{cb98f}");
-f(/(?=\P{sc=Mult})\p{scx=Mult}/u, "\u{d30de}");
-f(/(?=\P{sc=Mult})\p{scx=Mult}/u, "\u{5d609}");
-f(/(?=\P{sc=Mult})\p{scx=Mult}/u, "\u{935d8}");
-f(/(?=\P{sc=Mult})\p{scx=Mult}/u, "\u{72f8e}");
+f(/(?=\P{sc=Mult})\p{scx=Mult}/u, "\u{2794e}");
+f(/(?=\P{sc=Mult})\p{scx=Mult}/u, "\u{2f6b4}");
+f(/(?=\P{sc=Mult})\p{scx=Mult}/u, "\u{d50f2}");
+f(/(?=\P{sc=Mult})\p{scx=Mult}/u, "\u{62dac}");
+f(/(?=\P{sc=Mult})\p{scx=Mult}/u, "\u{ad0b2}");
// Script_Extension=Hira
-t(/\p{scx=Hira}/u, "\u{3031}");
-f(/\P{scx=Hira}/u, "\u{3031}");
-t(/\p{scx=Hira}/u, "\u{3032}");
-f(/\P{scx=Hira}/u, "\u{3032}");
-t(/\p{scx=Hira}/u, "\u{3033}");
-f(/\P{scx=Hira}/u, "\u{3033}");
-t(/\p{scx=Hira}/u, "\u{3034}");
-f(/\P{scx=Hira}/u, "\u{3034}");
-t(/\p{scx=Hira}/u, "\u{3035}");
-f(/\P{scx=Hira}/u, "\u{3035}");
-t(/\p{scx=Hira}/u, "\u{3099}");
-f(/\P{scx=Hira}/u, "\u{3099}");
-t(/\p{scx=Hira}/u, "\u{309a}");
-f(/\P{scx=Hira}/u, "\u{309a}");
-t(/\p{scx=Hira}/u, "\u{309b}");
-f(/\P{scx=Hira}/u, "\u{309b}");
-t(/\p{scx=Hira}/u, "\u{309c}");
-f(/\P{scx=Hira}/u, "\u{309c}");
-t(/\p{scx=Hira}/u, "\u{30a0}");
-f(/\P{scx=Hira}/u, "\u{30a0}");
-t(/\p{scx=Hira}/u, "\u{30fc}");
-f(/\P{scx=Hira}/u, "\u{30fc}");
-t(/\p{scx=Hira}/u, "\u{ff70}");
-f(/\P{scx=Hira}/u, "\u{ff70}");
-t(/\p{scx=Hira}/u, "\u{ff9e}");
-f(/\P{scx=Hira}/u, "\u{ff9e}");
-t(/\p{scx=Hira}/u, "\u{ff9f}");
-f(/\P{scx=Hira}/u, "\u{ff9f}");
-t(/\p{scx=Hira}/u, "\u{303c}");
-f(/\P{scx=Hira}/u, "\u{303c}");
-t(/\p{scx=Hira}/u, "\u{303d}");
-f(/\P{scx=Hira}/u, "\u{303d}");
-t(/\p{scx=Hira}/u, "\u{3003}");
-f(/\P{scx=Hira}/u, "\u{3003}");
-t(/\p{scx=Hira}/u, "\u{3013}");
-f(/\P{scx=Hira}/u, "\u{3013}");
-t(/\p{scx=Hira}/u, "\u{301c}");
-f(/\P{scx=Hira}/u, "\u{301c}");
-t(/\p{scx=Hira}/u, "\u{301d}");
-f(/\P{scx=Hira}/u, "\u{301d}");
-t(/\p{scx=Hira}/u, "\u{301e}");
-f(/\P{scx=Hira}/u, "\u{301e}");
-t(/\p{scx=Hira}/u, "\u{301f}");
-f(/\P{scx=Hira}/u, "\u{301f}");
-t(/\p{scx=Hira}/u, "\u{3030}");
-f(/\P{scx=Hira}/u, "\u{3030}");
-t(/\p{scx=Hira}/u, "\u{3037}");
-f(/\P{scx=Hira}/u, "\u{3037}");
-t(/\p{scx=Hira}/u, "\u{fe45}");
-f(/\P{scx=Hira}/u, "\u{fe45}");
-t(/\p{scx=Hira}/u, "\u{fe46}");
-f(/\P{scx=Hira}/u, "\u{fe46}");
-t(/\p{scx=Hira}/u, "\u{3001}");
-f(/\P{scx=Hira}/u, "\u{3001}");
-t(/\p{scx=Hira}/u, "\u{3002}");
-f(/\P{scx=Hira}/u, "\u{3002}");
-t(/\p{scx=Hira}/u, "\u{3008}");
-f(/\P{scx=Hira}/u, "\u{3008}");
-t(/\p{scx=Hira}/u, "\u{3009}");
-f(/\P{scx=Hira}/u, "\u{3009}");
-t(/\p{scx=Hira}/u, "\u{300a}");
-f(/\P{scx=Hira}/u, "\u{300a}");
-t(/\p{scx=Hira}/u, "\u{300b}");
-f(/\P{scx=Hira}/u, "\u{300b}");
-t(/\p{scx=Hira}/u, "\u{300c}");
-f(/\P{scx=Hira}/u, "\u{300c}");
-t(/\p{scx=Hira}/u, "\u{300d}");
-f(/\P{scx=Hira}/u, "\u{300d}");
-t(/\p{scx=Hira}/u, "\u{300e}");
-f(/\P{scx=Hira}/u, "\u{300e}");
-t(/\p{scx=Hira}/u, "\u{300f}");
-f(/\P{scx=Hira}/u, "\u{300f}");
-t(/\p{scx=Hira}/u, "\u{3010}");
-f(/\P{scx=Hira}/u, "\u{3010}");
-t(/\p{scx=Hira}/u, "\u{3011}");
-f(/\P{scx=Hira}/u, "\u{3011}");
-t(/\p{scx=Hira}/u, "\u{3014}");
-f(/\P{scx=Hira}/u, "\u{3014}");
-t(/\p{scx=Hira}/u, "\u{3015}");
-f(/\P{scx=Hira}/u, "\u{3015}");
-t(/\p{scx=Hira}/u, "\u{3016}");
-f(/\P{scx=Hira}/u, "\u{3016}");
-t(/\p{scx=Hira}/u, "\u{3017}");
-f(/\P{scx=Hira}/u, "\u{3017}");
-t(/\p{scx=Hira}/u, "\u{3018}");
-f(/\P{scx=Hira}/u, "\u{3018}");
-t(/\p{scx=Hira}/u, "\u{3019}");
-f(/\P{scx=Hira}/u, "\u{3019}");
-t(/\p{scx=Hira}/u, "\u{301a}");
-f(/\P{scx=Hira}/u, "\u{301a}");
-t(/\p{scx=Hira}/u, "\u{301b}");
-f(/\P{scx=Hira}/u, "\u{301b}");
-t(/\p{scx=Hira}/u, "\u{30fb}");
-f(/\P{scx=Hira}/u, "\u{30fb}");
-t(/\p{scx=Hira}/u, "\u{ff61}");
-f(/\P{scx=Hira}/u, "\u{ff61}");
-t(/\p{scx=Hira}/u, "\u{ff62}");
-f(/\P{scx=Hira}/u, "\u{ff62}");
-t(/\p{scx=Hira}/u, "\u{ff63}");
-f(/\P{scx=Hira}/u, "\u{ff63}");
-t(/\p{scx=Hira}/u, "\u{ff64}");
-f(/\P{scx=Hira}/u, "\u{ff64}");
-t(/\p{scx=Hira}/u, "\u{ff65}");
-f(/\P{scx=Hira}/u, "\u{ff65}");
-f(/(?=\P{sc=Hira})\p{scx=Hira}/u, "\u{e76fe}");
-f(/(?=\P{sc=Hira})\p{scx=Hira}/u, "\u{53a36}");
-f(/(?=\P{sc=Hira})\p{scx=Hira}/u, "\u{acd83}");
-f(/(?=\P{sc=Hira})\p{scx=Hira}/u, "\u{b4cab}");
-f(/(?=\P{sc=Hira})\p{scx=Hira}/u, "\u{e9807}");
+f(/(?=\P{sc=Hira})\p{scx=Hira}/u, "\u{be070}");
+f(/(?=\P{sc=Hira})\p{scx=Hira}/u, "\u{d2d48}");
+f(/(?=\P{sc=Hira})\p{scx=Hira}/u, "\u{ec3a2}");
+f(/(?=\P{sc=Hira})\p{scx=Hira}/u, "\u{b2f9d}");
+f(/(?=\P{sc=Hira})\p{scx=Hira}/u, "\u{4b539}");
// Script_Extension=Kana
-t(/\p{scx=Kana}/u, "\u{3031}");
-f(/\P{scx=Kana}/u, "\u{3031}");
-t(/\p{scx=Kana}/u, "\u{3032}");
-f(/\P{scx=Kana}/u, "\u{3032}");
-t(/\p{scx=Kana}/u, "\u{3033}");
-f(/\P{scx=Kana}/u, "\u{3033}");
-t(/\p{scx=Kana}/u, "\u{3034}");
-f(/\P{scx=Kana}/u, "\u{3034}");
-t(/\p{scx=Kana}/u, "\u{3035}");
-f(/\P{scx=Kana}/u, "\u{3035}");
-t(/\p{scx=Kana}/u, "\u{3099}");
-f(/\P{scx=Kana}/u, "\u{3099}");
-t(/\p{scx=Kana}/u, "\u{309a}");
-f(/\P{scx=Kana}/u, "\u{309a}");
-t(/\p{scx=Kana}/u, "\u{309b}");
-f(/\P{scx=Kana}/u, "\u{309b}");
-t(/\p{scx=Kana}/u, "\u{309c}");
-f(/\P{scx=Kana}/u, "\u{309c}");
-t(/\p{scx=Kana}/u, "\u{30a0}");
-f(/\P{scx=Kana}/u, "\u{30a0}");
-t(/\p{scx=Kana}/u, "\u{30fc}");
-f(/\P{scx=Kana}/u, "\u{30fc}");
-t(/\p{scx=Kana}/u, "\u{ff70}");
-f(/\P{scx=Kana}/u, "\u{ff70}");
-t(/\p{scx=Kana}/u, "\u{ff9e}");
-f(/\P{scx=Kana}/u, "\u{ff9e}");
-t(/\p{scx=Kana}/u, "\u{ff9f}");
-f(/\P{scx=Kana}/u, "\u{ff9f}");
-t(/\p{scx=Kana}/u, "\u{303c}");
-f(/\P{scx=Kana}/u, "\u{303c}");
-t(/\p{scx=Kana}/u, "\u{303d}");
-f(/\P{scx=Kana}/u, "\u{303d}");
-t(/\p{scx=Kana}/u, "\u{3003}");
-f(/\P{scx=Kana}/u, "\u{3003}");
-t(/\p{scx=Kana}/u, "\u{3013}");
-f(/\P{scx=Kana}/u, "\u{3013}");
-t(/\p{scx=Kana}/u, "\u{301c}");
-f(/\P{scx=Kana}/u, "\u{301c}");
-t(/\p{scx=Kana}/u, "\u{301d}");
-f(/\P{scx=Kana}/u, "\u{301d}");
-t(/\p{scx=Kana}/u, "\u{301e}");
-f(/\P{scx=Kana}/u, "\u{301e}");
-t(/\p{scx=Kana}/u, "\u{301f}");
-f(/\P{scx=Kana}/u, "\u{301f}");
-t(/\p{scx=Kana}/u, "\u{3030}");
-f(/\P{scx=Kana}/u, "\u{3030}");
-t(/\p{scx=Kana}/u, "\u{3037}");
-f(/\P{scx=Kana}/u, "\u{3037}");
-t(/\p{scx=Kana}/u, "\u{fe45}");
-f(/\P{scx=Kana}/u, "\u{fe45}");
-t(/\p{scx=Kana}/u, "\u{fe46}");
-f(/\P{scx=Kana}/u, "\u{fe46}");
-t(/\p{scx=Kana}/u, "\u{3001}");
-f(/\P{scx=Kana}/u, "\u{3001}");
-t(/\p{scx=Kana}/u, "\u{3002}");
-f(/\P{scx=Kana}/u, "\u{3002}");
-t(/\p{scx=Kana}/u, "\u{3008}");
-f(/\P{scx=Kana}/u, "\u{3008}");
-t(/\p{scx=Kana}/u, "\u{3009}");
-f(/\P{scx=Kana}/u, "\u{3009}");
-t(/\p{scx=Kana}/u, "\u{300a}");
-f(/\P{scx=Kana}/u, "\u{300a}");
-t(/\p{scx=Kana}/u, "\u{300b}");
-f(/\P{scx=Kana}/u, "\u{300b}");
-t(/\p{scx=Kana}/u, "\u{300c}");
-f(/\P{scx=Kana}/u, "\u{300c}");
-t(/\p{scx=Kana}/u, "\u{300d}");
-f(/\P{scx=Kana}/u, "\u{300d}");
-t(/\p{scx=Kana}/u, "\u{300e}");
-f(/\P{scx=Kana}/u, "\u{300e}");
-t(/\p{scx=Kana}/u, "\u{300f}");
-f(/\P{scx=Kana}/u, "\u{300f}");
-t(/\p{scx=Kana}/u, "\u{3010}");
-f(/\P{scx=Kana}/u, "\u{3010}");
-t(/\p{scx=Kana}/u, "\u{3011}");
-f(/\P{scx=Kana}/u, "\u{3011}");
-t(/\p{scx=Kana}/u, "\u{3014}");
-f(/\P{scx=Kana}/u, "\u{3014}");
-t(/\p{scx=Kana}/u, "\u{3015}");
-f(/\P{scx=Kana}/u, "\u{3015}");
-t(/\p{scx=Kana}/u, "\u{3016}");
-f(/\P{scx=Kana}/u, "\u{3016}");
-t(/\p{scx=Kana}/u, "\u{3017}");
-f(/\P{scx=Kana}/u, "\u{3017}");
-t(/\p{scx=Kana}/u, "\u{3018}");
-f(/\P{scx=Kana}/u, "\u{3018}");
-t(/\p{scx=Kana}/u, "\u{3019}");
-f(/\P{scx=Kana}/u, "\u{3019}");
-t(/\p{scx=Kana}/u, "\u{301a}");
-f(/\P{scx=Kana}/u, "\u{301a}");
-t(/\p{scx=Kana}/u, "\u{301b}");
-f(/\P{scx=Kana}/u, "\u{301b}");
-t(/\p{scx=Kana}/u, "\u{30fb}");
-f(/\P{scx=Kana}/u, "\u{30fb}");
-t(/\p{scx=Kana}/u, "\u{ff61}");
-f(/\P{scx=Kana}/u, "\u{ff61}");
-t(/\p{scx=Kana}/u, "\u{ff62}");
-f(/\P{scx=Kana}/u, "\u{ff62}");
-t(/\p{scx=Kana}/u, "\u{ff63}");
-f(/\P{scx=Kana}/u, "\u{ff63}");
-t(/\p{scx=Kana}/u, "\u{ff64}");
-f(/\P{scx=Kana}/u, "\u{ff64}");
-t(/\p{scx=Kana}/u, "\u{ff65}");
-f(/\P{scx=Kana}/u, "\u{ff65}");
-f(/(?=\P{sc=Kana})\p{scx=Kana}/u, "\u{62d2b}");
-f(/(?=\P{sc=Kana})\p{scx=Kana}/u, "\u{7fb02}");
-f(/(?=\P{sc=Kana})\p{scx=Kana}/u, "\u{272ad}");
-f(/(?=\P{sc=Kana})\p{scx=Kana}/u, "\u{d8eae}");
-f(/(?=\P{sc=Kana})\p{scx=Kana}/u, "\u{5ff06}");
+f(/(?=\P{sc=Kana})\p{scx=Kana}/u, "\u{545d5}");
+f(/(?=\P{sc=Kana})\p{scx=Kana}/u, "\u{23e9d}");
+f(/(?=\P{sc=Kana})\p{scx=Kana}/u, "\u{104ba8}");
+f(/(?=\P{sc=Kana})\p{scx=Kana}/u, "\u{dc9d5}");
+f(/(?=\P{sc=Kana})\p{scx=Kana}/u, "\u{8229c}");
// Script_Extension=Mong
-t(/\p{scx=Mong}/u, "\u{1802}");
-f(/\P{scx=Mong}/u, "\u{1802}");
-t(/\p{scx=Mong}/u, "\u{1803}");
-f(/\P{scx=Mong}/u, "\u{1803}");
-t(/\p{scx=Mong}/u, "\u{1805}");
-f(/\P{scx=Mong}/u, "\u{1805}");
-f(/(?=\P{sc=Mong})\p{scx=Mong}/u, "\u{9b814}");
-f(/(?=\P{sc=Mong})\p{scx=Mong}/u, "\u{2dce3}");
-f(/(?=\P{sc=Mong})\p{scx=Mong}/u, "\u{2f969}");
-f(/(?=\P{sc=Mong})\p{scx=Mong}/u, "\u{10f87c}");
-f(/(?=\P{sc=Mong})\p{scx=Mong}/u, "\u{57d}");
+f(/(?=\P{sc=Mong})\p{scx=Mong}/u, "\u{3b0ad}");
+f(/(?=\P{sc=Mong})\p{scx=Mong}/u, "\u{d9402}");
+f(/(?=\P{sc=Mong})\p{scx=Mong}/u, "\u{8f4ae}");
+f(/(?=\P{sc=Mong})\p{scx=Mong}/u, "\u{18b7d}");
+f(/(?=\P{sc=Mong})\p{scx=Mong}/u, "\u{e0393}");
// Script_Extension=Phag
-t(/\p{scx=Phag}/u, "\u{1802}");
-f(/\P{scx=Phag}/u, "\u{1802}");
-t(/\p{scx=Phag}/u, "\u{1803}");
-f(/\P{scx=Phag}/u, "\u{1803}");
-t(/\p{scx=Phag}/u, "\u{1805}");
-f(/\P{scx=Phag}/u, "\u{1805}");
-f(/(?=\P{sc=Phag})\p{scx=Phag}/u, "\u{aa326}");
-f(/(?=\P{sc=Phag})\p{scx=Phag}/u, "\u{ba8f3}");
-f(/(?=\P{sc=Phag})\p{scx=Phag}/u, "\u{2cc5d}");
-f(/(?=\P{sc=Phag})\p{scx=Phag}/u, "\u{f8f43}");
-f(/(?=\P{sc=Phag})\p{scx=Phag}/u, "\u{effbb}");
+f(/(?=\P{sc=Phag})\p{scx=Phag}/u, "\u{3eb13}");
+f(/(?=\P{sc=Phag})\p{scx=Phag}/u, "\u{273e7}");
+f(/(?=\P{sc=Phag})\p{scx=Phag}/u, "\u{d7ad4}");
+f(/(?=\P{sc=Phag})\p{scx=Phag}/u, "\u{80daf}");
+f(/(?=\P{sc=Phag})\p{scx=Phag}/u, "\u{bd1ad}");
// Script_Extension=Cakm
-t(/\p{scx=Cakm}/u, "\u{9e6}");
-f(/\P{scx=Cakm}/u, "\u{9e6}");
-t(/\p{scx=Cakm}/u, "\u{9e7}");
-f(/\P{scx=Cakm}/u, "\u{9e7}");
-t(/\p{scx=Cakm}/u, "\u{9e8}");
-f(/\P{scx=Cakm}/u, "\u{9e8}");
-t(/\p{scx=Cakm}/u, "\u{9e9}");
-f(/\P{scx=Cakm}/u, "\u{9e9}");
-t(/\p{scx=Cakm}/u, "\u{9ea}");
-f(/\P{scx=Cakm}/u, "\u{9ea}");
-t(/\p{scx=Cakm}/u, "\u{9eb}");
-f(/\P{scx=Cakm}/u, "\u{9eb}");
-t(/\p{scx=Cakm}/u, "\u{9ec}");
-f(/\P{scx=Cakm}/u, "\u{9ec}");
-t(/\p{scx=Cakm}/u, "\u{9ed}");
-f(/\P{scx=Cakm}/u, "\u{9ed}");
-t(/\p{scx=Cakm}/u, "\u{9ee}");
-f(/\P{scx=Cakm}/u, "\u{9ee}");
-t(/\p{scx=Cakm}/u, "\u{9ef}");
-f(/\P{scx=Cakm}/u, "\u{9ef}");
-t(/\p{scx=Cakm}/u, "\u{1040}");
-f(/\P{scx=Cakm}/u, "\u{1040}");
-t(/\p{scx=Cakm}/u, "\u{1041}");
-f(/\P{scx=Cakm}/u, "\u{1041}");
-t(/\p{scx=Cakm}/u, "\u{1042}");
-f(/\P{scx=Cakm}/u, "\u{1042}");
-t(/\p{scx=Cakm}/u, "\u{1043}");
-f(/\P{scx=Cakm}/u, "\u{1043}");
-t(/\p{scx=Cakm}/u, "\u{1044}");
-f(/\P{scx=Cakm}/u, "\u{1044}");
-t(/\p{scx=Cakm}/u, "\u{1045}");
-f(/\P{scx=Cakm}/u, "\u{1045}");
-t(/\p{scx=Cakm}/u, "\u{1046}");
-f(/\P{scx=Cakm}/u, "\u{1046}");
-t(/\p{scx=Cakm}/u, "\u{1047}");
-f(/\P{scx=Cakm}/u, "\u{1047}");
-t(/\p{scx=Cakm}/u, "\u{1048}");
-f(/\P{scx=Cakm}/u, "\u{1048}");
-t(/\p{scx=Cakm}/u, "\u{1049}");
-f(/\P{scx=Cakm}/u, "\u{1049}");
-f(/(?=\P{sc=Cakm})\p{scx=Cakm}/u, "\u{f475a}");
-f(/(?=\P{sc=Cakm})\p{scx=Cakm}/u, "\u{7c476}");
-f(/(?=\P{sc=Cakm})\p{scx=Cakm}/u, "\u{10d135}");
-f(/(?=\P{sc=Cakm})\p{scx=Cakm}/u, "\u{9365b}");
-f(/(?=\P{sc=Cakm})\p{scx=Cakm}/u, "\u{363e5}");
+f(/(?=\P{sc=Cakm})\p{scx=Cakm}/u, "\u{19eeb}");
+f(/(?=\P{sc=Cakm})\p{scx=Cakm}/u, "\u{19dab}");
+f(/(?=\P{sc=Cakm})\p{scx=Cakm}/u, "\u{f3a42}");
+f(/(?=\P{sc=Cakm})\p{scx=Cakm}/u, "\u{455c7}");
+f(/(?=\P{sc=Cakm})\p{scx=Cakm}/u, "\u{baa96}");
// Script_Extension=Sylo
-t(/\p{scx=Sylo}/u, "\u{9e6}");
-f(/\P{scx=Sylo}/u, "\u{9e6}");
-t(/\p{scx=Sylo}/u, "\u{9e7}");
-f(/\P{scx=Sylo}/u, "\u{9e7}");
-t(/\p{scx=Sylo}/u, "\u{9e8}");
-f(/\P{scx=Sylo}/u, "\u{9e8}");
-t(/\p{scx=Sylo}/u, "\u{9e9}");
-f(/\P{scx=Sylo}/u, "\u{9e9}");
-t(/\p{scx=Sylo}/u, "\u{9ea}");
-f(/\P{scx=Sylo}/u, "\u{9ea}");
-t(/\p{scx=Sylo}/u, "\u{9eb}");
-f(/\P{scx=Sylo}/u, "\u{9eb}");
-t(/\p{scx=Sylo}/u, "\u{9ec}");
-f(/\P{scx=Sylo}/u, "\u{9ec}");
-t(/\p{scx=Sylo}/u, "\u{9ed}");
-f(/\P{scx=Sylo}/u, "\u{9ed}");
-t(/\p{scx=Sylo}/u, "\u{9ee}");
-f(/\P{scx=Sylo}/u, "\u{9ee}");
-t(/\p{scx=Sylo}/u, "\u{9ef}");
-f(/\P{scx=Sylo}/u, "\u{9ef}");
-t(/\p{scx=Sylo}/u, "\u{964}");
-f(/\P{scx=Sylo}/u, "\u{964}");
-t(/\p{scx=Sylo}/u, "\u{965}");
-f(/\P{scx=Sylo}/u, "\u{965}");
-f(/(?=\P{sc=Sylo})\p{scx=Sylo}/u, "\u{b299f}");
-f(/(?=\P{sc=Sylo})\p{scx=Sylo}/u, "\u{10375e}");
-f(/(?=\P{sc=Sylo})\p{scx=Sylo}/u, "\u{ffbda}");
-f(/(?=\P{sc=Sylo})\p{scx=Sylo}/u, "\u{19058}");
-f(/(?=\P{sc=Sylo})\p{scx=Sylo}/u, "\u{461b8}");
+f(/(?=\P{sc=Sylo})\p{scx=Sylo}/u, "\u{54d3}");
+f(/(?=\P{sc=Sylo})\p{scx=Sylo}/u, "\u{283e9}");
+f(/(?=\P{sc=Sylo})\p{scx=Sylo}/u, "\u{edab9}");
+f(/(?=\P{sc=Sylo})\p{scx=Sylo}/u, "\u{e135d}");
+f(/(?=\P{sc=Sylo})\p{scx=Sylo}/u, "\u{31bc2}");
// Script_Extension=Mymr
-t(/\p{scx=Mymr}/u, "\u{1040}");
-f(/\P{scx=Mymr}/u, "\u{1040}");
-t(/\p{scx=Mymr}/u, "\u{1041}");
-f(/\P{scx=Mymr}/u, "\u{1041}");
-t(/\p{scx=Mymr}/u, "\u{1042}");
-f(/\P{scx=Mymr}/u, "\u{1042}");
-t(/\p{scx=Mymr}/u, "\u{1043}");
-f(/\P{scx=Mymr}/u, "\u{1043}");
-t(/\p{scx=Mymr}/u, "\u{1044}");
-f(/\P{scx=Mymr}/u, "\u{1044}");
-t(/\p{scx=Mymr}/u, "\u{1045}");
-f(/\P{scx=Mymr}/u, "\u{1045}");
-t(/\p{scx=Mymr}/u, "\u{1046}");
-f(/\P{scx=Mymr}/u, "\u{1046}");
-t(/\p{scx=Mymr}/u, "\u{1047}");
-f(/\P{scx=Mymr}/u, "\u{1047}");
-t(/\p{scx=Mymr}/u, "\u{1048}");
-f(/\P{scx=Mymr}/u, "\u{1048}");
-t(/\p{scx=Mymr}/u, "\u{1049}");
-f(/\P{scx=Mymr}/u, "\u{1049}");
-t(/\p{scx=Mymr}/u, "\u{a92e}");
-f(/\P{scx=Mymr}/u, "\u{a92e}");
-f(/(?=\P{sc=Mymr})\p{scx=Mymr}/u, "\u{103b42}");
-f(/(?=\P{sc=Mymr})\p{scx=Mymr}/u, "\u{71346}");
-f(/(?=\P{sc=Mymr})\p{scx=Mymr}/u, "\u{25259}");
-f(/(?=\P{sc=Mymr})\p{scx=Mymr}/u, "\u{469c5}");
-f(/(?=\P{sc=Mymr})\p{scx=Mymr}/u, "\u{faf0c}");
+f(/(?=\P{sc=Mymr})\p{scx=Mymr}/u, "\u{9d605}");
+f(/(?=\P{sc=Mymr})\p{scx=Mymr}/u, "\u{109cae}");
+f(/(?=\P{sc=Mymr})\p{scx=Mymr}/u, "\u{cc2dd}");
+f(/(?=\P{sc=Mymr})\p{scx=Mymr}/u, "\u{d1757}");
+f(/(?=\P{sc=Mymr})\p{scx=Mymr}/u, "\u{baaff}");
// Script_Extension=Tale
-t(/\p{scx=Tale}/u, "\u{1040}");
-f(/\P{scx=Tale}/u, "\u{1040}");
-t(/\p{scx=Tale}/u, "\u{1041}");
-f(/\P{scx=Tale}/u, "\u{1041}");
-t(/\p{scx=Tale}/u, "\u{1042}");
-f(/\P{scx=Tale}/u, "\u{1042}");
-t(/\p{scx=Tale}/u, "\u{1043}");
-f(/\P{scx=Tale}/u, "\u{1043}");
-t(/\p{scx=Tale}/u, "\u{1044}");
-f(/\P{scx=Tale}/u, "\u{1044}");
-t(/\p{scx=Tale}/u, "\u{1045}");
-f(/\P{scx=Tale}/u, "\u{1045}");
-t(/\p{scx=Tale}/u, "\u{1046}");
-f(/\P{scx=Tale}/u, "\u{1046}");
-t(/\p{scx=Tale}/u, "\u{1047}");
-f(/\P{scx=Tale}/u, "\u{1047}");
-t(/\p{scx=Tale}/u, "\u{1048}");
-f(/\P{scx=Tale}/u, "\u{1048}");
-t(/\p{scx=Tale}/u, "\u{1049}");
-f(/\P{scx=Tale}/u, "\u{1049}");
-f(/(?=\P{sc=Tale})\p{scx=Tale}/u, "\u{1416e}");
-f(/(?=\P{sc=Tale})\p{scx=Tale}/u, "\u{ccc0}");
-f(/(?=\P{sc=Tale})\p{scx=Tale}/u, "\u{2a52f}");
-f(/(?=\P{sc=Tale})\p{scx=Tale}/u, "\u{47a2b}");
-f(/(?=\P{sc=Tale})\p{scx=Tale}/u, "\u{7752b}");
+f(/(?=\P{sc=Tale})\p{scx=Tale}/u, "\u{81845}");
+f(/(?=\P{sc=Tale})\p{scx=Tale}/u, "\u{fe9d6}");
+f(/(?=\P{sc=Tale})\p{scx=Tale}/u, "\u{8c1a0}");
+f(/(?=\P{sc=Tale})\p{scx=Tale}/u, "\u{f1a55}");
+f(/(?=\P{sc=Tale})\p{scx=Tale}/u, "\u{a8f6}");
// Script_Extension=Lina
-t(/\p{scx=Lina}/u, "\u{10107}");
-f(/\P{scx=Lina}/u, "\u{10107}");
-t(/\p{scx=Lina}/u, "\u{10108}");
-f(/\P{scx=Lina}/u, "\u{10108}");
-t(/\p{scx=Lina}/u, "\u{10109}");
-f(/\P{scx=Lina}/u, "\u{10109}");
-t(/\p{scx=Lina}/u, "\u{1010a}");
-f(/\P{scx=Lina}/u, "\u{1010a}");
-t(/\p{scx=Lina}/u, "\u{1010b}");
-f(/\P{scx=Lina}/u, "\u{1010b}");
-t(/\p{scx=Lina}/u, "\u{1010c}");
-f(/\P{scx=Lina}/u, "\u{1010c}");
-t(/\p{scx=Lina}/u, "\u{1010d}");
-f(/\P{scx=Lina}/u, "\u{1010d}");
-t(/\p{scx=Lina}/u, "\u{1010e}");
-f(/\P{scx=Lina}/u, "\u{1010e}");
-t(/\p{scx=Lina}/u, "\u{1010f}");
-f(/\P{scx=Lina}/u, "\u{1010f}");
-t(/\p{scx=Lina}/u, "\u{10110}");
-f(/\P{scx=Lina}/u, "\u{10110}");
-t(/\p{scx=Lina}/u, "\u{10111}");
-f(/\P{scx=Lina}/u, "\u{10111}");
-t(/\p{scx=Lina}/u, "\u{10112}");
-f(/\P{scx=Lina}/u, "\u{10112}");
-t(/\p{scx=Lina}/u, "\u{10113}");
-f(/\P{scx=Lina}/u, "\u{10113}");
-t(/\p{scx=Lina}/u, "\u{10114}");
-f(/\P{scx=Lina}/u, "\u{10114}");
-t(/\p{scx=Lina}/u, "\u{10115}");
-f(/\P{scx=Lina}/u, "\u{10115}");
-t(/\p{scx=Lina}/u, "\u{10116}");
-f(/\P{scx=Lina}/u, "\u{10116}");
-t(/\p{scx=Lina}/u, "\u{10117}");
-f(/\P{scx=Lina}/u, "\u{10117}");
-t(/\p{scx=Lina}/u, "\u{10118}");
-f(/\P{scx=Lina}/u, "\u{10118}");
-t(/\p{scx=Lina}/u, "\u{10119}");
-f(/\P{scx=Lina}/u, "\u{10119}");
-t(/\p{scx=Lina}/u, "\u{1011a}");
-f(/\P{scx=Lina}/u, "\u{1011a}");
-t(/\p{scx=Lina}/u, "\u{1011b}");
-f(/\P{scx=Lina}/u, "\u{1011b}");
-t(/\p{scx=Lina}/u, "\u{1011c}");
-f(/\P{scx=Lina}/u, "\u{1011c}");
-t(/\p{scx=Lina}/u, "\u{1011d}");
-f(/\P{scx=Lina}/u, "\u{1011d}");
-t(/\p{scx=Lina}/u, "\u{1011e}");
-f(/\P{scx=Lina}/u, "\u{1011e}");
-t(/\p{scx=Lina}/u, "\u{1011f}");
-f(/\P{scx=Lina}/u, "\u{1011f}");
-t(/\p{scx=Lina}/u, "\u{10120}");
-f(/\P{scx=Lina}/u, "\u{10120}");
-t(/\p{scx=Lina}/u, "\u{10121}");
-f(/\P{scx=Lina}/u, "\u{10121}");
-t(/\p{scx=Lina}/u, "\u{10122}");
-f(/\P{scx=Lina}/u, "\u{10122}");
-t(/\p{scx=Lina}/u, "\u{10123}");
-f(/\P{scx=Lina}/u, "\u{10123}");
-t(/\p{scx=Lina}/u, "\u{10124}");
-f(/\P{scx=Lina}/u, "\u{10124}");
-t(/\p{scx=Lina}/u, "\u{10125}");
-f(/\P{scx=Lina}/u, "\u{10125}");
-t(/\p{scx=Lina}/u, "\u{10126}");
-f(/\P{scx=Lina}/u, "\u{10126}");
-t(/\p{scx=Lina}/u, "\u{10127}");
-f(/\P{scx=Lina}/u, "\u{10127}");
-t(/\p{scx=Lina}/u, "\u{10128}");
-f(/\P{scx=Lina}/u, "\u{10128}");
-t(/\p{scx=Lina}/u, "\u{10129}");
-f(/\P{scx=Lina}/u, "\u{10129}");
-t(/\p{scx=Lina}/u, "\u{1012a}");
-f(/\P{scx=Lina}/u, "\u{1012a}");
-t(/\p{scx=Lina}/u, "\u{1012b}");
-f(/\P{scx=Lina}/u, "\u{1012b}");
-t(/\p{scx=Lina}/u, "\u{1012c}");
-f(/\P{scx=Lina}/u, "\u{1012c}");
-t(/\p{scx=Lina}/u, "\u{1012d}");
-f(/\P{scx=Lina}/u, "\u{1012d}");
-t(/\p{scx=Lina}/u, "\u{1012e}");
-f(/\P{scx=Lina}/u, "\u{1012e}");
-t(/\p{scx=Lina}/u, "\u{1012f}");
-f(/\P{scx=Lina}/u, "\u{1012f}");
-t(/\p{scx=Lina}/u, "\u{10130}");
-f(/\P{scx=Lina}/u, "\u{10130}");
-t(/\p{scx=Lina}/u, "\u{10131}");
-f(/\P{scx=Lina}/u, "\u{10131}");
-t(/\p{scx=Lina}/u, "\u{10132}");
-f(/\P{scx=Lina}/u, "\u{10132}");
-t(/\p{scx=Lina}/u, "\u{10133}");
-f(/\P{scx=Lina}/u, "\u{10133}");
-f(/(?=\P{sc=Lina})\p{scx=Lina}/u, "\u{901a6}");
-f(/(?=\P{sc=Lina})\p{scx=Lina}/u, "\u{4be73}");
-f(/(?=\P{sc=Lina})\p{scx=Lina}/u, "\u{c7b70}");
-f(/(?=\P{sc=Lina})\p{scx=Lina}/u, "\u{97401}");
-f(/(?=\P{sc=Lina})\p{scx=Lina}/u, "\u{48165}");
-// Script_Extension=Kthi
-t(/\p{scx=Kthi}/u, "\u{966}");
-f(/\P{scx=Kthi}/u, "\u{966}");
-t(/\p{scx=Kthi}/u, "\u{967}");
-f(/\P{scx=Kthi}/u, "\u{967}");
-t(/\p{scx=Kthi}/u, "\u{968}");
-f(/\P{scx=Kthi}/u, "\u{968}");
-t(/\p{scx=Kthi}/u, "\u{969}");
-f(/\P{scx=Kthi}/u, "\u{969}");
-t(/\p{scx=Kthi}/u, "\u{96a}");
-f(/\P{scx=Kthi}/u, "\u{96a}");
-t(/\p{scx=Kthi}/u, "\u{96b}");
-f(/\P{scx=Kthi}/u, "\u{96b}");
-t(/\p{scx=Kthi}/u, "\u{96c}");
-f(/\P{scx=Kthi}/u, "\u{96c}");
-t(/\p{scx=Kthi}/u, "\u{96d}");
-f(/\P{scx=Kthi}/u, "\u{96d}");
-t(/\p{scx=Kthi}/u, "\u{96e}");
-f(/\P{scx=Kthi}/u, "\u{96e}");
-t(/\p{scx=Kthi}/u, "\u{96f}");
-f(/\P{scx=Kthi}/u, "\u{96f}");
-t(/\p{scx=Kthi}/u, "\u{a836}");
-f(/\P{scx=Kthi}/u, "\u{a836}");
-t(/\p{scx=Kthi}/u, "\u{a837}");
-f(/\P{scx=Kthi}/u, "\u{a837}");
-t(/\p{scx=Kthi}/u, "\u{a838}");
-f(/\P{scx=Kthi}/u, "\u{a838}");
-t(/\p{scx=Kthi}/u, "\u{a839}");
-f(/\P{scx=Kthi}/u, "\u{a839}");
-t(/\p{scx=Kthi}/u, "\u{a830}");
-f(/\P{scx=Kthi}/u, "\u{a830}");
-t(/\p{scx=Kthi}/u, "\u{a831}");
-f(/\P{scx=Kthi}/u, "\u{a831}");
-t(/\p{scx=Kthi}/u, "\u{a832}");
-f(/\P{scx=Kthi}/u, "\u{a832}");
-t(/\p{scx=Kthi}/u, "\u{a833}");
-f(/\P{scx=Kthi}/u, "\u{a833}");
-t(/\p{scx=Kthi}/u, "\u{a834}");
-f(/\P{scx=Kthi}/u, "\u{a834}");
-t(/\p{scx=Kthi}/u, "\u{a835}");
-f(/\P{scx=Kthi}/u, "\u{a835}");
-f(/(?=\P{sc=Kthi})\p{scx=Kthi}/u, "\u{13d9b}");
-f(/(?=\P{sc=Kthi})\p{scx=Kthi}/u, "\u{24ff4}");
-f(/(?=\P{sc=Kthi})\p{scx=Kthi}/u, "\u{4c2c6}");
-f(/(?=\P{sc=Kthi})\p{scx=Kthi}/u, "\u{dfa34}");
-f(/(?=\P{sc=Kthi})\p{scx=Kthi}/u, "\u{cfd5e}");
-// Script_Extension=Mahj
-t(/\p{scx=Mahj}/u, "\u{966}");
-f(/\P{scx=Mahj}/u, "\u{966}");
-t(/\p{scx=Mahj}/u, "\u{967}");
-f(/\P{scx=Mahj}/u, "\u{967}");
-t(/\p{scx=Mahj}/u, "\u{968}");
-f(/\P{scx=Mahj}/u, "\u{968}");
-t(/\p{scx=Mahj}/u, "\u{969}");
-f(/\P{scx=Mahj}/u, "\u{969}");
-t(/\p{scx=Mahj}/u, "\u{96a}");
-f(/\P{scx=Mahj}/u, "\u{96a}");
-t(/\p{scx=Mahj}/u, "\u{96b}");
-f(/\P{scx=Mahj}/u, "\u{96b}");
-t(/\p{scx=Mahj}/u, "\u{96c}");
-f(/\P{scx=Mahj}/u, "\u{96c}");
-t(/\p{scx=Mahj}/u, "\u{96d}");
-f(/\P{scx=Mahj}/u, "\u{96d}");
-t(/\p{scx=Mahj}/u, "\u{96e}");
-f(/\P{scx=Mahj}/u, "\u{96e}");
-t(/\p{scx=Mahj}/u, "\u{96f}");
-f(/\P{scx=Mahj}/u, "\u{96f}");
-t(/\p{scx=Mahj}/u, "\u{a836}");
-f(/\P{scx=Mahj}/u, "\u{a836}");
-t(/\p{scx=Mahj}/u, "\u{a837}");
-f(/\P{scx=Mahj}/u, "\u{a837}");
-t(/\p{scx=Mahj}/u, "\u{a838}");
-f(/\P{scx=Mahj}/u, "\u{a838}");
-t(/\p{scx=Mahj}/u, "\u{a839}");
-f(/\P{scx=Mahj}/u, "\u{a839}");
-t(/\p{scx=Mahj}/u, "\u{a830}");
-f(/\P{scx=Mahj}/u, "\u{a830}");
-t(/\p{scx=Mahj}/u, "\u{a831}");
-f(/\P{scx=Mahj}/u, "\u{a831}");
-t(/\p{scx=Mahj}/u, "\u{a832}");
-f(/\P{scx=Mahj}/u, "\u{a832}");
-t(/\p{scx=Mahj}/u, "\u{a833}");
-f(/\P{scx=Mahj}/u, "\u{a833}");
-t(/\p{scx=Mahj}/u, "\u{a834}");
-f(/\P{scx=Mahj}/u, "\u{a834}");
-t(/\p{scx=Mahj}/u, "\u{a835}");
-f(/\P{scx=Mahj}/u, "\u{a835}");
-t(/\p{scx=Mahj}/u, "\u{964}");
-f(/\P{scx=Mahj}/u, "\u{964}");
-t(/\p{scx=Mahj}/u, "\u{965}");
-f(/\P{scx=Mahj}/u, "\u{965}");
-f(/(?=\P{sc=Mahj})\p{scx=Mahj}/u, "\u{101f2b}");
-f(/(?=\P{sc=Mahj})\p{scx=Mahj}/u, "\u{15a19}");
-f(/(?=\P{sc=Mahj})\p{scx=Mahj}/u, "\u{de10b}");
-f(/(?=\P{sc=Mahj})\p{scx=Mahj}/u, "\u{240fd}");
-f(/(?=\P{sc=Mahj})\p{scx=Mahj}/u, "\u{e5eef}");
+f(/(?=\P{sc=Lina})\p{scx=Lina}/u, "\u{e3554}");
+f(/(?=\P{sc=Lina})\p{scx=Lina}/u, "\u{e7555}");
+f(/(?=\P{sc=Lina})\p{scx=Lina}/u, "\u{29fc1}");
+f(/(?=\P{sc=Lina})\p{scx=Lina}/u, "\u{3fe04}");
+f(/(?=\P{sc=Lina})\p{scx=Lina}/u, "\u{df6e2}");
+// Script_Extension=Knda
+f(/(?=\P{sc=Knda})\p{scx=Knda}/u, "\u{36afd}");
+f(/(?=\P{sc=Knda})\p{scx=Knda}/u, "\u{72966}");
+f(/(?=\P{sc=Knda})\p{scx=Knda}/u, "\u{531de}");
+f(/(?=\P{sc=Knda})\p{scx=Knda}/u, "\u{cd350}");
+f(/(?=\P{sc=Knda})\p{scx=Knda}/u, "\u{4081f}");
// Script_Extension=Kali
-t(/\p{scx=Kali}/u, "\u{a92e}");
-f(/\P{scx=Kali}/u, "\u{a92e}");
-f(/(?=\P{sc=Kali})\p{scx=Kali}/u, "\u{59dbb}");
-f(/(?=\P{sc=Kali})\p{scx=Kali}/u, "\u{ac769}");
-f(/(?=\P{sc=Kali})\p{scx=Kali}/u, "\u{9255e}");
-f(/(?=\P{sc=Kali})\p{scx=Kali}/u, "\u{a0523}");
-f(/(?=\P{sc=Kali})\p{scx=Kali}/u, "\u{cca65}");
+f(/(?=\P{sc=Kali})\p{scx=Kali}/u, "\u{2cc77}");
+f(/(?=\P{sc=Kali})\p{scx=Kali}/u, "\u{7973a}");
+f(/(?=\P{sc=Kali})\p{scx=Kali}/u, "\u{d67e0}");
+f(/(?=\P{sc=Kali})\p{scx=Kali}/u, "\u{6f0a6}");
+f(/(?=\P{sc=Kali})\p{scx=Kali}/u, "\u{130b7}");
// Script_Extension=Buhd
-t(/\p{scx=Buhd}/u, "\u{1735}");
-f(/\P{scx=Buhd}/u, "\u{1735}");
-t(/\p{scx=Buhd}/u, "\u{1736}");
-f(/\P{scx=Buhd}/u, "\u{1736}");
-f(/(?=\P{sc=Buhd})\p{scx=Buhd}/u, "\u{102987}");
-f(/(?=\P{sc=Buhd})\p{scx=Buhd}/u, "\u{92d8}");
-f(/(?=\P{sc=Buhd})\p{scx=Buhd}/u, "\u{85acd}");
-f(/(?=\P{sc=Buhd})\p{scx=Buhd}/u, "\u{91eee}");
-f(/(?=\P{sc=Buhd})\p{scx=Buhd}/u, "\u{99bf7}");
+f(/(?=\P{sc=Buhd})\p{scx=Buhd}/u, "\u{91a77}");
+f(/(?=\P{sc=Buhd})\p{scx=Buhd}/u, "\u{dad60}");
+f(/(?=\P{sc=Buhd})\p{scx=Buhd}/u, "\u{10577d}");
+f(/(?=\P{sc=Buhd})\p{scx=Buhd}/u, "\u{107c7d}");
+f(/(?=\P{sc=Buhd})\p{scx=Buhd}/u, "\u{6d43d}");
// Script_Extension=Hano
-t(/\p{scx=Hano}/u, "\u{1735}");
-f(/\P{scx=Hano}/u, "\u{1735}");
-t(/\p{scx=Hano}/u, "\u{1736}");
-f(/\P{scx=Hano}/u, "\u{1736}");
-f(/(?=\P{sc=Hano})\p{scx=Hano}/u, "\u{7b94b}");
-f(/(?=\P{sc=Hano})\p{scx=Hano}/u, "\u{10a944}");
-f(/(?=\P{sc=Hano})\p{scx=Hano}/u, "\u{2cec}");
-f(/(?=\P{sc=Hano})\p{scx=Hano}/u, "\u{64635}");
-f(/(?=\P{sc=Hano})\p{scx=Hano}/u, "\u{25bea}");
+f(/(?=\P{sc=Hano})\p{scx=Hano}/u, "\u{7e942}");
+f(/(?=\P{sc=Hano})\p{scx=Hano}/u, "\u{b0a24}");
+f(/(?=\P{sc=Hano})\p{scx=Hano}/u, "\u{106205}");
+f(/(?=\P{sc=Hano})\p{scx=Hano}/u, "\u{4ac72}");
+f(/(?=\P{sc=Hano})\p{scx=Hano}/u, "\u{e6681}");
// Script_Extension=Tagb
-t(/\p{scx=Tagb}/u, "\u{1735}");
-f(/\P{scx=Tagb}/u, "\u{1735}");
-t(/\p{scx=Tagb}/u, "\u{1736}");
-f(/\P{scx=Tagb}/u, "\u{1736}");
-f(/(?=\P{sc=Tagb})\p{scx=Tagb}/u, "\u{950fe}");
-f(/(?=\P{sc=Tagb})\p{scx=Tagb}/u, "\u{e85b7}");
-f(/(?=\P{sc=Tagb})\p{scx=Tagb}/u, "\u{aead9}");
-f(/(?=\P{sc=Tagb})\p{scx=Tagb}/u, "\u{37473}");
-f(/(?=\P{sc=Tagb})\p{scx=Tagb}/u, "\u{a421a}");
+f(/(?=\P{sc=Tagb})\p{scx=Tagb}/u, "\u{dd8fa}");
+f(/(?=\P{sc=Tagb})\p{scx=Tagb}/u, "\u{e622d}");
+f(/(?=\P{sc=Tagb})\p{scx=Tagb}/u, "\u{d43fb}");
+f(/(?=\P{sc=Tagb})\p{scx=Tagb}/u, "\u{10ba23}");
+f(/(?=\P{sc=Tagb})\p{scx=Tagb}/u, "\u{bfbce}");
// Script_Extension=Tglg
-t(/\p{scx=Tglg}/u, "\u{1735}");
-f(/\P{scx=Tglg}/u, "\u{1735}");
-t(/\p{scx=Tglg}/u, "\u{1736}");
-f(/\P{scx=Tglg}/u, "\u{1736}");
-f(/(?=\P{sc=Tglg})\p{scx=Tglg}/u, "\u{c560d}");
-f(/(?=\P{sc=Tglg})\p{scx=Tglg}/u, "\u{23ff2}");
-f(/(?=\P{sc=Tglg})\p{scx=Tglg}/u, "\u{b1557}");
-f(/(?=\P{sc=Tglg})\p{scx=Tglg}/u, "\u{f0d06}");
-f(/(?=\P{sc=Tglg})\p{scx=Tglg}/u, "\u{9982b}");
+f(/(?=\P{sc=Tglg})\p{scx=Tglg}/u, "\u{bb9f4}");
+f(/(?=\P{sc=Tglg})\p{scx=Tglg}/u, "\u{cb69f}");
+f(/(?=\P{sc=Tglg})\p{scx=Tglg}/u, "\u{5bb3f}");
+f(/(?=\P{sc=Tglg})\p{scx=Tglg}/u, "\u{b6f43}");
+f(/(?=\P{sc=Tglg})\p{scx=Tglg}/u, "\u{d013b}");
+// Script_Extension=Dogr
+f(/(?=\P{sc=Dogr})\p{scx=Dogr}/u, "\u{2d845}");
+f(/(?=\P{sc=Dogr})\p{scx=Dogr}/u, "\u{1a910}");
+f(/(?=\P{sc=Dogr})\p{scx=Dogr}/u, "\u{3ba2a}");
+f(/(?=\P{sc=Dogr})\p{scx=Dogr}/u, "\u{bde46}");
+f(/(?=\P{sc=Dogr})\p{scx=Dogr}/u, "\u{108e84}");
+// Script_Extension=Kthi
+f(/(?=\P{sc=Kthi})\p{scx=Kthi}/u, "\u{10dd0}");
+f(/(?=\P{sc=Kthi})\p{scx=Kthi}/u, "\u{5484b}");
+f(/(?=\P{sc=Kthi})\p{scx=Kthi}/u, "\u{3aed6}");
+f(/(?=\P{sc=Kthi})\p{scx=Kthi}/u, "\u{1e733}");
+f(/(?=\P{sc=Kthi})\p{scx=Kthi}/u, "\u{9448f}");
+// Script_Extension=Mahj
+f(/(?=\P{sc=Mahj})\p{scx=Mahj}/u, "\u{a2006}");
+f(/(?=\P{sc=Mahj})\p{scx=Mahj}/u, "\u{184cd}");
+f(/(?=\P{sc=Mahj})\p{scx=Mahj}/u, "\u{575ba}");
+f(/(?=\P{sc=Mahj})\p{scx=Mahj}/u, "\u{1005cb}");
+f(/(?=\P{sc=Mahj})\p{scx=Mahj}/u, "\u{c2d02}");
// Script_Extension=Hang
-t(/\p{scx=Hang}/u, "\u{3003}");
-f(/\P{scx=Hang}/u, "\u{3003}");
-t(/\p{scx=Hang}/u, "\u{3013}");
-f(/\P{scx=Hang}/u, "\u{3013}");
-t(/\p{scx=Hang}/u, "\u{301c}");
-f(/\P{scx=Hang}/u, "\u{301c}");
-t(/\p{scx=Hang}/u, "\u{301d}");
-f(/\P{scx=Hang}/u, "\u{301d}");
-t(/\p{scx=Hang}/u, "\u{301e}");
-f(/\P{scx=Hang}/u, "\u{301e}");
-t(/\p{scx=Hang}/u, "\u{301f}");
-f(/\P{scx=Hang}/u, "\u{301f}");
-t(/\p{scx=Hang}/u, "\u{3030}");
-f(/\P{scx=Hang}/u, "\u{3030}");
-t(/\p{scx=Hang}/u, "\u{3037}");
-f(/\P{scx=Hang}/u, "\u{3037}");
-t(/\p{scx=Hang}/u, "\u{fe45}");
-f(/\P{scx=Hang}/u, "\u{fe45}");
-t(/\p{scx=Hang}/u, "\u{fe46}");
-f(/\P{scx=Hang}/u, "\u{fe46}");
-t(/\p{scx=Hang}/u, "\u{3001}");
-f(/\P{scx=Hang}/u, "\u{3001}");
-t(/\p{scx=Hang}/u, "\u{3002}");
-f(/\P{scx=Hang}/u, "\u{3002}");
-t(/\p{scx=Hang}/u, "\u{3008}");
-f(/\P{scx=Hang}/u, "\u{3008}");
-t(/\p{scx=Hang}/u, "\u{3009}");
-f(/\P{scx=Hang}/u, "\u{3009}");
-t(/\p{scx=Hang}/u, "\u{300a}");
-f(/\P{scx=Hang}/u, "\u{300a}");
-t(/\p{scx=Hang}/u, "\u{300b}");
-f(/\P{scx=Hang}/u, "\u{300b}");
-t(/\p{scx=Hang}/u, "\u{300c}");
-f(/\P{scx=Hang}/u, "\u{300c}");
-t(/\p{scx=Hang}/u, "\u{300d}");
-f(/\P{scx=Hang}/u, "\u{300d}");
-t(/\p{scx=Hang}/u, "\u{300e}");
-f(/\P{scx=Hang}/u, "\u{300e}");
-t(/\p{scx=Hang}/u, "\u{300f}");
-f(/\P{scx=Hang}/u, "\u{300f}");
-t(/\p{scx=Hang}/u, "\u{3010}");
-f(/\P{scx=Hang}/u, "\u{3010}");
-t(/\p{scx=Hang}/u, "\u{3011}");
-f(/\P{scx=Hang}/u, "\u{3011}");
-t(/\p{scx=Hang}/u, "\u{3014}");
-f(/\P{scx=Hang}/u, "\u{3014}");
-t(/\p{scx=Hang}/u, "\u{3015}");
-f(/\P{scx=Hang}/u, "\u{3015}");
-t(/\p{scx=Hang}/u, "\u{3016}");
-f(/\P{scx=Hang}/u, "\u{3016}");
-t(/\p{scx=Hang}/u, "\u{3017}");
-f(/\P{scx=Hang}/u, "\u{3017}");
-t(/\p{scx=Hang}/u, "\u{3018}");
-f(/\P{scx=Hang}/u, "\u{3018}");
-t(/\p{scx=Hang}/u, "\u{3019}");
-f(/\P{scx=Hang}/u, "\u{3019}");
-t(/\p{scx=Hang}/u, "\u{301a}");
-f(/\P{scx=Hang}/u, "\u{301a}");
-t(/\p{scx=Hang}/u, "\u{301b}");
-f(/\P{scx=Hang}/u, "\u{301b}");
-t(/\p{scx=Hang}/u, "\u{30fb}");
-f(/\P{scx=Hang}/u, "\u{30fb}");
-t(/\p{scx=Hang}/u, "\u{ff61}");
-f(/\P{scx=Hang}/u, "\u{ff61}");
-t(/\p{scx=Hang}/u, "\u{ff62}");
-f(/\P{scx=Hang}/u, "\u{ff62}");
-t(/\p{scx=Hang}/u, "\u{ff63}");
-f(/\P{scx=Hang}/u, "\u{ff63}");
-t(/\p{scx=Hang}/u, "\u{ff64}");
-f(/\P{scx=Hang}/u, "\u{ff64}");
-t(/\p{scx=Hang}/u, "\u{ff65}");
-f(/\P{scx=Hang}/u, "\u{ff65}");
-f(/(?=\P{sc=Hang})\p{scx=Hang}/u, "\u{97df3}");
-f(/(?=\P{sc=Hang})\p{scx=Hang}/u, "\u{e74b9}");
-f(/(?=\P{sc=Hang})\p{scx=Hang}/u, "\u{a68b2}");
-f(/(?=\P{sc=Hang})\p{scx=Hang}/u, "\u{82b9f}");
-f(/(?=\P{sc=Hang})\p{scx=Hang}/u, "\u{60ae0}");
+f(/(?=\P{sc=Hang})\p{scx=Hang}/u, "\u{b42fb}");
+f(/(?=\P{sc=Hang})\p{scx=Hang}/u, "\u{15eff}");
+f(/(?=\P{sc=Hang})\p{scx=Hang}/u, "\u{cc05b}");
+f(/(?=\P{sc=Hang})\p{scx=Hang}/u, "\u{85919}");
+f(/(?=\P{sc=Hang})\p{scx=Hang}/u, "\u{c27ea}");
+// Script_Extension=Yiii
+f(/(?=\P{sc=Yiii})\p{scx=Yiii}/u, "\u{b9c10}");
+f(/(?=\P{sc=Yiii})\p{scx=Yiii}/u, "\u{55fef}");
+f(/(?=\P{sc=Yiii})\p{scx=Yiii}/u, "\u{fe59b}");
+f(/(?=\P{sc=Yiii})\p{scx=Yiii}/u, "\u{ffd82}");
+f(/(?=\P{sc=Yiii})\p{scx=Yiii}/u, "\u{7df88}");
// Script_Extension=Mlym
-t(/\p{scx=Mlym}/u, "\u{1cda}");
-f(/\P{scx=Mlym}/u, "\u{1cda}");
-t(/\p{scx=Mlym}/u, "\u{952}");
-f(/\P{scx=Mlym}/u, "\u{952}");
-t(/\p{scx=Mlym}/u, "\u{951}");
-f(/\P{scx=Mlym}/u, "\u{951}");
-t(/\p{scx=Mlym}/u, "\u{964}");
-f(/\P{scx=Mlym}/u, "\u{964}");
-t(/\p{scx=Mlym}/u, "\u{965}");
-f(/\P{scx=Mlym}/u, "\u{965}");
-f(/(?=\P{sc=Mlym})\p{scx=Mlym}/u, "\u{8ac6a}");
-f(/(?=\P{sc=Mlym})\p{scx=Mlym}/u, "\u{2b695}");
-f(/(?=\P{sc=Mlym})\p{scx=Mlym}/u, "\u{56e47}");
-f(/(?=\P{sc=Mlym})\p{scx=Mlym}/u, "\u{c86ba}");
-f(/(?=\P{sc=Mlym})\p{scx=Mlym}/u, "\u{b74e9}");
+f(/(?=\P{sc=Mlym})\p{scx=Mlym}/u, "\u{38ca6}");
+f(/(?=\P{sc=Mlym})\p{scx=Mlym}/u, "\u{b536b}");
+f(/(?=\P{sc=Mlym})\p{scx=Mlym}/u, "\u{d73c3}");
+f(/(?=\P{sc=Mlym})\p{scx=Mlym}/u, "\u{ef7c}");
+f(/(?=\P{sc=Mlym})\p{scx=Mlym}/u, "\u{54f11}");
+// Script_Extension=Orya
+f(/(?=\P{sc=Orya})\p{scx=Orya}/u, "\u{103437}");
+f(/(?=\P{sc=Orya})\p{scx=Orya}/u, "\u{6db9f}");
+f(/(?=\P{sc=Orya})\p{scx=Orya}/u, "\u{c0cbf}");
+f(/(?=\P{sc=Orya})\p{scx=Orya}/u, "\u{693e6}");
+f(/(?=\P{sc=Orya})\p{scx=Orya}/u, "\u{107f31}");
// Script_Extension=Telu
-t(/\p{scx=Telu}/u, "\u{1cda}");
-f(/\P{scx=Telu}/u, "\u{1cda}");
-t(/\p{scx=Telu}/u, "\u{952}");
-f(/\P{scx=Telu}/u, "\u{952}");
-t(/\p{scx=Telu}/u, "\u{951}");
-f(/\P{scx=Telu}/u, "\u{951}");
-t(/\p{scx=Telu}/u, "\u{964}");
-f(/\P{scx=Telu}/u, "\u{964}");
-t(/\p{scx=Telu}/u, "\u{965}");
-f(/\P{scx=Telu}/u, "\u{965}");
-f(/(?=\P{sc=Telu})\p{scx=Telu}/u, "\u{d8bfa}");
-f(/(?=\P{sc=Telu})\p{scx=Telu}/u, "\u{d2cc3}");
-f(/(?=\P{sc=Telu})\p{scx=Telu}/u, "\u{54006}");
-f(/(?=\P{sc=Telu})\p{scx=Telu}/u, "\u{104bf0}");
-f(/(?=\P{sc=Telu})\p{scx=Telu}/u, "\u{2a98d}");
+f(/(?=\P{sc=Telu})\p{scx=Telu}/u, "\u{4565}");
+f(/(?=\P{sc=Telu})\p{scx=Telu}/u, "\u{92ad2}");
+f(/(?=\P{sc=Telu})\p{scx=Telu}/u, "\u{7de0b}");
+f(/(?=\P{sc=Telu})\p{scx=Telu}/u, "\u{bc7b2}");
+f(/(?=\P{sc=Telu})\p{scx=Telu}/u, "\u{9edd7}");
// Script_Extension=Adlm
-t(/\p{scx=Adlm}/u, "\u{640}");
-f(/\P{scx=Adlm}/u, "\u{640}");
-f(/(?=\P{sc=Adlm})\p{scx=Adlm}/u, "\u{17d17}");
-f(/(?=\P{sc=Adlm})\p{scx=Adlm}/u, "\u{90cdc}");
-f(/(?=\P{sc=Adlm})\p{scx=Adlm}/u, "\u{8a2ee}");
-f(/(?=\P{sc=Adlm})\p{scx=Adlm}/u, "\u{b1106}");
-f(/(?=\P{sc=Adlm})\p{scx=Adlm}/u, "\u{49e11}");
+f(/(?=\P{sc=Adlm})\p{scx=Adlm}/u, "\u{8be77}");
+f(/(?=\P{sc=Adlm})\p{scx=Adlm}/u, "\u{31dbb}");
+f(/(?=\P{sc=Adlm})\p{scx=Adlm}/u, "\u{f2854}");
+f(/(?=\P{sc=Adlm})\p{scx=Adlm}/u, "\u{10a682}");
+f(/(?=\P{sc=Adlm})\p{scx=Adlm}/u, "\u{eba94}");
// Script_Extension=Mand
-t(/\p{scx=Mand}/u, "\u{640}");
-f(/\P{scx=Mand}/u, "\u{640}");
-f(/(?=\P{sc=Mand})\p{scx=Mand}/u, "\u{103f01}");
-f(/(?=\P{sc=Mand})\p{scx=Mand}/u, "\u{d921a}");
-f(/(?=\P{sc=Mand})\p{scx=Mand}/u, "\u{dc97e}");
-f(/(?=\P{sc=Mand})\p{scx=Mand}/u, "\u{f1404}");
-f(/(?=\P{sc=Mand})\p{scx=Mand}/u, "\u{5f57c}");
+f(/(?=\P{sc=Mand})\p{scx=Mand}/u, "\u{180bd}");
+f(/(?=\P{sc=Mand})\p{scx=Mand}/u, "\u{98fb9}");
+f(/(?=\P{sc=Mand})\p{scx=Mand}/u, "\u{aaa0c}");
+f(/(?=\P{sc=Mand})\p{scx=Mand}/u, "\u{de7c8}");
+f(/(?=\P{sc=Mand})\p{scx=Mand}/u, "\u{e27ed}");
// Script_Extension=Mani
-t(/\p{scx=Mani}/u, "\u{640}");
-f(/\P{scx=Mani}/u, "\u{640}");
-f(/(?=\P{sc=Mani})\p{scx=Mani}/u, "\u{4785e}");
-f(/(?=\P{sc=Mani})\p{scx=Mani}/u, "\u{8a387}");
-f(/(?=\P{sc=Mani})\p{scx=Mani}/u, "\u{10553f}");
-f(/(?=\P{sc=Mani})\p{scx=Mani}/u, "\u{46537}");
-f(/(?=\P{sc=Mani})\p{scx=Mani}/u, "\u{301ef}");
+f(/(?=\P{sc=Mani})\p{scx=Mani}/u, "\u{88d89}");
+f(/(?=\P{sc=Mani})\p{scx=Mani}/u, "\u{2102d}");
+f(/(?=\P{sc=Mani})\p{scx=Mani}/u, "\u{35a92}");
+f(/(?=\P{sc=Mani})\p{scx=Mani}/u, "\u{1e78e}");
+f(/(?=\P{sc=Mani})\p{scx=Mani}/u, "\u{6afba}");
// Script_Extension=Phlp
-t(/\p{scx=Phlp}/u, "\u{640}");
-f(/\P{scx=Phlp}/u, "\u{640}");
-f(/(?=\P{sc=Phlp})\p{scx=Phlp}/u, "\u{b669d}");
-f(/(?=\P{sc=Phlp})\p{scx=Phlp}/u, "\u{e819a}");
-f(/(?=\P{sc=Phlp})\p{scx=Phlp}/u, "\u{5a57a}");
-f(/(?=\P{sc=Phlp})\p{scx=Phlp}/u, "\u{d6899}");
-f(/(?=\P{sc=Phlp})\p{scx=Phlp}/u, "\u{3215f}");
-// Script_Extension=Yiii
-t(/\p{scx=Yiii}/u, "\u{3001}");
-f(/\P{scx=Yiii}/u, "\u{3001}");
-t(/\p{scx=Yiii}/u, "\u{3002}");
-f(/\P{scx=Yiii}/u, "\u{3002}");
-t(/\p{scx=Yiii}/u, "\u{3008}");
-f(/\P{scx=Yiii}/u, "\u{3008}");
-t(/\p{scx=Yiii}/u, "\u{3009}");
-f(/\P{scx=Yiii}/u, "\u{3009}");
-t(/\p{scx=Yiii}/u, "\u{300a}");
-f(/\P{scx=Yiii}/u, "\u{300a}");
-t(/\p{scx=Yiii}/u, "\u{300b}");
-f(/\P{scx=Yiii}/u, "\u{300b}");
-t(/\p{scx=Yiii}/u, "\u{300c}");
-f(/\P{scx=Yiii}/u, "\u{300c}");
-t(/\p{scx=Yiii}/u, "\u{300d}");
-f(/\P{scx=Yiii}/u, "\u{300d}");
-t(/\p{scx=Yiii}/u, "\u{300e}");
-f(/\P{scx=Yiii}/u, "\u{300e}");
-t(/\p{scx=Yiii}/u, "\u{300f}");
-f(/\P{scx=Yiii}/u, "\u{300f}");
-t(/\p{scx=Yiii}/u, "\u{3010}");
-f(/\P{scx=Yiii}/u, "\u{3010}");
-t(/\p{scx=Yiii}/u, "\u{3011}");
-f(/\P{scx=Yiii}/u, "\u{3011}");
-t(/\p{scx=Yiii}/u, "\u{3014}");
-f(/\P{scx=Yiii}/u, "\u{3014}");
-t(/\p{scx=Yiii}/u, "\u{3015}");
-f(/\P{scx=Yiii}/u, "\u{3015}");
-t(/\p{scx=Yiii}/u, "\u{3016}");
-f(/\P{scx=Yiii}/u, "\u{3016}");
-t(/\p{scx=Yiii}/u, "\u{3017}");
-f(/\P{scx=Yiii}/u, "\u{3017}");
-t(/\p{scx=Yiii}/u, "\u{3018}");
-f(/\P{scx=Yiii}/u, "\u{3018}");
-t(/\p{scx=Yiii}/u, "\u{3019}");
-f(/\P{scx=Yiii}/u, "\u{3019}");
-t(/\p{scx=Yiii}/u, "\u{301a}");
-f(/\P{scx=Yiii}/u, "\u{301a}");
-t(/\p{scx=Yiii}/u, "\u{301b}");
-f(/\P{scx=Yiii}/u, "\u{301b}");
-t(/\p{scx=Yiii}/u, "\u{30fb}");
-f(/\P{scx=Yiii}/u, "\u{30fb}");
-t(/\p{scx=Yiii}/u, "\u{ff61}");
-f(/\P{scx=Yiii}/u, "\u{ff61}");
-t(/\p{scx=Yiii}/u, "\u{ff62}");
-f(/\P{scx=Yiii}/u, "\u{ff62}");
-t(/\p{scx=Yiii}/u, "\u{ff63}");
-f(/\P{scx=Yiii}/u, "\u{ff63}");
-t(/\p{scx=Yiii}/u, "\u{ff64}");
-f(/\P{scx=Yiii}/u, "\u{ff64}");
-t(/\p{scx=Yiii}/u, "\u{ff65}");
-f(/\P{scx=Yiii}/u, "\u{ff65}");
-f(/(?=\P{sc=Yiii})\p{scx=Yiii}/u, "\u{2f309}");
-f(/(?=\P{sc=Yiii})\p{scx=Yiii}/u, "\u{b5b22}");
-f(/(?=\P{sc=Yiii})\p{scx=Yiii}/u, "\u{d51ae}");
-f(/(?=\P{sc=Yiii})\p{scx=Yiii}/u, "\u{77b48}");
-f(/(?=\P{sc=Yiii})\p{scx=Yiii}/u, "\u{12f5}");
+f(/(?=\P{sc=Phlp})\p{scx=Phlp}/u, "\u{10677d}");
+f(/(?=\P{sc=Phlp})\p{scx=Phlp}/u, "\u{31238}");
+f(/(?=\P{sc=Phlp})\p{scx=Phlp}/u, "\u{62ae}");
+f(/(?=\P{sc=Phlp})\p{scx=Phlp}/u, "\u{88872}");
+f(/(?=\P{sc=Phlp})\p{scx=Phlp}/u, "\u{9720e}");
+// Script_Extension=Sogd
+f(/(?=\P{sc=Sogd})\p{scx=Sogd}/u, "\u{4c593}");
+f(/(?=\P{sc=Sogd})\p{scx=Sogd}/u, "\u{74ba6}");
+f(/(?=\P{sc=Sogd})\p{scx=Sogd}/u, "\u{f97a0}");
+f(/(?=\P{sc=Sogd})\p{scx=Sogd}/u, "\u{62e97}");
+f(/(?=\P{sc=Sogd})\p{scx=Sogd}/u, "\u{d2895}");
// Script_Extension=Modi
-t(/\p{scx=Modi}/u, "\u{a836}");
-f(/\P{scx=Modi}/u, "\u{a836}");
-t(/\p{scx=Modi}/u, "\u{a837}");
-f(/\P{scx=Modi}/u, "\u{a837}");
-t(/\p{scx=Modi}/u, "\u{a838}");
-f(/\P{scx=Modi}/u, "\u{a838}");
-t(/\p{scx=Modi}/u, "\u{a839}");
-f(/\P{scx=Modi}/u, "\u{a839}");
-t(/\p{scx=Modi}/u, "\u{a830}");
-f(/\P{scx=Modi}/u, "\u{a830}");
-t(/\p{scx=Modi}/u, "\u{a831}");
-f(/\P{scx=Modi}/u, "\u{a831}");
-t(/\p{scx=Modi}/u, "\u{a832}");
-f(/\P{scx=Modi}/u, "\u{a832}");
-t(/\p{scx=Modi}/u, "\u{a833}");
-f(/\P{scx=Modi}/u, "\u{a833}");
-t(/\p{scx=Modi}/u, "\u{a834}");
-f(/\P{scx=Modi}/u, "\u{a834}");
-t(/\p{scx=Modi}/u, "\u{a835}");
-f(/\P{scx=Modi}/u, "\u{a835}");
-f(/(?=\P{sc=Modi})\p{scx=Modi}/u, "\u{e64ef}");
-f(/(?=\P{sc=Modi})\p{scx=Modi}/u, "\u{ff1a8}");
-f(/(?=\P{sc=Modi})\p{scx=Modi}/u, "\u{103374}");
-f(/(?=\P{sc=Modi})\p{scx=Modi}/u, "\u{721f6}");
-f(/(?=\P{sc=Modi})\p{scx=Modi}/u, "\u{65c4f}");
+f(/(?=\P{sc=Modi})\p{scx=Modi}/u, "\u{107b3}");
+f(/(?=\P{sc=Modi})\p{scx=Modi}/u, "\u{c6ffe}");
+f(/(?=\P{sc=Modi})\p{scx=Modi}/u, "\u{57254}");
+f(/(?=\P{sc=Modi})\p{scx=Modi}/u, "\u{3a9de}");
+f(/(?=\P{sc=Modi})\p{scx=Modi}/u, "\u{bb58d}");
// Script_Extension=Sind
-t(/\p{scx=Sind}/u, "\u{a836}");
-f(/\P{scx=Sind}/u, "\u{a836}");
-t(/\p{scx=Sind}/u, "\u{a837}");
-f(/\P{scx=Sind}/u, "\u{a837}");
-t(/\p{scx=Sind}/u, "\u{a838}");
-f(/\P{scx=Sind}/u, "\u{a838}");
-t(/\p{scx=Sind}/u, "\u{a839}");
-f(/\P{scx=Sind}/u, "\u{a839}");
-t(/\p{scx=Sind}/u, "\u{a830}");
-f(/\P{scx=Sind}/u, "\u{a830}");
-t(/\p{scx=Sind}/u, "\u{a831}");
-f(/\P{scx=Sind}/u, "\u{a831}");
-t(/\p{scx=Sind}/u, "\u{a832}");
-f(/\P{scx=Sind}/u, "\u{a832}");
-t(/\p{scx=Sind}/u, "\u{a833}");
-f(/\P{scx=Sind}/u, "\u{a833}");
-t(/\p{scx=Sind}/u, "\u{a834}");
-f(/\P{scx=Sind}/u, "\u{a834}");
-t(/\p{scx=Sind}/u, "\u{a835}");
-f(/\P{scx=Sind}/u, "\u{a835}");
-t(/\p{scx=Sind}/u, "\u{964}");
-f(/\P{scx=Sind}/u, "\u{964}");
-t(/\p{scx=Sind}/u, "\u{965}");
-f(/\P{scx=Sind}/u, "\u{965}");
-f(/(?=\P{sc=Sind})\p{scx=Sind}/u, "\u{63856}");
-f(/(?=\P{sc=Sind})\p{scx=Sind}/u, "\u{10fce1}");
-f(/(?=\P{sc=Sind})\p{scx=Sind}/u, "\u{e9acf}");
-f(/(?=\P{sc=Sind})\p{scx=Sind}/u, "\u{3127f}");
-f(/(?=\P{sc=Sind})\p{scx=Sind}/u, "\u{c7ceb}");
+f(/(?=\P{sc=Sind})\p{scx=Sind}/u, "\u{b2f72}");
+f(/(?=\P{sc=Sind})\p{scx=Sind}/u, "\u{f7673}");
+f(/(?=\P{sc=Sind})\p{scx=Sind}/u, "\u{b2066}");
+f(/(?=\P{sc=Sind})\p{scx=Sind}/u, "\u{22ea9}");
+f(/(?=\P{sc=Sind})\p{scx=Sind}/u, "\u{492a}");
// Script_Extension=Takr
-t(/\p{scx=Takr}/u, "\u{a836}");
-f(/\P{scx=Takr}/u, "\u{a836}");
-t(/\p{scx=Takr}/u, "\u{a837}");
-f(/\P{scx=Takr}/u, "\u{a837}");
-t(/\p{scx=Takr}/u, "\u{a838}");
-f(/\P{scx=Takr}/u, "\u{a838}");
-t(/\p{scx=Takr}/u, "\u{a839}");
-f(/\P{scx=Takr}/u, "\u{a839}");
-t(/\p{scx=Takr}/u, "\u{a830}");
-f(/\P{scx=Takr}/u, "\u{a830}");
-t(/\p{scx=Takr}/u, "\u{a831}");
-f(/\P{scx=Takr}/u, "\u{a831}");
-t(/\p{scx=Takr}/u, "\u{a832}");
-f(/\P{scx=Takr}/u, "\u{a832}");
-t(/\p{scx=Takr}/u, "\u{a833}");
-f(/\P{scx=Takr}/u, "\u{a833}");
-t(/\p{scx=Takr}/u, "\u{a834}");
-f(/\P{scx=Takr}/u, "\u{a834}");
-t(/\p{scx=Takr}/u, "\u{a835}");
-f(/\P{scx=Takr}/u, "\u{a835}");
-t(/\p{scx=Takr}/u, "\u{964}");
-f(/\P{scx=Takr}/u, "\u{964}");
-t(/\p{scx=Takr}/u, "\u{965}");
-f(/\P{scx=Takr}/u, "\u{965}");
-f(/(?=\P{sc=Takr})\p{scx=Takr}/u, "\u{ec200}");
-f(/(?=\P{sc=Takr})\p{scx=Takr}/u, "\u{10602d}");
-f(/(?=\P{sc=Takr})\p{scx=Takr}/u, "\u{6143c}");
-f(/(?=\P{sc=Takr})\p{scx=Takr}/u, "\u{cc552}");
-f(/(?=\P{sc=Takr})\p{scx=Takr}/u, "\u{d1b37}");
+f(/(?=\P{sc=Takr})\p{scx=Takr}/u, "\u{89a3a}");
+f(/(?=\P{sc=Takr})\p{scx=Takr}/u, "\u{2c9bb}");
+f(/(?=\P{sc=Takr})\p{scx=Takr}/u, "\u{60523}");
+f(/(?=\P{sc=Takr})\p{scx=Takr}/u, "\u{86916}");
+f(/(?=\P{sc=Takr})\p{scx=Takr}/u, "\u{ce4af}");
// Script_Extension=Tirh
-t(/\p{scx=Tirh}/u, "\u{a836}");
-f(/\P{scx=Tirh}/u, "\u{a836}");
-t(/\p{scx=Tirh}/u, "\u{a837}");
-f(/\P{scx=Tirh}/u, "\u{a837}");
-t(/\p{scx=Tirh}/u, "\u{a838}");
-f(/\P{scx=Tirh}/u, "\u{a838}");
-t(/\p{scx=Tirh}/u, "\u{a839}");
-f(/\P{scx=Tirh}/u, "\u{a839}");
-t(/\p{scx=Tirh}/u, "\u{a830}");
-f(/\P{scx=Tirh}/u, "\u{a830}");
-t(/\p{scx=Tirh}/u, "\u{a831}");
-f(/\P{scx=Tirh}/u, "\u{a831}");
-t(/\p{scx=Tirh}/u, "\u{a832}");
-f(/\P{scx=Tirh}/u, "\u{a832}");
-t(/\p{scx=Tirh}/u, "\u{a833}");
-f(/\P{scx=Tirh}/u, "\u{a833}");
-t(/\p{scx=Tirh}/u, "\u{a834}");
-f(/\P{scx=Tirh}/u, "\u{a834}");
-t(/\p{scx=Tirh}/u, "\u{a835}");
-f(/\P{scx=Tirh}/u, "\u{a835}");
-t(/\p{scx=Tirh}/u, "\u{964}");
-f(/\P{scx=Tirh}/u, "\u{964}");
-t(/\p{scx=Tirh}/u, "\u{965}");
-f(/\P{scx=Tirh}/u, "\u{965}");
-f(/(?=\P{sc=Tirh})\p{scx=Tirh}/u, "\u{d8409}");
-f(/(?=\P{sc=Tirh})\p{scx=Tirh}/u, "\u{4406c}");
-f(/(?=\P{sc=Tirh})\p{scx=Tirh}/u, "\u{aef3d}");
-f(/(?=\P{sc=Tirh})\p{scx=Tirh}/u, "\u{46186}");
-f(/(?=\P{sc=Tirh})\p{scx=Tirh}/u, "\u{b1229}");
-// Script_Extension=Orya
-t(/\p{scx=Orya}/u, "\u{952}");
-f(/\P{scx=Orya}/u, "\u{952}");
-t(/\p{scx=Orya}/u, "\u{951}");
-f(/\P{scx=Orya}/u, "\u{951}");
-t(/\p{scx=Orya}/u, "\u{964}");
-f(/\P{scx=Orya}/u, "\u{964}");
-t(/\p{scx=Orya}/u, "\u{965}");
-f(/\P{scx=Orya}/u, "\u{965}");
-f(/(?=\P{sc=Orya})\p{scx=Orya}/u, "\u{38982}");
-f(/(?=\P{sc=Orya})\p{scx=Orya}/u, "\u{a6422}");
-f(/(?=\P{sc=Orya})\p{scx=Orya}/u, "\u{b40c4}");
-f(/(?=\P{sc=Orya})\p{scx=Orya}/u, "\u{50b36}");
-f(/(?=\P{sc=Orya})\p{scx=Orya}/u, "\u{8033b}");
+f(/(?=\P{sc=Tirh})\p{scx=Tirh}/u, "\u{2905}");
+f(/(?=\P{sc=Tirh})\p{scx=Tirh}/u, "\u{900cf}");
+f(/(?=\P{sc=Tirh})\p{scx=Tirh}/u, "\u{4b07a}");
+f(/(?=\P{sc=Tirh})\p{scx=Tirh}/u, "\u{2319}");
+f(/(?=\P{sc=Tirh})\p{scx=Tirh}/u, "\u{69d82}");
+// Script_Extension=Gong
+f(/(?=\P{sc=Gong})\p{scx=Gong}/u, "\u{3ce05}");
+f(/(?=\P{sc=Gong})\p{scx=Gong}/u, "\u{362e8}");
+f(/(?=\P{sc=Gong})\p{scx=Gong}/u, "\u{fe0b9}");
+f(/(?=\P{sc=Gong})\p{scx=Gong}/u, "\u{99c0c}");
+f(/(?=\P{sc=Gong})\p{scx=Gong}/u, "\u{10a9c2}");
// Script_Extension=Sinh
-t(/\p{scx=Sinh}/u, "\u{964}");
-f(/\P{scx=Sinh}/u, "\u{964}");
-t(/\p{scx=Sinh}/u, "\u{965}");
-f(/\P{scx=Sinh}/u, "\u{965}");
-f(/(?=\P{sc=Sinh})\p{scx=Sinh}/u, "\u{10a8c2}");
-f(/(?=\P{sc=Sinh})\p{scx=Sinh}/u, "\u{109c02}");
-f(/(?=\P{sc=Sinh})\p{scx=Sinh}/u, "\u{eb3fd}");
-f(/(?=\P{sc=Sinh})\p{scx=Sinh}/u, "\u{a884}");
-f(/(?=\P{sc=Sinh})\p{scx=Sinh}/u, "\u{89f0f}");
+f(/(?=\P{sc=Sinh})\p{scx=Sinh}/u, "\u{8ac14}");
+f(/(?=\P{sc=Sinh})\p{scx=Sinh}/u, "\u{fea84}");
+f(/(?=\P{sc=Sinh})\p{scx=Sinh}/u, "\u{5f107}");
+f(/(?=\P{sc=Sinh})\p{scx=Sinh}/u, "\u{7ed82}");
+f(/(?=\P{sc=Sinh})\p{scx=Sinh}/u, "\u{1b5b4}");
// Script_Extension=Limb
-t(/\p{scx=Limb}/u, "\u{965}");
-f(/\P{scx=Limb}/u, "\u{965}");
-f(/(?=\P{sc=Limb})\p{scx=Limb}/u, "\u{9c91e}");
-f(/(?=\P{sc=Limb})\p{scx=Limb}/u, "\u{e0433}");
-f(/(?=\P{sc=Limb})\p{scx=Limb}/u, "\u{10d7c7}");
-f(/(?=\P{sc=Limb})\p{scx=Limb}/u, "\u{f3980}");
-f(/(?=\P{sc=Limb})\p{scx=Limb}/u, "\u{d5094}");
+f(/(?=\P{sc=Limb})\p{scx=Limb}/u, "\u{36208}");
+f(/(?=\P{sc=Limb})\p{scx=Limb}/u, "\u{dff4e}");
+f(/(?=\P{sc=Limb})\p{scx=Limb}/u, "\u{fb421}");
+f(/(?=\P{sc=Limb})\p{scx=Limb}/u, "\u{5e20e}");
+f(/(?=\P{sc=Limb})\p{scx=Limb}/u, "\u{b6402}");
diff --git a/deps/v8/test/mjsunit/harmony/regexp-property-scripts.js b/deps/v8/test/mjsunit/harmony/regexp-property-scripts.js
index 565a59ab0a..af0d443d0c 100644
--- a/deps/v8/test/mjsunit/harmony/regexp-property-scripts.js
+++ b/deps/v8/test/mjsunit/harmony/regexp-property-scripts.js
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-property
-
function t(re, s) { assertTrue(re.test(s)); }
function f(re, s) { assertFalse(re.test(s)); }
diff --git a/deps/v8/test/mjsunit/harmony/regexp-property-special.js b/deps/v8/test/mjsunit/harmony/regexp-property-special.js
index 58a7f6b6c3..07263c6514 100644
--- a/deps/v8/test/mjsunit/harmony/regexp-property-special.js
+++ b/deps/v8/test/mjsunit/harmony/regexp-property-special.js
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-property
-
function t(re, s) { assertTrue(re.test(s)); }
function f(re, s) { assertFalse(re.test(s)); }
diff --git a/deps/v8/test/mjsunit/harmony/symbol-description.js b/deps/v8/test/mjsunit/harmony/symbol-description.js
new file mode 100644
index 0000000000..ccba44c978
--- /dev/null
+++ b/deps/v8/test/mjsunit/harmony/symbol-description.js
@@ -0,0 +1,53 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --harmony-symbol-description
+
+{
+ let desc = Object.getOwnPropertyDescriptor(Symbol.prototype, 'description');
+ assertEquals(desc.set, undefined);
+ assertEquals(desc.writable, undefined);
+ assertFalse(desc.enumerable);
+ assertTrue(desc.configurable);
+}
+
+{
+ const empty = Symbol();
+ assertEquals(empty.description, undefined);
+
+ const symbol = Symbol('test');
+ assertEquals(symbol.description, 'test');
+ assertFalse(symbol.hasOwnProperty('description'));
+}
+
+{
+ const empty = Object(Symbol());
+ assertEquals(empty.description, undefined);
+
+ const symbol = Object(Symbol('test'));
+ assertEquals(symbol.description, 'test');
+ assertFalse(symbol.hasOwnProperty('description'));
+}
+
+{
+ assertThrows(function() {
+ const proxy = new Proxy({}, {});
+ Symbol.prototype.description.call(proxy);
+ }, TypeError);
+
+ assertThrows(function() {
+ const smi = 123;
+ Symbol.prototype.description.call(smi);
+ }, TypeError);
+
+ assertThrows(function() {
+ const str = 'string';
+ Symbol.prototype.description.call(string);
+ }, TypeError);
+
+ assertThrows(function() {
+ const obj = { prop: 'test' };
+ Symbol.prototype.description.call(obj);
+ }, TypeError);
+}
diff --git a/deps/v8/test/mjsunit/ignition/throw-if-hole.js b/deps/v8/test/mjsunit/ignition/throw-if-hole.js
index ea3f6df605..ee7e4c8872 100644
--- a/deps/v8/test/mjsunit/ignition/throw-if-hole.js
+++ b/deps/v8/test/mjsunit/ignition/throw-if-hole.js
@@ -16,5 +16,5 @@ f(0);
f(0);
assertOptimized(f);
// Check that hole checks are handled correctly in optimized code.
-assertThrowsEquals(() => {f(1)}, ReferenceError());
+assertThrows(() => {f(1)}, ReferenceError);
assertOptimized(f);
diff --git a/deps/v8/test/mjsunit/ignition/throw-if-not-hole.js b/deps/v8/test/mjsunit/ignition/throw-if-not-hole.js
index 672e42ddf5..c14972a859 100644
--- a/deps/v8/test/mjsunit/ignition/throw-if-not-hole.js
+++ b/deps/v8/test/mjsunit/ignition/throw-if-not-hole.js
@@ -18,11 +18,11 @@ class B extends A {
test = new B(0);
test = new B(0);
-assertThrowsEquals(() => {new B(1)}, ReferenceError());
-assertThrowsEquals(() => {new B(1)}, ReferenceError());
+assertThrows(() => {new B(1)}, ReferenceError);
+assertThrows(() => {new B(1)}, ReferenceError);
%OptimizeFunctionOnNextCall(B);
test = new B(0);
assertOptimized(B);
// Check that hole checks are handled correctly in optimized code.
-assertThrowsEquals(() => {new B(1)}, ReferenceError());
+assertThrows(() => {new B(1)}, ReferenceError);
assertOptimized(B);
diff --git a/deps/v8/test/mjsunit/ignition/throw-super-not-called.js b/deps/v8/test/mjsunit/ignition/throw-super-not-called.js
index c95509e6ce..ec60de8599 100644
--- a/deps/v8/test/mjsunit/ignition/throw-super-not-called.js
+++ b/deps/v8/test/mjsunit/ignition/throw-super-not-called.js
@@ -21,5 +21,5 @@ test = new B(1);
test = new B(1);
assertOptimized(B);
// Check that hole checks are handled correctly in optimized code.
-assertThrowsEquals(() => {new B(0)}, ReferenceError());
+assertThrows(() => {new B(0)}, ReferenceError);
assertOptimized(B);
diff --git a/deps/v8/test/mjsunit/intl-numberformat-formattoparts.js b/deps/v8/test/mjsunit/intl-numberformat-formattoparts.js
index 30ae344708..c667c7bdec 100644
--- a/deps/v8/test/mjsunit/intl-numberformat-formattoparts.js
+++ b/deps/v8/test/mjsunit/intl-numberformat-formattoparts.js
@@ -60,7 +60,7 @@ if (this.Intl) {
var usDollarsCode = new Intl.NumberFormat("en-US", usdCodeOptions);
assertParts(usDollarsCode, 25,
- [Currency("USD"), Integer("25")]);
+ [Currency("USD"), Literal("\u00a0"), Integer("25")]);
// ISO 4217 currency codes are formed from an ISO 3166-1 alpha-2 country code
// followed by a third letter. ISO 3166 guarantees that no country code
@@ -79,7 +79,7 @@ if (this.Intl) {
var xqqMoneyCode = new Intl.NumberFormat("en-US", xqqCodeOptions);
assertParts(xqqMoneyCode, 25,
- [Currency("XQQ"), Integer("25")]);
+ [Currency("XQQ"), Literal("\u00a0"), Integer("25")]);
// Test currencyDisplay: "name".
var usdNameOptions =
@@ -187,7 +187,7 @@ if (this.Intl) {
PercentSign("%")]);
assertParts(usPercentFormatter, NaN,
- [Nan("NaN")]);
+ [Nan("NaN"), PercentSign("%")]);
assertParts(usPercentFormatter, Infinity,
[Inf("∞"), PercentSign("%")]);
diff --git a/deps/v8/test/mjsunit/lexicographic-compare.js b/deps/v8/test/mjsunit/lexicographic-compare.js
new file mode 100644
index 0000000000..b87dd1c1ef
--- /dev/null
+++ b/deps/v8/test/mjsunit/lexicographic-compare.js
@@ -0,0 +1,62 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --allow-natives-syntax
+
+(function () {
+
+ assertFalse(%IsSmi(2147483648), 'Update test for >32 bit Smi');
+
+ // Collect a list of interesting Smis.
+ const seen = {};
+ const smis = [];
+ function add(x) {
+ if (x | 0 == x) {
+ x = x | 0; // Canonicalizes to Smi if 32-bit signed and fits in Smi.
+ }
+ if (%_IsSmi(x) && !seen[x]) {
+ seen[x] = 1;
+ smis.push(x);
+ }
+ }
+ function addSigned(x) {
+ add(x);
+ add(-x);
+ }
+
+ var BIGGER_THAN_ANY_SMI = 10 * 1000 * 1000 * 1000;
+ for (var xb = 1; xb <= BIGGER_THAN_ANY_SMI; xb *= 10) {
+ for (var xf = 0; xf <= 9; xf++) {
+ for (var xo = -1; xo <= 1; xo++) {
+ addSigned(xb * xf + xo);
+ }
+ }
+ }
+
+ console.log("A")
+
+ for (var yb = 1; yb <= BIGGER_THAN_ANY_SMI; yb *= 2) {
+ for (var yo = -2; yo <= 2; yo++) {
+ addSigned(yb + yo);
+ }
+ }
+
+ function test(x,y) {
+ const lex = %SmiLexicographicCompare(x, y);
+ const expected = (x == y) ? 0 : (("" + x) < ("" + y) ? -1 : 1);
+ return lex == expected;
+ }
+
+ console.log(smis.length);
+
+ for (var i = 0; i < smis.length; i++) {
+ for (var j = 0; j < smis.length; j++) {
+ const x = smis[i];
+ const y = smis[j];
+ assertTrue(test(x, y), x + " < " + y);;
+ }
+ }
+
+ console.log("C")
+})();
diff --git a/deps/v8/test/mjsunit/mjsunit.js b/deps/v8/test/mjsunit/mjsunit.js
index fbae802785..60f2219db1 100644
--- a/deps/v8/test/mjsunit/mjsunit.js
+++ b/deps/v8/test/mjsunit/mjsunit.js
@@ -278,7 +278,7 @@ var prettyPrinted;
case "Object":
break;
default:
- return objectClass + "()";
+ return objectClass + "(" + String(value) + ")";
}
// [[Class]] is "Object".
var name = value.constructor.name;
@@ -506,7 +506,7 @@ var prettyPrinted;
try {
fun();
} catch(e) {
- assertEquals(val, e);
+ assertSame(val, e);
return;
}
failWithMessage("Did not throw exception");
diff --git a/deps/v8/test/mjsunit/mjsunit.status b/deps/v8/test/mjsunit/mjsunit.status
index c1a62af750..28900d22da 100644
--- a/deps/v8/test/mjsunit/mjsunit.status
+++ b/deps/v8/test/mjsunit/mjsunit.status
@@ -55,6 +55,8 @@
# Issue 5495: enable the test when the constant field tracking in enabled.
'const-field-tracking': [SKIP],
+ # Issue 7872: flaky OOM
+ 'regress/wasm/regress-827806': [SKIP],
##############################################################################
# Too slow in debug mode with --stress-opt mode.
'regress/regress-create-exception': [PASS, ['mode == debug', SKIP]],
@@ -87,7 +89,7 @@
'array-constructor': [PASS, SLOW, ['arch == arm and simulator == True', SKIP]],
# Very slow test
- 'regress/regress-crbug-808192' : [PASS, SLOW, NO_VARIANTS, ['arch == arm or arch == arm64 or arch == android_arm or arch == android_arm64 or arch == mipsel or arch == mips64el or arch == mips64 or arch == mips or arch == s390 or arch == s390x or arch == ppc or arch == ppc64', SKIP]],
+ 'regress/regress-crbug-808192' : [PASS, SLOW, NO_VARIANTS, ['mode == debug or arch == arm or arch == arm64 or arch == android_arm or arch == android_arm64 or arch == mipsel or arch == mips64el or arch == mips64 or arch == mips or arch == s390 or arch == s390x or arch == ppc or arch == ppc64', SKIP]],
# Very slow on ARM and MIPS, contains no architecture dependent code.
'unicode-case-overoptimization': [PASS, NO_VARIANTS, ['arch == arm or arch == arm64 or arch == android_arm or arch == android_arm64 or arch == mipsel or arch == mips64el or arch == mips64 or arch == mips', SKIP]],
@@ -153,8 +155,6 @@
'asm/sqlite3/*': [PASS, SLOW, NO_VARIANTS],
# Slow tests.
- 'compiler/osr-one': [PASS, SLOW],
- 'compiler/osr-two': [PASS, SLOW],
'copy-on-write-assert': [PASS, SLOW],
'es6/typedarray-construct-offset-not-smi': [PASS, SLOW],
'harmony/regexp-property-script-extensions': [PASS, SLOW],
@@ -164,6 +164,7 @@
'regress/regress-605470': [PASS, SLOW],
'regress/regress-655573': [PASS, SLOW],
'regress/regress-1200351': [PASS, SLOW],
+ 'wasm/asm-wasm-f32': [PASS, SLOW],
'wasm/embenchen/*': [PASS, SLOW],
'wasm/grow-memory': [PASS, SLOW],
'wasm/unreachable-validation': [PASS, SLOW],
@@ -199,6 +200,9 @@
# which makes the test useless.
'big-object-literal': [PASS, ['mode == debug', SKIP]],
+ # Runs out of stack space in debug builds.
+ 'big-array-literal': [PASS, ['mode == debug', SKIP]],
+
# BUG(v8:6306).
'wasm/huge-memory': [SKIP],
@@ -210,6 +214,9 @@
# https://crbug.com/v8/7697
'array-literal-feedback': [PASS, FAIL],
+
+ # https://crbug.com/v8/7775
+ 'allocation-site-info': [SKIP],
}], # ALWAYS
['novfp3 == True', {
@@ -243,7 +250,6 @@
'osr-elements-kind': [SKIP],
'regress/regress-crbug-137689': [SKIP],
'regress/regress-trap-allocation-memento': [SKIP],
- 'regress/regress-165637': [SKIP],
'regress/regress-2249': [SKIP],
'regress/regress-4121': [SKIP],
'compare-known-objects-slow': [SKIP],
@@ -264,6 +270,7 @@
# TODO(mstarzinger): Takes too long with TF.
'array-sort': [PASS, NO_VARIANTS],
+ 'lexicographic-compare': [PASS, NO_VARIANTS],
'regress/regress-91008': [PASS, NO_VARIANTS],
'regress/regress-transcendental': [PASS, ['arch == arm64', NO_VARIANTS]],
'compiler/osr-regress-max-locals': [PASS, NO_VARIANTS],
@@ -283,8 +290,6 @@
# Slow tests.
'array-constructor': [PASS, SLOW],
'json': [PASS, SLOW],
- 'regress/regress-446389': [PASS, SLOW],
- 'regress/regress-inline-getter-near-stack-limit': [PASS, SLOW],
# BUG(v8:4779): Crashes flakily with stress mode on arm64.
'array-splice': [PASS, SLOW, ['arch == arm64', NO_VARIANTS]],
@@ -295,6 +300,15 @@
# BUG(chromium:773631): Crashes flakily.
'wasm/streaming-trap-location': [SKIP],
+ # BUG(v8:7880): Slow tests.
+ 'regress/regress-707066': [SKIP],
+ 'regress/regress-446389': [SKIP],
+ 'regress/regress-458987': [SKIP],
+ 'es6/regress/regress-crbug-465671': [SKIP],
+ 'regress/regress-inline-getter-near-stack-limit': [SKIP],
+ 'es6/regress/regress-crbug-465671-null': [SKIP],
+ 'regress/regress-148378': [SKIP],
+ 'regress/regress-crbug-762472': [SKIP],
}], # 'gc_stress == True'
##############################################################################
@@ -334,10 +348,6 @@
'regress/regress-91013': [SKIP],
'regress/regress-99167': [SKIP],
- # Sometimes fails because the hard-coded timeout in the test is exceeded when
- # dcheck_always_on = true.
- 'regress/regress-165637': [SKIP],
-
# BUG(v8:3457).
'deserialize-reference': [PASS, FAIL],
@@ -356,11 +366,11 @@
'compiler/osr-with-args': [PASS, SLOW],
'generated-transition-stub': [PASS, SLOW],
'json2': [PASS, SLOW],
+ 'lexicographic-compare': [PASS, SLOW],
'math-floor-of-div-nosudiv': [PASS, SLOW],
'math-floor-of-div': [PASS, SLOW],
'messages': [PASS, SLOW],
'packed-elements': [PASS, SLOW],
- 'regress/regress-2185-2': [PASS, SLOW],
'regress/regress-2185': [PASS, SLOW],
'regress/regress-2790': [PASS, SLOW],
'regress/regress-331444': [PASS, SLOW],
@@ -383,6 +393,7 @@
# Pass but take too long with the simulator in debug mode.
'array-sort': [PASS, SLOW],
+ 'lexicographic-compare': [PASS, SLOW],
'packed-elements': [SKIP],
'regexp-global': [SKIP],
'math-floor-of-div': [PASS, SLOW],
@@ -391,8 +402,6 @@
'unicodelctest-no-optimization': [PASS, SLOW],
# Issue 3219:
'getters-on-elements': [PASS, ['gc_stress == True', FAIL]],
- # Expects to finish in a certain time, but sometimes doesn't.
- 'regress/regress-165637': [SKIP],
}], # 'arch == arm64 and mode == debug and simulator_run'
##############################################################################
@@ -433,10 +442,6 @@
# Too slow.
'harmony/regexp-property-lu-ui': [SKIP],
- 'regress/regress-165637': [SKIP],
-
- # Flaky with baseline?
- 'regress/regress-2185-2': [SKIP],
# https://bugs.chromium.org/p/v8/issues/detail?id=7102
# Flaky due to huge string allocation.
@@ -497,8 +502,8 @@
# Slow tests.
'array-sort': [PASS, SLOW],
'compiler/osr-with-args': [PASS, SLOW],
+ 'lexicographic-compare': [PASS, SLOW],
'packed-elements': [PASS, SLOW],
- 'regress/regress-2185-2': [PASS, SLOW],
'regress/regress-2790': [PASS, SLOW],
'regress/regress-91008': [PASS, SLOW],
'regress/regress-json-stringify-gc': [PASS, SLOW],
@@ -643,7 +648,6 @@
# Skip tests that are not suitable for deoptimization fuzzing.
'never-optimize': [SKIP],
- 'regress/regress-2185-2': [SKIP],
'readonly': [SKIP],
'array-feedback': [SKIP],
'deopt-recursive-eager-once': [SKIP],
@@ -727,7 +731,7 @@
}], # 'predictable == True'
##############################################################################
-['arch == ppc and simulator_run or arch == ppc64 and simulator_run', {
+['simulator_run and (arch == ppc or arch == ppc64 or arch == s390 or arch == s390x)', {
# take too long with the simulator.
'regress/regress-1132': [SKIP],
@@ -736,7 +740,7 @@
'regress/regress-91008': [PASS, SLOW],
'harmony/regexp-property-lu-ui': [PASS, SLOW],
'whitespaces': [PASS, SLOW],
-}], # 'arch == ppc and simulator_run'
+}], # 'simulator_run and (arch == ppc or arch == ppc64 or arch == s390 or arch == s390x)'
##############################################################################
['arch == ppc64', {
@@ -765,16 +769,15 @@
# Flaky crash on Odroid devices: https://crbug.com/v8/7678
'regress/regress-336820': [PASS, ['arch == arm and not simulator_run', SKIP]],
-
- # Slow tests.
- 'regress/regress-2185-2': [SKIP],
}], # variant == stress
##############################################################################
-['variant == nooptimization', {
- # Slow tests.
- 'regress/regress-2185-2': [SKIP],
-}], # variant == nooptimization
+['variant == nooptimization and (arch == arm or arch == arm64) and simulator_run', {
+ # Slow tests: https://crbug.com/v8/7783
+ 'lexicographic-compare': [SKIP],
+ 'regress/regress-2185': [SKIP],
+ 'wasm/grow-memory': [SKIP],
+}], # variant == nooptimization and (arch == arm or arch == arm64) and simulator_run
##############################################################################
['gcov_coverage', {
@@ -818,18 +821,12 @@
}], # arch != x64 or deopt_fuzzer
##############################################################################
-# Liftoff is currently only sufficiently implemented on x64 and ia32.
+# Liftoff is currently only sufficiently implemented on x64, ia32 and arm64.
# TODO(clemensh): Implement on all other platforms (crbug.com/v8/6600).
-['arch != x64 and arch != ia32', {
+['arch != x64 and arch != ia32 and arch != arm64', {
'wasm/liftoff': [SKIP],
-}], # arch != x64 and arch != ia32
-
-##############################################################################
-['variant == liftoff or variant == future', {
- # In the liftoff and future variant, liftoff compilation happens even
- # though the test does not explicitly enable it.
- 'wasm/default-liftoff-setting': [SKIP],
-}], # variant == liftoff
+ 'wasm/tier-up-testing-flag': [SKIP],
+}], # arch != x64 and arch != ia32 and arch != arm64
##############################################################################
['variant == slow_path and gc_stress', {
@@ -838,4 +835,11 @@
'string-replace-gc': [SKIP],
}], # variant == slow_path
+##############################################################################
+['arch == x64', {
+ # TODO: Flaky test: crbug.com/v8/7899
+ 'wasm/asm-wasm-i32': [SKIP],
+ 'wasm/asm-wasm-f64': [SKIP],
+}], # arch == x64
+
]
diff --git a/deps/v8/test/mjsunit/object-keys.js b/deps/v8/test/mjsunit/object-keys.js
index 29eb85d6aa..d20556c905 100644
--- a/deps/v8/test/mjsunit/object-keys.js
+++ b/deps/v8/test/mjsunit/object-keys.js
@@ -32,3 +32,61 @@
k.shift();
assertEquals(0, k.length);
})();
+
+// Ensure we invoke all steps on proxies.
+(function ObjectKeysProxy() {
+ let log = [];
+ let result = Object.keys(new Proxy({}, {
+ ownKeys(target) {
+ log.push('ownKeys');
+ return ['a', 'b', 'c'];
+ },
+ getOwnPropertyDescriptor(target, key) {
+ log.push('getOwnPropertyDescriptor-' + key);
+ if (key === 'b') return {enumerable: false, configurable: true};
+ return {enumerable: true, configurable: true};
+ }
+ }));
+ assertEquals(['a', 'c'], result);
+ assertEquals(
+ [
+ 'ownKeys', 'getOwnPropertyDescriptor-a', 'getOwnPropertyDescriptor-b',
+ 'getOwnPropertyDescriptor-c'
+ ],
+ log);
+
+ // Test normal target.
+ log = [];
+ let target = {a: 1, b: 1, c: 1};
+ let handler = {
+ getOwnPropertyDescriptor(target, key) {
+ log.push('getOwnPropertyDescriptor-' + key);
+ if (key === 'b') return {enumerable: false, configurable: true};
+ return {enumerable: true, configurable: true};
+ }
+ };
+ result = Object.keys(new Proxy(target, handler));
+ assertEquals(['a', 'c'], result);
+ assertEquals(
+ [
+ 'getOwnPropertyDescriptor-a', 'getOwnPropertyDescriptor-b',
+ 'getOwnPropertyDescriptor-c'
+ ],
+ log);
+
+ // Test trap invocation with non-enumerable target properties.
+ log = [];
+ target = Object.create(Object.prototype, {
+ a: {enumerable: true, configurable: true},
+ b: {enumerable: false, configurable: true},
+ c: {enumerable: true, configurable: true}
+ });
+ result = Object.keys(new Proxy(target, handler));
+ assertEquals(['a', 'c'], result);
+ assertEquals(
+ [
+ 'getOwnPropertyDescriptor-a', 'getOwnPropertyDescriptor-b',
+ 'getOwnPropertyDescriptor-c'
+ ],
+ log);
+})();
diff --git a/deps/v8/test/mjsunit/regexp-modifiers-autogenerated-i18n.js b/deps/v8/test/mjsunit/regexp-modifiers-autogenerated-i18n.js
index 18e086c339..aace7113a2 100644
--- a/deps/v8/test/mjsunit/regexp-modifiers-autogenerated-i18n.js
+++ b/deps/v8/test/mjsunit/regexp-modifiers-autogenerated-i18n.js
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --regexp-mode-modifiers --harmony-regexp-property
+// Flags: --regexp-mode-modifiers
// These regexps are just grepped out of the other tests we already have
// and the syntax changed from out-of-line i flag to inline i flag.
diff --git a/deps/v8/test/mjsunit/regexp-modifiers-autogenerated.js b/deps/v8/test/mjsunit/regexp-modifiers-autogenerated.js
index e74ea8b384..82d1341b2a 100644
--- a/deps/v8/test/mjsunit/regexp-modifiers-autogenerated.js
+++ b/deps/v8/test/mjsunit/regexp-modifiers-autogenerated.js
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --regexp-mode-modifiers --harmony-regexp-property
+// Flags: --regexp-mode-modifiers
// These regexps are just grepped out of the other tests we already have
// and the syntax changed from out-of-line i flag to inline i flag.
diff --git a/deps/v8/test/mjsunit/regress/regress-165637.js b/deps/v8/test/mjsunit/regress/regress-165637.js
index 6e28726356..2a7fc4421f 100644
--- a/deps/v8/test/mjsunit/regress/regress-165637.js
+++ b/deps/v8/test/mjsunit/regress/regress-165637.js
@@ -1,53 +1,6 @@
// Copyright 2012 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following
-// disclaimer in the documentation and/or other materials provided
-// with the distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived
-// from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// Flags: --allow-natives-syntax
-
-// Should not take a very long time (n^2 algorithms are bad)
-
-function do_slices() {
- var data = new Array(1024 * 12); // 12kB
-
- for (var i = 0; i < data.length; i++) {
- data[i] = 255;
- }
-
- var start = Date.now();
-
- for (i = 0; i < 20000; i++) {
- data.slice(4, 1);
- }
-
- return Date.now() - start;
-}
-
-// Should never take more than 3 seconds (if the bug is fixed, the test takes
-// considerably less time than 3 seconds).
-assertTrue(do_slices() < (3 * 1000));
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
// Make sure that packed and unpacked array slices are still properly handled
var holey_array = [1, 2, 3, 4, 5,,,,,,];
diff --git a/deps/v8/test/mjsunit/regress/regress-2185-2.js b/deps/v8/test/mjsunit/regress/regress-2185-2.js
deleted file mode 100644
index b1eedb9335..0000000000
--- a/deps/v8/test/mjsunit/regress/regress-2185-2.js
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright 2012 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following
-// disclaimer in the documentation and/or other materials provided
-// with the distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived
-// from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// These tests used to time out before this was fixed.
-
-var LEN = 2e4;
-
-function short() {
- var sum = 0;
- for (var i = 0; i < 1000; i++) {
- var a = [1, 4, 34, 23, 6, 123, 3, 2, 11, 515, 4, 33, 22, 2, 2, 1, 0, 123,
- 23, 42, 43, 1002, 44, 43, 101, 23, 55, 11, 101, 102, 45, 11, 404,
- 31415, 34, 53, 453, 45, 34, 5, 2, 35, 5, 345, 36, 45, 345, 3, 45,
- 3, 5, 5, 2, 2342344, 2234, 23, 2718, 1500, 2, 19, 22, 43, 41, 0,
- -1, 33, 45, 78];
- a.sort(function(a, b) { return a - b; });
- sum += a[0];
- }
- return sum;
-}
-
-function short_bench(name, array) {
- var start = new Date();
- short();
- var end = new Date();
- var ms = end - start;
- print("Short " + Math.floor(ms) + "ms");
-}
-
-function sawseq(a, tooth) {
- var count = 0;
- while (true) {
- for (var i = 0; i < tooth; i++) {
- a.push(i);
- if (++count >= LEN) return a;
- }
- }
-}
-
-function sawseq2(a, tooth) {
- var count = 0;
- while (true) {
- for (var i = 0; i < tooth; i++) {
- a.push(i);
- if (++count >= LEN) return a;
- }
- for (var i = 0; i < tooth; i++) {
- a.push(tooth - i);
- if (++count >= LEN) return a;
- }
- }
-}
-
-function sawseq3(a, tooth) {
- var count = 0;
- while (true) {
- for (var i = 0; i < tooth; i++) {
- a.push(tooth - i);
- if (++count >= LEN) return a;
- }
- }
-}
-
-function up(a) {
- for (var i = 0; i < LEN; i++) {
- a.push(i);
- }
- return a;
-}
-
-function down(a) {
- for (var i = 0; i < LEN; i++) {
- a.push(LEN - i);
- }
- return a;
-}
-
-function ran(a) {
- for (var i = 0; i < LEN; i++) {
- a.push(Math.floor(Math.random() * LEN));
- }
- return a;
-}
-
-var random = ran([]);
-var asc = up([]);
-var desc = down([]);
-var asc_desc = down(up([]));
-var desc_asc = up(down([]));
-var asc_asc = up(up([]));
-var desc_desc = down(down([]));
-var saw1 = sawseq([], 1000);
-var saw2 = sawseq([], 500);
-var saw3 = sawseq([], 200);
-var saw4 = sawseq2([], 200);
-var saw5 = sawseq3([], 200);
-
-function bench(name, array) {
- var start = new Date();
- array.sort(function(a, b) { return a - b; });
- var end = new Date();
- for (var i = 0; i < array.length - 1; i++) {
- if (array[i] > array[i + 1]) throw name + " " + i;
- }
- var ms = end - start;
- print(name + " " + Math.floor(ms) + "ms");
-}
-
-short_bench();
-bench("random", random);
-bench("up", asc);
-bench("down", desc);
-bench("saw 1000", saw1);
-bench("saw 500", saw2);
-bench("saw 200", saw3);
-bench("saw 200 symmetric", saw4);
-bench("saw 200 down", saw4);
-bench("up, down", asc_desc);
-bench("up, up", asc_asc);
-bench("down, down", desc_desc);
-bench("down, up", desc_asc);
diff --git a/deps/v8/test/mjsunit/regress/regress-298269.js b/deps/v8/test/mjsunit/regress/regress-298269.js
index f6604dfcb6..46f525edb8 100644
--- a/deps/v8/test/mjsunit/regress/regress-298269.js
+++ b/deps/v8/test/mjsunit/regress/regress-298269.js
@@ -1,36 +1,16 @@
// Copyright 2013 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following
-// disclaimer in the documentation and/or other materials provided
-// with the distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived
-// from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
-function Cb(a) {
+// Flags: --allow-natives-syntax
+
+function Cb(a, trigger) {
var f, g;
for(f = a.length; f--;) {
g = a.charCodeAt(f);
// This will fail after OSR if Runtime_StringCharCodeAt is modified
// to iterates optimized frames and visit safepoint pointers.
+ if (g == "C".charCodeAt(0)) %OptimizeOsr();
}
return g;
}
@@ -40,6 +20,5 @@ var s2 = "long string to make cons string 2";
Cb(s1 + s2);
Cb(s1);
var s3 = "string for triggering osr in Cb";
-for (var i = 0; i < 16; i++) s3 = s3 + s3;
-Cb(s3);
+Cb(s3 + s3);
Cb(s1 + s2);
diff --git a/deps/v8/test/mjsunit/regress/regress-373283.js b/deps/v8/test/mjsunit/regress/regress-373283.js
deleted file mode 100644
index 20cee4d808..0000000000
--- a/deps/v8/test/mjsunit/regress/regress-373283.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2014 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Flags: --allow-natives-syntax --deopt-every-n-times=1
-
-function __f_0() {
- var x = [];
- x[21] = 1;
- x[21] + 0;
-}
-
-for (var i = 0; i < 3; i++) __f_0();
-%OptimizeFunctionOnNextCall(__f_0);
-for (var i = 0; i < 10; i++) __f_0();
-%OptimizeFunctionOnNextCall(__f_0);
-__f_0();
-%GetScript("foo");
diff --git a/deps/v8/test/mjsunit/regress/regress-705934.js b/deps/v8/test/mjsunit/regress/regress-705934.js
index 7dfc5bd65f..cd8ecc766f 100644
--- a/deps/v8/test/mjsunit/regress/regress-705934.js
+++ b/deps/v8/test/mjsunit/regress/regress-705934.js
@@ -2,12 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-named-captures --stack-size=100
+// Flags: --stack-size=100
function call_replace_close_to_stack_overflow() {
try {
call_replace_close_to_stack_overflow();
- } catch(e) {
+ } catch {
"b".replace(/(b)/g);
}
}
diff --git a/deps/v8/test/mjsunit/regress/regress-747075.js b/deps/v8/test/mjsunit/regress/regress-747075.js
index 3b5116acd0..2816507935 100644
--- a/deps/v8/test/mjsunit/regress/regress-747075.js
+++ b/deps/v8/test/mjsunit/regress/regress-747075.js
@@ -2,13 +2,20 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+// Flags: --allow-natives-syntax
+
r = [
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14
];
-for (i = -1; i < 100000; i++) {
+function f() {
r2 = r.map(function(y) {return y/64} );
assertTrue(r2[0] < 1);
}
+
+for (let i = 0; i < 1000; ++i) f();
+for (let i = 0; i < 1000; ++i) f();
+%OptimizeFunctionOnNextCall(f);
+for (let i = 0; i < 1000; ++i) f();
diff --git a/deps/v8/test/mjsunit/regress/regress-7791.js b/deps/v8/test/mjsunit/regress/regress-7791.js
new file mode 100644
index 0000000000..9b4d2c4f1a
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-7791.js
@@ -0,0 +1,120 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+"use strict";
+
+
+// Data property last.
+
+{
+ const o = {
+ get foo() { return 666 },
+ foo: 42,
+ };
+ assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').value);
+}
+
+{
+ const o = {
+ set foo(_) { },
+ foo: 42,
+ };
+ assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').value);
+}
+
+{
+ const o = {
+ get foo() { return 666 },
+ set foo(_) { },
+ foo: 42,
+ };
+ assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').value);
+}
+
+{
+ const o = {
+ get foo() { return 666 },
+ set ['foo'.slice()](_) { },
+ foo: 42,
+ };
+ assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').value);
+}
+
+{
+ const o = {
+ get ['foo'.slice()]() { return 666 },
+ set ['foo'.slice()](_) { },
+ foo: 42,
+ };
+ assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').value);
+}
+
+
+// Data property first.
+
+{
+ const o = {
+ foo: 666,
+ get foo() { return 42 },
+ };
+ assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').get());
+}
+
+{
+ const o = {
+ foo: 666,
+ set foo(_) { },
+ };
+ assertEquals(undefined, Object.getOwnPropertyDescriptor(o, 'foo').get);
+ assertEquals(undefined, Object.getOwnPropertyDescriptor(o, 'foo').value);
+}
+
+{
+ const o = {
+ foo: 666,
+ get foo() { return 42 },
+ set foo(_) { },
+ };
+ assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').get());
+}
+
+{
+ const o = {
+ foo: 666,
+ get ['foo'.slice()]() { return 42 },
+ set foo(_) { },
+ };
+ assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').get());
+}
+
+{
+ const o = {
+ foo: 666,
+ get ['foo'.slice()]() { return 42 },
+ set ['foo'](_) { },
+ };
+ assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').get());
+}
+
+
+// Data property in the middle.
+
+{
+ const o = {
+ get foo() { return 42 },
+ foo: 666,
+ set foo(_) { },
+ };
+ assertEquals(undefined, Object.getOwnPropertyDescriptor(o, 'foo').get);
+ assertEquals(undefined, Object.getOwnPropertyDescriptor(o, 'foo').set());
+}
+
+{
+ const o = {
+ set foo(_) { },
+ foo: 666,
+ get foo() { return 42 },
+ };
+ assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').get());
+}
diff --git a/deps/v8/test/mjsunit/regress/regress-7893.js b/deps/v8/test/mjsunit/regress/regress-7893.js
new file mode 100644
index 0000000000..5ed008e7cf
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-7893.js
@@ -0,0 +1,18 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --validate-asm --allow-natives-syntax
+
+function Module(stdlib, imports, buffer) {
+ "use asm";
+ function f() {
+ var bar = 0;
+ return 0x1e+bar|0;
+ }
+ return f;
+}
+var f = Module(this);
+assertTrue(%IsWasmCode(f));
+assertTrue(%IsAsmWasmCode(Module));
+assertEquals(0x1e, f());
diff --git a/deps/v8/test/mjsunit/regress/regress-793588.js b/deps/v8/test/mjsunit/regress/regress-793588.js
index 6ad7a76e2a..ea30d12775 100644
--- a/deps/v8/test/mjsunit/regress/regress-793588.js
+++ b/deps/v8/test/mjsunit/regress/regress-793588.js
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-property
-
assertNull(/a\P{Any}a/u.exec("a\u{d83d}a"));
assertEquals(["a\u{d83d}a"], /a\p{Any}a/u.exec("a\u{d83d}a"));
assertEquals(["a\u{d83d}a"], /(?:a\P{Any}a|a\p{Any}a)/u.exec("a\u{d83d}a"));
diff --git a/deps/v8/test/mjsunit/regress/regress-793793.js b/deps/v8/test/mjsunit/regress/regress-793793.js
index e89c5e5f34..f7f57c7104 100644
--- a/deps/v8/test/mjsunit/regress/regress-793793.js
+++ b/deps/v8/test/mjsunit/regress/regress-793793.js
@@ -2,6 +2,4 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-regexp-property
-
assertThrows(() => new RegExp("\\1(\\P{P\0[}()/", "u"), SyntaxError);
diff --git a/deps/v8/test/mjsunit/regress/regress-800651.js b/deps/v8/test/mjsunit/regress/regress-800651.js
index 420cc7c294..c6410f702e 100644
--- a/deps/v8/test/mjsunit/regress/regress-800651.js
+++ b/deps/v8/test/mjsunit/regress/regress-800651.js
@@ -15,13 +15,17 @@ async function f() {
}
f();
-async function g() {
+async function importUndefined() {
try {
- let namespace = await import({ get toString() { return undefined; }});
+ await import({ get toString() { return undefined; }})
} catch(e) {
log(2);
}
}
+
+function g() {
+ let namespace = Promise.resolve().then(importUndefined);
+}
g();
%RunMicrotasks();
assertEquals(list, [1,2]);
diff --git a/deps/v8/test/mjsunit/regress/regress-843062-1.js b/deps/v8/test/mjsunit/regress/regress-843062-1.js
new file mode 100644
index 0000000000..60ea65abf5
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-843062-1.js
@@ -0,0 +1,18 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+var sparse_array = [];
+
+sparse_array[100] = 3;
+sparse_array[200] = undefined;
+sparse_array[300] = 4;
+sparse_array[400] = 5;
+sparse_array[500] = 6;
+sparse_array[600] = 5;
+sparse_array[700] = 4;
+sparse_array[800] = undefined;
+sparse_array[900] = 3
+sparse_array[41999] = "filler";
+
+sparse_array.lastIndexOf(3, 99);
diff --git a/deps/v8/test/mjsunit/regress/regress-843062-2.js b/deps/v8/test/mjsunit/regress/regress-843062-2.js
new file mode 100644
index 0000000000..30170d5a25
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-843062-2.js
@@ -0,0 +1,8 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+class C {
+ [1]() { return 'B'; }
+}
+Object.keys(C.prototype);
diff --git a/deps/v8/test/mjsunit/regress/regress-843062-3.js b/deps/v8/test/mjsunit/regress/regress-843062-3.js
new file mode 100644
index 0000000000..e9ff907b4a
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-843062-3.js
@@ -0,0 +1,10 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --allow-natives-syntax
+
+function bar(len) { return new Array(len); }
+bar(0);
+%OptimizeFunctionOnNextCall(bar);
+bar(0);
diff --git a/deps/v8/test/mjsunit/regress/regress-852258.js b/deps/v8/test/mjsunit/regress/regress-852258.js
new file mode 100644
index 0000000000..0cf1a45c71
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-852258.js
@@ -0,0 +1,11 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+try {
+ let ta0 = new Int16Array(0x24924925);
+ let ta2 = ta0.slice(1);
+ let ta1 = ta0.slice(0x24924924);
+} catch (e) {
+ // Allocation failed, that's fine.
+}
diff --git a/deps/v8/test/mjsunit/regress/regress-852765.js b/deps/v8/test/mjsunit/regress/regress-852765.js
new file mode 100644
index 0000000000..bdd3a9ddb2
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-852765.js
@@ -0,0 +1,17 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// The actual regression test
+assertThrows("(import(foo)) =>", undefined, "Unexpected token import");
+
+// Other related tests
+assertThrows("import(foo) =>", undefined, "Unexpected token import");
+assertThrows("(a, import(foo)) =>", undefined, "Unexpected token import");
+assertThrows("(1, import(foo)) =>", undefined, "Unexpected number");
+assertThrows("(super(foo)) =>", undefined, "'super' keyword unexpected here");
+assertThrows("(bar(foo)) =>", undefined, "Unexpected token (");
+
+// No syntax errors
+assertThrows("[import(foo).then] = [1];", undefined, "foo is not defined");
+assertThrows("[[import(foo).then]] = [[1]];", undefined, "foo is not defined");
diff --git a/deps/v8/test/mjsunit/regress/regress-862433.js b/deps/v8/test/mjsunit/regress/regress-862433.js
new file mode 100644
index 0000000000..015a45a2b0
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-862433.js
@@ -0,0 +1,9 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+var arr = [];
+for (var i = 1; i != 390000; ++i) {
+ arr.push("f()");
+}
+new Function(arr.join());
diff --git a/deps/v8/test/mjsunit/regress/regress-863155.js b/deps/v8/test/mjsunit/regress/regress-863155.js
new file mode 100644
index 0000000000..fb5d465d80
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-863155.js
@@ -0,0 +1,10 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --always-opt
+
+for (let i = 0; i < 5; i++) {
+ try { typeof x } catch (e) {};
+ let x;
+}
diff --git a/deps/v8/test/mjsunit/regress/regress-863810.js b/deps/v8/test/mjsunit/regress/regress-863810.js
new file mode 100644
index 0000000000..0ee1330310
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-863810.js
@@ -0,0 +1,19 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --no-liftoff --no-wasm-tier-up --no-future --debug-code
+
+load('test/mjsunit/wasm/wasm-constants.js');
+load('test/mjsunit/wasm/wasm-module-builder.js');
+
+const builder = new WasmModuleBuilder();
+builder.addFunction('main', kSig_i_v)
+ .addBody([
+ kExprI64Const, 0xa3, 0x82, 0x83, 0x86, 0x8c, 0xd8, 0xae, 0xb5, 0x40,
+ kExprI32ConvertI64,
+ kExprI32Const, 0x00,
+ kExprI32Sub,
+ ]).exportFunc();
+const instance = builder.instantiate();
+print(instance.exports.main(1, 2, 3));
diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-217858.js b/deps/v8/test/mjsunit/regress/regress-crbug-217858.js
index d6d6e9feed..26414c2b5a 100644
--- a/deps/v8/test/mjsunit/regress/regress-crbug-217858.js
+++ b/deps/v8/test/mjsunit/regress/regress-crbug-217858.js
@@ -1,37 +1,15 @@
// Copyright 2013 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following
-// disclaimer in the documentation and/or other materials provided
-// with the distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived
-// from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
-// Flags: --noanalyze-environment-liveness
+// Flags: --noanalyze-environment-liveness --allow-natives-syntax
var r = /r/;
function f() {
r[r] = function() {};
}
-for (var i = 0; i < 300000; i++) {
+for (var i = 0; i < 300; i++) {
f();
+ if (i == 150) %OptimizeOsr();
}
diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-410033.js b/deps/v8/test/mjsunit/regress/regress-crbug-410033.js
deleted file mode 100644
index 63693e64f7..0000000000
--- a/deps/v8/test/mjsunit/regress/regress-crbug-410033.js
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright 2014 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Flags: --allow-natives-syntax --expose-gc
-
-%GetScript('v8/gc');
diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-469480.js b/deps/v8/test/mjsunit/regress/regress-crbug-469480.js
deleted file mode 100644
index 8bb0c523ae..0000000000
--- a/deps/v8/test/mjsunit/regress/regress-crbug-469480.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2015 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Flags: --allow-natives-syntax --stress-compaction --verify-heap
-// Flags: --stack-size=100
-
-// Load the debug context to fill up code space.
-%GetDebugContext();
-%GetDebugContext();
-
-// Recurse and run regexp code.
-assertThrows(function f() { f(/./.test("a")); }, RangeError);
diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-491062.js b/deps/v8/test/mjsunit/regress/regress-crbug-491062.js
index d2cd7579bc..41136548bc 100644
--- a/deps/v8/test/mjsunit/regress/regress-crbug-491062.js
+++ b/deps/v8/test/mjsunit/regress/regress-crbug-491062.js
@@ -15,7 +15,7 @@ function f() {
}
if (count < 100) {
count++;
- %DebugGetLoadedScripts();
+ %DebugGetLoadedScriptIds();
}
}
f();
diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-505007-1.js b/deps/v8/test/mjsunit/regress/regress-crbug-505007-1.js
deleted file mode 100644
index 910f4a6720..0000000000
--- a/deps/v8/test/mjsunit/regress/regress-crbug-505007-1.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2015 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Flags: --stack-size=100 --allow-natives-syntax
-
-var count = 0;
-function f() {
- try {
- f();
- } catch(e) {
- if (count < 100) {
- count++;
- %GetDebugContext();
- }
- }
-}
-f();
diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-506443.js b/deps/v8/test/mjsunit/regress/regress-crbug-506443.js
deleted file mode 100644
index 490edf0d4c..0000000000
--- a/deps/v8/test/mjsunit/regress/regress-crbug-506443.js
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2015 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Flags: --allow-natives-syntax --opt --no-always-opt
-
-assertSame = function assertSame() {
- if (found === expected) {
- if (1 / expected) return;
- } else if ((expected !== expected) && (found !== found)) {
- return;
- };
-};
-assertEquals = function assertEquals() {
- if (expected) {;
- }
-};
-assertArrayEquals = function assertArrayEquals() {
- var start = "";
- if (name_opt) {
- start = name_opt + " - ";
- };
- if (expected.length == found.length) {
- for (var i = 0; i < expected.length; ++i) {;
- }
- }
-};
-assertPropertiesEqual = function assertPropertiesEqual() {
- if (found) {;
- }
-};
-assertToStringEquals = function assertToStringEquals() {
- if (found) {;
- }
-};
-assertTrue = function assertTrue() {;
-};
-assertFalse = function assertFalse() {;
-};
-assertUnreachable = function assertUnreachable() {
- var message = "Fail" + "ure: unreachable";
- if (name_opt) {
- message += " - " + name_opt;
- }
-};
-OptimizationStatus = function() {}
-assertUnoptimized = function assertUnoptimized() {;
-}
-assertOptimized = function assertOptimized() {;
-}
-triggerAssertFalse = function() {}
-var __v_2 = {};
-var __v_3 = {};
-var __v_4 = {};
-var __v_5 = {};
-var __v_6 = 1073741823;
-var __v_7 = {};
-var __v_8 = {};
-var __v_9 = {};
-var __v_10 = {};
-var __v_11 = 2147483648;
-var __v_12 = 1073741823;
-var __v_13 = {};
-var __v_14 = {};
-var __v_15 = -2147483648;
-var __v_16 = {};
-var __v_17 = {};
-var __v_19 = {};
-var __v_20 = {};
-var __v_21 = {};
-var __v_22 = {};
-var __v_23 = {};
-var __v_24 = {};
-try {
- (function() {
- var Debug = %GetDebugContext().Debug;
-
- function __f_0() {}
- for (var __v_0 = 0; __v_0 < 3; __v_0++) {
- var __v_2 = function() {
- a = 1;
- }
- Debug.setListener(__f_0);
- if (__v_0 < 2) Debug.setBreakPoint(__v_2);
- }
- })();
-} catch (e) {
- print();
-}
diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-582703.js b/deps/v8/test/mjsunit/regress/regress-crbug-582703.js
deleted file mode 100644
index 792266f54c..0000000000
--- a/deps/v8/test/mjsunit/regress/regress-crbug-582703.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright 2016 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Flags: --allow-natives-syntax
-
-%FunctionGetScript({});
-%FunctionGetSourceCode({});
diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-724153.js b/deps/v8/test/mjsunit/regress/regress-crbug-724153.js
index 541a4937e0..e167bec2f5 100644
--- a/deps/v8/test/mjsunit/regress/regress-crbug-724153.js
+++ b/deps/v8/test/mjsunit/regress/regress-crbug-724153.js
@@ -6,7 +6,7 @@
(function TestParameterLimit() {
var src = '(function f(a,';
- for (var i = 0; i < 65535 - 2; i++) {
+ for (var i = 0; i < 65534 - 2; i++) {
src += 'b' + i + ',';
}
src += 'c) { return a + c })';
diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-7907.js b/deps/v8/test/mjsunit/regress/regress-crbug-7907.js
new file mode 100644
index 0000000000..fafa659af8
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-crbug-7907.js
@@ -0,0 +1,9 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+let arr = new Array(10);
+Object.defineProperty(arr, 0, {value: 10, writable: false});
+Object.defineProperty(arr, 9, {value: 1, writable: false});
+
+assertThrows(() => arr.sort(), TypeError);
diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-848165.js b/deps/v8/test/mjsunit/regress/regress-crbug-848165.js
new file mode 100644
index 0000000000..670e70fe68
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-crbug-848165.js
@@ -0,0 +1,9 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+class cls0 {
+ static get length(){ return 42; };
+ static get [1](){ return 21; };
+};
+Object.defineProperty(cls0, "length", {value:'1'});
diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-849024.js b/deps/v8/test/mjsunit/regress/regress-crbug-849024.js
new file mode 100644
index 0000000000..a1df5777df
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-crbug-849024.js
@@ -0,0 +1,43 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --expose-gc
+
+this.__proto__ = new Proxy({}, {});
+
+function test1() {
+ eval("bla");
+}
+
+assertThrows(test1, ReferenceError);
+assertThrows(test1, ReferenceError);
+assertThrows(test1, ReferenceError);
+
+function test2() {
+ gc();
+ eval("bla");
+}
+
+assertThrows(test2, ReferenceError);
+assertThrows(test2, ReferenceError);
+assertThrows(test2, ReferenceError);
+
+function foo() {
+ try {
+ eval("bla");
+ } catch(e) {
+ return;
+ }
+ throw 1337;
+}
+
+function test3() {
+ gc();
+ foo();
+ foo();
+}
+
+assertDoesNotThrow(test3);
+assertDoesNotThrow(test3);
+assertDoesNotThrow(test3);
diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-850005.js b/deps/v8/test/mjsunit/regress/regress-crbug-850005.js
new file mode 100644
index 0000000000..d80d4663d1
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-crbug-850005.js
@@ -0,0 +1,11 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+let args = [3.34, ];
+function f(a, b, c) {};
+f(...args);
+args = args.splice();
+f(...args);
+args = [];
+f(...args);
diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-852592.js b/deps/v8/test/mjsunit/regress/regress-crbug-852592.js
new file mode 100644
index 0000000000..356c51c72e
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-crbug-852592.js
@@ -0,0 +1,25 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+const kArraySize = 1024;
+
+let array = [];
+for (let i = 1; i < kArraySize; ++i) {
+ array[i] = i + 0.1;
+}
+
+assertEquals(array.length, kArraySize);
+
+let executed = false;
+compareFn = _ => {
+ if (!executed) {
+ executed = true;
+
+ array.length = 1; // shrink
+ array.length = 0; // replace
+ array.length = kArraySize; // restore the original length
+ }
+}
+
+array.sort(compareFn);
diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-854299.js b/deps/v8/test/mjsunit/regress/regress-crbug-854299.js
new file mode 100644
index 0000000000..3aa296ae5a
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-crbug-854299.js
@@ -0,0 +1,27 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --expose-gc
+
+let rand = n => Math.floor(Math.random() * n);
+
+for (let i = 0; i < 1000; ++i) {
+ array = [];
+ let len = rand(30);
+ for(let i = 0; i < len; ++i) {
+ array[i] = [i + 0.1];
+ }
+
+ let counter = 0;
+ array.sort((a, b) => {
+ a = a || [0];
+ b = b || [0];
+
+ if (counter++ == rand(30)) {
+ array.length = 1;
+ gc();
+ }
+ return a[0] - b[0];
+ });
+}
diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-856095.js b/deps/v8/test/mjsunit/regress/regress-crbug-856095.js
new file mode 100644
index 0000000000..ae55ec65cb
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-crbug-856095.js
@@ -0,0 +1,14 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+function f(a, b, c) { }
+function a() {
+ let o1;
+ o1 = new Array();
+ f(...o1);
+ o1[1000] = Infinity;
+}
+
+a();
+a();
diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-859809.js b/deps/v8/test/mjsunit/regress/regress-crbug-859809.js
new file mode 100644
index 0000000000..af5dd7a904
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-crbug-859809.js
@@ -0,0 +1,21 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --expose-gc
+
+let xs = [];
+const kSize = 200;
+for (let i = 0; i < kSize; ++i) {
+ xs.push(i);
+}
+
+let counter = 0;
+xs.sort((a, b) => {
+ if (counter++ % 10 == 0) {
+ xs.shift();
+ gc();
+ }
+
+ return a - b;
+});
diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-860788.js b/deps/v8/test/mjsunit/regress/regress-crbug-860788.js
new file mode 100644
index 0000000000..55d243eac6
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-crbug-860788.js
@@ -0,0 +1,30 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --expose-async-hooks
+
+try {
+Object.prototype.__defineGetter__(0, function(){});
+assertThrows("x");
+} catch(e) { print("Caught: " + e); }
+
+try {
+(function() {
+ let asyncIds = [], triggerIds = [];
+ let ah = async_hooks.createHook({
+ init(asyncId, type, triggerAsyncId, resource) {
+ if (type !== 'PROMISE') { return; }
+ assertThrows("asyncIds.push(asyncId);");
+ assertThrows("triggerIds.push(triggerAsyncId)");
+ },
+ });
+ ah.enable();
+ async function foo() {}
+ foo();
+})();
+} catch(e) { print("Caught: " + e); }
+try {
+ var obj = {prop: 7};
+ assertThrows("nonexistant(obj)");
+} catch(e) { print("Caught: " + e); }
diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-862538.js b/deps/v8/test/mjsunit/regress/regress-crbug-862538.js
new file mode 100644
index 0000000000..f5da2eecbe
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-crbug-862538.js
@@ -0,0 +1,13 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+var uvwxyzundefined;
+
+function __f_5778(__v_29973) {
+ var __v_29975 = __v_29973 + undefined;
+ var __v_29976 = __v_29975.substring( 20);
+ ({})[__v_29975];
+ return eval(__v_29976);
+}
+__f_5778("abcdefghijklmnopqrstuvwxyz");
diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-869313.js b/deps/v8/test/mjsunit/regress/regress-crbug-869313.js
new file mode 100644
index 0000000000..1b4f9c5445
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-crbug-869313.js
@@ -0,0 +1,15 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+function f() {
+ try {
+ var a = new ArrayBuffer(1073741824);
+ var d = new DataView(a);
+ return d.getUint8() === 0;
+ } catch(e) {
+ return true;
+ }
+}
+
+!f();
diff --git a/deps/v8/test/mjsunit/regress/regress-deep-proto.js b/deps/v8/test/mjsunit/regress/regress-deep-proto.js
index 5d2758cdd6..6b1387447d 100644
--- a/deps/v8/test/mjsunit/regress/regress-deep-proto.js
+++ b/deps/v8/test/mjsunit/regress/regress-deep-proto.js
@@ -25,6 +25,8 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Flags: --allow-natives-syntax
+
function poly(x) {
return x.foo;
}
@@ -38,8 +40,12 @@ three.__proto__.__proto__.__proto__ = {};
three.__proto__.__proto__.__proto__.__proto__ = {};
three.__proto__.__proto__.__proto__.__proto__.__proto__ = {};
-for (var i = 0; i < 1e6; i++) {
- poly(one);
- poly(two);
- poly(three);
-}
+poly(one);
+poly(two);
+poly(three);
+
+%OptimizeFunctionOnNextCall(poly);
+
+poly(one);
+poly(two);
+poly(three);
diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-7785.js b/deps/v8/test/mjsunit/regress/wasm/regress-7785.js
new file mode 100644
index 0000000000..12d7e6b5da
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/wasm/regress-7785.js
@@ -0,0 +1,44 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --allow-natives-syntax --experimental-wasm-anyref
+
+load("test/mjsunit/wasm/wasm-constants.js");
+load("test/mjsunit/wasm/wasm-module-builder.js");
+
+(function testAnyRefNull() {
+ const builder = new WasmModuleBuilder();
+ builder.addFunction('main', kSig_r_v)
+ .addBody([kExprRefNull])
+ .exportFunc();
+
+ var wire_bytes = builder.toBuffer();
+ var module = new WebAssembly.Module(wire_bytes);
+ var buffer = %SerializeWasmModule(module);
+ module = %DeserializeWasmModule(buffer, wire_bytes);
+ var instance = new WebAssembly.Instance(module);
+
+ assertEquals(null, instance.exports.main());
+})();
+
+(function testAnyRefIsNull() {
+ const builder = new WasmModuleBuilder();
+ builder.addFunction('main', kSig_i_r)
+ .addBody([kExprGetLocal, 0, kExprRefIsNull])
+ .exportFunc();
+
+ var wire_bytes = builder.toBuffer();
+ var module = new WebAssembly.Module(wire_bytes);
+ var buffer = %SerializeWasmModule(module);
+ module = %DeserializeWasmModule(buffer, wire_bytes);
+ var instance = new WebAssembly.Instance(module);
+
+ assertEquals(0, instance.exports.main({'hello' : 'world'}));
+ assertEquals(0, instance.exports.main(1234));
+ assertEquals(0, instance.exports.main(0));
+ assertEquals(0, instance.exports.main(123.4));
+ assertEquals(0, instance.exports.main(undefined));
+ assertEquals(1, instance.exports.main(null));
+ assertEquals(0, instance.exports.main(print));
+})();
diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-7914.js b/deps/v8/test/mjsunit/regress/wasm/regress-7914.js
new file mode 100644
index 0000000000..731005a872
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/wasm/regress-7914.js
@@ -0,0 +1,18 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+load('test/mjsunit/wasm/wasm-constants.js');
+load('test/mjsunit/wasm/wasm-module-builder.js');
+
+const builder = new WasmModuleBuilder();
+builder.addMemory(16, 32, false);
+builder.addFunction('main', kSig_i_v)
+ .addBody([
+ ...wasmI32Const(10000), // i32.const 10000
+ kExprGrowMemory, 0, // grow_memory --> -1
+ kExprI32Popcnt, // i32.popcnt --> 32
+ ])
+ .exportFunc();
+const instance = builder.instantiate();
+assertEquals(32, instance.exports.main());
diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-799952.js b/deps/v8/test/mjsunit/regress/wasm/regress-799952.js
new file mode 100644
index 0000000000..17371343e4
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/wasm/regress-799952.js
@@ -0,0 +1,23 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+var sentinel = {};
+Object.defineProperty(Promise, Symbol.species, {
+ value: function(f) {
+ f(function() {}, function() {})
+ return sentinel;
+ }
+});
+
+// According to the WebAssembly JavaScript API spec, WebAssembly.instantiate is
+// using the initial value of the Promise constructor. Specifically it ignores
+// the Promise species constructor installed above.
+var promise = WebAssembly.instantiate(new ArrayBuffer());
+assertInstanceof(promise, Promise);
+assertNotSame(promise, sentinel);
+
+// All further uses of the returned Promise, like using Promise.prototype.then,
+// will respect the Promise species constructor installed above however.
+var monkey = promise.then(r => { print(r) }, e => { print(e) });
+assertSame(monkey, sentinel);
diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-808848.js b/deps/v8/test/mjsunit/regress/wasm/regress-808848.js
index 28c57ec340..69423b954d 100644
--- a/deps/v8/test/mjsunit/regress/wasm/regress-808848.js
+++ b/deps/v8/test/mjsunit/regress/wasm/regress-808848.js
@@ -49,16 +49,16 @@ let m1 = new WebAssembly.Module(m1_bytes);
// Serialize the module and postMessage it to another thread.
let serialized_m1 = %SerializeWasmModule(m1);
-let workerScript =
- `onmessage = function(msg) {
- let {serialized_m1, m1_bytes} = msg;
+let worker_onmessage = function(msg) {
+ let {serialized_m1, m1_bytes} = msg;
- let m1_clone = %DeserializeWasmModule(serialized_m1, m1_bytes);
- let imports = {mod: {get: () => 3, call: () => {}}};
- let i2 = new WebAssembly.Instance(m1_clone, imports);
- i2.exports.main();
- postMessage('done');
- }`;
+ let m1_clone = %DeserializeWasmModule(serialized_m1, m1_bytes);
+ let imports = {mod: {get: () => 3, call: () => {}}};
+ let i2 = new WebAssembly.Instance(m1_clone, imports);
+ i2.exports.main();
+ postMessage('done');
+}
+let workerScript = "onmessage = " + worker_onmessage.toString();
let worker = new Worker(workerScript);
worker.postMessage({serialized_m1, m1_bytes});
diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-837417.js b/deps/v8/test/mjsunit/regress/wasm/regress-837417.js
index 572139fac5..9dcc299ecf 100644
--- a/deps/v8/test/mjsunit/regress/wasm/regress-837417.js
+++ b/deps/v8/test/mjsunit/regress/wasm/regress-837417.js
@@ -8,16 +8,11 @@ load('test/mjsunit/wasm/wasm-module-builder.js');
const builder = new WasmModuleBuilder();
builder.addMemory(16, 32);
builder.addFunction("test", kSig_i_v).addBody([
- kExprI32Const, 12, // i32.const 0
+ kExprI32Const, 12, // i32.const 12
]);
-WebAssembly.Module.prototype.then = resolve => resolve(
- String.fromCharCode(null, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41));
+WebAssembly.Module.prototype.then = resolve => {
+ assertUnreachable();
+};
-// WebAssembly.instantiate should not actually throw a TypeError in this case.
-// However, this is a workaround for
-assertPromiseResult(
- WebAssembly.instantiate(builder.toBuffer()), assertUnreachable,
- exception => {
- assertInstanceof(exception, TypeError);
- });
+WebAssembly.instantiate(builder.toBuffer());
diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-853453.js b/deps/v8/test/mjsunit/regress/wasm/regress-853453.js
new file mode 100644
index 0000000000..fcf5f67885
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/wasm/regress-853453.js
@@ -0,0 +1,18 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --experimental-wasm-threads
+
+assertThrows(() => new WebAssembly.Module(
+ new Uint8Array([
+ 0x00, 0x61, 0x73, 0x6d, // wasm magic
+ 0x01, 0x00, 0x00, 0x00, // wasm version
+ 0x04, // section code
+ 0x04, // section length
+ /* Section: Table */
+ 0x01, // table count
+ 0x70, // table type
+ 0x03, // resizable limits flags
+ 0x00])),
+ WebAssembly.CompileError);
diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-854011.js b/deps/v8/test/mjsunit/regress/wasm/regress-854011.js
new file mode 100644
index 0000000000..11863368f3
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/wasm/regress-854011.js
@@ -0,0 +1,47 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+load('test/mjsunit/wasm/wasm-constants.js');
+load('test/mjsunit/wasm/wasm-module-builder.js');
+
+const builder = new WasmModuleBuilder();
+builder.addFunction('main', kSig_d_d)
+ .addBody([
+ // Call with param 0 (converted to i64), to fill the stack with non-zero
+ // values.
+ kExprGetLocal, 0, kExprI64SConvertF64, // arg 0
+ kExprGetLocal, 0, kExprI64SConvertF64, // arg 1
+ kExprGetLocal, 0, kExprI64SConvertF64, // arg 2
+ kExprGetLocal, 0, kExprI64SConvertF64, // arg 3
+ kExprGetLocal, 0, kExprI64SConvertF64, // arg 4
+ kExprGetLocal, 0, kExprI64SConvertF64, // arg 5
+ kExprGetLocal, 0, kExprI64SConvertF64, // arg 6
+ kExprGetLocal, 0, kExprI64SConvertF64, // arg 7
+ kExprCallFunction, 1, // call #1
+ // Now call with 0 constants.
+ // The bug was that they were written out as i32 values, thus the upper 32
+ // bit were the previous values on that stack memory.
+ kExprI64Const, 0, // i64.const 0 [0]
+ kExprI64Const, 0, // i64.const 0 [1]
+ kExprI64Const, 0, // i64.const 0 [2]
+ kExprI64Const, 0, // i64.const 0 [3]
+ kExprI64Const, 0, // i64.const 0 [4]
+ kExprI64Const, 0, // i64.const 0 [5]
+ kExprI64Const, 0, // i64.const 0 [6]
+ kExprI64Const, 0, // i64.const 0 [7]
+ kExprCallFunction, 1, // call #1
+ // Return the sum of the two returned values.
+ kExprF64Add
+ ])
+ .exportFunc();
+builder.addFunction(undefined, makeSig(new Array(8).fill(kWasmI64), [kWasmF64]))
+ .addBody([
+ kExprGetLocal, 7, // get_local 7 (last parameter)
+ kExprF64SConvertI64, // f64.convert_s/i64
+ ]);
+const instance = builder.instantiate();
+const big_num_1 = 2 ** 48;
+const big_num_2 = 2 ** 56 / 3;
+assertEquals(big_num_1, instance.exports.main(big_num_1));
+assertEquals(big_num_2, instance.exports.main(big_num_2));
diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-854050.js b/deps/v8/test/mjsunit/regress/wasm/regress-854050.js
new file mode 100644
index 0000000000..e2146ca365
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/wasm/regress-854050.js
@@ -0,0 +1,28 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+load('test/mjsunit/wasm/wasm-constants.js');
+load('test/mjsunit/wasm/wasm-module-builder.js');
+
+const builder = new WasmModuleBuilder();
+builder.addFunction(undefined, makeSig([kWasmI32, kWasmF32], []))
+ .addLocals({i32_count: 7})
+ .addBody([
+ kExprGetLocal, 0, // get_local
+ kExprI32Const, 0, // i32.const 0
+ kExprIf, kWasmStmt, // if
+ kExprUnreachable, // unreachable
+ kExprEnd, // end if
+ kExprGetLocal, 4, // get_local
+ kExprTeeLocal, 8, // tee_local
+ kExprBrIf, 0, // br_if depth=0
+ kExprTeeLocal, 7, // tee_local
+ kExprTeeLocal, 0, // tee_local
+ kExprTeeLocal, 2, // tee_local
+ kExprTeeLocal, 8, // tee_local
+ kExprDrop, // drop
+ kExprLoop, kWasmStmt, // loop
+ kExprEnd, // end loop
+ ]);
+builder.instantiate();
diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-864509.js b/deps/v8/test/mjsunit/regress/wasm/regress-864509.js
new file mode 100644
index 0000000000..822c06750a
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/wasm/regress-864509.js
@@ -0,0 +1,62 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --liftoff --no-wasm-tier-up --no-future --wasm-tier-mask-for-testing=2
+
+load('test/mjsunit/wasm/wasm-constants.js');
+load('test/mjsunit/wasm/wasm-module-builder.js');
+
+const builder = new WasmModuleBuilder();
+builder.addMemory(1, 1);
+// First function is Liftoff. The first parameter is used as memory offset.
+builder.addFunction(undefined, kSig_v_i).addBody([
+ kExprGetLocal, 0, // get_local 0
+ kExprI32Const, 0, // i32.const 0
+ kExprI32StoreMem, 0, 0, // i32.store offset=0
+]);
+// Second function is Turbofan. It loads the sixth parameter from the stack
+// into a register for the first argument. Even though it's a 32-bit value, it
+// is loaded as 64-bit value on x64.
+builder.addFunction(undefined, makeSig(new Array(6).fill(kWasmI32), []))
+ .addBody([
+ kExprGetLocal, 5, // get_local 5
+ kExprCallFunction, 0 // call 0
+ ]);
+// The third function is Liftoff again. A value is spilled on the stack as i32,
+// then used as a call argument, passed via the stack. The full 64-bit are
+// copied on the stack, even though just 32-bit were written before. Hence, the
+// stack slot is not zero-extended.
+const gen_i32_code = [
+ kExprTeeLocal, 0, // tee_local 0
+ kExprGetLocal, 0, // get_local 0
+ kExprI32Const, 1, // i32.const 1
+ kExprI32Add // i32.add --> 2nd param
+];
+builder.addFunction(undefined, kSig_v_v).addLocals({i32_count: 1}).addBody([
+ // Generate six values on the stack, then six more to force the other six on
+ // the stack.
+ ...wasmI32Const(0), // i32.const 0
+ ...wasmI32Const(1), // i32.const 1
+ kExprI32Add, // i32.add --> 1st param
+ ...gen_i32_code, // --> 2nd param
+ ...gen_i32_code, // --> 3rd param
+ ...gen_i32_code, // --> 4th param
+ ...gen_i32_code, // --> 5th param
+ ...gen_i32_code, // --> 6th param
+ ...gen_i32_code, // --> garbage
+ ...gen_i32_code, // --> garbage
+ ...gen_i32_code, // --> garbage
+ ...gen_i32_code, // --> garbage
+ ...gen_i32_code, // --> garbage
+ ...gen_i32_code, // --> garbage
+ kExprDrop, // drop garbage
+ kExprDrop, // drop garbage
+ kExprDrop, // drop garbage
+ kExprDrop, // drop garbage
+ kExprDrop, // drop garbage
+ kExprDrop, // drop garbage
+ kExprCallFunction, 1 // call 1
+]).exportAs('three');
+const instance = builder.instantiate();
+instance.exports.three();
diff --git a/deps/v8/test/mjsunit/stack-traces-2.js b/deps/v8/test/mjsunit/stack-traces-2.js
index 45dfe3a1ea..ca78ed3858 100644
--- a/deps/v8/test/mjsunit/stack-traces-2.js
+++ b/deps/v8/test/mjsunit/stack-traces-2.js
@@ -57,25 +57,8 @@ function testTraceNativeConversion(nativeFunc) {
}
}
-
-function testNotOmittedBuiltin(throwing, included) {
- try {
- throwing();
- assertUnreachable(included);
- } catch (e) {
- assertTrue(e.stack.indexOf(included) >= 0, included);
- }
-}
-
-
testTraceNativeConversion(String); // Does ToString on argument.
testTraceNativeConversion(RegExp); // Does ToString on argument.
testTraceNativeConstructor(String); // Does ToString on argument.
testTraceNativeConstructor(RegExp); // Does ToString on argument.
-
-// QuickSort has builtins object as receiver, and is non-native
-// builtin. Should not be omitted with the --builtins-in-stack-traces flag.
-testNotOmittedBuiltin(function(){ [thrower, 2].sort(function (a,b) {
- (b < a) - (a < b); });
- }, "QuickSort");
diff --git a/deps/v8/test/mjsunit/tools/profviz-test.default b/deps/v8/test/mjsunit/tools/profviz-test.default
index 040afb4217..0c33e11abd 100644
--- a/deps/v8/test/mjsunit/tools/profviz-test.default
+++ b/deps/v8/test/mjsunit/tools/profviz-test.default
@@ -1435,8 +1435,8 @@
"46.74 0.08499999999999375",
"57.64849999999997 0.08249999999999602",
"58.316999999999965 0.08099999999999596",
- "23.506 0.08050000000000068",
"46.37200000000001 0.08050000000000068",
+ "23.506 0.08050000000000068",
"42.70600000000002 0.07900000000000063",
"129.4124999999999 0.07800000000000296",
"20.5975 0.07750000000000057",
@@ -1450,16 +1450,16 @@
"44.917000000000016 0.07200000000000273",
"25.591500000000003 0.07199999999999918",
"50.62049999999999 0.07150000000000034",
- "46.621 0.07099999999999795",
"88.82299999999992 0.07099999999999795",
+ "46.621 0.07099999999999795",
"78.23049999999994 0.0660000000000025",
"46.060500000000005 0.0659999999999954",
"50.43099999999999 0.06400000000000006",
"129.48849999999987 0.06349999999997635",
"45.55900000000001 0.06150000000000233",
"19.152 0.06050000000000111",
- "50.20799999999999 0.060499999999997556",
"57.33299999999997 0.060499999999997556",
+ "50.20799999999999 0.060499999999997556",
"68.76649999999995 0.06049999999999045",
"23.5775 0.059499999999999886",
"47.135000000000005 0.05850000000000222",
@@ -1468,8 +1468,8 @@
"21.2695 0.057500000000000995",
"50.14149999999999 0.05749999999999744",
"91.96649999999993 0.056500000000013983",
- "57.934999999999974 0.05649999999999977",
"83.63999999999993 0.05649999999999977",
+ "57.934999999999974 0.05649999999999977",
"132.92249999999987 0.05649999999997135",
"67.59199999999996 0.056000000000011596",
"99.92199999999991 0.055499999999995",
@@ -1490,9 +1490,9 @@
"75.46799999999995 0.04950000000000898",
"45.76150000000001 0.049500000000001876",
"94.6054999999999 0.04949999999998056",
- "45.97850000000001 0.048500000000004206",
- "115.4124999999999 0.048500000000004206",
"118.19199999999991 0.048500000000004206",
+ "115.4124999999999 0.048500000000004206",
+ "45.97850000000001 0.048500000000004206",
"49.780499999999996 0.0484999999999971",
"42.795000000000016 0.04800000000000182",
"126.59899999999989 0.04749999999999943",
@@ -1512,23 +1512,23 @@
"52.15399999999998 0.0379999999999967",
"42.88200000000001 0.0379999999999967",
"24.430500000000002 0.03750000000000142",
- "23.907 0.036499999999996646",
"60.08349999999996 0.036499999999996646",
+ "23.907 0.036499999999996646",
"50.32899999999999 0.036000000000001364",
"42.31450000000002 0.034000000000006025",
"45.02900000000001 0.032999999999994145",
"23.189 0.031500000000001194",
"21.49 0.03049999999999997",
- "42.83300000000001 0.030000000000001137",
"58.12149999999997 0.030000000000001137",
"45.41750000000002 0.030000000000001137",
+ "42.83300000000001 0.030000000000001137",
"140.89599999999987 0.028999999999996362",
"2.4490000000000003 0.028500000000000636",
"52.31499999999998 0.027999999999998693",
"45.17200000000002 0.027999999999998693",
- "43.632500000000014 0.027000000000001023",
- "49.8685 0.027000000000001023",
"51.30249999999999 0.027000000000001023",
+ "49.8685 0.027000000000001023",
+ "43.632500000000014 0.027000000000001023",
"21.175 0.026499999999998636",
"44.82200000000002 0.026000000000003354",
"22.528 0.02599999999999625",
diff --git a/deps/v8/test/mjsunit/wasm/compiled-module-management.js b/deps/v8/test/mjsunit/wasm/compiled-module-management.js
index a8a2b110ee..19446403ab 100644
--- a/deps/v8/test/mjsunit/wasm/compiled-module-management.js
+++ b/deps/v8/test/mjsunit/wasm/compiled-module-management.js
@@ -27,23 +27,21 @@ var instance4;
]).exportFunc();
module = new WebAssembly.Module(builder.toBuffer());
- print("Initial module");
- %ValidateWasmModuleState(module);
print("Initial instances=0");
- %ValidateWasmInstancesChain(module, 0);
+ assertEquals(0, %WasmGetNumberOfInstances(module));
instance1 = new WebAssembly.Instance(module, {"": {getValue: () => 1}});
print("Initial instances=1");
- %ValidateWasmInstancesChain(module, 1);
+ assertEquals(1, %WasmGetNumberOfInstances(module));
instance2 = new WebAssembly.Instance(module, {"": {getValue: () => 2}});
print("Initial instances=2");
- %ValidateWasmInstancesChain(module, 2);
+ assertEquals(2, %WasmGetNumberOfInstances(module));
instance3 = new WebAssembly.Instance(module, {"": {getValue: () => 3}});
print("Initial instances=3");
- %ValidateWasmInstancesChain(module, 3);
+ assertEquals(3, %WasmGetNumberOfInstances(module));
})();
(function CompiledModuleInstancesClear1() {
@@ -51,30 +49,33 @@ var instance4;
instance1 = null;
})();
+// Note that two GC's are required because weak slots clearing is deferred.
+gc();
gc();
print("After gc instances=2");
-%ValidateWasmInstancesChain(module, 2);
+assertEquals(2, %WasmGetNumberOfInstances(module));
(function CompiledModuleInstancesClear3() {
assertEquals(3, instance3.exports.f());
instance3 = null;
})();
+// Note that two GC's are required because weak slots clearing is deferred.
+gc();
gc();
print("After gc instances=1");
-%ValidateWasmInstancesChain(module, 1);
+assertEquals(1, %WasmGetNumberOfInstances(module));
(function CompiledModuleInstancesClear2() {
assertEquals(2, instance2.exports.f());
instance2 = null;
})();
-// Note that two GC's are required because weak cells are not cleared
-// in the same cycle that the instance finalizer is run.
+// Note that two GC's are required because weak slots clearing is deferred.
gc();
gc();
-print("After gc module state");
-%ValidateWasmModuleState(module);
+print("After gc instances=0");
+assertEquals(0, %WasmGetNumberOfInstances(module));
(function CompiledModuleInstancesInitialize4AndClearModule() {
instance4 = new WebAssembly.Instance(module, {"": {getValue: () => 4}});
@@ -82,6 +83,6 @@ print("After gc module state");
module = null;
})();
-// Note that the first GC will clear the module, the second the instance.
+// Note that two GC's are required because weak slots clearing is deferred.
gc();
gc();
diff --git a/deps/v8/test/mjsunit/wasm/compiled-module-serialization.js b/deps/v8/test/mjsunit/wasm/compiled-module-serialization.js
index 721987aa2b..a5d1bc5414 100644
--- a/deps/v8/test/mjsunit/wasm/compiled-module-serialization.js
+++ b/deps/v8/test/mjsunit/wasm/compiled-module-serialization.js
@@ -8,6 +8,7 @@ load("test/mjsunit/wasm/wasm-constants.js");
load("test/mjsunit/wasm/wasm-module-builder.js");
(function SerializeAndDeserializeModule() {
+ print(arguments.callee.name);
var builder = new WasmModuleBuilder();
builder.addImportedMemory("", "memory", 1);
var kSig_v_i = makeSig([kWasmI32], []);
@@ -75,6 +76,7 @@ load("test/mjsunit/wasm/wasm-module-builder.js");
})();
(function DeserializeInvalidObject() {
+ print(arguments.callee.name);
var invalid_buffer = new ArrayBuffer(10);
module = %DeserializeWasmModule(invalid_buffer, invalid_buffer);
@@ -82,6 +84,7 @@ load("test/mjsunit/wasm/wasm-module-builder.js");
})();
(function RelationBetweenModuleAndClone() {
+ print(arguments.callee.name);
let builder = new WasmModuleBuilder();
builder.addFunction("main", kSig_i_v)
.addBody([kExprI32Const, 42])
@@ -99,6 +102,7 @@ load("test/mjsunit/wasm/wasm-module-builder.js");
})();
(function SerializeWrappersWithSameSignature() {
+ print(arguments.callee.name);
let builder = new WasmModuleBuilder();
builder.addFunction("main", kSig_i_v)
.addBody([kExprI32Const, 42])
@@ -119,6 +123,7 @@ load("test/mjsunit/wasm/wasm-module-builder.js");
})();
(function SerializeAfterInstantiation() {
+ print(arguments.callee.name);
let builder = new WasmModuleBuilder();
builder.addFunction("main", kSig_i_v)
.addBody([kExprI32Const, 42])
@@ -141,6 +146,7 @@ load("test/mjsunit/wasm/wasm-module-builder.js");
(function SerializeAfterInstantiationWithMemory() {
+ print(arguments.callee.name);
let builder = new WasmModuleBuilder();
builder.addImportedMemory("", "memory", 1);
builder.addFunction("main", kSig_i_v)
@@ -164,6 +170,7 @@ load("test/mjsunit/wasm/wasm-module-builder.js");
})();
(function GlobalsArePrivateBetweenClones() {
+ print(arguments.callee.name);
var builder = new WasmModuleBuilder();
builder.addGlobal(kWasmI32, true);
builder.addFunction("read", kSig_i_v)
@@ -191,6 +198,7 @@ load("test/mjsunit/wasm/wasm-module-builder.js");
})();
(function SharedTableTest() {
+ print(arguments.callee.name);
let kTableSize = 3;
var sig_index1;
@@ -261,7 +269,88 @@ load("test/mjsunit/wasm/wasm-module-builder.js");
assertThrows(() => i2.exports.main(2));
assertThrows(() => i1.exports.main(3));
assertThrows(() => i2.exports.main(3));
+})();
+
+(function StackOverflowAfterSerialization() {
+ print(arguments.callee.name);
+ const builder = new WasmModuleBuilder();
+ var fun = builder.addFunction('main', kSig_v_v);
+ fun.addBody([kExprCallFunction, fun.index]);
+ fun.exportFunc();
+
+ var wire_bytes = builder.toBuffer();
+ var module = new WebAssembly.Module(wire_bytes);
+ var buffer = %SerializeWasmModule(module);
+ module = %DeserializeWasmModule(buffer, wire_bytes);
+ var instance = new WebAssembly.Instance(module);
+
+ assertThrows(instance.exports.main, RangeError);
+})();
+
+(function TrapAfterDeserialization() {
+ print(arguments.callee.name);
+ function GenerateSerializedModule() {
+ const builder = new WasmModuleBuilder();
+ builder.addMemory(1, 1);
+ builder.addFunction('main', kSig_i_i)
+ .addBody([kExprGetLocal, 0, kExprI32LoadMem, 0, 0])
+ .exportFunc();
+ const wire_bytes = builder.toBuffer();
+ const module = new WebAssembly.Module(wire_bytes);
+ const buffer = %SerializeWasmModule(module);
+ return [wire_bytes, buffer];
+ }
+ const [wire_bytes, buffer] = GenerateSerializedModule();
+ module = %DeserializeWasmModule(buffer, wire_bytes);
+ const instance = new WebAssembly.Instance(module);
+
+ assertEquals(0, instance.exports.main(0));
+ assertEquals(0, instance.exports.main(kPageSize - 4));
+ assertTraps(
+ kTrapMemOutOfBounds, _ => instance.exports.main(kPageSize - 3));
+})();
+
+(function DirectCallAfterSerialization() {
+ print(arguments.callee.name);
+ const builder = new WasmModuleBuilder();
+ var fun1 = builder.addFunction('fun1', kSig_i_v)
+ .addBody([kExprI32Const, 23]);
+ var fun2 = builder.addFunction('fun2', kSig_i_v)
+ .addBody([kExprI32Const, 42]);
+ builder.addFunction('main', kSig_i_v)
+ .addBody([kExprCallFunction, fun1.index,
+ kExprCallFunction, fun2.index,
+ kExprI32Add])
+ .exportFunc();
+
+ var wire_bytes = builder.toBuffer();
+ var module = new WebAssembly.Module(wire_bytes);
+ var buffer = %SerializeWasmModule(module);
+ module = %DeserializeWasmModule(buffer, wire_bytes);
+ var instance = new WebAssembly.Instance(module);
+
+ assertEquals(65, instance.exports.main());
+})();
+
+(function ImportCallAfterSerialization() {
+ print(arguments.callee.name);
+ const builder = new WasmModuleBuilder();
+ var fun_import = builder.addImport("", "my_import", kSig_i_v);
+ var fun = builder.addFunction('fun', kSig_i_v)
+ .addBody([kExprI32Const, 23]);
+ builder.addFunction('main', kSig_i_v)
+ .addBody([kExprCallFunction, fun.index,
+ kExprCallFunction, fun_import,
+ kExprI32Add])
+ .exportFunc();
+
+ var wire_bytes = builder.toBuffer();
+ var module = new WebAssembly.Module(wire_bytes);
+ var buffer = %SerializeWasmModule(module);
+ module = %DeserializeWasmModule(buffer, wire_bytes);
+ var instance = new WebAssembly.Instance(module, {"": {my_import: () => 42 }});
+ assertEquals(65, instance.exports.main());
})();
(function BranchTableAfterSerialization() {
diff --git a/deps/v8/test/mjsunit/wasm/default-liftoff-setting.js b/deps/v8/test/mjsunit/wasm/default-liftoff-setting.js
deleted file mode 100644
index 9ae6e928af..0000000000
--- a/deps/v8/test/mjsunit/wasm/default-liftoff-setting.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2017 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Flags: --allow-natives-syntax
-
-// This test makes sure that by default, we do not compile with liftoff.
-
-load('test/mjsunit/wasm/wasm-constants.js');
-load('test/mjsunit/wasm/wasm-module-builder.js');
-
-const builder = new WasmModuleBuilder();
-builder.addFunction('i32_add', kSig_i_ii)
- .addBody([kExprGetLocal, 0, kExprGetLocal, 1, kExprI32Add])
- .exportFunc();
-
-const instance = builder.instantiate();
-
-assertFalse(
- %IsLiftoffFunction(instance.exports.i32_add),
- 'liftoff compilation should be off by default');
diff --git a/deps/v8/test/mjsunit/wasm/export-global.js b/deps/v8/test/mjsunit/wasm/export-global.js
index 43c788c02e..1bce050c2f 100644
--- a/deps/v8/test/mjsunit/wasm/export-global.js
+++ b/deps/v8/test/mjsunit/wasm/export-global.js
@@ -5,40 +5,6 @@
load("test/mjsunit/wasm/wasm-constants.js");
load("test/mjsunit/wasm/wasm-module-builder.js");
-(function exportImmutableGlobal() {
- var builder = new WasmModuleBuilder();
- let globals = [
- [kWasmI32, 'i32_noinit'], // -
- [kWasmI32, 'i32', 4711], // -
- [kWasmF32, 'f32_noinit'], // -
- [kWasmF32, 'f32', Math.fround(3.14)], // -
- [kWasmF64, 'f64_noinit'], // -
- [kWasmF64, 'f64', 1 / 7] // -
- ];
- for (let g of globals) {
- let global_builder = builder.addGlobal(g[0], false).exportAs(g[1]);
- if (g[2]) global_builder.init = g[2];
- }
- var module = builder.instantiate();
-
- for (let g of globals) {
- assertEquals("number", typeof module.exports[g[1]], g[1]);
- assertEquals(g[2] || 0, module.exports[g[1]], g[1]);
- }
-})();
-
-(function cannotExportMutableGlobal() {
- var builder = new WasmModuleBuilder();
- builder.addGlobal(kWasmI32, true).exportAs('g');
- assertThrows(() => builder.instantiate(), WebAssembly.CompileError);
-})();
-
-(function cannotExportI64Global() {
- var builder = new WasmModuleBuilder();
- builder.addGlobal(kWasmI64, false).exportAs('g');
- assertThrows(() => builder.instantiate(), WebAssembly.LinkError);
-})();
-
(function duplicateGlobalExportName() {
var builder = new WasmModuleBuilder();
builder.addGlobal(kWasmI64, false).exportAs('g');
diff --git a/deps/v8/test/mjsunit/wasm/export-mutable-global.js b/deps/v8/test/mjsunit/wasm/export-mutable-global.js
index 8d5e1e6cb6..25dca3f211 100644
--- a/deps/v8/test/mjsunit/wasm/export-mutable-global.js
+++ b/deps/v8/test/mjsunit/wasm/export-mutable-global.js
@@ -84,3 +84,18 @@ load("test/mjsunit/wasm/wasm-module-builder.js");
assertEquals(112358, obj.value, name);
}
})();
+
+(function exportImportedMutableGlobal() {
+ let builder = new WasmModuleBuilder();
+ builder.addGlobal(kWasmI32, true).exportAs('g1');
+ let g1 = builder.instantiate().exports.g1;
+
+ builder = new WasmModuleBuilder();
+ builder.addImportedGlobal("mod", "g1", kWasmI32, true);
+ builder.addExportOfKind('g2', kExternalGlobal, 0);
+ let g2 = builder.instantiate({mod: {g1: g1}}).exports.g2;
+
+ g1.value = 123;
+
+ assertEquals(g1.value, g2.value);
+})();
diff --git a/deps/v8/test/mjsunit/wasm/globals.js b/deps/v8/test/mjsunit/wasm/globals.js
index 21f73ebe7e..7b2ffee7ef 100644
--- a/deps/v8/test/mjsunit/wasm/globals.js
+++ b/deps/v8/test/mjsunit/wasm/globals.js
@@ -102,7 +102,7 @@ function TestExported(type, val, expected) {
builder.addGlobal(kWasmI32); // pad
var instance = builder.instantiate();
- assertEquals(expected, instance.exports.foo);
+ assertEquals(expected, instance.exports.foo.value);
}
TestExported(kWasmI32, 455.5, 455);
@@ -118,7 +118,9 @@ TestExported(kWasmF64, 87347.66666, 87347.66666);
g.init = 1234;
builder.addGlobal(kWasmI32); // pad
- assertThrows(()=> {builder.instantiate()}, WebAssembly.LinkError);
+ var instance = builder.instantiate();
+ assertTrue(instance.exports.foo instanceof WebAssembly.Global);
+ assertThrows(() => {instance.exports.foo.value}, TypeError);
})();
function TestImportedExported(type, val, expected) {
@@ -133,7 +135,7 @@ function TestImportedExported(type, val, expected) {
builder.addGlobal(kWasmI32); // pad
var instance = builder.instantiate({ttt: {foo: val}});
- assertEquals(expected, instance.exports.bar);
+ assertEquals(expected, instance.exports.bar.value);
}
TestImportedExported(kWasmI32, 415.5, 415);
diff --git a/deps/v8/test/mjsunit/wasm/import-mutable-global.js b/deps/v8/test/mjsunit/wasm/import-mutable-global.js
index 1972819f02..4985d99211 100644
--- a/deps/v8/test/mjsunit/wasm/import-mutable-global.js
+++ b/deps/v8/test/mjsunit/wasm/import-mutable-global.js
@@ -8,7 +8,7 @@ load("test/mjsunit/wasm/wasm-constants.js");
load("test/mjsunit/wasm/wasm-module-builder.js");
(function TestBasic() {
- let global = new WebAssembly.Global({type: 'i32'}, 1);
+ let global = new WebAssembly.Global({value: 'i32'}, 1);
let builder = new WasmModuleBuilder();
builder.addImportedGlobal("mod", "g", kWasmI32);
builder.addFunction("main", kSig_i_v)
@@ -20,7 +20,7 @@ load("test/mjsunit/wasm/wasm-module-builder.js");
})();
(function TestTypeMismatch() {
- let global = new WebAssembly.Global({type: 'f32'}, 1);
+ let global = new WebAssembly.Global({value: 'f32'}, 1);
let builder = new WasmModuleBuilder();
builder.addImportedGlobal("mod", "g", kWasmI32);
@@ -28,13 +28,13 @@ load("test/mjsunit/wasm/wasm-module-builder.js");
})();
(function TestMutableMismatch() {
- let global = new WebAssembly.Global({type: 'f64'}, 1);
+ let global = new WebAssembly.Global({value: 'f64'}, 1);
let builder = new WasmModuleBuilder();
builder.addImportedGlobal("mod", "g", kWasmF64, true);
assertThrows(() => builder.instantiate({mod: {g: global}}));
- global = new WebAssembly.Global({type: 'i32', mutable: true}, 1);
+ global = new WebAssembly.Global({value: 'i32', mutable: true}, 1);
builder = new WasmModuleBuilder();
builder.addImportedGlobal("mod", "g", kWasmI32);
@@ -73,7 +73,7 @@ function addGlobalGetterAndSetter(builder, index, name, type) {
let builder = new WasmModuleBuilder();
for (let [index, {name, type}] of globalDesc.entries()) {
- globals[name] = new WebAssembly.Global({type: name, mutable: true});
+ globals[name] = new WebAssembly.Global({value: name, mutable: true});
builder.addImportedGlobal("mod", name, type, true);
addGlobalGetterAndSetter(builder, index, name, type);
}
@@ -191,3 +191,11 @@ function addGlobalGetterAndSetter(builder, index, name, type) {
inst2.exports.seti32(0x789abcde);
assertEquals(0x789abcde, inst2.exports.geti32());
})();
+
+(function TestImportedAndNonImportedMutableGlobal() {
+ let global = new WebAssembly.Global({value: 'i32', mutable: true}, 1);
+ let builder = new WasmModuleBuilder();
+ builder.addGlobal(kWasmI32, true).exportAs('i32');
+ builder.addImportedGlobal("mod", "g", kWasmI32, true);
+ builder.instantiate({mod: {g: global}});
+})();
diff --git a/deps/v8/test/mjsunit/wasm/import-table.js b/deps/v8/test/mjsunit/wasm/import-table.js
new file mode 100644
index 0000000000..bb8bf7807b
--- /dev/null
+++ b/deps/v8/test/mjsunit/wasm/import-table.js
@@ -0,0 +1,244 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --expose-wasm
+
+load("test/mjsunit/wasm/wasm-constants.js");
+load("test/mjsunit/wasm/wasm-module-builder.js");
+
+function addConstFunc(builder, val) {
+ return builder.addFunction("const" + val, kSig_i_v)
+ .addBody(wasmI32Const(val)).index;
+}
+
+function addSigs(builder, pad) {
+ for (let i = 0; i < pad; i++) {
+ let params = [];
+ for (let j = 0; j < i; j++) params.push(kWasmF32);
+ builder.addType(makeSig(params, []));
+ }
+
+ return { i_v: builder.addType(kSig_i_v) };
+}
+
+let kTableSize = 50;
+
+(function TestAliasedImportedTable() {
+ print(arguments.callee.name);
+
+ {
+ let builder = new WasmModuleBuilder();
+ let signums = addSigs(builder, 1);
+
+ builder.addImportedTable("m", "table", kTableSize, kTableSize);
+ let f15 = addConstFunc(builder, 15);
+ let call = builder.addFunction("call", kSig_i_i)
+ .addBody([
+ kExprGetLocal, 0,
+ kExprCallIndirect, signums.i_v, kTableZero
+ ])
+ .exportAs("call");
+ let f17 = addConstFunc(builder, 17);
+ builder.addExport("f15", f15);
+ builder.addExport("f17", f17);
+ builder.addFunctionTableInit(15, false, [f15], true);
+ builder.addFunctionTableInit(1, false, [call.index], true);
+
+ var mod1 = builder.toModule();
+ }
+
+ {
+ let builder = new WasmModuleBuilder();
+ let signums = addSigs(builder, 5); // ensure different sigids
+
+ builder.addImportedTable("m", "table", kTableSize, kTableSize);
+ let f15 = builder.addImport("m", "f15", kSig_i_v);
+ let f17 = builder.addImport("m", "f17", kSig_i_v);
+ let f21 = addConstFunc(builder, 21);
+ let call = builder.addFunction("call", kSig_i_i)
+ .addBody([
+ kExprGetLocal, 0,
+ kExprCallIndirect, signums.i_v, kTableZero
+ ])
+ .exportAs("call");
+ let f26 = addConstFunc(builder, 26);
+ builder.addFunctionTableInit(17, false, [f17], true);
+ builder.addFunctionTableInit(21, false, [f21], true);
+ builder.addFunctionTableInit(26, false, [f26], true);
+ builder.addFunctionTableInit(5, false, [call.index], true);
+
+ var mod2 = builder.toModule();
+ }
+
+ var table = new WebAssembly.Table({initial: kTableSize,
+ maximum: kTableSize, element: "anyfunc"});
+ var i1 = new WebAssembly.Instance(mod1, {m: {table: table}});
+
+ var i2 = new WebAssembly.Instance(mod2,
+ {m: {table: table, f15: i1.exports.f15, f17: i1.exports.f17}});
+
+ for (i of [15, 17, 21, 26]) {
+ print(i);
+ assertEquals(i, i1.exports.call(i));
+ assertEquals(i, i2.exports.call(i));
+ }
+ for (i of [0, 1, 5, 16]) {
+ assertThrows(() => i1.exports.call(i));
+ assertThrows(() => i2.exports.call(i));
+ }
+})();
+
+function addConstFuncUsingGlobal(builder, val) {
+ let g = builder.addGlobal(kWasmI32, false);
+ g.init = val;
+ return builder.addFunction("global" + val, kSig_i_v)
+ .addBody([kExprGetGlobal, g.index]).index;
+}
+
+(function TestAliasedImportedTableInstanceGlobals() {
+ print(arguments.callee.name);
+
+ {
+ let builder = new WasmModuleBuilder();
+ let signums = addSigs(builder, 1);
+
+ builder.addImportedTable("m", "table", kTableSize, kTableSize);
+ let f14 = addConstFuncUsingGlobal(builder, 14);
+ let call = builder.addFunction("call", kSig_i_i)
+ .addBody([
+ kExprGetLocal, 0,
+ kExprCallIndirect, signums.i_v, kTableZero
+ ])
+ .exportAs("call");
+ let f18 = addConstFuncUsingGlobal(builder, 18);
+ builder.addExport("f14", f14);
+ builder.addExport("f18", f18);
+ builder.addFunctionTableInit(14, false, [f14], true);
+ builder.addFunctionTableInit(1, false, [call.index], true);
+
+ var mod1 = builder.toModule();
+ }
+
+ {
+ let builder = new WasmModuleBuilder();
+ let signums = addSigs(builder, 3); // ensure different sigids
+
+ builder.addImportedTable("m", "table", kTableSize, kTableSize);
+ let f14 = builder.addImport("m", "f14", kSig_i_v);
+ let f18 = builder.addImport("m", "f18", kSig_i_v);
+ let f22 = addConstFuncUsingGlobal(builder, 22);
+ let call = builder.addFunction("call", kSig_i_i)
+ .addBody([
+ kExprGetLocal, 0,
+ kExprCallIndirect, signums.i_v, kTableZero
+ ])
+ .exportAs("call");
+ let f28 = addConstFuncUsingGlobal(builder, 28);
+ builder.addFunctionTableInit(18, false, [f18], true);
+ builder.addFunctionTableInit(22, false, [f22], true);
+ builder.addFunctionTableInit(28, false, [f28], true);
+ builder.addFunctionTableInit(5, false, [call.index], true);
+
+ var mod2 = builder.toModule();
+ }
+
+ var table = new WebAssembly.Table({initial: kTableSize,
+ maximum: kTableSize, element: "anyfunc"});
+ var i1 = new WebAssembly.Instance(mod1, {m: {table: table}});
+
+ var i2 = new WebAssembly.Instance(mod2,
+ {m: {table: table, f14: i1.exports.f14, f18: i1.exports.f18}});
+
+ for (i of [14, 18, 22, 28]) {
+ print(i);
+ assertEquals(i, i1.exports.call(i));
+ assertEquals(i, i2.exports.call(i));
+ }
+ for (i of [0, 1, 5, 16]) {
+ assertThrows(() => i1.exports.call(i));
+ assertThrows(() => i2.exports.call(i));
+ }
+})();
+
+
+function addConstFuncUsingMemory(builder, val) {
+ var addr = builder.address;
+ builder.address += 8;
+ var bytes = [val & 0xff, (val>>8) & 0xff, (val>>16) & 0xff, (val>>24) & 0xff];
+ builder.addDataSegment(addr, bytes);
+ return builder.addFunction("mem" + val, kSig_i_v)
+ .addBody([
+ ...wasmI32Const(addr),
+ kExprI32LoadMem, 0, 0
+ ]).index;
+}
+
+(function TestAliasedImportedTableInstanceMemories() {
+ print(arguments.callee.name);
+
+ {
+ let builder = new WasmModuleBuilder();
+ builder.address = 8;
+ let signums = addSigs(builder, 1);
+
+ builder.addMemory(1, 1, false);
+ builder.addImportedTable("m", "table", kTableSize, kTableSize);
+ let f13 = addConstFuncUsingMemory(builder, 13);
+ let call = builder.addFunction("call", kSig_i_i)
+ .addBody([
+ kExprGetLocal, 0,
+ kExprCallIndirect, signums.i_v, kTableZero
+ ])
+ .exportAs("call");
+ let f19 = addConstFuncUsingMemory(builder, 19);
+ builder.addExport("f13", f13);
+ builder.addExport("f19", f19);
+ builder.addFunctionTableInit(13, false, [f13], true);
+ builder.addFunctionTableInit(1, false, [call.index], true);
+
+ var mod1 = builder.toModule();
+ }
+
+ {
+ let builder = new WasmModuleBuilder();
+ builder.address = 8;
+ let signums = addSigs(builder, 4); // ensure different sigids
+
+ builder.addMemory(1, 1, false);
+ builder.addImportedTable("m", "table", kTableSize, kTableSize);
+ let f13 = builder.addImport("m", "f13", kSig_i_v);
+ let f19 = builder.addImport("m", "f19", kSig_i_v);
+ let f23 = addConstFuncUsingMemory(builder, 23);
+ let call = builder.addFunction("call", kSig_i_i)
+ .addBody([
+ kExprGetLocal, 0,
+ kExprCallIndirect, signums.i_v, kTableZero
+ ])
+ .exportAs("call");
+ let f29 = addConstFuncUsingMemory(builder, 29);
+ builder.addFunctionTableInit(19, false, [f19], true);
+ builder.addFunctionTableInit(23, false, [f23], true);
+ builder.addFunctionTableInit(29, false, [f29], true);
+ builder.addFunctionTableInit(5, false, [call.index], true);
+
+ var mod2 = builder.toModule();
+ }
+
+ var table = new WebAssembly.Table({initial: kTableSize,
+ maximum: kTableSize, element: "anyfunc"});
+ var i1 = new WebAssembly.Instance(mod1, {m: {table: table}});
+
+ var i2 = new WebAssembly.Instance(mod2,
+ {m: {table: table, f13: i1.exports.f13, f19: i1.exports.f19}});
+
+ for (i of [13, 19, 23, 29]) {
+ print(i);
+ assertEquals(i, i1.exports.call(i));
+ assertEquals(i, i2.exports.call(i));
+ }
+ for (i of [0, 1, 5, 16]) {
+ assertThrows(() => i1.exports.call(i));
+ assertThrows(() => i2.exports.call(i));
+ }
+})();
diff --git a/deps/v8/test/mjsunit/wasm/interpreter.js b/deps/v8/test/mjsunit/wasm/interpreter.js
index a57498b9a8..0bf3f8610b 100644
--- a/deps/v8/test/mjsunit/wasm/interpreter.js
+++ b/deps/v8/test/mjsunit/wasm/interpreter.js
@@ -318,6 +318,31 @@ function checkStack(stack, expected_lines) {
}
})();
+(function testImportExportedFunction() {
+ // See https://crbug.com/860392.
+ print(arguments.callee.name);
+ let instance0 = (() => {
+ let builder = new WasmModuleBuilder();
+ builder.addFunction('f11', kSig_i_v).addBody(wasmI32Const(11)).exportFunc();
+ builder.addFunction('f17', kSig_i_v).addBody(wasmI32Const(17)).exportFunc();
+ return builder.instantiate();
+ })();
+
+ let builder = new WasmModuleBuilder();
+ let sig_i_v = builder.addType(kSig_i_v);
+ let f11_imp = builder.addImport('q', 'f11', sig_i_v);
+ let f17_imp = builder.addImport('q', 'f17', sig_i_v);
+ let add = builder.addFunction('add', sig_i_v).addBody([
+ kExprCallFunction, f11_imp, // call f11
+ kExprCallFunction, f17_imp, // call f17
+ kExprI32Add // i32.add
+ ]).exportFunc();
+ let instance = builder.instantiate(
+ {q: {f11: instance0.exports.f11, f17: instance0.exports.f17}});
+
+ assertEquals(28, instance.exports.add());
+})();
+
(function testInfiniteRecursion() {
print(arguments.callee.name);
var builder = new WasmModuleBuilder();
diff --git a/deps/v8/test/mjsunit/wasm/liftoff.js b/deps/v8/test/mjsunit/wasm/liftoff.js
index 070c6afa26..8570d3d523 100644
--- a/deps/v8/test/mjsunit/wasm/liftoff.js
+++ b/deps/v8/test/mjsunit/wasm/liftoff.js
@@ -3,7 +3,7 @@
// found in the LICENSE file.
// Flags: --allow-natives-syntax --liftoff --wasm-async-compilation
-// Flags: --no-future
+// Flags: --no-future --no-wasm-tier-up
load('test/mjsunit/wasm/wasm-constants.js');
load('test/mjsunit/wasm/wasm-module-builder.js');
diff --git a/deps/v8/test/mjsunit/wasm/module-memory.js b/deps/v8/test/mjsunit/wasm/module-memory.js
index e9d2bb954d..de05dd4657 100644
--- a/deps/v8/test/mjsunit/wasm/module-memory.js
+++ b/deps/v8/test/mjsunit/wasm/module-memory.js
@@ -174,22 +174,28 @@ function testOOBThrows() {
testOOBThrows();
function testAddressSpaceLimit() {
- // 1TiB, see wasm-memory.h
- const kMaxAddressSpace = 1 * 1024 * 1024 * 1024 * 1024;
+ // 1TiB + 4 GiB, see wasm-memory.h
+ const kMaxAddressSpace = 1 * 1024 * 1024 * 1024 * 1024
+ + 4 * 1024 * 1024 * 1024;
const kAddressSpacePerMemory = 8 * 1024 * 1024 * 1024;
+ let last_memory;
try {
let memories = [];
let address_space = 0;
while (address_space <= kMaxAddressSpace + 1) {
- memories.push(new WebAssembly.Memory({initial: 1}));
+ last_memory = new WebAssembly.Memory({initial: 1})
+ memories.push(last_memory);
address_space += kAddressSpacePerMemory;
}
} catch (e) {
assertTrue(e instanceof RangeError);
return;
}
- failWithMessage("allocated too much memory");
+ // If we get here it's because our fallback behavior is working. We may not
+ // be using the fallback, in which case we would have thrown a RangeError in
+ // the previous block.
+ assertTrue(!%WasmMemoryHasFullGuardRegion(last_memory));
}
if(%IsWasmTrapHandlerEnabled()) {
diff --git a/deps/v8/test/mjsunit/wasm/mutable-globals.js b/deps/v8/test/mjsunit/wasm/mutable-globals.js
index 6d2d29dad0..7a94520a21 100644
--- a/deps/v8/test/mjsunit/wasm/mutable-globals.js
+++ b/deps/v8/test/mjsunit/wasm/mutable-globals.js
@@ -21,11 +21,11 @@ function assertGlobalIsValid(global) {
assertThrows(() => new WebAssembly.Global(""), TypeError);
assertThrows(() => new WebAssembly.Global({}), TypeError);
- assertThrows(() => new WebAssembly.Global({type: 'foo'}), TypeError);
- assertThrows(() => new WebAssembly.Global({type: 'i64'}), TypeError);
+ assertThrows(() => new WebAssembly.Global({value: 'foo'}), TypeError);
+ assertThrows(() => new WebAssembly.Global({value: 'i64'}), TypeError);
for (let type of ['i32', 'f32', 'f64']) {
- assertGlobalIsValid(new WebAssembly.Global({type}));
+ assertGlobalIsValid(new WebAssembly.Global({value: type}));
}
})();
@@ -215,7 +215,7 @@ const f64_values = [
];
function GlobalI32(value, mutable = false) {
- return new WebAssembly.Global({type: 'i32', mutable}, value);
+ return new WebAssembly.Global({value: 'i32', mutable}, value);
}
function GlobalI64(mutable = false) {
@@ -227,11 +227,11 @@ function GlobalI64(mutable = false) {
}
function GlobalF32(value, mutable = false) {
- return new WebAssembly.Global({type: 'f32', mutable}, value);
+ return new WebAssembly.Global({value: 'f32', mutable}, value);
}
function GlobalF64(value, mutable = false) {
- return new WebAssembly.Global({type: 'f64', mutable}, value);
+ return new WebAssembly.Global({value: 'f64', mutable}, value);
}
(function TestDefaultValue() {
diff --git a/deps/v8/test/mjsunit/wasm/print-code.js b/deps/v8/test/mjsunit/wasm/print-code.js
new file mode 100644
index 0000000000..2d35a27559
--- /dev/null
+++ b/deps/v8/test/mjsunit/wasm/print-code.js
@@ -0,0 +1,32 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --allow-natives-syntax --print-wasm-code
+
+// Just test that printing the code of the following wasm modules does not
+// crash.
+
+load('test/mjsunit/wasm/wasm-constants.js');
+load('test/mjsunit/wasm/wasm-module-builder.js');
+
+(function print_deserialized_code() {
+ // https://crbug.com/849656
+ print(arguments.callee.name);
+ var builder = new WasmModuleBuilder();
+ builder.addImport('', 'imp', kSig_i_v);
+
+ builder.addFunction('main', kSig_i_v)
+ .addBody([
+ kExprCallFunction,
+ 0,
+ ])
+ .exportFunc();
+
+ var wire_bytes = builder.toBuffer();
+ var module = new WebAssembly.Module(wire_bytes);
+ print('serializing');
+ var buff = %SerializeWasmModule(module);
+ print('deserializing');
+ module = %DeserializeWasmModule(buff, wire_bytes);
+})();
diff --git a/deps/v8/test/mjsunit/wasm/serialize-lazy-module.js b/deps/v8/test/mjsunit/wasm/serialize-lazy-module.js
new file mode 100644
index 0000000000..98998c6f43
--- /dev/null
+++ b/deps/v8/test/mjsunit/wasm/serialize-lazy-module.js
@@ -0,0 +1,68 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --wasm-lazy-compilation --allow-natives-syntax --expose-gc
+
+load('test/mjsunit/wasm/wasm-constants.js');
+load('test/mjsunit/wasm/wasm-module-builder.js');
+
+(function SerializeUncompiledModule() {
+ print(arguments.callee.name);
+ const [wire_bytes, i1, buff] = (function GenerateInstance() {
+ const builder = new WasmModuleBuilder();
+
+ // Add 20 functions.
+ for (let i = 0; i < 20; ++i) {
+ builder.addFunction('f' + i, kSig_i_i)
+ .addBody([kExprI32Const, i])
+ .exportFunc();
+ }
+
+ const wire_bytes = builder.toBuffer();
+ const module = new WebAssembly.Module(wire_bytes);
+ const buff = %SerializeWasmModule(module);
+ return [wire_bytes, new WebAssembly.Instance(module), buff];
+ })();
+
+ gc();
+ const module = %DeserializeWasmModule(buff, wire_bytes);
+
+ const i2 = new WebAssembly.Instance(module);
+
+ assertEquals(13, i2.exports.f13());
+ assertEquals(11, i1.exports.f11());
+})();
+
+(function SerializePartlyCompiledModule() {
+ print(arguments.callee.name);
+ const [wire_bytes, i1, buff] = (function GenerateInstance() {
+ const builder = new WasmModuleBuilder();
+
+ // Add 20 functions.
+ for (let i = 0; i < 20; ++i) {
+ builder.addFunction('f' + i, kSig_i_i)
+ .addBody([kExprI32Const, i])
+ .exportFunc();
+ }
+
+ const wire_bytes = builder.toBuffer();
+ const module = new WebAssembly.Module(wire_bytes);
+ const buff = %SerializeWasmModule(module);
+ const i1 = new WebAssembly.Instance(module);
+
+ assertEquals(2, i1.exports.f2());
+ assertEquals(11, i1.exports.f11());
+
+ return [wire_bytes, i1, buff];
+ })();
+
+ gc();
+ const module = %DeserializeWasmModule(buff, wire_bytes);
+
+ const i2 = new WebAssembly.Instance(module);
+
+ assertEquals(13, i2.exports.f13());
+ assertEquals(11, i1.exports.f11());
+ assertEquals(9, i1.exports.f9());
+})();
diff --git a/deps/v8/test/mjsunit/wasm/tier-up-testing-flag.js b/deps/v8/test/mjsunit/wasm/tier-up-testing-flag.js
new file mode 100644
index 0000000000..1b2a11e0ca
--- /dev/null
+++ b/deps/v8/test/mjsunit/wasm/tier-up-testing-flag.js
@@ -0,0 +1,46 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --allow-natives-syntax --liftoff --no-future --no-wasm-tier-up
+// Compile functions 0 and 2 with Turbofan, the rest with Liftoff:
+// Flags: --wasm-tier-mask-for-testing=5
+
+load('test/mjsunit/wasm/wasm-constants.js');
+load('test/mjsunit/wasm/wasm-module-builder.js');
+
+const num_functions = 5;
+
+function create_builder() {
+ const builder = new WasmModuleBuilder();
+ for (let i = 0; i < num_functions; ++i) {
+ builder.addFunction('f' + i, kSig_i_v)
+ .addBody(wasmI32Const(i))
+ .exportFunc();
+ }
+ return builder;
+}
+
+function check(instance) {
+ for (let i = 0; i < num_functions; ++i) {
+ const expect_liftoff = i != 0 && i != 2;
+ assertEquals(
+ expect_liftoff, %IsLiftoffFunction(instance.exports['f' + i]),
+ 'function ' + i);
+ }
+}
+
+(function testTierTestingFlag() {
+ print(arguments.callee.name);
+ const instance = create_builder().instantiate();
+ check(instance);
+})();
+
+
+async function testTierTestingFlag() {
+ print(arguments.callee.name);
+ const instance = await create_builder().asyncInstantiate();
+ check(instance);
+}
+
+assertPromiseResult(testTierTestingFlag());
diff --git a/deps/v8/test/mjsunit/wasm/trap-handler-fallback.js b/deps/v8/test/mjsunit/wasm/trap-handler-fallback.js
new file mode 100644
index 0000000000..26296696c5
--- /dev/null
+++ b/deps/v8/test/mjsunit/wasm/trap-handler-fallback.js
@@ -0,0 +1,202 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --allow-natives-syntax --wasm-trap-handler-fallback
+
+load("test/mjsunit/wasm/wasm-constants.js");
+load("test/mjsunit/wasm/wasm-module-builder.js");
+
+// Make sure we can get at least one guard region if the trap handler is enabled.
+(function CanGetGuardRegionTest() {
+ print("CanGetGuardRegionTest()");
+ const memory = new WebAssembly.Memory({initial: 1});
+ if (%IsWasmTrapHandlerEnabled()) {
+ assertTrue(%WasmMemoryHasFullGuardRegion(memory));
+ }
+})();
+
+// This test verifies that when we have too many outstanding memories to get
+// another fast memory, we fall back on bounds checking rather than failing.
+(function TrapHandlerFallbackTest() {
+ print("TrapHandlerFallbackTest()");
+ let builder = new WasmModuleBuilder();
+ builder.addImportedMemory("mod", "imported_mem", 1);
+ builder.addFunction("load", kSig_i_i)
+ .addBody([kExprGetLocal, 0, kExprI32LoadMem, 0, 0])
+ .exportFunc();
+ let memory;
+ let instance;
+ let instances = [];
+ let fallback_occurred = false;
+ // Create 135 instances. V8 limits wasm to slightly more than 1 TiB of address
+ // space per isolate (see kAddressSpaceLimit in wasm-memory.cc), which allows
+ // up to 128 fast memories. As long as we create more than that, we should
+ // trigger the fallback behavior.
+ for (var i = 0; i < 135; i++) {
+ memory = new WebAssembly.Memory({initial: 1});
+ instance = builder.instantiate({mod: {imported_mem: memory}});
+ instances.push(instance);
+
+ assertTraps(kTrapMemOutOfBounds, () => instance.exports.load(1 << 20));
+
+ fallback_occurred = fallback_occurred || !%WasmMemoryHasFullGuardRegion(memory);
+ if (fallback_occurred) {
+ break;
+ }
+ }
+ assertTrue(fallback_occurred);
+})();
+
+(function TrapHandlerFallbackTestZeroInitialMemory() {
+ print("TrapHandlerFallbackTestZeroInitialMemory()");
+ let builder = new WasmModuleBuilder();
+ builder.addImportedMemory("mod", "imported_mem", 0);
+ builder.addFunction("load", kSig_i_i)
+ .addBody([kExprGetLocal, 0, kExprI32LoadMem, 0, 0])
+ .exportFunc();
+ let memory;
+ let instance;
+ let instances = [];
+ let fallback_occurred = false;
+ // Create 135 instances. V8 limits wasm to slightly more than 1 TiB of address
+ // space per isolate (see kAddressSpaceLimit in wasm-memory.cc), which allows
+ // up to 128 fast memories. As long as we create more than that, we should
+ // trigger the fallback behavior.
+ for (var i = 0; i < 135; i++) {
+ memory = new WebAssembly.Memory({initial: 1});
+ instance = builder.instantiate({mod: {imported_mem: memory}});
+ instances.push(instance);
+
+ assertTraps(kTrapMemOutOfBounds, () => instance.exports.load(1 << 20));
+
+ fallback_occurred = fallback_occurred || !%WasmMemoryHasFullGuardRegion(memory);
+ if (fallback_occurred) {
+ break;
+ }
+ }
+ assertTrue(fallback_occurred);
+})();
+
+(function TrapHandlerFallbackTestGrowFromZero() {
+ print("TrapHandlerFallbackTestGrowFromZero()");
+ // Create a zero-length memory to make sure the empty backing store is created.
+ const zero_memory = new WebAssembly.Memory({initial: 0});
+
+ // Create enough memories to overflow the address space limit
+ let memories = []
+ for (var i = 0; i < 135; i++) {
+ memories.push(new WebAssembly.Memory({initial: 1}));
+ }
+
+ // Create a memory for the module. We'll grow this later.
+ let memory = new WebAssembly.Memory({initial: 0});
+
+ let builder = new WasmModuleBuilder();
+ builder.addImportedMemory("mod", "imported_mem", 0);
+ builder.addFunction("load", kSig_i_i)
+ .addBody([kExprGetLocal, 0, kExprI32LoadMem, 0, 0])
+ .exportFunc();
+
+ instance = builder.instantiate({mod: {imported_mem: memory}});
+
+ assertTraps(kTrapMemOutOfBounds, () => instance.exports.load(1 << 20));
+
+ try {
+ memory.grow(1);
+ } catch(e) {
+ if (typeof e == typeof new RangeError) {
+ return;
+ }
+ throw e;
+ }
+
+ assertTraps(kTrapMemOutOfBounds, () => instance.exports.load(1 << 20));
+})();
+
+// Like TrapHandlerFallbackTest, but allows the module to be reused, so we only
+// have to recompile once.
+(function TrapHandlerFallbackTestReuseModule() {
+ print("TrapHandlerFallbackTestReuseModule()");
+ let builder = new WasmModuleBuilder();
+ builder.addImportedMemory("mod", "imported_mem", 1);
+ builder.addFunction("load", kSig_i_i)
+ .addBody([kExprGetLocal, 0, kExprI32LoadMem, 0, 0])
+ .exportFunc();
+ let memory;
+ let instance;
+ let instances = [];
+ let fallback_occurred = false;
+ // Create 135 instances. V8 limits wasm to slightly more than 1 TiB of address
+ // space per isolate (see kAddressSpaceLimit in wasm-memory.cc), which allows
+ // up to 128 fast memories. As long as we create more than that, we should
+ // trigger the fallback behavior.
+ const module = builder.toModule();
+ for (var i = 0; i < 135; i++) {
+ memory = new WebAssembly.Memory({initial: 1});
+ instance = new WebAssembly.Instance(module, {mod: {imported_mem: memory}});
+ instances.push(instance);
+
+ assertTraps(kTrapMemOutOfBounds, () => instance.exports.load(1 << 20));
+
+ fallback_occurred = fallback_occurred || !%WasmMemoryHasFullGuardRegion(memory);
+ if (fallback_occurred) {
+ break;
+ }
+ }
+ assertTrue(fallback_occurred);
+})();
+
+// Make sure that a bounds checked instance still works when calling an
+// imported unchecked function.
+(function CallIndirectImportTest() {
+ print("CallIndirectImportTest()");
+ // Create an unchecked instance that calls a function through an indirect
+ // table.
+ const instance_a = (() => {
+ const builder = new WasmModuleBuilder();
+ builder.addMemory(1, 1, false);
+ builder.addFunction("read_mem", kSig_i_i)
+ .addBody([
+ kExprGetLocal, 0,
+ kExprI32LoadMem, 0, 0
+ ]).exportAs("read_mem");
+ return builder.instantiate();
+ })();
+
+ // Create new memories until we get one that is unguarded
+ let memories = [];
+ let memory;
+ for (var i = 0; i < 135; i++) {
+ memory = new WebAssembly.Memory({initial: 1});
+ memories.push(memory);
+ if (!%WasmMemoryHasFullGuardRegion(memory)) {
+ break;
+ }
+ }
+ assertFalse(%WasmMemoryHasFullGuardRegion(memory));
+
+ // create a module that imports a function through a table
+ const instance_b = (() => {
+ const builder = new WasmModuleBuilder();
+ builder.addFunction("main", kSig_i_i)
+ .addBody([
+ kExprGetLocal, 0,
+ kExprI32Const, 0,
+ kExprCallIndirect, 0, kTableZero
+ ]).exportAs("main");
+ builder.addImportedTable("env", "table", 1, 1);
+ const module = new WebAssembly.Module(builder.toBuffer());
+ const table = new WebAssembly.Table({
+ element: "anyfunc",
+ initial: 1, maximum: 1
+ });
+ // Hook the new instance's export into the old instance's table.
+ table.set(0, instance_a.exports.read_mem);
+ return new WebAssembly.Instance(module, {'env': { 'table': table }});
+ })();
+
+ // Make sure we get an out of bounds still.
+ assertTraps(kTrapMemOutOfBounds, () => instance_b.exports.main(100000));
+
+})();
diff --git a/deps/v8/test/mjsunit/wasm/worker-memory.js b/deps/v8/test/mjsunit/wasm/worker-memory.js
index 6d96e7ba36..e2a8cf8857 100644
--- a/deps/v8/test/mjsunit/wasm/worker-memory.js
+++ b/deps/v8/test/mjsunit/wasm/worker-memory.js
@@ -67,3 +67,19 @@ let workerHelpers =
assertEquals("OK", worker.getMessage());
worker.terminate();
})();
+
+(function TestTwoWorkers() {
+ let workerScript = workerHelpers +
+ `onmessage = function(memory) {
+ assertIsWasmMemory(memory, 65536);
+ postMessage("OK");
+ };`;
+
+ let workers = [new Worker(workerScript), new Worker(workerScript)];
+ let memory = new WebAssembly.Memory({initial: 1, maximum: 2, shared: true});
+ for (let worker of workers) {
+ worker.postMessage(memory);
+ assertEquals("OK", worker.getMessage());
+ worker.terminate();
+ }
+})();
diff --git a/deps/v8/test/mjsunit/wasm/worker-module.js b/deps/v8/test/mjsunit/wasm/worker-module.js
new file mode 100644
index 0000000000..00615b8434
--- /dev/null
+++ b/deps/v8/test/mjsunit/wasm/worker-module.js
@@ -0,0 +1,34 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --no-wasm-disable-structured-cloning
+
+load("test/mjsunit/wasm/wasm-constants.js");
+load("test/mjsunit/wasm/wasm-module-builder.js");
+
+(function TestPostModule() {
+ let builder = new WasmModuleBuilder();
+ builder.addFunction("add", kSig_i_ii)
+ .addBody([kExprGetLocal, 0, kExprGetLocal, 1, kExprI32Add])
+ .exportFunc();
+
+ let module = builder.toModule();
+
+ let workerScript = `
+ onmessage = function(module) {
+ try {
+ let instance = new WebAssembly.Instance(module);
+ let result = instance.exports.add(40, 2);
+ postMessage(result);
+ } catch(e) {
+ postMessage('ERROR: ' + e);
+ }
+ }
+ `;
+
+ let worker = new Worker(workerScript);
+ worker.postMessage(module);
+ assertEquals(42, worker.getMessage());
+ worker.terminate();
+})();