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:
Zoltan Herczeg
2020-08-11 11:25:01 +02:00
committed by GitHub
parent 286e515f9f
commit f761427a3e
13 changed files with 409 additions and 138 deletions
-29
View File
@@ -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>