language-javascript 0.6.0.8 → 0.6.0.9
raw patch · 8 files changed
+541/−355 lines, 8 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Language.JavaScript.Parser.Lexer: instance GHC.Base.Functor Language.JavaScript.Parser.Lexer.AlexLastAcc
+ Language.JavaScript.Parser: JSAnnotSpace :: JSAnnot
+ Language.JavaScript.Parser.AST: JSAnnotSpace :: JSAnnot
+ Language.JavaScript.Parser.AST: binOpEq :: JSBinOp -> JSBinOp -> Bool
Files
- Tests/Minify.hs +8/−5
- dist/build/Language/JavaScript/Parser/Grammar5.hs +295/−141
- dist/build/Language/JavaScript/Parser/Lexer.hs +46/−56
- language-javascript.cabal +3/−3
- src/Language/JavaScript/Parser/AST.hs +31/−0
- src/Language/JavaScript/Parser/Grammar5.y +127/−138
- src/Language/JavaScript/Parser/Lexer.x +2/−2
- src/Language/JavaScript/Process/Minify.hs +29/−10
Tests/Minify.hs view
@@ -115,12 +115,15 @@ it "string concatenation" $ do minifyExpr " 'ab' + \"cd\" " `shouldBe` "'abcd'"- minifyExpr " \"bc\" + 'de' " `shouldBe` "\"bcde\""- minifyExpr " \"cd\" + 'ef' + 'gh' " `shouldBe` "\"cdefgh\""- -- TODO: Correct, but can we do better?- minifyExpr " 'de' + \"'fg'\" + 'hi' " `shouldBe` "'de'+\"'fg'\"+'hi'"+ minifyExpr " \"bc\" + 'de' " `shouldBe` "'bcde'"+ minifyExpr " \"cd\" + 'ef' + 'gh' " `shouldBe` "'cdefgh'" + minifyExpr " 'de' + '\"fg\"' + 'hi' " `shouldBe` "'de\"fg\"hi'"+ minifyExpr " 'ef' + \"'gh'\" + 'ij' " `shouldBe` "'ef\\'gh\\'ij'" +-- minifyExpr " 'de' + '\"fg\"' + 'hi' " `shouldBe` "'de\"fg\"hi'"+-- minifyExpr " 'ef' + \"'gh'\" + 'ij' " `shouldBe` "'ef'gh'ij'"+ testMinifyStmt :: Spec testMinifyStmt = describe "Minify statements:" $ do forM_ [ "break", "continue", "return" ] $ \kw ->@@ -205,7 +208,7 @@ minifyStmt " var d = 1, x = 2 ; " `shouldBe` "var d=1,x=2" it "string concatenation" $- minifyStmt " f (\"ab\"+\"cd\") " `shouldBe` "f(\"abcd\")"+ minifyStmt " f (\"ab\"+\"cd\") " `shouldBe` "f('abcd')" testMinifyProg :: Spec
dist/build/Language/JavaScript/Parser/Grammar5.hs view
@@ -1355,7 +1355,7 @@ happyReduction_4 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn7- (AST.JSSemi (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSSemi (mkJSAnnot happy_var_1) )} happyReduce_5 = happySpecReduce_0 0# happyReduction_5@@ -1367,7 +1367,7 @@ happyReduction_6 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn8- (AST.JSSemi (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSSemi (mkJSAnnot happy_var_1) )} happyReduce_7 = happySpecReduce_1 1# happyReduction_7@@ -1385,518 +1385,518 @@ happyReduction_9 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn9- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_10 = happySpecReduce_1 3# happyReduction_10 happyReduction_10 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn10- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_11 = happySpecReduce_1 4# happyReduction_11 happyReduction_11 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn11- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_12 = happySpecReduce_1 5# happyReduction_12 happyReduction_12 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn12- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_13 = happySpecReduce_1 6# happyReduction_13 happyReduction_13 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn13- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_14 = happySpecReduce_1 7# happyReduction_14 happyReduction_14 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn14- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_15 = happySpecReduce_1 8# happyReduction_15 happyReduction_15 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn15- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_16 = happySpecReduce_1 9# happyReduction_16 happyReduction_16 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn16- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_17 = happySpecReduce_1 10# happyReduction_17 happyReduction_17 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn17- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_18 = happySpecReduce_1 11# happyReduction_18 happyReduction_18 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn18- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_19 = happySpecReduce_1 12# happyReduction_19 happyReduction_19 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn19- (AST.JSUnaryOpIncr (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSUnaryOpIncr (mkJSAnnot happy_var_1) )} happyReduce_20 = happySpecReduce_1 13# happyReduction_20 happyReduction_20 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn20- (AST.JSUnaryOpDecr (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSUnaryOpDecr (mkJSAnnot happy_var_1) )} happyReduce_21 = happySpecReduce_1 14# happyReduction_21 happyReduction_21 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn21- (AST.JSUnaryOpDelete (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSUnaryOpDelete (mkJSAnnot happy_var_1) )} happyReduce_22 = happySpecReduce_1 15# happyReduction_22 happyReduction_22 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn22- (AST.JSUnaryOpVoid (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSUnaryOpVoid (mkJSAnnot happy_var_1) )} happyReduce_23 = happySpecReduce_1 16# happyReduction_23 happyReduction_23 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn23- (AST.JSUnaryOpTypeof (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSUnaryOpTypeof (mkJSAnnot happy_var_1) )} happyReduce_24 = happySpecReduce_1 17# happyReduction_24 happyReduction_24 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn24- (AST.JSBinOpPlus (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpPlus (mkJSAnnot happy_var_1) )} happyReduce_25 = happySpecReduce_1 18# happyReduction_25 happyReduction_25 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn25- (AST.JSBinOpMinus (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpMinus (mkJSAnnot happy_var_1) )} happyReduce_26 = happySpecReduce_1 19# happyReduction_26 happyReduction_26 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn26- (AST.JSUnaryOpTilde (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSUnaryOpTilde (mkJSAnnot happy_var_1) )} happyReduce_27 = happySpecReduce_1 20# happyReduction_27 happyReduction_27 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn27- (AST.JSUnaryOpNot (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSUnaryOpNot (mkJSAnnot happy_var_1) )} happyReduce_28 = happySpecReduce_1 21# happyReduction_28 happyReduction_28 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn28- (AST.JSBinOpTimes (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpTimes (mkJSAnnot happy_var_1) )} happyReduce_29 = happySpecReduce_1 22# happyReduction_29 happyReduction_29 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn29- (AST.JSBinOpDivide (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpDivide (mkJSAnnot happy_var_1) )} happyReduce_30 = happySpecReduce_1 23# happyReduction_30 happyReduction_30 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn30- (AST.JSBinOpMod (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpMod (mkJSAnnot happy_var_1) )} happyReduce_31 = happySpecReduce_1 24# happyReduction_31 happyReduction_31 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn31- (AST.JSBinOpLsh (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpLsh (mkJSAnnot happy_var_1) )} happyReduce_32 = happySpecReduce_1 25# happyReduction_32 happyReduction_32 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn32- (AST.JSBinOpRsh (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpRsh (mkJSAnnot happy_var_1) )} happyReduce_33 = happySpecReduce_1 26# happyReduction_33 happyReduction_33 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn33- (AST.JSBinOpUrsh (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpUrsh (mkJSAnnot happy_var_1) )} happyReduce_34 = happySpecReduce_1 27# happyReduction_34 happyReduction_34 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn34- (AST.JSBinOpLe (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpLe (mkJSAnnot happy_var_1) )} happyReduce_35 = happySpecReduce_1 28# happyReduction_35 happyReduction_35 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn35- (AST.JSBinOpLt (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpLt (mkJSAnnot happy_var_1) )} happyReduce_36 = happySpecReduce_1 29# happyReduction_36 happyReduction_36 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn36- (AST.JSBinOpGe (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpGe (mkJSAnnot happy_var_1) )} happyReduce_37 = happySpecReduce_1 30# happyReduction_37 happyReduction_37 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn37- (AST.JSBinOpGt (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpGt (mkJSAnnot happy_var_1) )} happyReduce_38 = happySpecReduce_1 31# happyReduction_38 happyReduction_38 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn38- (AST.JSBinOpIn (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpIn (mkJSAnnot happy_var_1) )} happyReduce_39 = happySpecReduce_1 32# happyReduction_39 happyReduction_39 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn39- (AST.JSBinOpInstanceOf (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpInstanceOf (mkJSAnnot happy_var_1) )} happyReduce_40 = happySpecReduce_1 33# happyReduction_40 happyReduction_40 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn40- (AST.JSBinOpStrictEq (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpStrictEq (mkJSAnnot happy_var_1) )} happyReduce_41 = happySpecReduce_1 34# happyReduction_41 happyReduction_41 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn41- (AST.JSBinOpEq (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpEq (mkJSAnnot happy_var_1) )} happyReduce_42 = happySpecReduce_1 35# happyReduction_42 happyReduction_42 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn42- (AST.JSBinOpStrictNeq (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpStrictNeq (mkJSAnnot happy_var_1) )} happyReduce_43 = happySpecReduce_1 36# happyReduction_43 happyReduction_43 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn43- (AST.JSBinOpNeq (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpNeq (mkJSAnnot happy_var_1) )} happyReduce_44 = happySpecReduce_1 37# happyReduction_44 happyReduction_44 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn44- (AST.JSBinOpOr (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpOr (mkJSAnnot happy_var_1) )} happyReduce_45 = happySpecReduce_1 38# happyReduction_45 happyReduction_45 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn45- (AST.JSBinOpAnd (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpAnd (mkJSAnnot happy_var_1) )} happyReduce_46 = happySpecReduce_1 39# happyReduction_46 happyReduction_46 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn46- (AST.JSBinOpBitOr (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpBitOr (mkJSAnnot happy_var_1) )} happyReduce_47 = happySpecReduce_1 40# happyReduction_47 happyReduction_47 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn47- (AST.JSBinOpBitAnd (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpBitAnd (mkJSAnnot happy_var_1) )} happyReduce_48 = happySpecReduce_1 41# happyReduction_48 happyReduction_48 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn48- (AST.JSBinOpBitXor (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBinOpBitXor (mkJSAnnot happy_var_1) )} happyReduce_49 = happySpecReduce_1 42# happyReduction_49 happyReduction_49 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn49- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_50 = happySpecReduce_1 43# happyReduction_50 happyReduction_50 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn50- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_51 = happySpecReduce_1 44# happyReduction_51 happyReduction_51 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn51- (AST.JSTimesAssign (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSTimesAssign (mkJSAnnot happy_var_1) )} happyReduce_52 = happySpecReduce_1 44# happyReduction_52 happyReduction_52 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn51- (AST.JSDivideAssign (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSDivideAssign (mkJSAnnot happy_var_1) )} happyReduce_53 = happySpecReduce_1 44# happyReduction_53 happyReduction_53 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn51- (AST.JSModAssign (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSModAssign (mkJSAnnot happy_var_1) )} happyReduce_54 = happySpecReduce_1 44# happyReduction_54 happyReduction_54 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn51- (AST.JSPlusAssign (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSPlusAssign (mkJSAnnot happy_var_1) )} happyReduce_55 = happySpecReduce_1 44# happyReduction_55 happyReduction_55 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn51- (AST.JSMinusAssign (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSMinusAssign (mkJSAnnot happy_var_1) )} happyReduce_56 = happySpecReduce_1 44# happyReduction_56 happyReduction_56 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn51- (AST.JSLshAssign (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSLshAssign (mkJSAnnot happy_var_1) )} happyReduce_57 = happySpecReduce_1 44# happyReduction_57 happyReduction_57 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn51- (AST.JSRshAssign (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSRshAssign (mkJSAnnot happy_var_1) )} happyReduce_58 = happySpecReduce_1 44# happyReduction_58 happyReduction_58 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn51- (AST.JSUrshAssign (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSUrshAssign (mkJSAnnot happy_var_1) )} happyReduce_59 = happySpecReduce_1 44# happyReduction_59 happyReduction_59 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn51- (AST.JSBwAndAssign (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBwAndAssign (mkJSAnnot happy_var_1) )} happyReduce_60 = happySpecReduce_1 44# happyReduction_60 happyReduction_60 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn51- (AST.JSBwXorAssign (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBwXorAssign (mkJSAnnot happy_var_1) )} happyReduce_61 = happySpecReduce_1 44# happyReduction_61 happyReduction_61 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn51- (AST.JSBwOrAssign (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))+ (AST.JSBwOrAssign (mkJSAnnot happy_var_1) )} happyReduce_62 = happySpecReduce_1 45# happyReduction_62 happyReduction_62 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn52- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_63 = happySpecReduce_1 46# happyReduction_63 happyReduction_63 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn53- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_64 = happySpecReduce_1 47# happyReduction_64 happyReduction_64 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn54- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_65 = happySpecReduce_1 48# happyReduction_65 happyReduction_65 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn55- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_66 = happySpecReduce_1 49# happyReduction_66 happyReduction_66 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn56- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_67 = happySpecReduce_1 50# happyReduction_67 happyReduction_67 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn57- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_68 = happySpecReduce_1 51# happyReduction_68 happyReduction_68 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn58- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_69 = happySpecReduce_1 52# happyReduction_69 happyReduction_69 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn59- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_70 = happySpecReduce_1 53# happyReduction_70 happyReduction_70 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn60- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_71 = happySpecReduce_1 54# happyReduction_71 happyReduction_71 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn61- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_72 = happySpecReduce_1 55# happyReduction_72 happyReduction_72 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn62- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_73 = happySpecReduce_1 56# happyReduction_73 happyReduction_73 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn63- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_74 = happySpecReduce_1 57# happyReduction_74 happyReduction_74 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn64- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_75 = happySpecReduce_1 58# happyReduction_75 happyReduction_75 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn65- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_76 = happySpecReduce_1 59# happyReduction_76 happyReduction_76 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn66- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1) {- 'Throw' -}+ (mkJSAnnot happy_var_1 {- 'Throw' -} )} happyReduce_77 = happySpecReduce_1 60# happyReduction_77 happyReduction_77 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn67- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_78 = happySpecReduce_1 61# happyReduction_78 happyReduction_78 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn68- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_79 = happySpecReduce_1 62# happyReduction_79 happyReduction_79 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn69- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_80 = happySpecReduce_1 63# happyReduction_80 happyReduction_80 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn70- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1) {- 'Function' -}+ (mkJSAnnot happy_var_1 {- 'Function' -} )} happyReduce_81 = happySpecReduce_1 64# happyReduction_81 happyReduction_81 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn71- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)+ (mkJSAnnot happy_var_1 )} happyReduce_82 = happySpecReduce_1 65# happyReduction_82 happyReduction_82 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn72- (AST.JSAnnot (ts happy_var_1) (tc happy_var_1) {- 'Eof' -}+ (mkJSAnnot happy_var_1 {- 'Eof' -} )} happyReduce_83 = happySpecReduce_1 66# happyReduction_83@@ -1938,63 +1938,63 @@ happyReduction_88 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn74- (AST.JSLiteral (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "null"+ (AST.JSLiteral (mkJSAnnot happy_var_1) "null" )} happyReduce_89 = happySpecReduce_1 68# happyReduction_89 happyReduction_89 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn75- (AST.JSLiteral (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "true"+ (AST.JSLiteral (mkJSAnnot happy_var_1) "true" )} happyReduce_90 = happySpecReduce_1 68# happyReduction_90 happyReduction_90 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn75- (AST.JSLiteral (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "false"+ (AST.JSLiteral (mkJSAnnot happy_var_1) "false" )} happyReduce_91 = happySpecReduce_1 69# happyReduction_91 happyReduction_91 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn76- (AST.JSDecimal (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) (tokenLiteral happy_var_1)+ (AST.JSDecimal (mkJSAnnot happy_var_1) (tokenLiteral happy_var_1) )} happyReduce_92 = happySpecReduce_1 69# happyReduction_92 happyReduction_92 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn76- (AST.JSHexInteger (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) (tokenLiteral happy_var_1)+ (AST.JSHexInteger (mkJSAnnot happy_var_1) (tokenLiteral happy_var_1) )} happyReduce_93 = happySpecReduce_1 69# happyReduction_93 happyReduction_93 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn76- (AST.JSOctal (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) (tokenLiteral happy_var_1)+ (AST.JSOctal (mkJSAnnot happy_var_1) (tokenLiteral happy_var_1) )} happyReduce_94 = happySpecReduce_1 70# happyReduction_94 happyReduction_94 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn77- (AST.JSStringLiteral (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) (tokenLiteral happy_var_1)+ (AST.JSStringLiteral (mkJSAnnot happy_var_1) (tokenLiteral happy_var_1) )} happyReduce_95 = happySpecReduce_1 71# happyReduction_95 happyReduction_95 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn78- (AST.JSRegEx (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) (tokenLiteral happy_var_1)+ (AST.JSRegEx (mkJSAnnot happy_var_1) (tokenLiteral happy_var_1) )} happyReduce_96 = happySpecReduce_1 72# happyReduction_96 happyReduction_96 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn79- (AST.JSLiteral (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "this"+ (AST.JSLiteral (mkJSAnnot happy_var_1) "this" )} happyReduce_97 = happySpecReduce_1 72# happyReduction_97@@ -2040,21 +2040,21 @@ happyReduction_102 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn80- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) (tokenLiteral happy_var_1)+ (AST.JSIdentifier (mkJSAnnot happy_var_1) (tokenLiteral happy_var_1) )} happyReduce_103 = happySpecReduce_1 73# happyReduction_103 happyReduction_103 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn80- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "get"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "get" )} happyReduce_104 = happySpecReduce_1 73# happyReduction_104 happyReduction_104 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn80- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "set"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "set" )} happyReduce_105 = happySpecReduce_1 74# happyReduction_105@@ -2068,238 +2068,238 @@ happyReduction_106 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "break"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "break" )} happyReduce_107 = happySpecReduce_1 74# happyReduction_107 happyReduction_107 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "case"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "case" )} happyReduce_108 = happySpecReduce_1 74# happyReduction_108 happyReduction_108 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "catch"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "catch" )} happyReduce_109 = happySpecReduce_1 74# happyReduction_109 happyReduction_109 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "const"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "const" )} happyReduce_110 = happySpecReduce_1 74# happyReduction_110 happyReduction_110 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "continue"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "continue" )} happyReduce_111 = happySpecReduce_1 74# happyReduction_111 happyReduction_111 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "debugger"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "debugger" )} happyReduce_112 = happySpecReduce_1 74# happyReduction_112 happyReduction_112 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "default"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "default" )} happyReduce_113 = happySpecReduce_1 74# happyReduction_113 happyReduction_113 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "delete"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "delete" )} happyReduce_114 = happySpecReduce_1 74# happyReduction_114 happyReduction_114 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "do"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "do" )} happyReduce_115 = happySpecReduce_1 74# happyReduction_115 happyReduction_115 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "else"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "else" )} happyReduce_116 = happySpecReduce_1 74# happyReduction_116 happyReduction_116 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "enum"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "enum" )} happyReduce_117 = happySpecReduce_1 74# happyReduction_117 happyReduction_117 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "false"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "false" )} happyReduce_118 = happySpecReduce_1 74# happyReduction_118 happyReduction_118 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "finally"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "finally" )} happyReduce_119 = happySpecReduce_1 74# happyReduction_119 happyReduction_119 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "for"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "for" )} happyReduce_120 = happySpecReduce_1 74# happyReduction_120 happyReduction_120 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "function"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "function" )} happyReduce_121 = happySpecReduce_1 74# happyReduction_121 happyReduction_121 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "get"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "get" )} happyReduce_122 = happySpecReduce_1 74# happyReduction_122 happyReduction_122 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "if"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "if" )} happyReduce_123 = happySpecReduce_1 74# happyReduction_123 happyReduction_123 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "in"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "in" )} happyReduce_124 = happySpecReduce_1 74# happyReduction_124 happyReduction_124 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "instanceof"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "instanceof" )} happyReduce_125 = happySpecReduce_1 74# happyReduction_125 happyReduction_125 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "new"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "new" )} happyReduce_126 = happySpecReduce_1 74# happyReduction_126 happyReduction_126 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "null"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "null" )} happyReduce_127 = happySpecReduce_1 74# happyReduction_127 happyReduction_127 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "return"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "return" )} happyReduce_128 = happySpecReduce_1 74# happyReduction_128 happyReduction_128 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "set"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "set" )} happyReduce_129 = happySpecReduce_1 74# happyReduction_129 happyReduction_129 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "switch"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "switch" )} happyReduce_130 = happySpecReduce_1 74# happyReduction_130 happyReduction_130 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "this"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "this" )} happyReduce_131 = happySpecReduce_1 74# happyReduction_131 happyReduction_131 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "throw"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "throw" )} happyReduce_132 = happySpecReduce_1 74# happyReduction_132 happyReduction_132 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "true"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "true" )} happyReduce_133 = happySpecReduce_1 74# happyReduction_133 happyReduction_133 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "try"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "try" )} happyReduce_134 = happySpecReduce_1 74# happyReduction_134 happyReduction_134 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "typeof"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "typeof" )} happyReduce_135 = happySpecReduce_1 74# happyReduction_135 happyReduction_135 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "var"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "var" )} happyReduce_136 = happySpecReduce_1 74# happyReduction_136 happyReduction_136 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "void"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "void" )} happyReduce_137 = happySpecReduce_1 74# happyReduction_137 happyReduction_137 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "while"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "while" )} happyReduce_138 = happySpecReduce_1 74# happyReduction_138 happyReduction_138 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "with"+ (AST.JSIdentifier (mkJSAnnot happy_var_1) "with" )} happyReduce_139 = happySpecReduce_1 74# happyReduction_139 happyReduction_139 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn81- (AST.JSIdentifier (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) (tokenLiteral happy_var_1)+ (AST.JSIdentifier (mkJSAnnot happy_var_1) (tokenLiteral happy_var_1) )} happyReduce_140 = happySpecReduce_2 75# happyReduction_140@@ -2466,7 +2466,7 @@ case happyOut10 happy_x_4 of { happy_var_4 -> case happyOut160 happy_x_5 of { happy_var_5 -> happyIn87- (AST.JSPropertyAccessor (AST.JSAccessorGet (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))) happy_var_2 happy_var_3 [] happy_var_4 happy_var_5+ (AST.JSPropertyAccessor (AST.JSAccessorGet (mkJSAnnot happy_var_1)) happy_var_2 happy_var_3 [] happy_var_4 happy_var_5 ) `HappyStk` happyRest}}}}} happyReduce_156 = happyReduce 6# 80# happyReduction_156@@ -2484,7 +2484,7 @@ case happyOut10 happy_x_5 of { happy_var_5 -> case happyOut160 happy_x_6 of { happy_var_6 -> happyIn87- (AST.JSPropertyAccessor (AST.JSAccessorSet (AST.JSAnnot (ts happy_var_1) (tc happy_var_1))) happy_var_2 happy_var_3 [happy_var_4] happy_var_5 happy_var_6+ (AST.JSPropertyAccessor (AST.JSAccessorSet (mkJSAnnot happy_var_1)) happy_var_2 happy_var_3 [happy_var_4] happy_var_5 happy_var_6 ) `HappyStk` happyRest}}}}}} happyReduce_157 = happySpecReduce_1 81# happyReduction_157@@ -4247,7 +4247,7 @@ = case happyOutTok happy_x_1 of { happy_var_1 -> case happyOut7 happy_x_2 of { happy_var_2 -> happyIn153- (AST.JSExpressionStatement (AST.JSLiteral (AST.JSAnnot (ts happy_var_1) (tc happy_var_1)) "debugger") happy_var_2 {- 'DebuggerStatement' -}+ (AST.JSExpressionStatement (AST.JSLiteral (mkJSAnnot happy_var_1) "debugger") happy_var_2 {- 'DebuggerStatement' -} )}} happyReduce_334 = happySpecReduce_2 147# happyReduction_334@@ -4566,22 +4566,11 @@ mkJSMemberNew :: AST.JSAnnot -> AST.JSExpression -> JSArguments -> AST.JSExpression mkJSMemberNew a e (JSArguments l arglist r) = AST.JSMemberNew a e l arglist r - parseError :: Token -> Alex a parseError = alexError . show --- ----------------------------------ts :: Token -> TokenPosn-ts = tokenSpan---- --------------------------------tc :: Token -> [CommentAnnotation]-tc = tokenComment--mtc :: [Token] -> [CommentAnnotation]-mtc xs = concatMap tokenComment xs+mkJSAnnot :: Token -> AST.JSAnnot+mkJSAnnot a = AST.JSAnnot (tokenSpan a) (tokenComment a) -- --------------------------------------------------------------------- -- | mkUnary : The parser detects '+' and '-' as the binary version of these@@ -4608,7 +4597,7 @@ {-# LINE 1 "templates/GenericTemplate.hs" #-} {-# LINE 1 "<built-in>" #-} {-# LINE 1 "<command-line>" #-}-{-# LINE 11 "<command-line>" #-}+{-# LINE 13 "<command-line>" #-} # 1 "/usr/include/stdc-predef.h" 1 3 4 # 17 "/usr/include/stdc-predef.h" 3 4@@ -4654,7 +4643,8 @@ -{-# LINE 11 "<command-line>" #-}++{-# LINE 13 "<command-line>" #-} {-# LINE 1 "/usr/lib/ghc/include/ghcversion.h" #-} @@ -4673,7 +4663,171 @@ -{-# LINE 11 "<command-line>" #-}+{-# LINE 13 "<command-line>" #-}+{-# LINE 1 "/tmp/ghc6015_0/ghc_2.h" #-}+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++{-# LINE 13 "<command-line>" #-} {-# LINE 1 "templates/GenericTemplate.hs" #-} -- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp
dist/build/Language/JavaScript/Parser/Lexer.hs view
@@ -86,10 +86,6 @@ ---- {-# LINE 10 "<command-line>" #-} {-# LINE 1 "/usr/lib/ghc/include/ghcversion.h" #-} @@ -163,24 +159,24 @@ String) -- current input string ignorePendingBytes :: AlexInput -> AlexInput-ignorePendingBytes (p,c,ps,s) = (p,c,[],s)+ignorePendingBytes (p,c,_ps,s) = (p,c,[],s) alexInputPrevChar :: AlexInput -> Char-alexInputPrevChar (p,c,bs,s) = c+alexInputPrevChar (_p,c,_bs,_s) = c alexGetByte :: AlexInput -> Maybe (Byte,AlexInput) alexGetByte (p,c,(b:bs),s) = Just (b,(p,c,bs,s))-alexGetByte (p,c,[],[]) = Nothing-alexGetByte (p,_,[],(c:s)) = let p' = alexMove p c +alexGetByte (_,_,[],[]) = Nothing+alexGetByte (p,_,[],(c:s)) = let p' = alexMove p c (b:bs) = utf8Encode c in p' `seq` Just (b, (p', c, bs, s)) -{-# LINE 101 "templates/wrappers.hs" #-}+{-# LINE 102 "templates/wrappers.hs" #-} -{-# LINE 119 "templates/wrappers.hs" #-}+{-# LINE 120 "templates/wrappers.hs" #-} -{-# LINE 137 "templates/wrappers.hs" #-}+{-# LINE 138 "templates/wrappers.hs" #-} -- ----------------------------------------------------------------------------- -- Token positions@@ -201,7 +197,7 @@ alexMove :: AlexPosn -> Char -> AlexPosn alexMove (AlexPn a l c) '\t' = AlexPn (a+1) l (((c+alex_tab_size-1) `div` alex_tab_size)*alex_tab_size+1)-alexMove (AlexPn a l c) '\n' = AlexPn (a+1) (l+1) 1+alexMove (AlexPn a l _) '\n' = AlexPn (a+1) (l+1) 1 alexMove (AlexPn a l c) _ = AlexPn (a+1) l (c+1) @@ -223,9 +219,9 @@ -- Compile with -funbox-strict-fields for best results! runAlex :: String -> Alex a -> Either String a-runAlex input (Alex f) +runAlex input (Alex f) = case f (AlexState {alex_pos = alexStartPos,- alex_inp = input, + alex_inp = input, alex_chr = '\n', alex_bytes = [], @@ -250,14 +246,14 @@ Right (s'', b) -> Right (s'', f b) instance Monad Alex where- m >>= k = Alex $ \s -> case unAlex m s of + m >>= k = Alex $ \s -> case unAlex m s of Left msg -> Left msg Right (s',a) -> unAlex (k a) s' return = App.pure alexGetInput :: Alex AlexInput alexGetInput- = Alex $ \s@AlexState{alex_pos=pos,alex_chr=c,alex_bytes=bs,alex_inp=inp} -> + = Alex $ \s@AlexState{alex_pos=pos,alex_chr=c,alex_bytes=bs,alex_inp=inp} -> Right (s, (pos,c,bs,inp)) alexSetInput :: AlexInput -> Alex ()@@ -266,7 +262,7 @@ s@(AlexState{}) -> Right (s, ()) alexError :: String -> Alex a-alexError message = Alex $ \s -> Left message+alexError message = Alex $ const $ Left message alexGetStartCode :: Alex Int alexGetStartCode = Alex $ \s@AlexState{alex_scd=sc} -> Right (s, sc)@@ -288,7 +284,7 @@ case alexScan inp sc of AlexEOF -> alexEOF AlexError ((AlexPn _ line column),_,_,_) -> alexError $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)- AlexSkip inp' len -> do+ AlexSkip inp' _len -> do alexSetInput inp' alexMonadScan AlexToken inp' len action -> do@@ -302,11 +298,11 @@ -- just ignore this token and scan another one -- skip :: AlexAction result-skip input len = alexMonadScan+skip _input _len = alexMonadScan -- ignore this token, but set the start code to a new value -- begin :: Int -> AlexAction result-begin code input len = do alexSetStartCode code; alexMonadScan+begin code _input _len = do alexSetStartCode code; alexMonadScan -- perform an action for this token, and set the start code to a new value andBegin :: AlexAction result -> Int -> AlexAction result@@ -320,21 +316,21 @@ -- ----------------------------------------------------------------------------- -- Monad (with ByteString input) -{-# LINE 374 "templates/wrappers.hs" #-}+{-# LINE 375 "templates/wrappers.hs" #-} -- ----------------------------------------------------------------------------- -- Basic wrapper -{-# LINE 401 "templates/wrappers.hs" #-}+{-# LINE 402 "templates/wrappers.hs" #-} -- ----------------------------------------------------------------------------- -- Basic wrapper, ByteString version -{-# LINE 421 "templates/wrappers.hs" #-}+{-# LINE 422 "templates/wrappers.hs" #-} -{-# LINE 437 "templates/wrappers.hs" #-}+{-# LINE 438 "templates/wrappers.hs" #-} -- -----------------------------------------------------------------------------@@ -342,13 +338,13 @@ -- Adds text positions to the basic model. -{-# LINE 454 "templates/wrappers.hs" #-}+{-# LINE 455 "templates/wrappers.hs" #-} -- ----------------------------------------------------------------------------- -- Posn wrapper, ByteString version -{-# LINE 470 "templates/wrappers.hs" #-}+{-# LINE 471 "templates/wrappers.hs" #-} -- -----------------------------------------------------------------------------@@ -370,7 +366,10 @@ alex_deflt :: AlexAddr alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xac\x01\xff\xff\xab\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\xff\xff\x3e\x00\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\x56\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6d\x00\x6d\x00\xff\xff\xff\xff\x7a\x00\x7a\x00\x7e\x00\x7e\x00\x7f\x00\x80\x00\x80\x00\x7f\x00\xff\xff\x84\x00\x84\x00\xff\xff\x87\x00\x87\x00\xff\xff\x8d\x00\x8d\x00\x56\x00\x56\x00\x56\x00\x96\x00\x97\x00\x97\x00\x96\x00\xff\xff\x9c\x00\x9c\x00\xff\xff\xa1\x00\xa1\x00\xff\xff\xff\xff\xab\x00\xab\x00\xab\x00\xad\x00\xad\x00\x3e\x00\x3d\x00\xff\xff\x3e\x00\x3e\x00\x3d\x00\x3e\x00\x3d\x00\x3c\x00\xff\xff\xff\xff\x3c\x00\x3c\x00\xb9\x00\xff\xff\xff\xff\xb9\x00\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xab\x00\xa0\x01\xa0\x01\xa0\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xac\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xaa\x01\xaa\x01\xaa\x01\xaa\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xaa\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"# -alex_accept = listArray (0::Int,486) [AlexAccSkip,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAcc (alex_action_1),AlexAcc (alex_action_2),AlexAcc (alex_action_3),AlexAcc (alex_action_4),AlexAcc (alex_action_5),AlexAcc (alex_action_6),AlexAcc (alex_action_7),AlexAcc (alex_action_8),AlexAcc (alex_action_8),AlexAcc (alex_action_9),AlexAcc (alex_action_9),AlexAcc (alex_action_9),AlexAcc (alex_action_9),AlexAccSkip,AlexAcc (alex_action_11),AlexAcc (alex_action_12),AlexAcc (alex_action_13),AlexAcc (alex_action_14),AlexAcc (alex_action_15),AlexAcc (alex_action_16),AlexAcc (alex_action_17),AlexAcc (alex_action_18),AlexAcc (alex_action_19),AlexAcc (alex_action_20),AlexAcc (alex_action_21),AlexAcc (alex_action_22),AlexAcc (alex_action_23),AlexAcc (alex_action_24),AlexAcc (alex_action_25),AlexAcc (alex_action_26),AlexAcc (alex_action_27),AlexAcc (alex_action_28),AlexAcc (alex_action_29),AlexAcc (alex_action_30),AlexAcc (alex_action_31),AlexAcc (alex_action_32),AlexAcc (alex_action_33),AlexAcc (alex_action_34),AlexAcc (alex_action_35),AlexAcc (alex_action_36),AlexAcc (alex_action_37),AlexAcc (alex_action_38),AlexAcc (alex_action_39),AlexAcc (alex_action_40),AlexAcc (alex_action_41),AlexAcc (alex_action_42),AlexAcc (alex_action_43),AlexAcc (alex_action_44),AlexAcc (alex_action_45),AlexAcc (alex_action_46),AlexAcc (alex_action_47),AlexAcc (alex_action_48),AlexAcc (alex_action_49),AlexAcc (alex_action_50),AlexAcc (alex_action_51),AlexAcc (alex_action_52),AlexAcc (alex_action_53),AlexAcc (alex_action_54),AlexAcc (alex_action_55),AlexAcc (alex_action_56),AlexAcc (alex_action_57),AlexAcc (alex_action_58)]+alex_accept = listArray (0::Int,486) [AlexAccSkip,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAcc 60,AlexAcc 59,AlexAcc 58,AlexAcc 57,AlexAcc 56,AlexAcc 55,AlexAcc 54,AlexAcc 53,AlexAcc 52,AlexAcc 51,AlexAcc 50,AlexAcc 49,AlexAcc 48,AlexAccSkip,AlexAcc 47,AlexAcc 46,AlexAcc 45,AlexAcc 44,AlexAcc 43,AlexAcc 42,AlexAcc 41,AlexAcc 40,AlexAcc 39,AlexAcc 38,AlexAcc 37,AlexAcc 36,AlexAcc 35,AlexAcc 34,AlexAcc 33,AlexAcc 32,AlexAcc 31,AlexAcc 30,AlexAcc 29,AlexAcc 28,AlexAcc 27,AlexAcc 26,AlexAcc 25,AlexAcc 24,AlexAcc 23,AlexAcc 22,AlexAcc 21,AlexAcc 20,AlexAcc 19,AlexAcc 18,AlexAcc 17,AlexAcc 16,AlexAcc 15,AlexAcc 14,AlexAcc 13,AlexAcc 12,AlexAcc 11,AlexAcc 10,AlexAcc 9,AlexAcc 8,AlexAcc 7,AlexAcc 6,AlexAcc 5,AlexAcc 4,AlexAcc 3,AlexAcc 2,AlexAcc 1,AlexAcc 0]++alex_actions = array (0::Int,61) [(60,alex_action_1),(59,alex_action_2),(58,alex_action_3),(57,alex_action_4),(56,alex_action_5),(55,alex_action_6),(54,alex_action_7),(53,alex_action_8),(52,alex_action_8),(51,alex_action_9),(50,alex_action_9),(49,alex_action_9),(48,alex_action_9),(47,alex_action_11),(46,alex_action_12),(45,alex_action_13),(44,alex_action_14),(43,alex_action_15),(42,alex_action_16),(41,alex_action_17),(40,alex_action_18),(39,alex_action_19),(38,alex_action_20),(37,alex_action_21),(36,alex_action_22),(35,alex_action_23),(34,alex_action_24),(33,alex_action_25),(32,alex_action_26),(31,alex_action_27),(30,alex_action_28),(29,alex_action_29),(28,alex_action_30),(27,alex_action_31),(26,alex_action_32),(25,alex_action_33),(24,alex_action_34),(23,alex_action_35),(22,alex_action_36),(21,alex_action_37),(20,alex_action_38),(19,alex_action_39),(18,alex_action_40),(17,alex_action_41),(16,alex_action_42),(15,alex_action_43),(14,alex_action_44),(13,alex_action_45),(12,alex_action_46),(11,alex_action_47),(10,alex_action_48),(9,alex_action_49),(8,alex_action_50),(7,alex_action_51),(6,alex_action_52),(5,alex_action_53),(4,alex_action_54),(3,alex_action_55),(2,alex_action_56),(1,alex_action_57),(0,alex_action_58)]+ {-# LINE 330 "src/Language/JavaScript/Parser/Lexer.x" #-} @@ -465,7 +464,7 @@ -- If the token is a WsToken and it contains a newline, convert it to an -- AutoSemiToken and call the continuation, otherwise, just lexLoop.- maybeAutoSemi ws@(WsToken sp tl cmt) =+ maybeAutoSemi (WsToken sp tl cmt) = if any (== '\n') tl then cont $ AutoSemiToken sp tl cmt else lexLoop@@ -473,7 +472,7 @@ toCommentAnnotation :: [Token] -> [CommentAnnotation]-toCommentAnnotation [] = [NoComment]+toCommentAnnotation [] = [] toCommentAnnotation xs = reverse $ map go xs where@@ -733,10 +732,6 @@ ---- {-# LINE 10 "<command-line>" #-} {-# LINE 1 "/usr/lib/ghc/include/ghcversion.h" #-} @@ -808,7 +803,7 @@ {-# INLINE alexIndexInt32OffAddr #-}-alexIndexInt32OffAddr (AlexA# arr) off = +alexIndexInt32OffAddr (AlexA# arr) off = #ifdef WORDS_BIGENDIAN narrow32Int# i where@@ -854,30 +849,30 @@ alexScanUser user input (I# (sc)) = case alex_scan_tkn user input 0# input sc AlexNone of- (AlexNone, input') ->- case alexGetByte input of- Nothing -> + (AlexNone, input') ->+ case alexGetByte input of+ Nothing -> AlexEOF- Just _ ->+ Just _ -> AlexError input' - (AlexLastSkip input'' len, _) ->+ (AlexLastSkip input'' len, _) -> - AlexSkip input'' len+ AlexSkip input'' len - (AlexLastAcc k input''' len, _) ->+ (AlexLastAcc k input''' len, _) -> - AlexToken input''' len k+ AlexToken input''' len (alex_actions ! k) -- Push the input through the DFA, remembering the most recent accepting@@ -885,13 +880,13 @@ alex_scan_tkn user orig_input len input s last_acc = input `seq` -- strict in the input- let - new_acc = (check_accs (alex_accept `quickIndex` (I# (s))))+ let+ new_acc = (check_accs (alex_accept `quickIndex` (I# (s)))) in new_acc `seq` case alexGetByte input of Nothing -> (new_acc, input)- Just (c, new_input) -> + Just (c, new_input) -> @@ -900,7 +895,7 @@ base = alexIndexInt32OffAddr alex_base s offset = (base +# ord_c) check = alexIndexInt16OffAddr alex_check offset- + new_s = if GTE(offset,0#) && EQ(check,ord_c) then alexIndexInt16OffAddr alex_table offset else alexIndexInt16OffAddr alex_deflt s@@ -919,17 +914,12 @@ check_accs (AlexAccSkip) = AlexLastSkip input (I# (len)) {-# LINE 198 "templates/GenericTemplate.hs" #-} -data AlexLastAcc a+data AlexLastAcc = AlexNone- | AlexLastAcc a !AlexInput !Int- | AlexLastSkip !AlexInput !Int--instance Functor AlexLastAcc where- fmap _ AlexNone = AlexNone- fmap f (AlexLastAcc x y z) = AlexLastAcc (f x) y z- fmap _ (AlexLastSkip x y) = AlexLastSkip x y+ | AlexLastAcc !Int !AlexInput !Int+ | AlexLastSkip !AlexInput !Int -data AlexAcc a user+data AlexAcc user = AlexAccNone- | AlexAcc a+ | AlexAcc Int | AlexAccSkip
language-javascript.cabal view
@@ -1,5 +1,5 @@ Name: language-javascript-Version: 0.6.0.8+Version: 0.6.0.9 Synopsis: Parser for JavaScript Description: Parses Javascript into an Abstract Syntax Tree (AST). Initially intended as frontend to hjsmin. .@@ -13,8 +13,8 @@ Copyright: (c) 2010-2015 Alan Zimmerman, 2015 Erik de Castro Lopo Category: Language Build-type: Simple-homepage: http://github.com/erikd/language-javascript-bug-reports: http://github.com/erikd/language-javascript/issues+homepage: https://github.com/erikd/language-javascript+bug-reports: https://github.com/erikd/language-javascript/issues Extra-source-files: README.md .ghci buildall.sh
src/Language/JavaScript/Parser/AST.hs view
@@ -23,6 +23,7 @@ , JSCommaList (..) , JSCommaTrailingList (..) + , binOpEq , showStripped ) where @@ -35,6 +36,7 @@ data JSAnnot = JSAnnot !TokenPosn ![CommentAnnotation] -- ^Annotation: position and comment/whitespace information+ | JSAnnotSpace -- ^A single space character | JSNoAnnot -- ^No annotation deriving (Data, Eq, Show, Typeable) @@ -425,3 +427,32 @@ commaIf :: String -> String commaIf "" = "" commaIf xs = ',' : xs+++deAnnot :: JSBinOp -> JSBinOp+deAnnot (JSBinOpAnd _) = JSBinOpAnd JSNoAnnot+deAnnot (JSBinOpBitAnd _) = JSBinOpBitAnd JSNoAnnot+deAnnot (JSBinOpBitOr _) = JSBinOpBitOr JSNoAnnot+deAnnot (JSBinOpBitXor _) = JSBinOpBitXor JSNoAnnot+deAnnot (JSBinOpDivide _) = JSBinOpDivide JSNoAnnot+deAnnot (JSBinOpEq _) = JSBinOpEq JSNoAnnot+deAnnot (JSBinOpGe _) = JSBinOpGe JSNoAnnot+deAnnot (JSBinOpGt _) = JSBinOpGt JSNoAnnot+deAnnot (JSBinOpIn _) = JSBinOpIn JSNoAnnot+deAnnot (JSBinOpInstanceOf _) = JSBinOpInstanceOf JSNoAnnot+deAnnot (JSBinOpLe _) = JSBinOpLe JSNoAnnot+deAnnot (JSBinOpLsh _) = JSBinOpLsh JSNoAnnot+deAnnot (JSBinOpLt _) = JSBinOpLt JSNoAnnot+deAnnot (JSBinOpMinus _) = JSBinOpMinus JSNoAnnot+deAnnot (JSBinOpMod _) = JSBinOpMod JSNoAnnot+deAnnot (JSBinOpNeq _) = JSBinOpNeq JSNoAnnot+deAnnot (JSBinOpOr _) = JSBinOpOr JSNoAnnot+deAnnot (JSBinOpPlus _) = JSBinOpPlus JSNoAnnot+deAnnot (JSBinOpRsh _) = JSBinOpRsh JSNoAnnot+deAnnot (JSBinOpStrictEq _) = JSBinOpStrictEq JSNoAnnot+deAnnot (JSBinOpStrictNeq _) = JSBinOpStrictNeq JSNoAnnot+deAnnot (JSBinOpTimes _) = JSBinOpTimes JSNoAnnot+deAnnot (JSBinOpUrsh _) = JSBinOpUrsh JSNoAnnot++binOpEq :: JSBinOp -> JSBinOp -> Bool+binOpEq a b = deAnnot a == deAnnot b
src/Language/JavaScript/Parser/Grammar5.y view
@@ -136,11 +136,11 @@ -- by the Alex lexer or nothing. MaybeSemi :: { AST.JSSemi }-MaybeSemi : ';' { AST.JSSemi (AST.JSAnnot (ts $1) (tc $1)) }+MaybeSemi : ';' { AST.JSSemi (mkJSAnnot $1) } | { AST.JSSemiAuto } AutoSemi :: { AST.JSSemi }-AutoSemi : ';' { AST.JSSemi (AST.JSAnnot (ts $1) (tc $1)) }+AutoSemi : ';' { AST.JSSemi (mkJSAnnot $1) } | 'autosemi' { AST.JSSemiAuto } | { AST.JSSemiAuto } @@ -149,207 +149,207 @@ -- Helpers LParen :: { AST.JSAnnot }-LParen : '(' { AST.JSAnnot (ts $1) (tc $1) }+LParen : '(' { mkJSAnnot $1 } RParen :: { AST.JSAnnot }-RParen : ')' { AST.JSAnnot (ts $1) (tc $1) }+RParen : ')' { mkJSAnnot $1 } LBrace :: { AST.JSAnnot }-LBrace : '{' { AST.JSAnnot (ts $1) (tc $1) }+LBrace : '{' { mkJSAnnot $1 } RBrace :: { AST.JSAnnot }-RBrace : '}' { AST.JSAnnot (ts $1) (tc $1) }+RBrace : '}' { mkJSAnnot $1 } LSquare :: { AST.JSAnnot }-LSquare : '[' { AST.JSAnnot (ts $1) (tc $1) }+LSquare : '[' { mkJSAnnot $1 } RSquare :: { AST.JSAnnot }-RSquare : ']' { AST.JSAnnot (ts $1) (tc $1) }+RSquare : ']' { mkJSAnnot $1 } Comma :: { AST.JSAnnot }-Comma : ',' { AST.JSAnnot (ts $1) (tc $1) }+Comma : ',' { mkJSAnnot $1 } Colon :: { AST.JSAnnot }-Colon : ':' { AST.JSAnnot (ts $1) (tc $1) }+Colon : ':' { mkJSAnnot $1 } Semi :: { AST.JSAnnot }-Semi : ';' { AST.JSAnnot (ts $1) (tc $1) }+Semi : ';' { mkJSAnnot $1 } Dot :: { AST.JSAnnot }-Dot : '.' { AST.JSAnnot (ts $1) (tc $1) }+Dot : '.' { mkJSAnnot $1 } Increment :: { AST.JSUnaryOp }-Increment : '++' { AST.JSUnaryOpIncr (AST.JSAnnot (ts $1) (tc $1)) }+Increment : '++' { AST.JSUnaryOpIncr (mkJSAnnot $1) } Decrement :: { AST.JSUnaryOp }-Decrement : '--' { AST.JSUnaryOpDecr (AST.JSAnnot (ts $1) (tc $1)) }+Decrement : '--' { AST.JSUnaryOpDecr (mkJSAnnot $1) } Delete :: { AST.JSUnaryOp }-Delete : 'delete' { AST.JSUnaryOpDelete (AST.JSAnnot (ts $1) (tc $1)) }+Delete : 'delete' { AST.JSUnaryOpDelete (mkJSAnnot $1) } Void :: { AST.JSUnaryOp }-Void : 'void' { AST.JSUnaryOpVoid (AST.JSAnnot (ts $1) (tc $1)) }+Void : 'void' { AST.JSUnaryOpVoid (mkJSAnnot $1) } Typeof :: { AST.JSUnaryOp }-Typeof : 'typeof' { AST.JSUnaryOpTypeof (AST.JSAnnot (ts $1) (tc $1)) }+Typeof : 'typeof' { AST.JSUnaryOpTypeof (mkJSAnnot $1) } Plus :: { AST.JSBinOp }-Plus : '+' { AST.JSBinOpPlus (AST.JSAnnot (ts $1) (tc $1)) }+Plus : '+' { AST.JSBinOpPlus (mkJSAnnot $1) } Minus :: { AST.JSBinOp }-Minus : '-' { AST.JSBinOpMinus (AST.JSAnnot (ts $1) (tc $1)) }+Minus : '-' { AST.JSBinOpMinus (mkJSAnnot $1) } Tilde :: { AST.JSUnaryOp }-Tilde : '~' { AST.JSUnaryOpTilde (AST.JSAnnot (ts $1) (tc $1)) }+Tilde : '~' { AST.JSUnaryOpTilde (mkJSAnnot $1) } Not :: { AST.JSUnaryOp }-Not : '!' { AST.JSUnaryOpNot (AST.JSAnnot (ts $1) (tc $1)) }+Not : '!' { AST.JSUnaryOpNot (mkJSAnnot $1) } Mul :: { AST.JSBinOp }-Mul : '*' { AST.JSBinOpTimes (AST.JSAnnot (ts $1) (tc $1)) }+Mul : '*' { AST.JSBinOpTimes (mkJSAnnot $1) } Div :: { AST.JSBinOp }-Div : '/' { AST.JSBinOpDivide (AST.JSAnnot (ts $1) (tc $1)) }+Div : '/' { AST.JSBinOpDivide (mkJSAnnot $1) } Mod :: { AST.JSBinOp }-Mod : '%' { AST.JSBinOpMod (AST.JSAnnot (ts $1) (tc $1)) }+Mod : '%' { AST.JSBinOpMod (mkJSAnnot $1) } Lsh :: { AST.JSBinOp }-Lsh : '<<' { AST.JSBinOpLsh (AST.JSAnnot (ts $1) (tc $1)) }+Lsh : '<<' { AST.JSBinOpLsh (mkJSAnnot $1) } Rsh :: { AST.JSBinOp }-Rsh : '>>' { AST.JSBinOpRsh (AST.JSAnnot (ts $1) (tc $1)) }+Rsh : '>>' { AST.JSBinOpRsh (mkJSAnnot $1) } Ursh :: { AST.JSBinOp }-Ursh : '>>>' { AST.JSBinOpUrsh (AST.JSAnnot (ts $1) (tc $1)) }+Ursh : '>>>' { AST.JSBinOpUrsh (mkJSAnnot $1) } Le :: { AST.JSBinOp }-Le : '<=' { AST.JSBinOpLe (AST.JSAnnot (ts $1) (tc $1)) }+Le : '<=' { AST.JSBinOpLe (mkJSAnnot $1) } Lt :: { AST.JSBinOp }-Lt : '<' { AST.JSBinOpLt (AST.JSAnnot (ts $1) (tc $1)) }+Lt : '<' { AST.JSBinOpLt (mkJSAnnot $1) } Ge :: { AST.JSBinOp }-Ge : '>=' { AST.JSBinOpGe (AST.JSAnnot (ts $1) (tc $1)) }+Ge : '>=' { AST.JSBinOpGe (mkJSAnnot $1) } Gt :: { AST.JSBinOp }-Gt : '>' { AST.JSBinOpGt (AST.JSAnnot (ts $1) (tc $1)) }+Gt : '>' { AST.JSBinOpGt (mkJSAnnot $1) } In :: { AST.JSBinOp }-In : 'in' { AST.JSBinOpIn (AST.JSAnnot (ts $1) (tc $1)) }+In : 'in' { AST.JSBinOpIn (mkJSAnnot $1) } Instanceof :: { AST.JSBinOp }-Instanceof : 'instanceof' { AST.JSBinOpInstanceOf (AST.JSAnnot (ts $1) (tc $1)) }+Instanceof : 'instanceof' { AST.JSBinOpInstanceOf (mkJSAnnot $1) } StrictEq :: { AST.JSBinOp }-StrictEq : '===' { AST.JSBinOpStrictEq (AST.JSAnnot (ts $1) (tc $1)) }+StrictEq : '===' { AST.JSBinOpStrictEq (mkJSAnnot $1) } Equal :: { AST.JSBinOp }-Equal : '==' { AST.JSBinOpEq (AST.JSAnnot (ts $1) (tc $1)) }+Equal : '==' { AST.JSBinOpEq (mkJSAnnot $1) } StrictNe :: { AST.JSBinOp }-StrictNe : '!==' { AST.JSBinOpStrictNeq (AST.JSAnnot (ts $1) (tc $1)) }+StrictNe : '!==' { AST.JSBinOpStrictNeq (mkJSAnnot $1) } Ne :: { AST.JSBinOp }-Ne : '!=' { AST.JSBinOpNeq (AST.JSAnnot (ts $1) (tc $1))}+Ne : '!=' { AST.JSBinOpNeq (mkJSAnnot $1)} Or :: { AST.JSBinOp }-Or : '||' { AST.JSBinOpOr (AST.JSAnnot (ts $1) (tc $1)) }+Or : '||' { AST.JSBinOpOr (mkJSAnnot $1) } And :: { AST.JSBinOp }-And : '&&' { AST.JSBinOpAnd (AST.JSAnnot (ts $1) (tc $1)) }+And : '&&' { AST.JSBinOpAnd (mkJSAnnot $1) } BitOr :: { AST.JSBinOp }-BitOr : '|' { AST.JSBinOpBitOr (AST.JSAnnot (ts $1) (tc $1)) }+BitOr : '|' { AST.JSBinOpBitOr (mkJSAnnot $1) } BitAnd :: { AST.JSBinOp }-BitAnd : '&' { AST.JSBinOpBitAnd (AST.JSAnnot (ts $1) (tc $1)) }+BitAnd : '&' { AST.JSBinOpBitAnd (mkJSAnnot $1) } BitXor :: { AST.JSBinOp }-BitXor : '^' { AST.JSBinOpBitXor (AST.JSAnnot (ts $1) (tc $1))}+BitXor : '^' { AST.JSBinOpBitXor (mkJSAnnot $1)} Hook :: { AST.JSAnnot }-Hook : '?' { AST.JSAnnot (ts $1) (tc $1) }+Hook : '?' { mkJSAnnot $1 } SimpleAssign :: { AST.JSAnnot }-SimpleAssign : '=' { AST.JSAnnot (ts $1) (tc $1) }+SimpleAssign : '=' { mkJSAnnot $1 } OpAssign :: { AST.JSAssignOp }-OpAssign : '*=' { AST.JSTimesAssign (AST.JSAnnot (ts $1) (tc $1)) }- | '/=' { AST.JSDivideAssign (AST.JSAnnot (ts $1) (tc $1)) }- | '%=' { AST.JSModAssign (AST.JSAnnot (ts $1) (tc $1)) }- | '+=' { AST.JSPlusAssign (AST.JSAnnot (ts $1) (tc $1)) }- | '-=' { AST.JSMinusAssign (AST.JSAnnot (ts $1) (tc $1)) }- | '<<=' { AST.JSLshAssign (AST.JSAnnot (ts $1) (tc $1)) }- | '>>=' { AST.JSRshAssign (AST.JSAnnot (ts $1) (tc $1)) }- | '>>>=' { AST.JSUrshAssign (AST.JSAnnot (ts $1) (tc $1)) }- | '&=' { AST.JSBwAndAssign (AST.JSAnnot (ts $1) (tc $1)) }- | '^=' { AST.JSBwXorAssign (AST.JSAnnot (ts $1) (tc $1)) }- | '|=' { AST.JSBwOrAssign (AST.JSAnnot (ts $1) (tc $1)) }+OpAssign : '*=' { AST.JSTimesAssign (mkJSAnnot $1) }+ | '/=' { AST.JSDivideAssign (mkJSAnnot $1) }+ | '%=' { AST.JSModAssign (mkJSAnnot $1) }+ | '+=' { AST.JSPlusAssign (mkJSAnnot $1) }+ | '-=' { AST.JSMinusAssign (mkJSAnnot $1) }+ | '<<=' { AST.JSLshAssign (mkJSAnnot $1) }+ | '>>=' { AST.JSRshAssign (mkJSAnnot $1) }+ | '>>>=' { AST.JSUrshAssign (mkJSAnnot $1) }+ | '&=' { AST.JSBwAndAssign (mkJSAnnot $1) }+ | '^=' { AST.JSBwXorAssign (mkJSAnnot $1) }+ | '|=' { AST.JSBwOrAssign (mkJSAnnot $1) } Var :: { AST.JSAnnot }-Var : 'var' { AST.JSAnnot (ts $1) (tc $1) }+Var : 'var' { mkJSAnnot $1 } Const :: { AST.JSAnnot }-Const : 'const' { AST.JSAnnot (ts $1) (tc $1) }+Const : 'const' { mkJSAnnot $1 } If :: { AST.JSAnnot }-If : 'if' { AST.JSAnnot (ts $1) (tc $1) }+If : 'if' { mkJSAnnot $1 } Else :: { AST.JSAnnot }-Else : 'else' { AST.JSAnnot (ts $1) (tc $1) }+Else : 'else' { mkJSAnnot $1 } Do :: { AST.JSAnnot }-Do : 'do' { AST.JSAnnot (ts $1) (tc $1) }+Do : 'do' { mkJSAnnot $1 } While :: { AST.JSAnnot }-While : 'while' { AST.JSAnnot (ts $1) (tc $1) }+While : 'while' { mkJSAnnot $1 } For :: { AST.JSAnnot }-For : 'for' { AST.JSAnnot (ts $1) (tc $1) }+For : 'for' { mkJSAnnot $1 } Continue :: { AST.JSAnnot }-Continue : 'continue' { AST.JSAnnot (ts $1) (tc $1) }+Continue : 'continue' { mkJSAnnot $1 } Break :: { AST.JSAnnot }-Break : 'break' { AST.JSAnnot (ts $1) (tc $1) }+Break : 'break' { mkJSAnnot $1 } Return :: { AST.JSAnnot }-Return : 'return' { AST.JSAnnot (ts $1) (tc $1) }+Return : 'return' { mkJSAnnot $1 } With :: { AST.JSAnnot }-With : 'with' { AST.JSAnnot (ts $1) (tc $1) }+With : 'with' { mkJSAnnot $1 } Switch :: { AST.JSAnnot }-Switch : 'switch' { AST.JSAnnot (ts $1) (tc $1) }+Switch : 'switch' { mkJSAnnot $1 } Case :: { AST.JSAnnot }-Case : 'case' { AST.JSAnnot (ts $1) (tc $1) }+Case : 'case' { mkJSAnnot $1 } Default :: { AST.JSAnnot }-Default : 'default' { AST.JSAnnot (ts $1) (tc $1) }+Default : 'default' { mkJSAnnot $1 } Throw :: { AST.JSAnnot }-Throw : 'throw' { AST.JSAnnot (ts $1) (tc $1) {- 'Throw' -} }+Throw : 'throw' { mkJSAnnot $1 {- 'Throw' -} } Try :: { AST.JSAnnot }-Try : 'try' { AST.JSAnnot (ts $1) (tc $1) }+Try : 'try' { mkJSAnnot $1 } CatchL :: { AST.JSAnnot }-CatchL : 'catch' { AST.JSAnnot (ts $1) (tc $1) }+CatchL : 'catch' { mkJSAnnot $1 } FinallyL :: { AST.JSAnnot }-FinallyL : 'finally' { AST.JSAnnot (ts $1) (tc $1) }+FinallyL : 'finally' { mkJSAnnot $1 } Function :: { AST.JSAnnot }-Function : 'function' { AST.JSAnnot (ts $1) (tc $1) {- 'Function' -} }+Function : 'function' { mkJSAnnot $1 {- 'Function' -} } New :: { AST.JSAnnot }-New : 'new' { AST.JSAnnot (ts $1) (tc $1) }+New : 'new' { mkJSAnnot $1 } Eof :: { AST.JSAnnot }-Eof : 'tail' { AST.JSAnnot (ts $1) (tc $1) {- 'Eof' -} }+Eof : 'tail' { mkJSAnnot $1 {- 'Eof' -} } -- Literal :: See 7.8 -- NullLiteral@@ -364,26 +364,26 @@ | RegularExpressionLiteral { $1 } NullLiteral :: { AST.JSExpression }-NullLiteral : 'null' { AST.JSLiteral (AST.JSAnnot (ts $1) (tc $1)) "null" }+NullLiteral : 'null' { AST.JSLiteral (mkJSAnnot $1) "null" } BooleanLiteral :: { AST.JSExpression }-BooleanLiteral : 'true' { AST.JSLiteral (AST.JSAnnot (ts $1) (tc $1)) "true" }- | 'false' { AST.JSLiteral (AST.JSAnnot (ts $1) (tc $1)) "false" }+BooleanLiteral : 'true' { AST.JSLiteral (mkJSAnnot $1) "true" }+ | 'false' { AST.JSLiteral (mkJSAnnot $1) "false" } -- <Numeric Literal> ::= DecimalLiteral -- | HexIntegerLiteral -- | OctalLiteral NumericLiteral :: { AST.JSExpression }-NumericLiteral : 'decimal' { AST.JSDecimal (AST.JSAnnot (ts $1) (tc $1)) (tokenLiteral $1) }- | 'hexinteger' { AST.JSHexInteger (AST.JSAnnot (ts $1) (tc $1)) (tokenLiteral $1) }- | 'octal' { AST.JSOctal (AST.JSAnnot (ts $1) (tc $1)) (tokenLiteral $1) }+NumericLiteral : 'decimal' { AST.JSDecimal (mkJSAnnot $1) (tokenLiteral $1) }+ | 'hexinteger' { AST.JSHexInteger (mkJSAnnot $1) (tokenLiteral $1) }+ | 'octal' { AST.JSOctal (mkJSAnnot $1) (tokenLiteral $1) } StringLiteral :: { AST.JSExpression }-StringLiteral : 'string' { AST.JSStringLiteral (AST.JSAnnot (ts $1) (tc $1)) (tokenLiteral $1) }+StringLiteral : 'string' { AST.JSStringLiteral (mkJSAnnot $1) (tokenLiteral $1) } -- <Regular Expression Literal> ::= RegExp RegularExpressionLiteral :: { AST.JSExpression }-RegularExpressionLiteral : 'regex' { AST.JSRegEx (AST.JSAnnot (ts $1) (tc $1)) (tokenLiteral $1) }+RegularExpressionLiteral : 'regex' { AST.JSRegEx (mkJSAnnot $1) (tokenLiteral $1) } -- PrimaryExpression : See 11.1 -- this@@ -393,7 +393,7 @@ -- ObjectLiteral -- ( Expression ) PrimaryExpression :: { AST.JSExpression }-PrimaryExpression : 'this' { AST.JSLiteral (AST.JSAnnot (ts $1) (tc $1)) "this" }+PrimaryExpression : 'this' { AST.JSLiteral (mkJSAnnot $1) "this" } | Identifier { $1 {- 'PrimaryExpression1' -} } | Literal { $1 {- 'PrimaryExpression2' -} } | ArrayLiteral { $1 {- 'PrimaryExpression3' -} }@@ -406,47 +406,47 @@ -- IdentifierStart -- IdentifierName IdentifierPart Identifier :: { AST.JSExpression }-Identifier : 'ident' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) (tokenLiteral $1) }- | 'get' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "get" }- | 'set' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "set" }+Identifier : 'ident' { AST.JSIdentifier (mkJSAnnot $1) (tokenLiteral $1) }+ | 'get' { AST.JSIdentifier (mkJSAnnot $1) "get" }+ | 'set' { AST.JSIdentifier (mkJSAnnot $1) "set" } -- TODO: make this include any reserved word too, including future ones IdentifierName :: { AST.JSExpression } IdentifierName : Identifier {$1}- | 'break' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "break" }- | 'case' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "case" }- | 'catch' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "catch" }- | 'const' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "const" }- | 'continue' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "continue" }- | 'debugger' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "debugger" }- | 'default' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "default" }- | 'delete' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "delete" }- | 'do' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "do" }- | 'else' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "else" }- | 'enum' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "enum" }- | 'false' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "false" }- | 'finally' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "finally" }- | 'for' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "for" }- | 'function' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "function" }- | 'get' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "get" }- | 'if' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "if" }- | 'in' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "in" }- | 'instanceof' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "instanceof" }- | 'new' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "new" }- | 'null' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "null" }- | 'return' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "return" }- | 'set' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "set" }- | 'switch' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "switch" }- | 'this' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "this" }- | 'throw' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "throw" }- | 'true' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "true" }- | 'try' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "try" }- | 'typeof' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "typeof" }- | 'var' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "var" }- | 'void' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "void" }- | 'while' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "while" }- | 'with' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) "with" }- | 'future' { AST.JSIdentifier (AST.JSAnnot (ts $1) (tc $1)) (tokenLiteral $1) }+ | 'break' { AST.JSIdentifier (mkJSAnnot $1) "break" }+ | 'case' { AST.JSIdentifier (mkJSAnnot $1) "case" }+ | 'catch' { AST.JSIdentifier (mkJSAnnot $1) "catch" }+ | 'const' { AST.JSIdentifier (mkJSAnnot $1) "const" }+ | 'continue' { AST.JSIdentifier (mkJSAnnot $1) "continue" }+ | 'debugger' { AST.JSIdentifier (mkJSAnnot $1) "debugger" }+ | 'default' { AST.JSIdentifier (mkJSAnnot $1) "default" }+ | 'delete' { AST.JSIdentifier (mkJSAnnot $1) "delete" }+ | 'do' { AST.JSIdentifier (mkJSAnnot $1) "do" }+ | 'else' { AST.JSIdentifier (mkJSAnnot $1) "else" }+ | 'enum' { AST.JSIdentifier (mkJSAnnot $1) "enum" }+ | 'false' { AST.JSIdentifier (mkJSAnnot $1) "false" }+ | 'finally' { AST.JSIdentifier (mkJSAnnot $1) "finally" }+ | 'for' { AST.JSIdentifier (mkJSAnnot $1) "for" }+ | 'function' { AST.JSIdentifier (mkJSAnnot $1) "function" }+ | 'get' { AST.JSIdentifier (mkJSAnnot $1) "get" }+ | 'if' { AST.JSIdentifier (mkJSAnnot $1) "if" }+ | 'in' { AST.JSIdentifier (mkJSAnnot $1) "in" }+ | 'instanceof' { AST.JSIdentifier (mkJSAnnot $1) "instanceof" }+ | 'new' { AST.JSIdentifier (mkJSAnnot $1) "new" }+ | 'null' { AST.JSIdentifier (mkJSAnnot $1) "null" }+ | 'return' { AST.JSIdentifier (mkJSAnnot $1) "return" }+ | 'set' { AST.JSIdentifier (mkJSAnnot $1) "set" }+ | 'switch' { AST.JSIdentifier (mkJSAnnot $1) "switch" }+ | 'this' { AST.JSIdentifier (mkJSAnnot $1) "this" }+ | 'throw' { AST.JSIdentifier (mkJSAnnot $1) "throw" }+ | 'true' { AST.JSIdentifier (mkJSAnnot $1) "true" }+ | 'try' { AST.JSIdentifier (mkJSAnnot $1) "try" }+ | 'typeof' { AST.JSIdentifier (mkJSAnnot $1) "typeof" }+ | 'var' { AST.JSIdentifier (mkJSAnnot $1) "var" }+ | 'void' { AST.JSIdentifier (mkJSAnnot $1) "void" }+ | 'while' { AST.JSIdentifier (mkJSAnnot $1) "while" }+ | 'with' { AST.JSIdentifier (mkJSAnnot $1) "with" }+ | 'future' { AST.JSIdentifier (mkJSAnnot $1) (tokenLiteral $1) } @@ -506,10 +506,10 @@ PropertyAssignment : PropertyName Colon AssignmentExpression { AST.JSPropertyNameandValue $1 $2 [$3] } -- Should be "get" in next, but is not a Token | 'get' PropertyName LParen RParen FunctionBody- { AST.JSPropertyAccessor (AST.JSAccessorGet (AST.JSAnnot (ts $1) (tc $1))) $2 $3 [] $4 $5 }+ { AST.JSPropertyAccessor (AST.JSAccessorGet (mkJSAnnot $1)) $2 $3 [] $4 $5 } -- Should be "set" in next, but is not a Token | 'set' PropertyName LParen PropertySetParameterList RParen FunctionBody- { AST.JSPropertyAccessor (AST.JSAccessorSet (AST.JSAnnot (ts $1) (tc $1))) $2 $3 [$4] $5 $6 }+ { AST.JSPropertyAccessor (AST.JSAccessorSet (mkJSAnnot $1)) $2 $3 [$4] $5 $6 } -- PropertyName : See 11.1.5 -- IdentifierName@@ -1067,7 +1067,7 @@ -- DebuggerStatement : See 12.15 -- debugger ; DebuggerStatement :: { AST.JSStatement }-DebuggerStatement : 'debugger' MaybeSemi { AST.JSExpressionStatement (AST.JSLiteral (AST.JSAnnot (ts $1) (tc $1)) "debugger") $2 {- 'DebuggerStatement' -} }+DebuggerStatement : 'debugger' MaybeSemi { AST.JSExpressionStatement (AST.JSLiteral (mkJSAnnot $1) "debugger") $2 {- 'DebuggerStatement' -} } -- FunctionDeclaration : See clause 13 -- function Identifier ( FormalParameterListopt ) { FunctionBody }@@ -1152,22 +1152,11 @@ mkJSMemberNew :: AST.JSAnnot -> AST.JSExpression -> JSArguments -> AST.JSExpression mkJSMemberNew a e (JSArguments l arglist r) = AST.JSMemberNew a e l arglist r - parseError :: Token -> Alex a parseError = alexError . show --- ----------------------------------ts :: Token -> TokenPosn-ts = tokenSpan---- --------------------------------tc :: Token -> [CommentAnnotation]-tc = tokenComment--mtc :: [Token] -> [CommentAnnotation]-mtc xs = concatMap tokenComment xs+mkJSAnnot :: Token -> AST.JSAnnot+mkJSAnnot a = AST.JSAnnot (tokenSpan a) (tokenComment a) -- --------------------------------------------------------------------- -- | mkUnary : The parser detects '+' and '-' as the binary version of these
src/Language/JavaScript/Parser/Lexer.x view
@@ -420,7 +420,7 @@ -- If the token is a WsToken and it contains a newline, convert it to an -- AutoSemiToken and call the continuation, otherwise, just lexLoop.- maybeAutoSemi ws@(WsToken sp tl cmt) =+ maybeAutoSemi (WsToken sp tl cmt) = if any (== '\n') tl then cont $ AutoSemiToken sp tl cmt else lexLoop@@ -428,7 +428,7 @@ toCommentAnnotation :: [Token] -> [CommentAnnotation]-toCommentAnnotation [] = [NoComment]+toCommentAnnotation [] = [] toCommentAnnotation xs = reverse $ map go xs where
src/Language/JavaScript/Process/Minify.hs view
@@ -145,7 +145,7 @@ fix a (JSCallExpressionDot ex _ xs) = JSCallExpressionDot (fix a ex) emptyAnnot (fixEmpty xs) fix a (JSCallExpressionSquare ex _ xs _) = JSCallExpressionSquare (fix a ex) emptyAnnot (fixEmpty xs) emptyAnnot fix a (JSCommaExpression le _ re) = JSCommaExpression (fix a le) emptyAnnot (fixEmpty re)- fix a (JSExpressionBinary lhs op rhs) = fixBinOpExpression a op (fixEmpty lhs) (fixEmpty rhs)+ fix a (JSExpressionBinary lhs op rhs) = fixBinOpExpression a op lhs rhs fix _ (JSExpressionParen _ e _) = JSExpressionParen emptyAnnot (fixEmpty e) emptyAnnot fix a (JSExpressionPostfix e op) = JSExpressionPostfix (fix a e) (fixEmpty op) fix a (JSExpressionTernary cond _ v1 _ v2) = JSExpressionTernary (fix a cond) emptyAnnot (fixEmpty v1) emptyAnnot (fixEmpty v2)@@ -165,24 +165,43 @@ fixVarList JSLNil = JSLNil fixBinOpExpression :: JSAnnot -> JSBinOp -> JSExpression -> JSExpression -> JSExpression-fixBinOpExpression _ (JSBinOpPlus _) (JSStringLiteral _ s1) (JSStringLiteral _ s2) = stringLitConcat s1 s2+fixBinOpExpression a (JSBinOpPlus _) lhs rhs = fixBinOpPlus a lhs rhs fixBinOpExpression a (JSBinOpIn _) lhs rhs = JSExpressionBinary (fix a lhs) (JSBinOpIn spaceAnnot) (fix spaceAnnot rhs) fixBinOpExpression a (JSBinOpInstanceOf _) lhs rhs = JSExpressionBinary (fix a lhs) (JSBinOpInstanceOf spaceAnnot) (fix spaceAnnot rhs) fixBinOpExpression a op lhs rhs = JSExpressionBinary (fix a lhs) (fixEmpty op) (fixEmpty rhs) +fixBinOpPlus :: JSAnnot -> JSExpression -> JSExpression -> JSExpression+fixBinOpPlus a lhs rhs =+ case (fix a lhs, fixEmpty rhs) of+ (JSStringLiteral _ s1, JSStringLiteral _ s2) -> stringLitConcat (normalizeToSQ s1) (normalizeToSQ s2)+ (nlhs, nrhs) -> JSExpressionBinary nlhs (JSBinOpPlus emptyAnnot) nrhs+ -- Concatenate two JSStringLiterals. Since the strings will include the string -- terminators (either single or double quotes) we use whatever terminator is--- used bu the first string.+-- used by the first string. stringLitConcat :: String -> String -> JSExpression stringLitConcat xs [] = JSStringLiteral emptyAnnot xs stringLitConcat [] ys = JSStringLiteral emptyAnnot ys-stringLitConcat xall@(q:_) yall@(_:yss) =- let ys = init yss in- if q `notElem` ys- then JSStringLiteral emptyAnnot (init xall ++ ys ++ [q])- else -- TODO: Correct, but can we do better?- JSExpressionBinary (JSStringLiteral emptyAnnot xall) (JSBinOpPlus emptyAnnot) (JSStringLiteral emptyAnnot yall)+stringLitConcat xall (_:yss) =+ JSStringLiteral emptyAnnot (init xall ++ init yss ++ "'") +-- Normalize a String. If its single quoted, just return it and its double quoted+-- convert it to single quoted.+normalizeToSQ :: String -> String+normalizeToSQ str =+ case str of+ [] -> []+ ('\'' : _) -> str+ ('"' : xs) -> '\'' : convertSQ xs+ other -> other -- Should not happen.+ where+ convertSQ [] = []+ convertSQ [_] = "'"+ convertSQ ('\'':xs) = '\\' : '\'' : convertSQ xs+ convertSQ ('\\':'\"':xs) = '"' : convertSQ xs+ convertSQ (x:xs) = x : convertSQ xs++ instance MinifyJS JSBinOp where fix _ (JSBinOpAnd _) = JSBinOpAnd emptyAnnot fix _ (JSBinOpBitAnd _) = JSBinOpBitAnd emptyAnnot@@ -319,7 +338,7 @@ spaceAnnot = JSAnnot tokenPosnEmpty [WhiteSpace tokenPosnEmpty " "] emptyAnnot :: JSAnnot-emptyAnnot = JSAnnot tokenPosnEmpty []+emptyAnnot = JSNoAnnot newlineAnnot :: JSAnnot newlineAnnot = JSAnnot tokenPosnEmpty [WhiteSpace tokenPosnEmpty "\n"]