From 586db2414a338e1bf6eaf6e672a3adc7ce309f6a Mon Sep 17 00:00:00 2001 From: MichaĆ«l Zasso Date: Fri, 7 Sep 2018 17:07:13 +0200 Subject: deps: update V8 to 6.9.427.22 PR-URL: https://github.com/nodejs/node/pull/21983 Reviewed-By: Refael Ackermann Reviewed-By: Gus Caplan Reviewed-By: Ujjwal Sharma Reviewed-By: Matteo Collina --- deps/v8/test/mjsunit/allocation-site-info.js | 6 + deps/v8/test/mjsunit/apply.js | 1 + deps/v8/test/mjsunit/array-constructor.js | 51 +- deps/v8/test/mjsunit/array-sort.js | 77 +- deps/v8/test/mjsunit/async-hooks/api-methods.js | 76 + .../test/mjsunit/async-hooks/async-await-tree.js | 74 + .../test/mjsunit/async-hooks/chained-promises.js | 48 + .../v8/test/mjsunit/async-hooks/execution-order.js | 65 + .../mjsunit/async-hooks/promises-async-await.js | 70 + deps/v8/test/mjsunit/code-coverage-utils.js | 2 +- deps/v8/test/mjsunit/compiler/alloc-number.js | 35 +- deps/v8/test/mjsunit/compiler/array-species.js | 33 + deps/v8/test/mjsunit/compiler/dataview-get.js | 173 ++ deps/v8/test/mjsunit/compiler/dataview-set.js | 133 + deps/v8/test/mjsunit/compiler/object-create.js | 27 + deps/v8/test/mjsunit/compiler/osr-nested.js | 11 +- deps/v8/test/mjsunit/compiler/osr-one.js | 36 +- deps/v8/test/mjsunit/compiler/osr-two.js | 38 +- deps/v8/test/mjsunit/compiler/promise-species.js | 29 + deps/v8/test/mjsunit/es6/dataview-length.js | 7 + .../mjsunit/es6/typedarray-keyedstore-tonumber.js | 69 + deps/v8/test/mjsunit/es6/typedarray-sort.js | 1 + .../v8/test/mjsunit/es8/async-await-interleaved.js | 61 + deps/v8/test/mjsunit/generated-transition-stub.js | 67 +- deps/v8/test/mjsunit/harmony/array-flat-species.js | 31 + deps/v8/test/mjsunit/harmony/array-flat.js | 65 + .../test/mjsunit/harmony/array-flatMap-species.js | 31 + deps/v8/test/mjsunit/harmony/array-flatMap.js | 174 +- deps/v8/test/mjsunit/harmony/array-flatten.js | 38 - .../test/mjsunit/harmony/async-generators-basic.js | 25 +- deps/v8/test/mjsunit/harmony/bigint/dataview.js | 10 + .../harmony/bigintarray-keyedstore-tobigint.js | 64 + deps/v8/test/mjsunit/harmony/function-tostring.js | 24 + deps/v8/test/mjsunit/harmony/modules-import-9.js | 2 +- .../harmony/optional-catch-binding-breaks.js | 2 - .../test/mjsunit/harmony/optional-catch-binding.js | 2 - .../mjsunit/harmony/promise-prototype-finally.js | 2 +- .../test/mjsunit/harmony/regexp-named-captures.js | 2 +- .../test/mjsunit/harmony/regexp-property-binary.js | 2 - .../mjsunit/harmony/regexp-property-char-class.js | 2 - .../mjsunit/harmony/regexp-property-disabled.js | 18 - .../mjsunit/harmony/regexp-property-enumerated.js | 2 - .../mjsunit/harmony/regexp-property-exact-match.js | 2 - .../harmony/regexp-property-general-category.js | 2 - .../mjsunit/harmony/regexp-property-invalid.js | 2 - .../test/mjsunit/harmony/regexp-property-lu-ui0.js | 1 - .../test/mjsunit/harmony/regexp-property-lu-ui1.js | 1 - .../test/mjsunit/harmony/regexp-property-lu-ui2.js | 1 - .../test/mjsunit/harmony/regexp-property-lu-ui3.js | 1 - .../test/mjsunit/harmony/regexp-property-lu-ui4.js | 1 - .../test/mjsunit/harmony/regexp-property-lu-ui5.js | 1 - .../test/mjsunit/harmony/regexp-property-lu-ui6.js | 1 - .../test/mjsunit/harmony/regexp-property-lu-ui7.js | 1 - .../test/mjsunit/harmony/regexp-property-lu-ui8.js | 1 - .../test/mjsunit/harmony/regexp-property-lu-ui9.js | 1 - .../harmony/regexp-property-script-extensions.js | 3044 +++----------------- .../mjsunit/harmony/regexp-property-scripts.js | 2 - .../mjsunit/harmony/regexp-property-special.js | 2 - deps/v8/test/mjsunit/harmony/symbol-description.js | 53 + deps/v8/test/mjsunit/ignition/throw-if-hole.js | 2 +- deps/v8/test/mjsunit/ignition/throw-if-not-hole.js | 6 +- .../mjsunit/ignition/throw-super-not-called.js | 2 +- .../mjsunit/intl-numberformat-formattoparts.js | 6 +- deps/v8/test/mjsunit/lexicographic-compare.js | 62 + deps/v8/test/mjsunit/mjsunit.js | 4 +- deps/v8/test/mjsunit/mjsunit.status | 80 +- deps/v8/test/mjsunit/object-keys.js | 58 + .../mjsunit/regexp-modifiers-autogenerated-i18n.js | 2 +- .../test/mjsunit/regexp-modifiers-autogenerated.js | 2 +- deps/v8/test/mjsunit/regress/regress-165637.js | 51 +- deps/v8/test/mjsunit/regress/regress-2185-2.js | 145 - deps/v8/test/mjsunit/regress/regress-298269.js | 35 +- deps/v8/test/mjsunit/regress/regress-2988.js | 39 - deps/v8/test/mjsunit/regress/regress-373283.js | 18 - deps/v8/test/mjsunit/regress/regress-705934.js | 4 +- deps/v8/test/mjsunit/regress/regress-747075.js | 9 +- deps/v8/test/mjsunit/regress/regress-7791.js | 120 + deps/v8/test/mjsunit/regress/regress-7893.js | 18 + deps/v8/test/mjsunit/regress/regress-793588.js | 2 - deps/v8/test/mjsunit/regress/regress-793793.js | 2 - deps/v8/test/mjsunit/regress/regress-800651.js | 8 +- deps/v8/test/mjsunit/regress/regress-843062-1.js | 18 + deps/v8/test/mjsunit/regress/regress-843062-2.js | 8 + deps/v8/test/mjsunit/regress/regress-843062-3.js | 10 + deps/v8/test/mjsunit/regress/regress-852258.js | 11 + deps/v8/test/mjsunit/regress/regress-852765.js | 17 + deps/v8/test/mjsunit/regress/regress-862433.js | 9 + deps/v8/test/mjsunit/regress/regress-863155.js | 10 + deps/v8/test/mjsunit/regress/regress-863810.js | 19 + .../test/mjsunit/regress/regress-crbug-217858.js | 32 +- .../test/mjsunit/regress/regress-crbug-410033.js | 7 - .../test/mjsunit/regress/regress-crbug-469480.js | 13 - .../test/mjsunit/regress/regress-crbug-491062.js | 2 +- .../test/mjsunit/regress/regress-crbug-505007-1.js | 18 - .../test/mjsunit/regress/regress-crbug-506443.js | 89 - .../test/mjsunit/regress/regress-crbug-582703.js | 8 - .../test/mjsunit/regress/regress-crbug-724153.js | 2 +- deps/v8/test/mjsunit/regress/regress-crbug-7907.js | 9 + .../test/mjsunit/regress/regress-crbug-848165.js | 9 + .../test/mjsunit/regress/regress-crbug-849024.js | 43 + .../test/mjsunit/regress/regress-crbug-850005.js | 11 + .../test/mjsunit/regress/regress-crbug-852592.js | 25 + .../test/mjsunit/regress/regress-crbug-854299.js | 27 + .../test/mjsunit/regress/regress-crbug-856095.js | 14 + .../test/mjsunit/regress/regress-crbug-859809.js | 21 + .../test/mjsunit/regress/regress-crbug-860788.js | 30 + .../test/mjsunit/regress/regress-crbug-862538.js | 13 + .../test/mjsunit/regress/regress-crbug-869313.js | 15 + deps/v8/test/mjsunit/regress/regress-deep-proto.js | 16 +- deps/v8/test/mjsunit/regress/wasm/regress-7785.js | 44 + deps/v8/test/mjsunit/regress/wasm/regress-7914.js | 18 + .../v8/test/mjsunit/regress/wasm/regress-799952.js | 23 + .../v8/test/mjsunit/regress/wasm/regress-808848.js | 18 +- .../v8/test/mjsunit/regress/wasm/regress-837417.js | 15 +- .../v8/test/mjsunit/regress/wasm/regress-853453.js | 18 + .../v8/test/mjsunit/regress/wasm/regress-854011.js | 47 + .../v8/test/mjsunit/regress/wasm/regress-854050.js | 28 + .../v8/test/mjsunit/regress/wasm/regress-864509.js | 62 + deps/v8/test/mjsunit/stack-traces-2.js | 17 - deps/v8/test/mjsunit/tools/profviz-test.default | 20 +- .../mjsunit/wasm/compiled-module-management.js | 27 +- .../mjsunit/wasm/compiled-module-serialization.js | 89 + .../test/mjsunit/wasm/default-liftoff-setting.js | 21 - deps/v8/test/mjsunit/wasm/export-global.js | 34 - deps/v8/test/mjsunit/wasm/export-mutable-global.js | 15 + deps/v8/test/mjsunit/wasm/globals.js | 8 +- deps/v8/test/mjsunit/wasm/import-mutable-global.js | 18 +- deps/v8/test/mjsunit/wasm/import-table.js | 244 ++ deps/v8/test/mjsunit/wasm/interpreter.js | 25 + deps/v8/test/mjsunit/wasm/liftoff.js | 2 +- deps/v8/test/mjsunit/wasm/module-memory.js | 14 +- deps/v8/test/mjsunit/wasm/mutable-globals.js | 12 +- deps/v8/test/mjsunit/wasm/print-code.js | 32 + deps/v8/test/mjsunit/wasm/serialize-lazy-module.js | 68 + deps/v8/test/mjsunit/wasm/tier-up-testing-flag.js | 46 + deps/v8/test/mjsunit/wasm/trap-handler-fallback.js | 202 ++ deps/v8/test/mjsunit/wasm/worker-memory.js | 16 + deps/v8/test/mjsunit/wasm/worker-module.js | 34 + 138 files changed, 3443 insertions(+), 3758 deletions(-) create mode 100644 deps/v8/test/mjsunit/async-hooks/api-methods.js create mode 100644 deps/v8/test/mjsunit/async-hooks/async-await-tree.js create mode 100644 deps/v8/test/mjsunit/async-hooks/chained-promises.js create mode 100644 deps/v8/test/mjsunit/async-hooks/execution-order.js create mode 100644 deps/v8/test/mjsunit/async-hooks/promises-async-await.js create mode 100644 deps/v8/test/mjsunit/compiler/array-species.js create mode 100644 deps/v8/test/mjsunit/compiler/dataview-get.js create mode 100644 deps/v8/test/mjsunit/compiler/dataview-set.js create mode 100644 deps/v8/test/mjsunit/compiler/object-create.js create mode 100644 deps/v8/test/mjsunit/compiler/promise-species.js create mode 100644 deps/v8/test/mjsunit/es6/dataview-length.js create mode 100644 deps/v8/test/mjsunit/es6/typedarray-keyedstore-tonumber.js create mode 100644 deps/v8/test/mjsunit/es8/async-await-interleaved.js create mode 100644 deps/v8/test/mjsunit/harmony/array-flat-species.js create mode 100644 deps/v8/test/mjsunit/harmony/array-flat.js create mode 100644 deps/v8/test/mjsunit/harmony/array-flatMap-species.js delete mode 100644 deps/v8/test/mjsunit/harmony/array-flatten.js create mode 100644 deps/v8/test/mjsunit/harmony/bigintarray-keyedstore-tobigint.js delete mode 100644 deps/v8/test/mjsunit/harmony/regexp-property-disabled.js create mode 100644 deps/v8/test/mjsunit/harmony/symbol-description.js create mode 100644 deps/v8/test/mjsunit/lexicographic-compare.js delete mode 100644 deps/v8/test/mjsunit/regress/regress-2185-2.js delete mode 100644 deps/v8/test/mjsunit/regress/regress-2988.js delete mode 100644 deps/v8/test/mjsunit/regress/regress-373283.js create mode 100644 deps/v8/test/mjsunit/regress/regress-7791.js create mode 100644 deps/v8/test/mjsunit/regress/regress-7893.js create mode 100644 deps/v8/test/mjsunit/regress/regress-843062-1.js create mode 100644 deps/v8/test/mjsunit/regress/regress-843062-2.js create mode 100644 deps/v8/test/mjsunit/regress/regress-843062-3.js create mode 100644 deps/v8/test/mjsunit/regress/regress-852258.js create mode 100644 deps/v8/test/mjsunit/regress/regress-852765.js create mode 100644 deps/v8/test/mjsunit/regress/regress-862433.js create mode 100644 deps/v8/test/mjsunit/regress/regress-863155.js create mode 100644 deps/v8/test/mjsunit/regress/regress-863810.js delete mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-410033.js delete mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-469480.js delete mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-505007-1.js delete mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-506443.js delete mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-582703.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-7907.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-848165.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-849024.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-850005.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-852592.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-854299.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-856095.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-859809.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-860788.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-862538.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-869313.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-7785.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-7914.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-799952.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-853453.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-854011.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-854050.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-864509.js delete mode 100644 deps/v8/test/mjsunit/wasm/default-liftoff-setting.js create mode 100644 deps/v8/test/mjsunit/wasm/import-table.js create mode 100644 deps/v8/test/mjsunit/wasm/print-code.js create mode 100644 deps/v8/test/mjsunit/wasm/serialize-lazy-module.js create mode 100644 deps/v8/test/mjsunit/wasm/tier-up-testing-flag.js create mode 100644 deps/v8/test/mjsunit/wasm/trap-handler-fallback.js create mode 100644 deps/v8/test/mjsunit/wasm/worker-module.js (limited to 'deps/v8/test/mjsunit') 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/async-hooks/chained-promises.js b/deps/v8/test/mjsunit/async-hooks/chained-promises.js new file mode 100644 index 0000000000..8b346530eb --- /dev/null +++ b/deps/v8/test/mjsunit/async-hooks/chained-promises.js @@ -0,0 +1,48 @@ +// 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 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-2988.js b/deps/v8/test/mjsunit/regress/regress-2988.js deleted file mode 100644 index 0311d2b76d..0000000000 --- a/deps/v8/test/mjsunit/regress/regress-2988.js +++ /dev/null @@ -1,39 +0,0 @@ -// 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. - -// Flags: --allow-natives-syntax --gc-global --throws - -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(); 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(); +})(); -- cgit v1.2.3