q      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  Safe-Inferred    NoneuStatements, spec 12. function f(x, y, z) {...} , spec 13  var x, y=42; , spec 12.2  with (o) stmt , spec 12.10  return expr; , spec 12.9  throw expr; , spec 12.13 #try stmt catch(x) stmt finally stmt , spec 12.14 !"ForStmt a init test increment body, for (init; test,  increment) body , spec 12.6 "for (x in o) stmt , spec 12.6 # lab: stmt , spec 12.12 $ continue lab; , spec 12.7 % break lab; , spec 12.8 &do stmt while (e); , spec 12.6 'while (e) do stmt , spec 12.6 (switch (e) clauses , spec 12.11 )if (e) stmt1 else stmt2 , spec 12.5 * if (e) stmt , spec 12.5 +expr; , spec 12.4 ,; , spec 12.3 -{stmts} , spec 12.1 .for..in initializer, spec 12.6 /foo.baz, foo[bar], z 0 var x1for initializer, spec 12.6 2 expr3  var x, y=424empty 5"A variable declaration, spec 12.2 6  var x = e;7Catch clause, spec 12.14 8 catch (x) {...}9Case clauses, spec 12.11 : default: stmts;; case e: stmts;<Expressions, see spec 11 =function f (x,y,z) {...}, spec 11.2.5, 13 >f(x,y,z), spec 11.2.3 funcexprs are optionally named ?e1, e2 , spec 11.14 @e1 @=e2 , spec 11.13 A e1 ? e2 : e3 , spec 11.12 Be1@e22, spec 11.5, 11.6, 11.7, 11.8, 11.9, 11.10, 11.11 C++x, x--! etc., spec 11.3, 11.4.4, 11.4.5 D@e(, spec 11.4 (excluding 11.4.4, 111.4.5) E new foo(bar), spec 11.2.2 Ffoo[bar, spec 11.2.1 Gfoo.bar, spec 11.2.1 Hfoo, spec 11.1.2 Ithis, spec 11.1.1 J{foo:"bar" , baz: 42}, spec 11.1.5 K[1,2,3], spec 11.1.4 Lnull, spec 11.1.3, 7.8 Mtrue, spec 11.1.3, 7.8 N42, spec 11.1.3, 7.8 O41.99999, spec 11.1.3, 7.8 P-RegexpLit a regexp global? case_insensitive? -- regular " expression, see spec 11.1.3, 7.8 Q"foo", spec 11.1.3, 7.8 R*Left-hand side expressions: see spec 11.2 S foo[bar]T foo.barUvariable reference, foo V9Property names in an object initializer: see spec 11.1.5 Wproperty name is an integer, 42 Xproperty name is a string, "foo" Y property name is an identifier, foo Z;Prefix operators: see spec 11.4 (excluding 11.4.4, 11.4.5) [ delete\ void] typeof^ -_ +` ~a !b:Unary assignment operators: see spec 11.3, 11.4.4, 11.4.5 c x--d x++e --xf ++xg%Assignment operators: see spec 11.13 h |=i ^=j &=k >>>=l >>=m <<=n %=o /=p *=q -=r +=ssimple assignment, = t%Infix operators: see spec 11.5-11.11 u +v |w ^x &y >>>z >>{ <<| -} %~ / * || && !=== === != ==  instanceof in >= > <= < A script in <script> ... </script> tags. +extracts statements from a JavaScript type Returns  if the statement is an IterationStatement  according to spec 12.6. { !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~z !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~z-,+*)('&%$#"! 9;:781432.0/56<QPONMLKJIHGFEDCBA@?>=t~}|{zyxwvugsrqponmlkjihZa`_^]\[VYXWbfedcRUTS-,+*)('&%$#"! .0/143256789;:<QPONMLKJIHGFEDCBA@?>=RUTSVYXWZa`_^]\[bfedcg srqponmlkjiht~}|{zyxwvuNone"Renders a list of statements as a  "Renders a list of statements as a  ppRelationalExpression True is RelationalExpression,  ppRelationalExpression False is RelationalExpressionNoIn ARenders a JavaScript program as a document, the show instance of  $ will pretty-print it automatically ((None/Returns the annotation of the root of the tree  Removes annotations from a tree >Changes all the labels in the tree to another one, given by a  function. @add an extra field to the AST labels (the label would look like   (a, b) ) remove an extra field BAssigns unique numeric (Int) ids to each node in the AST. Returns $ a pair: the tree annotated with UID's and the last ID that was  assigned.  starting id  tree root  None@checks if the label is not yet on the stack, if it is -- throws 1 an error; otherwise it pushes it onto the stack DCreates a decimal value from a whole, fractional and exponent part. Parse from a stream; same as    ?Read a JavaScript program from file an parse it into a list of  statements )Parse a JavaScript program from a string ;Parse a JavaScript source string into a list of statements S      !"#$%&'()*+,-./0123456789:;<=>?@AThe parser to use Name of the source file the stream to parse, usually a   file name source file name JavaScript source to parse JavaScript source S      !"#$%&'()*+,-./0123456789:;<=>?@ANone;Fixes labels so that labeled breaks and continues refer to E existing labeled statements, enclosing them; also, reduces the size C of the label set. Assumes that the program has a proper syntactic  structure, i.e.  s = True. 'choose n elements from a list randomly 9A predicate that tells us whether a program has a fixable/correct  label-break/5continue structure. The predicate imposes syntactic B restrictions on the break, continue and labeled statements as in  the ECMA spec BImposes relaxed restrictions on break and continue per ECMAScript A 5 spec (page 92): any continue without a label should be nested ? within an iteration stmt, any continue with a label should be > nested in a labeled statement (not necessarily with the same D label); any break statement without a label should be nested in an C iteration or switch stmt, any break statement with a label should A be nested in a labeled statement (not necessarily with the same  label). ARemoves duplicate labels from nested labeled statements in order B to impose restrictions on labeled statements as per ECMAScript 5 C spec (page 95): nested labeled statements cannot have duplicating  labels. %Selects a random element of the list Changes labels of break/*continue so that they refer to one of the  enclosing labels &BCDEFGHIJKLMNOP&BCDEFGHIJKLMNOPNoneFThe statically-determinate lexical structure of a JavaScript program. QEIntermediate data structure that contains locally declared names and  all references to identifers. QRSTUVWXYZ[\]^_`abcdenclosing environment !local environment and references #environment and global definitions browser/testing environment QRSTUVWXYZ[\]^_`abcdNone+Labels are either strings (identifiers) or empty (see 12.12 of  the spec) 9Annotates statements with their label sets; example use: +let jsa = reannotate (\a -> (a, Set.empty))Iin annotateLabelSets jsa snd (\labs (a, ls) -> (a, labs `Set.union` ls))e 12 ECMA262: the production  Identifier :  Statement is  evaluated by adding  Identifier to the label ser of  Statement  and then evluating  Statement . If the LabelledStatement itsef E has a non-empty label set, these labels are also added to the label  set of  Statement2 before evaluating it. ... Prior to evaluation of  a LabelledStatement, the contained  Statement is regarded as 0 possessing an empty label set, unless it is an IterationStatement  or a SwitchStatement-, in which case it is regarded as possessing / a label set consisting of the single element, empty. annotation read function annotation write function the script to annotate fgehfgeh None !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~i  !"#$%&'()*+,-./0123456789:;<=>?@ABCCDDEFEGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[[\]^_`abcdGefghijklmnlanguage-ecmascript-0.10Language.ECMAScript3.SyntaxLanguage.ECMAScript3.Lexer Language.ECMAScript3.PrettyPrint'Language.ECMAScript3.Syntax.AnnotationsLanguage.ECMAScript3.Parser%Language.ECMAScript3.Syntax.Arbitrary)Language.ECMAScript3.Analysis.Environment'Language.ECMAScript3.Analysis.LabelSets Text.ParsecparseLanguage.ECMAScript3 parsec-3.1.3Text.Parsec.Pos SourcePosidentifierStart identifierreservedoperator reservedOp charLiteral stringLiteralnaturalintegerfloatnaturalOrFloatdecimal hexadecimaloctalsymbol whiteSpaceparensbracessquaressemicommacolondotbracketslexeme Statement FunctionStmt VarDeclStmtWithStmt ReturnStmt ThrowStmtTryStmtForStmt ForInStmt LabelledStmt ContinueStmt BreakStmt DoWhileStmt WhileStmt SwitchStmt IfSingleStmtIfStmtExprStmt EmptyStmt BlockStmt ForInInit ForInLValForInVarForInitExprInitVarInitNoInitVarDecl CatchClause CaseClause CaseDefault ExpressionFuncExprCallExprListExpr AssignExprCondExpr InfixExprUnaryAssignExpr PrefixExprNewExpr BracketRefDotRefVarRefThisRef ObjectLitArrayLitNullLitBoolLitIntLitNumLit RegexpLit StringLitLValueLBracketLDotLVarPropPropNum PropStringPropIdPrefixOp PrefixDelete PrefixVoid PrefixTypeof PrefixMinus PrefixPlus PrefixBNot PrefixLNot UnaryAssignOp PostfixDec PostfixInc PrefixDec PrefixIncAssignOp OpAssignBOr OpAssignBXor OpAssignBAndOpAssignZfRShiftOpAssignSpRShiftOpAssignLShift OpAssignMod OpAssignDiv OpAssignMul OpAssignSub OpAssignAddOpAssignInfixOpOpAddOpBOrOpBXorOpBAnd OpZfRShift OpSpRShiftOpLShiftOpSubOpModOpDivOpMulOpLOrOpLAnd OpStrictNEq OpStrictEqOpNEqOpEq OpInstanceofOpInOpGEqOpGTOpLEqOpLTId JavaScriptScript unJavaScriptunIdisIterationStmtrenderStatementsrenderExpression javaScript HasAnnotation getAnnotationremoveAnnotations reannotateaddExtraAnnotationFieldremoveExtraAnnotationFieldassignUniqueIdsExpressionParserStatementParserParsedExpressionParsedStatementparseBlockStmtparseStatement mkDecimalintLenparseSimpleExpr' assignExprparseExpression parseScriptparseJavaScriptFromFileparseScriptFromString parseString LabelSubstMSGencshrinksGen recursive rarbitrary rrarbitrary atLeastOfSizenonEmptyString regexpBody nonNegativestringOfLengthemptyStmtShrinkemptyConstantPool fixLabels rChooseElemisProgramFixableisBreakContinueFixableremoveDuplicateLabelsselectRandomElementfixBreakContinueLabels isSwitchStmtEnvTreeenv localVarsLabel EmptyLabelannotateLabelSets javascriptDeflexghc-prim GHC.TypesTrue$fDefaultSourcePos$fDefaultJavaScriptbaseGHC.BaseStringppRelationalExpressionpretty-1.1.1.0Text.PrettyPrint.HughesPJDocinBlockasBlockppIdforInit forInInit caseClause ppVarDecl ppStatementstmtListpropinfixOpprefixOpassignOpjsEscape regexpEscapeppLValueppPrimaryExpressionppMemberExpressionppCallExpression ppArgumentsppLHSExpressionppPostfixExpressionppUnaryExpressionppMultiplicativeExpressionppAdditiveExpressionppShiftExpressionppEqualityExpressionppBitwiseANDExpressionppBitwiseXORExpressionppBitwiseORExpressionppLogicalANDExpressionppLogicalORExpressionppConditionalExpressionppAssignmentExpression ppExpressionmaybe$fHasAnnotationCatchClause$fHasAnnotationCaseClause$fHasAnnotationProp$fHasAnnotationVarDecl$fHasAnnotationLValue$fHasAnnotationStatement$fHasAnnotationExpression pushLabel ParserState CharParserinitialParserStatepopLabel clearLabelswithFreshLabelStack parseIfStmtparseSwitchStmtparseWhileStmtparseDoWhileStmtparseContinueStmtparseBreakStmtparseEmptyStmtparseLabelledStmtparseExpressionStmtparseForInStmt parseForStmt parseTryStmtparseThrowStmtparseReturnStmt parseWithStmt parseVarDeclparseVarDeclStmtparseFunctionStmt parseThisRef parseNullLit parseBoolLit parseVarRef parseArrayLit parseFuncExpr escapeChars allEscapesparseEscapeCharparseAsciiHexCharparseUnicodeHexChar isWhitespaceparseStringLit'parseStringLitparseRegexpLitparseObjectLithexLit exponentPartjparserdecLit parseNumLitwithPosdotReffuncApp bracketRefparseParenExprparseExprForNew parseNewExprparseSimpleExprparseSimpleExprForNew makeInfixExprparsePrefixedExpr exprTableparseExpression'asLValuelvalueunaryAssignExprparseTernaryExpr'parseTernaryExpr parseListExpr$fArbitraryJavaScript$fArbitraryStatement$fArbitraryVarDecl$fArbitraryCatchClause$fArbitraryForInit$fArbitraryForInInit$fArbitraryExpression$fArbitraryLValue$fArbitraryProp$fArbitraryCaseClause $fArbitraryId$fArbitraryPrefixOp$fArbitraryUnaryAssignOp$fArbitraryInfixOp$fArbitraryAssignOpPartial partialLocalspartialReferences partialNestedemptyrefdeclnestunions javascriptexpr catchClausevarDeclstmt makeEnvTreeannotateStatementannotateFuncStmtBodiesannotateFuncExprBodiesid2Label