Skip to content

Commit 5782405

Browse files
JohnLuck77copybara-github
authored andcommitted
Support bigint leading a statement in function bodies
PiperOrigin-RevId: 326135694
1 parent 743c16e commit 5782405

File tree

2 files changed

+63
-49
lines changed

2 files changed

+63
-49
lines changed

src/com/google/javascript/jscomp/parsing/parser/Parser.java

Lines changed: 50 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1726,55 +1726,56 @@ private boolean peekStatement() {
17261726
*/
17271727
private boolean peekStatementStandard() {
17281728
switch (peekType()) {
1729-
case OPEN_CURLY:
1730-
case VAR:
1731-
case CONST:
1732-
case SEMI_COLON:
1733-
case IF:
1734-
case DO:
1735-
case WHILE:
1736-
case FOR:
1737-
case CONTINUE:
1738-
case BREAK:
1739-
case RETURN:
1740-
case WITH:
1741-
case SWITCH:
1742-
case THROW:
1743-
case TRY:
1744-
case DEBUGGER:
1745-
case YIELD:
1746-
case IDENTIFIER:
1747-
case TYPE:
1748-
case DECLARE:
1749-
case MODULE:
1750-
case NAMESPACE:
1751-
case THIS:
1752-
case CLASS:
1753-
case SUPER:
1754-
case NUMBER:
1755-
case STRING:
1756-
case NO_SUBSTITUTION_TEMPLATE:
1757-
case TEMPLATE_HEAD:
1758-
case NULL:
1759-
case TRUE:
1760-
case SLASH: // regular expression literal
1761-
case SLASH_EQUAL: // regular expression literal
1762-
case FALSE:
1763-
case OPEN_SQUARE:
1764-
case OPEN_PAREN:
1765-
case NEW:
1766-
case DELETE:
1767-
case VOID:
1768-
case TYPEOF:
1769-
case PLUS_PLUS:
1770-
case MINUS_MINUS:
1771-
case PLUS:
1772-
case MINUS:
1773-
case TILDE:
1774-
case BANG:
1775-
return true;
1776-
default:
1777-
return false;
1729+
case OPEN_CURLY:
1730+
case VAR:
1731+
case CONST:
1732+
case SEMI_COLON:
1733+
case IF:
1734+
case DO:
1735+
case WHILE:
1736+
case FOR:
1737+
case CONTINUE:
1738+
case BREAK:
1739+
case RETURN:
1740+
case WITH:
1741+
case SWITCH:
1742+
case THROW:
1743+
case TRY:
1744+
case DEBUGGER:
1745+
case YIELD:
1746+
case IDENTIFIER:
1747+
case TYPE:
1748+
case DECLARE:
1749+
case MODULE:
1750+
case NAMESPACE:
1751+
case THIS:
1752+
case CLASS:
1753+
case SUPER:
1754+
case NUMBER:
1755+
case BIGINT:
1756+
case STRING:
1757+
case NO_SUBSTITUTION_TEMPLATE:
1758+
case TEMPLATE_HEAD:
1759+
case NULL:
1760+
case TRUE:
1761+
case SLASH: // regular expression literal
1762+
case SLASH_EQUAL: // regular expression literal
1763+
case FALSE:
1764+
case OPEN_SQUARE:
1765+
case OPEN_PAREN:
1766+
case NEW:
1767+
case DELETE:
1768+
case VOID:
1769+
case TYPEOF:
1770+
case PLUS_PLUS:
1771+
case MINUS_MINUS:
1772+
case PLUS:
1773+
case MINUS:
1774+
case TILDE:
1775+
case BANG:
1776+
return true;
1777+
default:
1778+
return false;
17781779
}
17791780
}
17801781

test/com/google/javascript/jscomp/parsing/ParserTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3977,6 +3977,19 @@ public void testBigIntLiteralHex() {
39773977
assertNode(bigint).isBigInt(new BigInteger("15"));
39783978
}
39793979

3980+
@Test
3981+
public void testBigIntInFunctionStatement() {
3982+
Node add =
3983+
parse("function f(/** @type {bigint} */ x) { 0n + x }") // SCRIPT
3984+
.getOnlyChild() // FUNCTION
3985+
.getLastChild() // BLOCK
3986+
.getOnlyChild() // EXPR_RESULT
3987+
.getOnlyChild(); // ADD
3988+
assertNode(add).hasToken(Token.ADD);
3989+
assertNode(add.getFirstChild()).isBigInt(BigInteger.ZERO);
3990+
assertNode(add.getLastChild()).isName("x");
3991+
}
3992+
39803993
@Test
39813994
public void testBigIntLiteralErrors() {
39823995
parseError("01n;", "SyntaxError: nonzero BigInt can't have leading zero");

0 commit comments

Comments
 (0)