-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Parser for JavaScript -- -- Parses Javascript into an Abstract Syntax Tree (AST). Initially -- intended as frontend to hjsmin. -- -- Note: Version 0.5.0 breaks compatibility with prior versions, the AST -- has been reworked to allow round trip processing of JavaScript. @package language-javascript @version 0.6.0.13 module Language.JavaScript.Parser.SrcLocation -- | TokenPosn records the location of a token in the input text. It -- has three fields: the address (number of characters preceding the -- token), line number and column of a token within the file. Note: The -- lexer assumes the usual eight character tab stops. data TokenPosn TokenPn :: !Int -> !Int -> !Int -> TokenPosn tokenPosnEmpty :: TokenPosn instance Data.Data.Data Language.JavaScript.Parser.SrcLocation.TokenPosn instance GHC.Read.Read Language.JavaScript.Parser.SrcLocation.TokenPosn instance GHC.Show.Show Language.JavaScript.Parser.SrcLocation.TokenPosn instance GHC.Classes.Eq Language.JavaScript.Parser.SrcLocation.TokenPosn module Language.JavaScript.Parser.Lexer -- | Lexical tokens. Each may be annotated with any comment occurring -- between the prior token and this one data Token -- | Single line comment. CommentToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] -- | White space, for preservation. WsToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] -- | Identifier. IdentifierToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] -- | Literal: Decimal DecimalToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] -- | Literal: Hexadecimal Integer HexIntegerToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] -- | Literal: Octal Integer OctalToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] -- | Literal: string, delimited by either single or double quotes StringToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] -- | Literal: Regular Expression RegExToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] BreakToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] CaseToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] CatchToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] ConstToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] LetToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] ContinueToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] DebuggerToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] DefaultToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] DeleteToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] DoToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] ElseToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] EnumToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] FalseToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] FinallyToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] ForToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] FunctionToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] FromToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] IfToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] InToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] InstanceofToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] NewToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] NullToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] OfToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] ReturnToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] SwitchToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] ThisToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] ThrowToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] TrueToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] TryToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] TypeofToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] VarToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] VoidToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] WhileToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] ImportToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] WithToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] ExportToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] FutureToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] GetToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] SetToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] AutoSemiToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] SemiColonToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] CommaToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] HookToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] ColonToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] OrToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] AndToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] BitwiseOrToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] BitwiseXorToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] BitwiseAndToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] StrictEqToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] EqToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] TimesAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] DivideAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] ModAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] PlusAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] MinusAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] LshAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] RshAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] UrshAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] AndAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] XorAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] OrAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] SimpleAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] StrictNeToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] NeToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] LshToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] LeToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] LtToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] UrshToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] RshToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] GeToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] GtToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] IncrementToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] DecrementToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] PlusToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] MinusToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] MulToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] DivToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] ModToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] NotToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] BitwiseNotToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] ArrowToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] SpreadToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] DotToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] LeftBracketToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] RightBracketToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] LeftCurlyToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] RightCurlyToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] LeftParenToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] RightParenToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] CondcommentEndToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] AsToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenLiteral] :: Token -> !String [tokenComment] :: Token -> ![CommentAnnotation] -- | Stuff between last JS and EOF TailToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] -- | End of file EOFToken :: !TokenPosn -> ![CommentAnnotation] -> Token [tokenSpan] :: Token -> !TokenPosn [tokenComment] :: Token -> ![CommentAnnotation] data Alex a lexCont :: (Token -> Alex a) -> Alex a alexError :: String -> Alex a runAlex :: String -> Alex a -> Either String a alexTestTokeniser :: String -> Either String [Token] instance GHC.Show.Show Language.JavaScript.Parser.Lexer.AlexPosn instance GHC.Classes.Eq Language.JavaScript.Parser.Lexer.AlexPosn instance GHC.Base.Functor Language.JavaScript.Parser.Lexer.Alex instance GHC.Base.Applicative Language.JavaScript.Parser.Lexer.Alex instance GHC.Base.Monad Language.JavaScript.Parser.Lexer.Alex module Language.JavaScript.Parser.AST data JSExpression -- | Terminals JSIdentifier :: !JSAnnot -> !String -> JSExpression JSDecimal :: !JSAnnot -> !String -> JSExpression JSLiteral :: !JSAnnot -> !String -> JSExpression JSHexInteger :: !JSAnnot -> !String -> JSExpression JSOctal :: !JSAnnot -> !String -> JSExpression JSStringLiteral :: !JSAnnot -> !String -> JSExpression JSRegEx :: !JSAnnot -> !String -> JSExpression -- | lb, contents, rb JSArrayLiteral :: !JSAnnot -> ![JSArrayElement] -> !JSAnnot -> JSExpression -- | lhs, assignop, rhs JSAssignExpression :: !JSExpression -> !JSAssignOp -> !JSExpression -> JSExpression -- | expr, bl, args, rb JSCallExpression :: !JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> JSExpression -- | expr, dot, expr JSCallExpressionDot :: !JSExpression -> !JSAnnot -> !JSExpression -> JSExpression -- | expr, [, expr, ] JSCallExpressionSquare :: !JSExpression -> !JSAnnot -> !JSExpression -> !JSAnnot -> JSExpression -- | expression components JSCommaExpression :: !JSExpression -> !JSAnnot -> !JSExpression -> JSExpression -- | lhs, op, rhs JSExpressionBinary :: !JSExpression -> !JSBinOp -> !JSExpression -> JSExpression -- | lb,expression,rb JSExpressionParen :: !JSAnnot -> !JSExpression -> !JSAnnot -> JSExpression -- | expression, operator JSExpressionPostfix :: !JSExpression -> !JSUnaryOp -> JSExpression -- | cond, ?, trueval, :, falseval JSExpressionTernary :: !JSExpression -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSExpression -> JSExpression -- | parameter list,arrow,block` JSArrowExpression :: !JSArrowParameterList -> !JSAnnot -> !JSStatement -> JSExpression -- | fn,name,lb, parameter list,rb,block` JSFunctionExpression :: !JSAnnot -> !JSIdent -> !JSAnnot -> !JSCommaList JSIdent -> !JSAnnot -> !JSBlock -> JSExpression -- | firstpart, dot, name JSMemberDot :: !JSExpression -> !JSAnnot -> !JSExpression -> JSExpression JSMemberExpression :: !JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> JSExpression -- | new, name, lb, args, rb JSMemberNew :: !JSAnnot -> !JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> JSExpression -- | firstpart, lb, expr, rb JSMemberSquare :: !JSExpression -> !JSAnnot -> !JSExpression -> !JSAnnot -> JSExpression -- | new, expr JSNewExpression :: !JSAnnot -> !JSExpression -> JSExpression -- | lbrace contents rbrace JSObjectLiteral :: !JSAnnot -> !JSObjectPropertyList -> !JSAnnot -> JSExpression JSSpreadExpression :: !JSAnnot -> !JSExpression -> JSExpression JSUnaryExpression :: !JSUnaryOp -> !JSExpression -> JSExpression -- | identifier, initializer JSVarInitExpression :: !JSExpression -> !JSVarInitializer -> JSExpression data JSAnnot -- | Annotation: position and comment/whitespace information JSAnnot :: !TokenPosn -> ![CommentAnnotation] -> JSAnnot -- | A single space character JSAnnotSpace :: JSAnnot -- | No annotation JSNoAnnot :: JSAnnot data JSBinOp JSBinOpAnd :: !JSAnnot -> JSBinOp JSBinOpBitAnd :: !JSAnnot -> JSBinOp JSBinOpBitOr :: !JSAnnot -> JSBinOp JSBinOpBitXor :: !JSAnnot -> JSBinOp JSBinOpDivide :: !JSAnnot -> JSBinOp JSBinOpEq :: !JSAnnot -> JSBinOp JSBinOpGe :: !JSAnnot -> JSBinOp JSBinOpGt :: !JSAnnot -> JSBinOp JSBinOpIn :: !JSAnnot -> JSBinOp JSBinOpInstanceOf :: !JSAnnot -> JSBinOp JSBinOpLe :: !JSAnnot -> JSBinOp JSBinOpLsh :: !JSAnnot -> JSBinOp JSBinOpLt :: !JSAnnot -> JSBinOp JSBinOpMinus :: !JSAnnot -> JSBinOp JSBinOpMod :: !JSAnnot -> JSBinOp JSBinOpNeq :: !JSAnnot -> JSBinOp JSBinOpOf :: !JSAnnot -> JSBinOp JSBinOpOr :: !JSAnnot -> JSBinOp JSBinOpPlus :: !JSAnnot -> JSBinOp JSBinOpRsh :: !JSAnnot -> JSBinOp JSBinOpStrictEq :: !JSAnnot -> JSBinOp JSBinOpStrictNeq :: !JSAnnot -> JSBinOp JSBinOpTimes :: !JSAnnot -> JSBinOp JSBinOpUrsh :: !JSAnnot -> JSBinOp data JSUnaryOp JSUnaryOpDecr :: !JSAnnot -> JSUnaryOp JSUnaryOpDelete :: !JSAnnot -> JSUnaryOp JSUnaryOpIncr :: !JSAnnot -> JSUnaryOp JSUnaryOpMinus :: !JSAnnot -> JSUnaryOp JSUnaryOpNot :: !JSAnnot -> JSUnaryOp JSUnaryOpPlus :: !JSAnnot -> JSUnaryOp JSUnaryOpTilde :: !JSAnnot -> JSUnaryOp JSUnaryOpTypeof :: !JSAnnot -> JSUnaryOp JSUnaryOpVoid :: !JSAnnot -> JSUnaryOp data JSSemi JSSemi :: !JSAnnot -> JSSemi JSSemiAuto :: JSSemi data JSAssignOp JSAssign :: !JSAnnot -> JSAssignOp JSTimesAssign :: !JSAnnot -> JSAssignOp JSDivideAssign :: !JSAnnot -> JSAssignOp JSModAssign :: !JSAnnot -> JSAssignOp JSPlusAssign :: !JSAnnot -> JSAssignOp JSMinusAssign :: !JSAnnot -> JSAssignOp JSLshAssign :: !JSAnnot -> JSAssignOp JSRshAssign :: !JSAnnot -> JSAssignOp JSUrshAssign :: !JSAnnot -> JSAssignOp JSBwAndAssign :: !JSAnnot -> JSAssignOp JSBwXorAssign :: !JSAnnot -> JSAssignOp JSBwOrAssign :: !JSAnnot -> JSAssignOp data JSTryCatch -- | catch,lb,ident,rb,block JSCatch :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSBlock -> JSTryCatch -- | catch,lb,ident,if,expr,rb,block JSCatchIf :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSBlock -> JSTryCatch data JSTryFinally -- | finally,block JSFinally :: !JSAnnot -> !JSBlock -> JSTryFinally JSNoFinally :: JSTryFinally data JSStatement -- | lbrace, stmts, rbrace, autosemi JSStatementBlock :: !JSAnnot -> ![JSStatement] -> !JSAnnot -> !JSSemi -> JSStatement -- | break,optional identifier, autosemi JSBreak :: !JSAnnot -> !JSIdent -> !JSSemi -> JSStatement -- | const, decl, autosemi JSLet :: !JSAnnot -> !JSCommaList JSExpression -> !JSSemi -> JSStatement -- | const, decl, autosemi JSConstant :: !JSAnnot -> !JSCommaList JSExpression -> !JSSemi -> JSStatement -- | continue, optional identifier,autosemi JSContinue :: !JSAnnot -> !JSIdent -> !JSSemi -> JSStatement -- | do,stmt,while,lb,expr,rb,autosemi JSDoWhile :: !JSAnnot -> !JSStatement -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSSemi -> JSStatement -- | for,lb,expr,semi,expr,semi,expr,rb.stmt JSFor :: !JSAnnot -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | for,lb,expr,in,expr,rb,stmt JSForIn :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | for,lb,var,vardecl,semi,expr,semi,expr,rb,stmt JSForVar :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | for,lb,var,vardecl,in,expr,rb,stmt JSForVarIn :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | for,lb,var,vardecl,semi,expr,semi,expr,rb,stmt JSForLet :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | for,lb,var,vardecl,in,expr,rb,stmt JSForLetIn :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | for,lb,var,vardecl,in,expr,rb,stmt JSForLetOf :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | for,lb,expr,in,expr,rb,stmt JSForOf :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | for,lb,var,vardecl,in,expr,rb,stmt JSForVarOf :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | fn,name, lb,parameter list,rb,block,autosemi JSFunction :: !JSAnnot -> !JSIdent -> !JSAnnot -> !JSCommaList JSIdent -> !JSAnnot -> !JSBlock -> !JSSemi -> JSStatement -- | if,(,expr,),stmt JSIf :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | if,(,expr,),stmt,else,rest JSIfElse :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSStatement -> !JSAnnot -> !JSStatement -> JSStatement -- | identifier,colon,stmt JSLabelled :: !JSIdent -> !JSAnnot -> !JSStatement -> JSStatement JSEmptyStatement :: !JSAnnot -> JSStatement JSExpressionStatement :: !JSExpression -> !JSSemi -> JSStatement -- | lhs, assignop, rhs, autosemi JSAssignStatement :: !JSExpression -> !JSAssignOp -> !JSExpression -> !JSSemi -> JSStatement JSMethodCall :: !JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSSemi -> JSStatement -- | optional expression,autosemi JSReturn :: !JSAnnot -> !Maybe JSExpression -> !JSSemi -> JSStatement -- | switch,lb,expr,rb,caseblock,autosemi JSSwitch :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSAnnot -> ![JSSwitchParts] -> !JSAnnot -> !JSSemi -> JSStatement -- | throw val autosemi JSThrow :: !JSAnnot -> !JSExpression -> !JSSemi -> JSStatement -- | try,block,catches,finally JSTry :: !JSAnnot -> !JSBlock -> ![JSTryCatch] -> !JSTryFinally -> JSStatement -- | var, decl, autosemi JSVariable :: !JSAnnot -> !JSCommaList JSExpression -> !JSSemi -> JSStatement -- | while,lb,expr,rb,stmt JSWhile :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement -- | with,lb,expr,rb,stmt list JSWith :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSStatement -> !JSSemi -> JSStatement data JSBlock -- | lbrace, stmts, rbrace JSBlock :: !JSAnnot -> ![JSStatement] -> !JSAnnot -> JSBlock data JSSwitchParts -- | expr,colon,stmtlist JSCase :: !JSAnnot -> !JSExpression -> !JSAnnot -> ![JSStatement] -> JSSwitchParts -- | colon,stmtlist JSDefault :: !JSAnnot -> !JSAnnot -> ![JSStatement] -> JSSwitchParts data JSAST -- | source elements, trailing whitespace JSAstProgram :: ![JSStatement] -> !JSAnnot -> JSAST JSAstModule :: ![JSModuleItem] -> !JSAnnot -> JSAST JSAstStatement :: !JSStatement -> !JSAnnot -> JSAST JSAstExpression :: !JSExpression -> !JSAnnot -> JSAST JSAstLiteral :: !JSExpression -> !JSAnnot -> JSAST data JSObjectProperty -- | (get|set), name, lb, params, rb, block JSPropertyAccessor :: !JSAccessor -> !JSPropertyName -> !JSAnnot -> ![JSExpression] -> !JSAnnot -> !JSBlock -> JSObjectProperty -- | name, colon, value JSPropertyNameandValue :: !JSPropertyName -> !JSAnnot -> ![JSExpression] -> JSObjectProperty data JSPropertyName JSPropertyIdent :: !JSAnnot -> !String -> JSPropertyName JSPropertyString :: !JSAnnot -> !String -> JSPropertyName JSPropertyNumber :: !JSAnnot -> !String -> JSPropertyName type JSObjectPropertyList = JSCommaTrailingList JSObjectProperty -- | Accessors for JSObjectProperty is either get or set. data JSAccessor JSAccessorGet :: !JSAnnot -> JSAccessor JSAccessorSet :: !JSAnnot -> JSAccessor data JSIdent JSIdentName :: !JSAnnot -> !String -> JSIdent JSIdentNone :: JSIdent data JSVarInitializer -- | assignop, initializer JSVarInit :: !JSAnnot -> !JSExpression -> JSVarInitializer JSVarInitNone :: JSVarInitializer data JSArrayElement JSArrayElement :: !JSExpression -> JSArrayElement JSArrayComma :: !JSAnnot -> JSArrayElement data JSCommaList a -- | head, comma, a JSLCons :: !JSCommaList a -> !JSAnnot -> !a -> JSCommaList a -- | single element (no comma) JSLOne :: !a -> JSCommaList a JSLNil :: JSCommaList a data JSCommaTrailingList a -- | list, trailing comma JSCTLComma :: !JSCommaList a -> !JSAnnot -> JSCommaTrailingList a -- | list JSCTLNone :: !JSCommaList a -> JSCommaTrailingList a data JSArrowParameterList JSUnparenthesizedArrowParameter :: !JSIdent -> JSArrowParameterList JSParenthesizedArrowParameterList :: !JSAnnot -> !JSCommaList JSIdent -> !JSAnnot -> JSArrowParameterList data JSModuleItem -- | import,decl JSModuleImportDeclaration :: !JSAnnot -> !JSImportDeclaration -> JSModuleItem -- | export,decl JSModuleExportDeclaration :: !JSAnnot -> !JSExportDeclaration -> JSModuleItem JSModuleStatementListItem :: !JSStatement -> JSModuleItem data JSImportDeclaration -- | imports, module, semi | JSImportDeclarationBare -- ^ module, semi JSImportDeclaration :: !JSImportClause -> !JSFromClause -> !JSSemi -> JSImportDeclaration data JSImportClause -- | default JSImportClauseDefault :: !JSIdent -> JSImportClause -- | namespace JSImportClauseNameSpace :: !JSImportNameSpace -> JSImportClause -- | named imports JSImportClauseNamed :: !JSImportsNamed -> JSImportClause -- | default, comma, namespace JSImportClauseDefaultNameSpace :: !JSIdent -> !JSAnnot -> !JSImportNameSpace -> JSImportClause -- | default, comma, named imports JSImportClauseDefaultNamed :: !JSIdent -> !JSAnnot -> !JSImportsNamed -> JSImportClause data JSFromClause -- | from, string literal, string literal contents JSFromClause :: !JSAnnot -> !JSAnnot -> !String -> JSFromClause -- | Import namespace, e.g. '* as whatever' data JSImportNameSpace -- |