// GENERATED, DO NOT EDIT // file: arrayContains.js // Copyright (C) 2017 Ecma International. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description: | Verify that a subArray is contained within an array. defines: [arrayContains] ---*/ /** * @param {Array} array * @param {Array} subArray */ function arrayContains(array, subArray) { var found; for (var i = 0; i < subArray.length; i++) { found = false; for (var j = 0; j < array.length; j++) { if (subArray[i] === array[j]) { found = true; break; } } if (!found) { return false; } } return true; } // file: assertRelativeDateMs.js // Copyright (C) 2015 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description: | Verify that the given date object's Number representation describes the correct number of milliseconds since the Unix epoch relative to the local time zone (as interpreted at the specified date). defines: [assertRelativeDateMs] ---*/ /** * @param {Date} date * @param {Number} expectedMs */ function assertRelativeDateMs(date, expectedMs) { var actualMs = date.valueOf(); var localOffset = date.getTimezoneOffset() * 60000; if (actualMs - localOffset !== expectedMs) { $ERROR( 'Expected ' + date + ' to be ' + expectedMs + ' milliseconds from the Unix epoch' ); } } // file: byteConversionValues.js // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description: | Provide a list for original and expected values for different byte conversions. This helper is mostly used on tests for TypedArray and DataView, and each array from the expected values must match the original values array on every index containing its original value. defines: [byteConversionValues] ---*/ var byteConversionValues = { values: [ 127, // 2 ** 7 - 1 128, // 2 ** 7 32767, // 2 ** 15 - 1 32768, // 2 ** 15 2147483647, // 2 ** 31 - 1 2147483648, // 2 ** 31 255, // 2 ** 8 - 1 256, // 2 ** 8 65535, // 2 ** 16 - 1 65536, // 2 ** 16 4294967295, // 2 ** 32 - 1 4294967296, // 2 ** 32 9007199254740991, // 2 ** 53 - 1 9007199254740992, // 2 ** 53 1.1, 0.1, 0.5, 0.50000001, 0.6, 0.7, undefined, -1, -0, -0.1, -1.1, NaN, -127, // - ( 2 ** 7 - 1 ) -128, // - ( 2 ** 7 ) -32767, // - ( 2 ** 15 - 1 ) -32768, // - ( 2 ** 15 ) -2147483647, // - ( 2 ** 31 - 1 ) -2147483648, // - ( 2 ** 31 ) -255, // - ( 2 ** 8 - 1 ) -256, // - ( 2 ** 8 ) -65535, // - ( 2 ** 16 - 1 ) -65536, // - ( 2 ** 16 ) -4294967295, // - ( 2 ** 32 - 1 ) -4294967296, // - ( 2 ** 32 ) Infinity, -Infinity, 0 ], expected: { Int8: [ 127, // 127 -128, // 128 -1, // 32767 0, // 32768 -1, // 2147483647 0, // 2147483648 -1, // 255 0, // 256 -1, // 65535 0, // 65536 -1, // 4294967295 0, // 4294967296 -1, // 9007199254740991 0, // 9007199254740992 1, // 1.1 0, // 0.1 0, // 0.5 0, // 0.50000001, 0, // 0.6 0, // 0.7 0, // undefined -1, // -1 0, // -0 0, // -0.1 -1, // -1.1 0, // NaN -127, // -127 -128, // -128 1, // -32767 0, // -32768 1, // -2147483647 0, // -2147483648 1, // -255 0, // -256 1, // -65535 0, // -65536 1, // -4294967295 0, // -4294967296 0, // Infinity 0, // -Infinity 0 ], Uint8: [ 127, // 127 128, // 128 255, // 32767 0, // 32768 255, // 2147483647 0, // 2147483648 255, // 255 0, // 256 255, // 65535 0, // 65536 255, // 4294967295 0, // 4294967296 255, // 9007199254740991 0, // 9007199254740992 1, // 1.1 0, // 0.1 0, // 0.5 0, // 0.50000001, 0, // 0.6 0, // 0.7 0, // undefined 255, // -1 0, // -0 0, // -0.1 255, // -1.1 0, // NaN 129, // -127 128, // -128 1, // -32767 0, // -32768 1, // -2147483647 0, // -2147483648 1, // -255 0, // -256 1, // -65535 0, // -65536 1, // -4294967295 0, // -4294967296 0, // Infinity 0, // -Infinity 0 ], Uint8Clamped: [ 127, // 127 128, // 128 255, // 32767 255, // 32768 255, // 2147483647 255, // 2147483648 255, // 255 255, // 256 255, // 65535 255, // 65536 255, // 4294967295 255, // 4294967296 255, // 9007199254740991 255, // 9007199254740992 1, // 1.1, 0, // 0.1 0, // 0.5 1, // 0.50000001, 1, // 0.6 1, // 0.7 0, // undefined 0, // -1 0, // -0 0, // -0.1 0, // -1.1 0, // NaN 0, // -127 0, // -128 0, // -32767 0, // -32768 0, // -2147483647 0, // -2147483648 0, // -255 0, // -256 0, // -65535 0, // -65536 0, // -4294967295 0, // -4294967296 255, // Infinity 0, // -Infinity 0 ], Int16: [ 127, // 127 128, // 128 32767, // 32767 -32768, // 32768 -1, // 2147483647 0, // 2147483648 255, // 255 256, // 256 -1, // 65535 0, // 65536 -1, // 4294967295 0, // 4294967296 -1, // 9007199254740991 0, // 9007199254740992 1, // 1.1 0, // 0.1 0, // 0.5 0, // 0.50000001, 0, // 0.6 0, // 0.7 0, // undefined -1, // -1 0, // -0 0, // -0.1 -1, // -1.1 0, // NaN -127, // -127 -128, // -128 -32767, // -32767 -32768, // -32768 1, // -2147483647 0, // -2147483648 -255, // -255 -256, // -256 1, // -65535 0, // -65536 1, // -4294967295 0, // -4294967296 0, // Infinity 0, // -Infinity 0 ], Uint16: [ 127, // 127 128, // 128 32767, // 32767 32768, // 32768 65535, // 2147483647 0, // 2147483648 255, // 255 256, // 256 65535, // 65535 0, // 65536 65535, // 4294967295 0, // 4294967296 65535, // 9007199254740991 0, // 9007199254740992 1, // 1.1 0, // 0.1 0, // 0.5 0, // 0.50000001, 0, // 0.6 0, // 0.7 0, // undefined 65535, // -1 0, // -0 0, // -0.1 65535, // -1.1 0, // NaN 65409, // -127 65408, // -128 32769, // -32767 32768, // -32768 1, // -2147483647 0, // -2147483648 65281, // -255 65280, // -256 1, // -65535 0, // -65536 1, // -4294967295 0, // -4294967296 0, // Infinity 0, // -Infinity 0 ], Int32: [ 127, // 127 128, // 128 32767, // 32767 32768, // 32768 2147483647, // 2147483647 -2147483648, // 2147483648 255, // 255 256, // 256 65535, // 65535 65536, // 65536 -1, // 4294967295 0, // 4294967296 -1, // 9007199254740991 0, // 9007199254740992 1, // 1.1 0, // 0.1 0, // 0.5 0, // 0.50000001, 0, // 0.6 0, // 0.7 0, // undefined -1, // -1 0, // -0 0, // -0.1 -1, // -1.1 0, // NaN -127, // -127 -128, // -128 -32767, // -32767 -32768, // -32768 -2147483647, // -2147483647 -2147483648, // -2147483648 -255, // -255 -256, // -256 -65535, // -65535 -65536, // -65536 1, // -4294967295 0, // -4294967296 0, // Infinity 0, // -Infinity 0 ], Uint32: [ 127, // 127 128, // 128 32767, // 32767 32768, // 32768 2147483647, // 2147483647 2147483648, // 2147483648 255, // 255 256, // 256 65535, // 65535 65536, // 65536 4294967295, // 4294967295 0, // 4294967296 4294967295, // 9007199254740991 0, // 9007199254740992 1, // 1.1 0, // 0.1 0, // 0.5 0, // 0.50000001, 0, // 0.6 0, // 0.7 0, // undefined 4294967295, // -1 0, // -0 0, // -0.1 4294967295, // -1.1 0, // NaN 4294967169, // -127 4294967168, // -128 4294934529, // -32767 4294934528, // -32768 2147483649, // -2147483647 2147483648, // -2147483648 4294967041, // -255 4294967040, // -256 4294901761, // -65535 4294901760, // -65536 1, // -4294967295 0, // -4294967296 0, // Infinity 0, // -Infinity 0 ], Float32: [ 127, // 127 128, // 128 32767, // 32767 32768, // 32768 2147483648, // 2147483647 2147483648, // 2147483648 255, // 255 256, // 256 65535, // 65535 65536, // 65536 4294967296, // 4294967295 4294967296, // 4294967296 9007199254740992, // 9007199254740991 9007199254740992, // 9007199254740992 1.100000023841858, // 1.1 0.10000000149011612, // 0.1 0.5, // 0.5 0.5, // 0.50000001, 0.6000000238418579, // 0.6 0.699999988079071, // 0.7 NaN, // undefined -1, // -1 -0, // -0 -0.10000000149011612, // -0.1 -1.100000023841858, // -1.1 NaN, // NaN -127, // -127 -128, // -128 -32767, // -32767 -32768, // -32768 -2147483648, // -2147483647 -2147483648, // -2147483648 -255, // -255 -256, // -256 -65535, // -65535 -65536, // -65536 -4294967296, // -4294967295 -4294967296, // -4294967296 Infinity, // Infinity -Infinity, // -Infinity 0 ], Float64: [ 127, // 127 128, // 128 32767, // 32767 32768, // 32768 2147483647, // 2147483647 2147483648, // 2147483648 255, // 255 256, // 256 65535, // 65535 65536, // 65536 4294967295, // 4294967295 4294967296, // 4294967296 9007199254740991, // 9007199254740991 9007199254740992, // 9007199254740992 1.1, // 1.1 0.1, // 0.1 0.5, // 0.5 0.50000001, // 0.50000001, 0.6, // 0.6 0.7, // 0.7 NaN, // undefined -1, // -1 -0, // -0 -0.1, // -0.1 -1.1, // -1.1 NaN, // NaN -127, // -127 -128, // -128 -32767, // -32767 -32768, // -32768 -2147483647, // -2147483647 -2147483648, // -2147483648 -255, // -255 -256, // -256 -65535, // -65535 -65536, // -65536 -4294967295, // -4294967295 -4294967296, // -4294967296 Infinity, // Infinity -Infinity, // -Infinity 0 ] } }; // file: dateConstants.js // Copyright (C) 2009 the Sputnik authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description: | Collection of date-centric values defines: - date_1899_end - date_1900_start - date_1969_end - date_1970_start - date_1999_end - date_2000_start - date_2099_end - date_2100_start - start_of_time - end_of_time ---*/ var date_1899_end = -2208988800001; var date_1900_start = -2208988800000; var date_1969_end = -1; var date_1970_start = 0; var date_1999_end = 946684799999; var date_2000_start = 946684800000; var date_2099_end = 4102444799999; var date_2100_start = 4102444800000; var start_of_time = -8.64e15; var end_of_time = 8.64e15; // file: decimalToHexString.js // Copyright (C) 2017 André Bargull. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description: | Collection of functions used to assert the correctness of various encoding operations. defines: [decimalToHexString, decimalToPercentHexString] ---*/ function decimalToHexString(n) { var hex = "0123456789ABCDEF"; n >>>= 0; var s = ""; while (n) { s = hex[n & 0xf] + s; n >>>= 4; } while (s.length < 4) { s = "0" + s; } return s; } function decimalToPercentHexString(n) { var hex = "0123456789ABCDEF"; return "%" + hex[(n >> 4) & 0xf] + hex[n & 0xf]; } // file: deepEqual.js // Copyright 2019 Ron Buckton. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description: > Compare two values structurally defines: [assert.deepEqual] ---*/ assert.deepEqual = function(actual, expected, message) { var format = assert.deepEqual.format; assert( assert.deepEqual._compare(actual, expected), `Expected ${format(actual)} to be structurally equal to ${format(expected)}. ${(message || '')}` ); }; assert.deepEqual.format = function(value, seen) { switch (typeof value) { case 'string': return typeof JSON !== "undefined" ? JSON.stringify(value) : `"${value}"`; case 'number': case 'boolean': case 'symbol': case 'bigint': return value.toString(); case 'undefined': return 'undefined'; case 'function': return `[Function${value.name ? `: ${value.name}` : ''}]`; case 'object': if (value === null) return 'null'; if (value instanceof Date) return `Date "${value.toISOString()}"`; if (value instanceof RegExp) return value.toString(); if (!seen) { seen = { counter: 0, map: new Map() }; } let usage = seen.map.get(value); if (usage) { usage.used = true; return `[Ref: #${usage.id}]`; } usage = { id: ++seen.counter, used: false }; seen.map.set(value, usage); if (typeof Set !== "undefined" && value instanceof Set) { return `Set {${Array.from(value).map(value => assert.deepEqual.format(value, seen)).join(', ')}}${usage.used ? ` as #${usage.id}` : ''}`; } if (typeof Map !== "undefined" && value instanceof Map) { return `Map {${Array.from(value).map(pair => `${assert.deepEqual.format(pair[0], seen)} => ${assert.deepEqual.format(pair[1], seen)}}`).join(', ')}}${usage.used ? ` as #${usage.id}` : ''}`; } if (Array.isArray ? Array.isArray(value) : value instanceof Array) { return `[${value.map(value => assert.deepEqual.format(value, seen)).join(', ')}]${usage.used ? ` as #${usage.id}` : ''}`; } let tag = Symbol.toStringTag in value ? value[Symbol.toStringTag] : 'Object'; if (tag === 'Object' && Object.getPrototypeOf(value) === null) { tag = '[Object: null prototype]'; } return `${tag ? `${tag} ` : ''}{ ${Object.keys(value).map(key => `${key.toString()}: ${assert.deepEqual.format(value[key], seen)}`).join(', ')} }${usage.used ? ` as #${usage.id}` : ''}`; default: return typeof value; } }; assert.deepEqual._compare = (function () { var EQUAL = 1; var NOT_EQUAL = -1; var UNKNOWN = 0; function deepEqual(a, b) { return compareEquality(a, b) === EQUAL; } function compareEquality(a, b, cache) { return compareIf(a, b, isOptional, compareOptionality) || compareIf(a, b, isPrimitiveEquatable, comparePrimitiveEquality) || compareIf(a, b, isObjectEquatable, compareObjectEquality, cache) || NOT_EQUAL; } function compareIf(a, b, test, compare, cache) { return !test(a) ? !test(b) ? UNKNOWN : NOT_EQUAL : !test(b) ? NOT_EQUAL : cacheComparison(a, b, compare, cache); } function tryCompareStrictEquality(a, b) { return a === b ? EQUAL : UNKNOWN; } function tryCompareTypeOfEquality(a, b) { return typeof a !== typeof b ? NOT_EQUAL : UNKNOWN; } function tryCompareToStringTagEquality(a, b) { var aTag = Symbol.toStringTag in a ? a[Symbol.toStringTag] : undefined; var bTag = Symbol.toStringTag in b ? b[Symbol.toStringTag] : undefined; return aTag !== bTag ? NOT_EQUAL : UNKNOWN; } function isOptional(value) { return value === undefined || value === null; } function compareOptionality(a, b) { return tryCompareStrictEquality(a, b) || NOT_EQUAL; } function isPrimitiveEquatable(value) { switch (typeof value) { case 'string': case 'number': case 'bigint': case 'boolean': case 'symbol': return true; default: return isBoxed(value); } } function comparePrimitiveEquality(a, b) { if (isBoxed(a)) a = a.valueOf(); if (isBoxed(b)) b = b.valueOf(); return tryCompareStrictEquality(a, b) || tryCompareTypeOfEquality(a, b) || compareIf(a, b, isNaNEquatable, compareNaNEquality) || NOT_EQUAL; } function isNaNEquatable(value) { return typeof value === 'number'; } function compareNaNEquality(a, b) { return isNaN(a) && isNaN(b) ? EQUAL : NOT_EQUAL; } function isObjectEquatable(value) { return typeof value === 'object'; } function compareObjectEquality(a, b, cache) { if (!cache) cache = new Map(); return getCache(cache, a, b) || setCache(cache, a, b, EQUAL) // consider equal for now || cacheComparison(a, b, tryCompareStrictEquality, cache) || cacheComparison(a, b, tryCompareToStringTagEquality, cache) || compareIf(a, b, isValueOfEquatable, compareValueOfEquality) || compareIf(a, b, isToStringEquatable, compareToStringEquality) || compareIf(a, b, isArrayLikeEquatable, compareArrayLikeEquality, cache) || compareIf(a, b, isStructurallyEquatable, compareStructuralEquality, cache) || compareIf(a, b, isIterableEquatable, compareIterableEquality, cache) || cacheComparison(a, b, fail, cache); } function isBoxed(value) { return value instanceof String || value instanceof Number || value instanceof Boolean || typeof Symbol === 'function' && value instanceof Symbol || typeof BigInt === 'function' && value instanceof BigInt; } function isValueOfEquatable(value) { return value instanceof Date; } function compareValueOfEquality(a, b) { return compareIf(a.valueOf(), b.valueOf(), isPrimitiveEquatable, comparePrimitiveEquality) || NOT_EQUAL; } function isToStringEquatable(value) { return value instanceof RegExp; } function compareToStringEquality(a, b) { return compareIf(a.toString(), b.toString(), isPrimitiveEquatable, comparePrimitiveEquality) || NOT_EQUAL; } function isArrayLikeEquatable(value) { return (Array.isArray ? Array.isArray(value) : value instanceof Array) || (typeof Uint8Array === 'function' && value instanceof Uint8Array) || (typeof Uint8ClampedArray === 'function' && value instanceof Uint8ClampedArray) || (typeof Uint16Array === 'function' && value instanceof Uint16Array) || (typeof Uint32Array === 'function' && value instanceof Uint32Array) || (typeof Int8Array === 'function' && value instanceof Int8Array) || (typeof Int16Array === 'function' && value instanceof Int16Array) || (typeof Int32Array === 'function' && value instanceof Int32Array) || (typeof Float32Array === 'function' && value instanceof Float32Array) || (typeof Float64Array === 'function' && value instanceof Float64Array) || (typeof BigUint64Array === 'function' && value instanceof BigUint64Array) || (typeof BigInt64Array === 'function' && value instanceof BigInt64Array); } function compareArrayLikeEquality(a, b, cache) { if (a.length !== b.length) return NOT_EQUAL; for (var i = 0; i < a.length; i++) { if (compareEquality(a[i], b[i], cache) === NOT_EQUAL) { return NOT_EQUAL; } } return EQUAL; } function isStructurallyEquatable(value) { return !(typeof Promise === 'function' && value instanceof Promise // only comparable by reference || typeof WeakMap === 'function' && value instanceof WeakMap // only comparable by reference || typeof WeakSet === 'function' && value instanceof WeakSet // only comparable by reference || typeof Map === 'function' && value instanceof Map // comparable via @@iterator || typeof Set === 'function' && value instanceof Set); // comparable via @@iterator } function compareStructuralEquality(a, b, cache) { var aKeys = []; for (var key in a) aKeys.push(key); var bKeys = []; for (var key in b) bKeys.push(key); if (aKeys.length !== bKeys.length) { return NOT_EQUAL; } aKeys.sort(); bKeys.sort(); for (var i = 0; i < aKeys.length; i++) { var aKey = aKeys[i]; var bKey = bKeys[i]; if (compareEquality(aKey, bKey, cache) === NOT_EQUAL) { return NOT_EQUAL; } if (compareEquality(a[aKey], b[bKey], cache) === NOT_EQUAL) { return NOT_EQUAL; } } return compareIf(a, b, isIterableEquatable, compareIterableEquality, cache) || EQUAL; } function isIterableEquatable(value) { return typeof Symbol === 'function' && typeof value[Symbol.iterator] === 'function'; } function compareIteratorEquality(a, b, cache) { if (typeof Map === 'function' && a instanceof Map && b instanceof Map || typeof Set === 'function' && a instanceof Set && b instanceof Set) { if (a.size !== b.size) return NOT_EQUAL; // exit early if we detect a difference in size } var ar, br; while (true) { ar = a.next(); br = b.next(); if (ar.done) { if (br.done) return EQUAL; if (b.return) b.return(); return NOT_EQUAL; } if (br.done) { if (a.return) a.return(); return NOT_EQUAL; } if (compareEquality(ar.value, br.value, cache) === NOT_EQUAL) { if (a.return) a.return(); if (b.return) b.return(); return NOT_EQUAL; } } } function compareIterableEquality(a, b, cache) { return compareIteratorEquality(a[Symbol.iterator](), b[Symbol.iterator](), cache); } function cacheComparison(a, b, compare, cache) { var result = compare(a, b, cache); if (cache && (result === EQUAL || result === NOT_EQUAL)) { setCache(cache, a, b, /** @type {EQUAL | NOT_EQUAL} */(result)); } return result; } function fail() { return NOT_EQUAL; } function setCache(cache, left, right, result) { var otherCache; otherCache = cache.get(left); if (!otherCache) cache.set(left, otherCache = new Map()); otherCache.set(right, result); otherCache = cache.get(right); if (!otherCache) cache.set(right, otherCache = new Map()); otherCache.set(left, result); } function getCache(cache, left, right) { var otherCache; var result; otherCache = cache.get(left); result = otherCache && otherCache.get(right); if (result) return result; otherCache = cache.get(right); result = otherCache && otherCache.get(left); if (result) return result; return UNKNOWN; } return deepEqual; })(); // file: detachArrayBuffer.js // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description: | A function used in the process of asserting correctness of TypedArray objects. $262.detachArrayBuffer is defined by a host. defines: [$DETACHBUFFER] ---*/ function $DETACHBUFFER(buffer) { if (!$262 || typeof $262.detachArrayBuffer !== "function") { throw new Test262Error("No method available to detach an ArrayBuffer"); } $262.detachArrayBuffer(buffer); } // file: fnGlobalObject.js // Copyright (C) 2017 Ecma International. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description: | Produce a reliable global object defines: [fnGlobalObject] ---*/ var __globalObject = Function("return this;")(); function fnGlobalObject() { return __globalObject; } // file: isConstructor.js // Copyright (C) 2017 André Bargull. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description: | Test if a given function is a constructor function. defines: [isConstructor] ---*/ function isConstructor(f) { try { Reflect.construct(function(){}, [], f); } catch (e) { return false; } return true; } // file: nans.js // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description: | A collection of NaN values produced from expressions that have been observed to create distinct bit representations on various platforms. These provide a weak basis for assertions regarding the consistent canonicalization of NaN values in Array buffers. defines: [NaNs] ---*/ var NaNs = [ NaN, Number.NaN, NaN * 0, 0/0, Infinity/Infinity, -(0/0), Math.pow(-1, 0.5), -Math.pow(-1, 0.5), Number("Not-a-Number"), ]; // file: nativeFunctionMatcher.js // Copyright (C) 2016 Michael Ficarra. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description: Assert _NativeFunction_ Syntax info: | NativeFunction : function _NativeFunctionAccessor_ opt _IdentifierName_ opt ( _FormalParameters_ ) { [ native code ] } NativeFunctionAccessor : get set defines: - assertToStringOrNativeFunction - assertNativeFunction - validateNativeFunctionSource ---*/ const validateNativeFunctionSource = function(source) { // These regexes should be kept up to date with Unicode using `regexpu-core`. // `/\p{ID_Start}/u` const UnicodeIDStart = /(?:[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08C7\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\u9FFC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7BF\uA7C2-\uA7CA\uA7F5-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDEC0-\uDEEB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/; // `/\p{ID_Continue}/u` const UnicodeIDContinue = /(?:[0-9A-Z_a-z\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05EF-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u07FD\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08C7\u08D3-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u09FE\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D81-\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1878\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1ABF\u1AC0\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CD0-\u1CD2\u1CD4-\u1CFA\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\u9FFC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7BF\uA7C2-\uA7CA\uA7F5-\uA827\uA82C\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD27\uDD30-\uDD39\uDE80-\uDEA9\uDEAB\uDEAC\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF50\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD44-\uDD47\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDC9-\uDDCC\uDDCE-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3B-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC5E-\uDC61\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDC00-\uDC3A\uDCA0-\uDCE9\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD35\uDD37\uDD38\uDD3B-\uDD43\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD7\uDDDA-\uDDE1\uDDE3\uDDE4\uDE00-\uDE3E\uDE47\uDE50-\uDE99\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD8E\uDD90\uDD91\uDD93-\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF6\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF4F-\uDF87\uDF8F-\uDF9F\uDFE0\uDFE1\uDFE3\uDFE4\uDFF0\uDFF1]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD00-\uDD2C\uDD30-\uDD3D\uDD40-\uDD49\uDD4E\uDEC0-\uDEF9]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4B\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]|\uDB40[\uDD00-\uDDEF])/; // `/\p{Space_Separator}/u` const UnicodeSpaceSeparator = /[ \xA0\u1680\u2000-\u200A\u202F\u205F\u3000]/; const isNewline = (c) => /[\u000A\u000D\u2028\u2029]/u.test(c); const isWhitespace = (c) => /[\u0009\u000B\u000C\u0020\u00A0\uFEFF]/u.test(c) || UnicodeSpaceSeparator.test(c); let pos = 0; const eatWhitespace = () => { while (pos < source.length) { const c = source[pos]; if (isWhitespace(c) || isNewline(c)) { pos += 1; continue; } if (c === '/') { if (source[pos + 1] === '/') { while (pos < source.length) { if (isNewline(source[pos])) { break; } pos += 1; } continue; } if (source[pos + 1] === '*') { const end = source.indexOf('*/', pos); if (end === -1) { throw new SyntaxError(); } pos = end + '*/'.length; continue; } } break; } }; const getIdentifier = () => { eatWhitespace(); const start = pos; let end = pos; switch (source[end]) { case '_': case '$': end += 1; break; default: if (UnicodeIDStart.test(source[end])) { end += 1; break; } return null; } while (end < source.length) { const c = source[end]; switch (c) { case '_': case '$': end += 1; break; default: if (UnicodeIDContinue.test(c)) { end += 1; break; } return source.slice(start, end); } } return source.slice(start, end); }; const test = (s) => { eatWhitespace(); if (/\w/.test(s)) { return getIdentifier() === s; } return source.slice(pos, pos + s.length) === s; }; const eat = (s) => { if (test(s)) { pos += s.length; return true; } return false; }; const eatIdentifier = () => { const n = getIdentifier(); if (n !== null) { pos += n.length; return true; } return false; }; const expect = (s) => { if (!eat(s)) { throw new SyntaxError(); } }; const eatString = () => { if (source[pos] === '\'' || source[pos] === '"') { const match = source[pos]; pos += 1; while (pos < source.length) { if (source[pos] === match && source[pos - 1] !== '\\') { return; } if (isNewline(source[pos])) { throw new SyntaxError(); } pos += 1; } throw new SyntaxError(); } }; // "Stumble" through source text until matching character is found. // Assumes ECMAScript syntax keeps `[]` and `()` balanced. const stumbleUntil = (c) => { const match = { ']': '[', ')': '(', }[c]; let nesting = 1; while (pos < source.length) { eatWhitespace(); eatString(); // Strings may contain unbalanced characters. if (source[pos] === match) { nesting += 1; } else if (source[pos] === c) { nesting -= 1; } pos += 1; if (nesting === 0) { return; } } throw new SyntaxError(); }; // function expect('function'); // NativeFunctionAccessor eat('get') || eat('set'); // PropertyName if (!eatIdentifier() && eat('[')) { stumbleUntil(']'); } // ( FormalParameters ) expect('('); stumbleUntil(')'); // { expect('{'); // [native code] expect('['); expect('native'); expect('code'); expect(']'); // } expect('}'); eatWhitespace(); if (pos !== source.length) { throw new SyntaxError(); } }; const assertToStringOrNativeFunction = function(fn, expected) { const actual = "" + fn; try { assert.sameValue(actual, expected); } catch (unused) { assertNativeFunction(fn, expected); } }; const assertNativeFunction = function(fn, special) { const actual = "" + fn; try { validateNativeFunctionSource(actual); } catch (unused) { $ERROR('Conforms to NativeFunction Syntax: ' + JSON.stringify(actual) + (special ? ' (' + special + ')' : '')); } }; // file: promiseHelper.js // Copyright (C) 2017 Ecma International. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description: | Check that an array contains a numeric sequence starting at 1 and incrementing by 1 for each entry in the array. Used by Promise tests to assert the order of execution in deep Promise resolution pipelines. defines: [checkSequence, checkSettledPromises] ---*/ function checkSequence(arr, message) { arr.forEach(function(e, i) { if (e !== (i+1)) { $ERROR((message ? message : "Steps in unexpected sequence:") + " '" + arr.join(',') + "'"); } }); return true; } function checkSettledPromises(settleds, expected, message) { const prefix = message ? `${message}: ` : ''; assert.sameValue(Array.isArray(settleds), true, `${prefix}Settled values is an array`); assert.sameValue( settleds.length, expected.length, `${prefix}The settled values has a different length than expected` ); settleds.forEach((settled, i) => { assert.sameValue( Object.prototype.hasOwnProperty.call(settled, 'status'), true, `${prefix}The settled value has a property status` ); assert.sameValue(settled.status, expected[i].status, `${prefix}status for item ${i}`); if (settled.status === 'fulfilled') { assert.sameValue( Object.prototype.hasOwnProperty.call(settled, 'value'), true, `${prefix}The fulfilled promise has a property named value` ); assert.sameValue( Object.prototype.hasOwnProperty.call(settled, 'reason'), false, `${prefix}The fulfilled promise has no property named reason` ); assert.sameValue(settled.value, expected[i].value, `${prefix}value for item ${i}`); } else { assert.sameValue(settled.status, 'rejected', `${prefix}Valid statuses are only fulfilled or rejected`); assert.sameValue( Object.prototype.hasOwnProperty.call(settled, 'value'), false, `${prefix}The fulfilled promise has no property named value` ); assert.sameValue( Object.prototype.hasOwnProperty.call(settled, 'reason'), true, `${prefix}The fulfilled promise has a property named reason` ); assert.sameValue(settled.reason, expected[i].reason, `${prefix}Reason value for item ${i}`); } }); } // file: proxyTrapsHelper.js // Copyright (C) 2016 Jordan Harband. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description: | Used to assert the correctness of object behavior in the presence and context of Proxy objects. defines: [allowProxyTraps] ---*/ function allowProxyTraps(overrides) { function throwTest262Error(msg) { return function () { throw new Test262Error(msg); }; } if (!overrides) { overrides = {}; } return { getPrototypeOf: overrides.getPrototypeOf || throwTest262Error('[[GetPrototypeOf]] trap called'), setPrototypeOf: overrides.setPrototypeOf || throwTest262Error('[[SetPrototypeOf]] trap called'), isExtensible: overrides.isExtensible || throwTest262Error('[[IsExtensible]] trap called'), preventExtensions: overrides.preventExtensions || throwTest262Error('[[PreventExtensions]] trap called'), getOwnPropertyDescriptor: overrides.getOwnPropertyDescriptor || throwTest262Error('[[GetOwnProperty]] trap called'), has: overrides.has || throwTest262Error('[[HasProperty]] trap called'), get: overrides.get || throwTest262Error('[[Get]] trap called'), set: overrides.set || throwTest262Error('[[Set]] trap called'), deleteProperty: overrides.deleteProperty || throwTest262Error('[[Delete]] trap called'), defineProperty: overrides.defineProperty || throwTest262Error('[[DefineOwnProperty]] trap called'), enumerate: throwTest262Error('[[Enumerate]] trap called: this trap has been removed'), ownKeys: overrides.ownKeys || throwTest262Error('[[OwnPropertyKeys]] trap called'), apply: overrides.apply || throwTest262Error('[[Call]] trap called'), construct: overrides.construct || throwTest262Error('[[Construct]] trap called') }; } // file: tcoHelper.js // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description: | This defines the number of consecutive recursive function calls that must be made in order to prove that stack frames are properly destroyed according to ES2015 tail call optimization semantics. defines: [$MAX_ITERATIONS] ---*/ var $MAX_ITERATIONS = 100000; // file: testTypedArray.js // Copyright (C) 2015 André Bargull. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description: | Collection of functions used to assert the correctness of TypedArray objects. defines: - typedArrayConstructors - floatArrayConstructors - intArrayConstructors - TypedArray - testWithTypedArrayConstructors - testWithAtomicsFriendlyTypedArrayConstructors - testWithNonAtomicsFriendlyTypedArrayConstructors - testTypedArrayConversions ---*/ /** * Array containing every typed array constructor. */ var typedArrayConstructors = [ Float64Array, Float32Array, Int32Array, Int16Array, Int8Array, Uint32Array, Uint16Array, Uint8Array, Uint8ClampedArray ]; var floatArrayConstructors = typedArrayConstructors.slice(0, 2); var intArrayConstructors = typedArrayConstructors.slice(2, 7); /** * The %TypedArray% intrinsic constructor function. */ var TypedArray = Object.getPrototypeOf(Int8Array); /** * Callback for testing a typed array constructor. * * @callback typedArrayConstructorCallback * @param {Function} Constructor the constructor object to test with. */ /** * Calls the provided function for every typed array constructor. * * @param {typedArrayConstructorCallback} f - the function to call for each typed array constructor. * @param {Array} selected - An optional Array with filtered typed arrays */ function testWithTypedArrayConstructors(f, selected) { var constructors = selected || typedArrayConstructors; for (var i = 0; i < constructors.length; ++i) { var constructor = constructors[i]; try { f(constructor); } catch (e) { e.message += " (Testing with " + constructor.name + ".)"; throw e; } } } /** * Calls the provided function for every non-"Atomics Friendly" typed array constructor. * * @param {typedArrayConstructorCallback} f - the function to call for each typed array constructor. * @param {Array} selected - An optional Array with filtered typed arrays */ function testWithNonAtomicsFriendlyTypedArrayConstructors(f) { testWithTypedArrayConstructors(f, [ Float64Array, Float32Array, Uint8ClampedArray ]); } /** * Calls the provided function for every "Atomics Friendly" typed array constructor. * * @param {typedArrayConstructorCallback} f - the function to call for each typed array constructor. * @param {Array} selected - An optional Array with filtered typed arrays */ function testWithAtomicsFriendlyTypedArrayConstructors(f) { testWithTypedArrayConstructors(f, [ Int32Array, Int16Array, Int8Array, Uint32Array, Uint16Array, Uint8Array, ]); } /** * Helper for conversion operations on TypedArrays, the expected values * properties are indexed in order to match the respective value for each * TypedArray constructor * @param {Function} fn - the function to call for each constructor and value. * will be called with the constructor, value, expected * value, and a initial value that can be used to avoid * a false positive with an equivalent expected value. */ function testTypedArrayConversions(byteConversionValues, fn) { var values = byteConversionValues.values; var expected = byteConversionValues.expected; testWithTypedArrayConstructors(function(TA) { var name = TA.name.slice(0, -5); return values.forEach(function(value, index) { var exp = expected[name][index]; var initial = 0; if (exp === 0) { initial = 1; } fn(TA, value, exp, initial); }); }); } // file: timer.js // Copyright (C) 2017 Ecma International. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description: | Used in website/scripts/sth.js defines: [setTimeout] ---*/ //setTimeout is not available, hence this script was loaded if (Promise === undefined && this.setTimeout === undefined) { if(/\$DONE()/.test(code)) $ERROR("Async test capability is not supported in your test environment"); } if (Promise !== undefined && this.setTimeout === undefined) { (function(that) { that.setTimeout = function(callback, delay) { var p = Promise.resolve(); var start = Date.now(); var end = start + delay; function check(){ var timeLeft = end - Date.now(); if(timeLeft > 0) p.then(check); else callback(); } p.then(check); } })(this); }