packages feed

language-javascript 0.5.3 → 0.5.4

raw patch · 6 files changed

+41/−31 lines, 6 files

Files

README view
@@ -35,6 +35,9 @@  Changes +0.5.4 Fixed bug where lexer switches to regexp mode after a ']'+      char, reported by @aszlig+ 0.5.3 Merge pull requests from @aszlig to add octal support, and to       allow leading zeros in exponents 
language-javascript.cabal view
@@ -1,5 +1,5 @@ Name:                language-javascript-Version:             0.5.3+Version:             0.5.4 Synopsis:            Parser for JavaScript Description:         Parses Javascript into an Abstract Syntax Tree (AST).  Initially intended as frontend to hjsmin.                      .
runalex.sh view
@@ -5,5 +5,7 @@ # to have alex > 3.0 installed  alex -g -o src/Language/JavaScript/Parser/Lexer.hs src-dev/Language/JavaScript/Parser/Lexer.x+# To debug the lexer+#alex -d -g -o src/Language/JavaScript/Parser/Lexer.hs src-dev/Language/JavaScript/Parser/Lexer.x  
runtests.hs view
@@ -338,6 +338,8 @@    , testCase "issue5ok3" (testProg "{ y: 18 }" "Right (JSSourceElementsTop [JSBlock ([JSLabelled (JSIdentifier \"y\") (JSExpression [JSDecimal \"18\"])]),JSLiteral \"\"])")    , testCase "issue5ok4" (testProg "x = { y: 18 }" "Right (JSSourceElementsTop [JSExpression [JSIdentifier \"x\",JSOperator JSLiteral \"=\",JSObjectLiteral [JSPropertyNameandValue (JSIdentifier \"y\") [JSDecimal \"18\"]]],JSLiteral \"\"])") +     -- https://github.com/alanz/language-javascript/issues/14+   , testCase "issue14" (testProg "var z = x[i] / y;" "Right (JSSourceElementsTop [JSVariables JSLiteral \"var\" [JSVarDecl (JSIdentifier \"z\") [JSLiteral \"=\",JSExpressionBinary \"/\" [JSMemberSquare [JSIdentifier \"x\"] (JSExpression [JSIdentifier \"i\"])] [JSIdentifier \"y\"]]],JSLiteral \"\"])")      ] @@ -728,6 +730,9 @@     -- Parse failure in hjsmin    , testCase "parsefail" (testRoundTrip "switch(t){case DIV:         v = u / v; break;}")++   -- https://github.com/alanz/language-javascript/issues/14+   , testCase "issue14" (testRoundTrip "var z = x[i] / y;")     ]  -- ---------------------------------------------------------------------
src-dev/Language/JavaScript/Parser/Lexer.x view
@@ -174,13 +174,10 @@ <0> () ; -- { registerStates lexToken reg divide }  -- Skip Whitespace--- <reg,divide> $white_char+   ; <reg,divide> $white_char+   { adapt (mkString wsToken) }  -- Skip one line comment--- <reg,divide> "//"($not_eol_char)*   ; <reg,divide> "//"($not_eol_char)*   { adapt (mkString commentToken) }--- <reg,divide> "//"($not_eol_char)*   { mkComment }  -- --------------------------------------------------------------------- -- Comment definition from the ECMAScript spec, ver 3@@ -270,8 +267,9 @@     }  <reg,divide> {-      \;	{ adapt (symbolToken  SemiColonToken)}-      ","	{ adapt (symbolToken  CommaToken)}+   --   \;	{ adapt (symbolToken  SemiColonToken)}+     ";"	{ adapt (symbolToken  SemiColonToken)}+     ","	{ adapt (symbolToken  CommaToken)}      "?"	{ adapt (symbolToken  HookToken)}      ":"	{ adapt (symbolToken  ColonToken)}      "||"	{ adapt (symbolToken  OrToken)}@@ -327,18 +325,19 @@ classifyToken :: Token -> Int classifyToken aToken =    case aToken of-      IdentifierToken {} -> divide-      NullToken {}       -> divide-      TrueToken {}       -> divide-      FalseToken {}      -> divide-      ThisToken {}       -> divide-      OctalToken {}      -> divide-      DecimalToken {}    -> divide-      HexIntegerToken {} -> divide-      StringToken {}     -> divide-      RightCurlyToken {} -> divide-      RightParenToken {} -> divide-      _other             -> reg+      IdentifierToken {}   -> divide+      NullToken {}         -> divide+      TrueToken {}         -> divide+      FalseToken {}        -> divide+      ThisToken {}         -> divide+      OctalToken {}        -> divide+      DecimalToken {}      -> divide+      HexIntegerToken {}   -> divide+      StringToken {}       -> divide+      RightCurlyToken {}   -> divide+      RightParenToken {}   -> divide+      RightBracketToken {} -> divide+      _other               -> reg   {-
src/Language/JavaScript/Parser/Lexer.hs view
@@ -275,7 +275,7 @@ alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8e\x01\xff\xff\x8c\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\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x69\x00\x6b\x00\x6b\x00\x6d\x00\x6d\x00\xff\xff\x73\x00\x73\x00\x7a\x00\x7a\x00\x7e\x00\x7e\x00\x82\x00\x82\x00\xff\xff\xff\xff\x8c\x00\x8c\x00\x8c\x00\x8e\x00\x8e\x00\xff\xff\x3e\x00\xff\xff\x3e\x00\x3e\x00\x3c\x00\xff\xff\x3c\x00\x3c\x00\x9a\x00\xff\xff\x9a\x00\x9a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8c\x00\x82\x01\x82\x01\x82\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8e\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\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8c\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#  alex_accept = listArray (0::Int,447) [[(AlexAccSkip)],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(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_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))]]-{-# LINE 318 "src-dev/Language/JavaScript/Parser/Lexer.x" #-}+{-# LINE 316 "src-dev/Language/JavaScript/Parser/Lexer.x" #-}   {-@@ -288,18 +288,19 @@ classifyToken :: Token -> Int classifyToken aToken =    case aToken of-      IdentifierToken {} -> divide-      NullToken {}       -> divide-      TrueToken {}       -> divide-      FalseToken {}      -> divide-      ThisToken {}       -> divide-      OctalToken {}      -> divide-      DecimalToken {}    -> divide-      HexIntegerToken {} -> divide-      StringToken {}     -> divide-      RightCurlyToken {} -> divide-      RightParenToken {} -> divide-      _other             -> reg+      IdentifierToken {}   -> divide+      NullToken {}         -> divide+      TrueToken {}         -> divide+      FalseToken {}        -> divide+      ThisToken {}         -> divide+      OctalToken {}        -> divide+      DecimalToken {}      -> divide+      HexIntegerToken {}   -> divide+      StringToken {}       -> divide+      RightCurlyToken {}   -> divide+      RightParenToken {}   -> divide+      RightBracketToken {} -> divide+      _other               -> reg   {-