diff --git a/src/Utilities/Javascript.hs b/src/Utilities/Javascript.hs index 56fbf9d..0097d63 100644 --- a/src/Utilities/Javascript.hs +++ b/src/Utilities/Javascript.hs @@ -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 ] )