handled reserved words whether an expression is allowed or not

This commit is contained in:
Pagwin 2025-12-31 15:16:55 -05:00
parent 7388aee8d1
commit cd5e094eca
No known key found for this signature in database
GPG key ID: 81137023740CA260

View file

@ -219,7 +219,7 @@ token =
-- briefly was concerned about {} but then realized that isn't a literal
try literal <* exprNotAllowed,
-- handled on a case by case basis
try punctuator <* error "TODO",
try punctuator <* exprNoop "Decided on a case by case basis",
try linebreak <* exprNoop "technically wrong due to semicolon insertion but hopefully that never comes up usage for this",
whitespace <* exprNoop "non linebreak whitespace doesn't change whether an expression is allowed or not, same as comments"
]
@ -246,42 +246,42 @@ reserved_word :: (Logger m, Characters s) => Parser s m (Token s)
reserved_word =
choice
[ try await <* exprAllowed,
try break <* error "TODO exprAllowed",
try break <* exprNotAllowed,
try case_ <* exprAllowed,
try catch_ <* error "TODO exprAllowed",
try class_ <* error "TODO exprAllowed",
try const <* error "TODO exprAllowed",
try continue <* error "TODO exprAllowed",
try debugger <* error "TODO exprAllowed",
try default_ <* error "TODO exprAllowed",
try catch_ <* exprAllowed, -- literally invalid this is pure guess work
try class_ <* exprAllowed, -- literally invalid this is pure guess work
try const <* exprAllowed, -- literally invalid this is pure guess work
try continue <* exprNotAllowed,
try debugger <* exprNotAllowed,
try default_ <* exprNotAllowed, -- literally invalid this is pure guess work
try delete <* exprAllowed,
try do_ <* error "TODO exprAllowed",
try else_ <* error "TODO exprAllowed",
try enum <* error "TODO exprAllowed",
try export <* error "TODO exprAllowed",
try extends <* error "TODO exprAllowed",
try do_ <* exprNotAllowed,
try if_ <* exprAllowed, -- literally invalid this is pure guess work
try else_ <* exprAllowed, -- literally invalid this is pure guess work
try enum <* exprNotAllowed, -- literally invalid this is pure guess work
try export <* exprNotAllowed, -- literally invalid this is pure guess work
try extends <* exprAllowed,
try false <* exprNotAllowed,
try finally_ <* error "TODO exprAllowed",
try for_ <* error "TODO exprAllowed",
try function <* error "TODO exprAllowed",
try if_ <* error "TODO exprAllowed",
try import_ <* error "TODO exprAllowed",
try finally_ <* exprNotAllowed, -- literally invalid this is pure guess work
try for_ <* exprNotAllowed, -- literally invalid this is pure guess work
try function <* exprNotAllowed, -- literally invalid this is pure guess work
try import_ <* exprNotAllowed, -- literally invalid this is pure guess work
try in_ <* exprAllowed,
try instanceof <* exprAllowed,
try new <* error "TODO exprAllowed",
try null <* error "TODO exprAllowed",
try new <* exprAllowed,
try null <* exprNotAllowed,
try return <* exprAllowed,
try super <* error "TODO exprAllowed",
try switch <* error "TODO exprAllowed",
try this <* error "TODO exprAllowed",
try super <* exprNotAllowed,
try switch <* exprNotAllowed,
try this <* exprNotAllowed,
try throw_ <* exprAllowed,
try true <* exprNotAllowed,
try try_ <* error "TODO exprAllowed",
try try_ <* exprNotAllowed, -- literally invalid this is pure guess work
try typeof <* exprAllowed,
try var <* exprNotAllowed,
try void <* error "TODO exprAllowed",
try while <* error "TODO exprAllowed",
try with <* error "TODO exprAllowed",
try void <* exprNotAllowed, -- literally invalid this is pure guess work
try while <* exprNotAllowed, -- literally invalid this is pure guess work
try with <* exprNotAllowed, -- literally invalid this is pure guess work
yield <* exprNotAllowed
]
where
@ -394,58 +394,59 @@ punctuator :: (Logger m, Characters s) => Parser s m (Token s)
punctuator =
Punc
<$> ( choice
[ try $ string ">>>=" *> pure UnsignedRightShiftAssign,
try $ string "..." *> pure Spread,
try $ string "===" *> pure TripleEqual,
try $ string "!==" *> pure DoubleNotEqual,
try $ string "<<=" *> pure LeftShiftAssign,
try $ string ">>=" *> pure RightShiftAssign,
try $ string ">>>" *> pure UnsignedRightShift,
try $ string "**=" *> pure ExpAssign,
try $ string "&&=" *> pure LogicalAndAssign,
try $ string "||=" *> pure LogicalOrAssign,
try $ string "??=" *> pure NullishAssign,
try $ string "?." *> (notFollowedBy digitChar) *> pure OptionalChain,
try $ string "**" *> pure Exp,
try $ string "++" *> pure Inc,
try $ string "--" *> pure Dec,
try $ string "<=" *> pure LTEQ,
try $ string ">=" *> pure GTEQ,
try $ string "==" *> pure DoubleEqual,
try $ string "!=" *> pure NotEqual,
try $ string "<<" *> pure LeftShift,
try $ string ">>" *> pure RightShift,
try $ string "+=" *> pure AddAssign,
try $ string "-=" *> pure SubAssign,
try $ string "*=" *> pure MultAssign,
try $ string "%=" *> pure ModAssign,
try $ string "&=" *> pure BitwiseAndAssign,
try $ string "|=" *> pure BitwiseOrAssign,
try $ string "^=" *> pure BitwiseXorAssign,
try $ string "&&" *> pure LogicalAnd,
try $ string "||" *> pure LogicalOr,
try $ string "??" *> pure Nullish,
char '+' *> pure Add,
char '-' *> pure Sub,
char '*' *> pure Mult,
char '%' *> pure Mod,
char '<' *> pure Utilities.Javascript.LT,
char '>' *> pure Utilities.Javascript.GT,
char '&' *> pure BitwiseAnd,
char '|' *> pure BitwiseOr,
char '^' *> pure BitwiseXor,
char '~' *> pure BitwiseNot,
char '=' *> pure Assign,
char '(' *> pure LParen,
char ')' *> pure RParen,
char '{' *> pure LCurly,
char '}' *> pure RCurly,
char '[' *> pure LSquare,
char ']' *> pure RSquare,
char '.' *> pure Dot,
char ';' *> pure Semicolon,
char ',' *> pure Comma,
char '!' *> pure LogicalNot
[ try $ string ">>>=" *> pure UnsignedRightShiftAssign <* exprAllowed,
try $ string "..." *> pure Spread <* exprNotAllowed,
try $ string "===" *> pure TripleEqual <* exprAllowed,
try $ string "!==" *> pure DoubleNotEqual <* exprAllowed,
try $ string "<<=" *> pure LeftShiftAssign <* exprAllowed,
try $ string ">>=" *> pure RightShiftAssign <* exprAllowed,
try $ string ">>>" *> pure UnsignedRightShift <* exprAllowed,
try $ string "**=" *> pure ExpAssign <* exprAllowed,
try $ string "&&=" *> pure LogicalAndAssign <* exprAllowed,
try $ string "||=" *> pure LogicalOrAssign <* exprAllowed,
try $ string "??=" *> pure NullishAssign <* exprAllowed,
try $ string "++" *> pure Inc <* error "TODO: Ambiguous precrement vs postcrement",
try $ string "--" *> pure Dec <* error "TODO: Ambiguous precrement postcrement",
try $ string "?." *> (notFollowedBy digitChar) *> pure OptionalChain <* exprNotAllowed,
try $ string "**" *> pure Exp <* exprAllowed,
try $ string "<=" *> pure LTEQ <* exprAllowed,
try $ string ">=" *> pure GTEQ <* exprAllowed,
try $ string "==" *> pure DoubleEqual <* exprAllowed,
try $ string "!=" *> pure NotEqual <* exprAllowed,
try $ string "<<" *> pure LeftShift <* exprAllowed,
try $ string ">>" *> pure RightShift <* exprAllowed,
try $ string "+=" *> pure AddAssign <* exprAllowed,
try $ string "-=" *> pure SubAssign <* exprAllowed,
try $ string "*=" *> pure MultAssign <* exprAllowed,
try $ string "%=" *> pure ModAssign <* exprAllowed,
try $ string "&=" *> pure BitwiseAndAssign <* exprAllowed,
try $ string "|=" *> pure BitwiseOrAssign <* exprAllowed,
try $ string "^=" *> pure BitwiseXorAssign <* exprAllowed,
try $ string "&&" *> pure LogicalAnd <* exprAllowed,
try $ string "||" *> pure LogicalOr <* exprAllowed,
try $ string "??" *> pure Nullish <* exprAllowed,
char '+' *> pure Add <* exprAllowed,
char '-' *> pure Sub <* exprAllowed,
char '*' *> pure Mult <* exprAllowed,
char '%' *> pure Mod <* exprAllowed,
char '<' *> pure Utilities.Javascript.LT <* exprAllowed,
char '>' *> pure Utilities.Javascript.GT <* exprAllowed,
char '&' *> pure BitwiseAnd <* exprAllowed,
char '|' *> pure BitwiseOr <* exprAllowed,
char '^' *> pure BitwiseXor <* exprAllowed,
char '~' *> pure BitwiseNot <* exprAllowed,
char '=' *> pure Assign <* exprAllowed,
char ';' *> pure Semicolon <* exprAllowed,
char ',' *> pure Comma <* exprAllowed,
char '!' *> pure LogicalNot <* exprAllowed,
-- HERE
char '(' *> pure LParen <* exprNotAllowed,
char ')' *> pure RParen <* exprNotAllowed,
char '{' *> pure LCurly <* error "TODO: Ambiguous",
char '}' *> pure RCurly <* error "TODO: Ambiguous",
char '[' *> pure LSquare <* exprNotAllowed,
char ']' *> pure RSquare <* exprNotAllowed,
char '.' *> pure Dot <* exprNotAllowed
]
)