Improve BigInt support (#4118)
This patch adds several small features: - Support right shift with negative numbers - Support exponentation operator - BigInts can be enabled in ES5.1 mode - Remove dead code from ecma_deref_bigint - Support longer BigInt literals in the parser - Fix various BigInt comparison issues - Do not discard unary plus for BigInt constants JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
@@ -227,6 +227,16 @@ check_result16(BigInt("0x8fef5fcfffef5fcfffef5fcfffef5fcff") >> BigInt("51"), "1
|
||||
check_result16(BigInt("0x8fef5fcfffef5fcfffef5fcfffef5fcff") >> BigInt("63"), "11fdebf9fffdebf9ff")
|
||||
check_result16(BigInt("0x8fef5fcfffef5fcfffef5fcfffef5fcff") >> BigInt("64"), "8fef5fcfffef5fcff")
|
||||
|
||||
check_result16(-BigInt("0xff") >> BigInt("8"), "-1")
|
||||
check_result16(-BigInt("0xff") >> BigInt("1000"), "-1")
|
||||
check_result16(-BigInt("0xff") >> BigInt("7"), "-2")
|
||||
check_result16(-BigInt("0xff00000000") >> BigInt("32"), "-ff")
|
||||
check_result16(-BigInt("0xff80000000") >> BigInt("32"), "-100")
|
||||
check_result16(-BigInt("0xff00000000000000000000000000000000") >> BigInt("128"), "-ff")
|
||||
check_result16(-BigInt("0xff80000000000000000000000000000000") >> BigInt("128"), "-100")
|
||||
check_result16(-BigInt("0xfe00000000000000000000000000000000") >> BigInt("129"), "-7f")
|
||||
check_result16(-BigInt("0xff00000000000000000000000000000000") >> BigInt("129"), "-80")
|
||||
|
||||
check_result16(BigInt("0x8fef5fcfffef5fcfffef5fcfffef5fcff") >> BigInt("10000000000000000000000000"), "0")
|
||||
|
||||
try {
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
/* Copyright JS Foundation and other contributors, http://js.foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// Exponentiation
|
||||
|
||||
try {
|
||||
12n ** -7n
|
||||
assert(false)
|
||||
} catch (e) {
|
||||
assert(e instanceof RangeError)
|
||||
}
|
||||
|
||||
assert((0n ** 0n) === 1n)
|
||||
assert((1n ** 0n) === 1n)
|
||||
assert(((-2n) ** 0n) === 1n)
|
||||
assert((1000000000000000000000000000000000n ** 0n) === 1n)
|
||||
assert(((-1000000000000000000000000000000000n) ** 0n) === 1n)
|
||||
|
||||
assert((1n ** 1n) === 1n)
|
||||
assert((1n ** 10000000000000000000000000000000n) === 1n)
|
||||
assert(((-1n) ** 1n) === -1n)
|
||||
assert(((-1n) ** 10000000000000000000000000000000n) === 1n)
|
||||
assert(((-1n) ** 10000000000000000000000000000001n) === -1n)
|
||||
|
||||
assert((2n ** 10n) === 1024n)
|
||||
assert((2n ** 11n) === 2048n)
|
||||
assert(((-2n) ** 10n) === 1024n)
|
||||
assert(((-2n) ** 11n) === -2048n)
|
||||
assert((2n ** 64n) === 0x10000000000000000n)
|
||||
assert((2n ** 65n) === 0x20000000000000000n)
|
||||
assert(((-2n) ** 64n) === 0x10000000000000000n)
|
||||
assert(((-2n) ** 65n) === -0x20000000000000000n)
|
||||
|
||||
assert((2n ** 190n) === 0x400000000000000000000000000000000000000000000000n)
|
||||
assert((2n ** 191n) === 0x800000000000000000000000000000000000000000000000n)
|
||||
assert(((-2n) ** 190n) === 0x400000000000000000000000000000000000000000000000n)
|
||||
assert(((-2n) ** 191n) === -0x800000000000000000000000000000000000000000000000n)
|
||||
|
||||
assert((103n ** 32n) === 25750827556851106532658069028441289322166445432839581773436522241n)
|
||||
assert((103n ** 31n) === 250008034532535014880175427460595041962781023619801764790645847n)
|
||||
assert(((-79n) ** 32n) === 5297450670659957549009604563595170759963655420038456036451841n)
|
||||
assert(((-79n) ** 31n) === -67056337603290601886197526121457857721058929367575392866479n)
|
||||
|
||||
@@ -658,7 +658,6 @@
|
||||
<test id="built-ins/BigInt/asUintN/order-of-steps.js"><reason></reason></test>
|
||||
<test id="built-ins/BigInt/constructor-empty-string.js"><reason></reason></test>
|
||||
<test id="built-ins/BigInt/constructor-trailing-leading-spaces.js"><reason></reason></test>
|
||||
<test id="built-ins/BigInt/non-integer-rangeerror.js"><reason></reason></test>
|
||||
<test id="built-ins/BigInt/prototype/toString/a-z.js"><reason></reason></test>
|
||||
<test id="built-ins/BigInt/prototype/toString/length.js"><reason></reason></test>
|
||||
<test id="built-ins/BigInt/prototype/valueOf/cross-realm.js"><reason></reason></test>
|
||||
@@ -6134,9 +6133,6 @@
|
||||
<test id="language/expressions/compound-assignment/S11.13.2_A7.9_T4.js"><reason></reason></test>
|
||||
<test id="language/expressions/conditional/tco-cond.js"><reason></reason></test>
|
||||
<test id="language/expressions/conditional/tco-pos.js"><reason></reason></test>
|
||||
<test id="language/expressions/does-not-equals/bigint-and-number-extremes.js"><reason></reason></test>
|
||||
<test id="language/expressions/does-not-equals/bigint-and-object.js"><reason></reason></test>
|
||||
<test id="language/expressions/does-not-equals/bigint-and-string.js"><reason></reason></test>
|
||||
<test id="language/expressions/dynamic-import/always-create-new-promise.js"><reason></reason></test>
|
||||
<test id="language/expressions/dynamic-import/assign-expr-get-value-abrupt-throws.js"><reason></reason></test>
|
||||
<test id="language/expressions/dynamic-import/assignment-expression/additive-expr.js"><reason></reason></test>
|
||||
@@ -6547,15 +6543,7 @@
|
||||
<test id="language/expressions/dynamic-import/usage/top-level-import-then-is-call-expression-square-brackets.js"><reason></reason></test>
|
||||
<test id="language/expressions/dynamic-import/usage/top-level-import-then-returns-thenable.js"><reason></reason></test>
|
||||
<test id="language/expressions/dynamic-import/usage/top-level-import-then-specifier-tostring.js"><reason></reason></test>
|
||||
<test id="language/expressions/equals/bigint-and-number-extremes.js"><reason></reason></test>
|
||||
<test id="language/expressions/equals/bigint-and-object.js"><reason></reason></test>
|
||||
<test id="language/expressions/equals/bigint-and-string.js"><reason></reason></test>
|
||||
<test id="language/expressions/equals/coerce-symbol-to-prim-return-prim.js"><reason></reason></test>
|
||||
<test id="language/expressions/exponentiation/bigint-arithmetic.js"><reason></reason></test>
|
||||
<test id="language/expressions/exponentiation/bigint-negative-exponent-throws.js"><reason></reason></test>
|
||||
<test id="language/expressions/exponentiation/bigint-toprimitive.js"><reason></reason></test>
|
||||
<test id="language/expressions/exponentiation/bigint-wrapped-values.js"><reason></reason></test>
|
||||
<test id="language/expressions/exponentiation/bigint-zero-base-zero-exponent.js"><reason></reason></test>
|
||||
<test id="language/expressions/function/arguments-with-arguments-fn.js"><reason></reason></test>
|
||||
<test id="language/expressions/function/arguments-with-arguments-lex.js"><reason></reason></test>
|
||||
<test id="language/expressions/function/dflt-params-trailing-comma.js"><reason></reason></test>
|
||||
@@ -6591,24 +6579,11 @@
|
||||
<test id="language/expressions/generators/name.js"><reason></reason></test>
|
||||
<test id="language/expressions/generators/named-yield-identifier-spread-non-strict.js"><reason></reason></test>
|
||||
<test id="language/expressions/generators/yield-identifier-spread-non-strict.js"><reason></reason></test>
|
||||
<test id="language/expressions/greater-than-or-equal/bigint-and-bigint.js"><reason></reason></test>
|
||||
<test id="language/expressions/greater-than-or-equal/bigint-and-number-extremes.js"><reason></reason></test>
|
||||
<test id="language/expressions/greater-than-or-equal/bigint-and-string.js"><reason></reason></test>
|
||||
<test id="language/expressions/greater-than/bigint-and-bigint.js"><reason></reason></test>
|
||||
<test id="language/expressions/greater-than/bigint-and-number-extremes.js"><reason></reason></test>
|
||||
<test id="language/expressions/greater-than/bigint-and-string.js"><reason></reason></test>
|
||||
<test id="language/expressions/import.meta/distinct-for-each-module.js"><reason></reason></test>
|
||||
<test id="language/expressions/import.meta/import-meta-is-an-ordinary-object.js"><reason></reason></test>
|
||||
<test id="language/expressions/import.meta/same-object-returned.js"><reason></reason></test>
|
||||
<test id="language/expressions/import.meta/syntax/goal-module-nested-function.js"><reason></reason></test>
|
||||
<test id="language/expressions/import.meta/syntax/goal-module.js"><reason></reason></test>
|
||||
<test id="language/expressions/left-shift/bigint.js"><reason></reason></test>
|
||||
<test id="language/expressions/less-than-or-equal/bigint-and-bigint.js"><reason></reason></test>
|
||||
<test id="language/expressions/less-than-or-equal/bigint-and-number-extremes.js"><reason></reason></test>
|
||||
<test id="language/expressions/less-than-or-equal/bigint-and-string.js"><reason></reason></test>
|
||||
<test id="language/expressions/less-than/bigint-and-bigint.js"><reason></reason></test>
|
||||
<test id="language/expressions/less-than/bigint-and-number-extremes.js"><reason></reason></test>
|
||||
<test id="language/expressions/less-than/bigint-and-string.js"><reason></reason></test>
|
||||
<test id="language/expressions/logical-and/tco-right.js"><reason></reason></test>
|
||||
<test id="language/expressions/logical-assignment/lgcl-and-assignment-operator-bigint.js"><reason></reason></test>
|
||||
<test id="language/expressions/logical-assignment/lgcl-and-assignment-operator-lhs-before-rhs.js"><reason></reason></test>
|
||||
@@ -6777,9 +6752,6 @@
|
||||
<test id="language/expressions/prefix-increment/S11.4.4_A5_T4.js"><reason></reason></test>
|
||||
<test id="language/expressions/prefix-increment/S11.4.4_A5_T5.js"><reason></reason></test>
|
||||
<test id="language/expressions/prefix-increment/S11.4.4_A6_T3.js"><reason></reason></test>
|
||||
<test id="language/expressions/right-shift/bigint.js"><reason></reason></test>
|
||||
<test id="language/expressions/strict-does-not-equals/bigint-and-number-extremes.js"><reason></reason></test>
|
||||
<test id="language/expressions/strict-equals/bigint-and-number-extremes.js"><reason></reason></test>
|
||||
<test id="language/expressions/super/call-proto-not-ctor.js"><reason></reason></test>
|
||||
<test id="language/expressions/super/call-spread-obj-spread-order.js"><reason></reason></test>
|
||||
<test id="language/expressions/super/call-spread-obj-symbol-property.js"><reason></reason></test>
|
||||
@@ -6800,7 +6772,6 @@
|
||||
<test id="language/expressions/tco-pos.js"><reason></reason></test>
|
||||
<test id="language/expressions/template-literal/invalid-legacy-octal-escape-sequence.js"><reason></reason></test>
|
||||
<test id="language/expressions/typeof/proxy.js"><reason></reason></test>
|
||||
<test id="language/expressions/unary-plus/bigint-throws.js"><reason></reason></test>
|
||||
<test id="language/expressions/yield/star-return-is-null.js"><reason></reason></test>
|
||||
<test id="language/expressions/yield/star-rhs-iter-rtrn-no-rtrn.js"><reason></reason></test>
|
||||
<test id="language/expressions/yield/star-throw-is-null.js"><reason></reason></test>
|
||||
|
||||
Reference in New Issue
Block a user