Skip to content

Commit

Permalink
Fixed silly error where parsing mode was not set correctly if whitesp…
Browse files Browse the repository at this point in the history
…ace was collected. Cleaned up grammar file.
  • Loading branch information
alanz committed Apr 16, 2012
1 parent 06077c5 commit e8c28c1
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 46 deletions.
2 changes: 2 additions & 0 deletions runtests.hs
Original file line number Diff line number Diff line change
Expand Up @@ -721,6 +721,8 @@ commentPrintSuite = testGroup "Comments"
, testCase "fn2" (testRoundTrip "var foo = function() { return 5; }")
, testCase "fn3" (testRoundTrip "var foo = function foo() { return 5; }")

-- Parse failure in hjsmin
, testCase "parsefail" (testRoundTrip "switch(t){case DIV: v = u / v; break;}")
]

-- ---------------------------------------------------------------------
Expand Down
17 changes: 9 additions & 8 deletions src-dev/Language/JavaScript/Parser/Lexer.x
Original file line number Diff line number Diff line change
Expand Up @@ -323,17 +323,17 @@ classifyToken :: Token -> Int
classifyToken aToken =
case aToken of
IdentifierToken {} -> divide
NullToken {} -> divide
TrueToken {} -> divide
FalseToken {} -> divide
ThisToken {} -> divide
NullToken {} -> divide
TrueToken {} -> divide
FalseToken {} -> divide
ThisToken {} -> divide
-- OctalToken {} -> divide -- May have to extend parser to cope with these
DecimalToken {} -> divide
DecimalToken {} -> divide
HexIntegerToken {} -> divide
StringToken {} -> divide
StringToken {} -> divide
RightCurlyToken {} -> divide
RightParenToken {} -> divide
_other -> reg
_other -> reg


{-
Expand Down Expand Up @@ -423,7 +423,8 @@ getLastToken :: Alex Token
getLastToken = Alex $ \s@AlexState{alex_ust=ust} -> Right (s, previousToken ust)

setLastToken :: Token -> Alex ()
setLastToken tok = Alex $ \s -> Right (s{alex_ust=(alex_ust s){previousToken=tok}}, ())
setLastToken (WsToken {}) = Alex $ \s -> Right (s, ())
setLastToken tok = Alex $ \s -> Right (s{alex_ust=(alex_ust s){previousToken=tok}}, ())

getComment :: Alex [Token]
--getComments = reverse <$> Alex $ \s@AlexState{alex_ust=ust} -> Right (s, comments ust)
Expand Down
34 changes: 4 additions & 30 deletions src/Language/JavaScript/Parser/Grammar5.y
Original file line number Diff line number Diff line change
Expand Up @@ -469,7 +469,6 @@ ObjectLiteral : LBrace RBrace { fp (AST.NN (AST.J
-- PropertyNameAndValueList , PropertyAssignment
PropertyNameandValueList :: { [ AST.JSNode ] }
PropertyNameandValueList : PropertyAssignment { [$1] {- PropertyNameandValueList1 -} }
-- | PropertyNameandValueList ',' PropertyAssignment { ($1 ++ [(AST.NT (AST.JSLiteral ",") (ss $2) (gc $2))] ++ [$3]) {- PropertyNameandValueList2 -} }
| PropertyNameandValueList Comma PropertyAssignment { ($1++[$2]++[$3]) {- PropertyNameandValueList2 -} }

-- PropertyAssignment : See 11.1.5
Expand Down Expand Up @@ -510,8 +509,8 @@ MemberExpression :: { [AST.JSNode] }
MemberExpression : PrimaryExpression { [$1] {- MemberExpression -}}
| FunctionExpression { [$1] {- MemberExpression -}}
| MemberExpression LSquare Expression RSquare { [fp (AST.NN (AST.JSMemberSquare $1 $2 $3 $4))] }
| MemberExpression Dot IdentifierName { [fp (AST.NN (AST.JSMemberDot $1 $2 $3))] }
| 'new' MemberExpression Arguments { (((fp (AST.NT (AST.JSLiteral "new") (ss $1) (gc $1))):$2)++[$3])}
| MemberExpression Dot IdentifierName { [fp (AST.NN (AST.JSMemberDot $1 $2 $3))] }
| 'new' MemberExpression Arguments { (((fp (AST.NT (AST.JSLiteral "new") (ss $1) (gc $1))):$2)++[$3])}

-- NewExpression : See 11.2
-- MemberExpression
Expand Down Expand Up @@ -990,10 +989,8 @@ SwitchStatement : Switch LParen Expression RParen CaseBlock { (AST.NN (AST.JSSwi
-- { CaseClausesopt }
-- { CaseClausesopt DefaultClause CaseClausesopt }
CaseBlock :: { AST.JSNode }
CaseBlock : LBrace CaseClausesOpt RBrace { fp (AST.NN (AST.JSBlock [$1] $2 [$3])) {- CaseBlock1 -}}
CaseBlock : LBrace CaseClausesOpt RBrace { fp (AST.NN (AST.JSBlock [$1] $2 [$3])){- CaseBlock1 -}}
| LBrace CaseClausesOpt DefaultClause CaseClausesOpt RBrace { fp (AST.NN (AST.JSBlock [$1] ($2++[$3]++$4) [$5])){- CaseBlock2 -}}
--CaseBlock : LBrace CaseClausesOpt RBrace { ($1:$2)++[$3] {- CaseBlock1 -}}
-- | LBrace CaseClausesOpt DefaultClause CaseClausesOpt RBrace { ($1:$2)++[$3]++$4++[$5] {- CaseBlock2 -}}

-- CaseClauses : See 12.11
-- CaseClause
Expand Down Expand Up @@ -1048,7 +1045,7 @@ Catches : Catch { [$1] {- Catches 1 -} }
-- <Catch> ::= 'catch' '(' Identifier ')' <Block>
-- | 'catch' '(' Identifier 'if' ConditionalExpression ')' <Block>
Catch :: { AST.JSNode }
Catch : CatchL LParen Identifier RParen Block { fp (AST.NN (AST.JSCatch $1 $2 $3 [] $4 $5) ) }
Catch : CatchL LParen Identifier RParen Block { fp (AST.NN (AST.JSCatch $1 $2 $3 [ ] $4 $5)) }
| CatchL LParen Identifier If ConditionalExpression RParen Block { fp (AST.NN (AST.JSCatch $1 $2 $3 ($4:$5) $6 $7)) }

-- Finally : See 12.14
Expand Down Expand Up @@ -1130,21 +1127,12 @@ SourceElement : Statement { $1 {- SourceElement1 -} }
| FunctionDeclaration { $1 {- SourceElement2 -} }

{
{-
combineSourceElements :: AST.JSNode -> AST.JSNode -> AST.JSNode
combineSourceElements (AST.NN (AST.JSSourceElements xs)) x1 = fp (AST.NN (AST.JSSourceElements (xs++[x1])))
-}
combineSourceElementsTop :: AST.JSNode -> AST.JSNode -> AST.JSNode
combineSourceElementsTop (AST.NN (AST.JSSourceElementsTop xs)) x1 = fp (AST.NN (AST.JSSourceElementsTop (xs++[x1])))

combineTop :: AST.JSNode -> AST.JSNode -> AST.JSNode
combineTop (AST.NN (AST.JSSourceElementsTop xs)) x1 = fp (AST.NN (AST.JSSourceElementsTop (xs++[x1])))

{-
combineStatements :: AST.JSNode -> AST.JSNode -> AST.JSNode
combineStatements (AST.NN (AST.JSStatementList xs)) (AST.NN (AST.JSStatementList ys)) = fp (AST.NN (AST.JSStatementList (xs++ys) ))
combineStatements (AST.NN (AST.JSStatementList xs)) y = fp (AST.NN (AST.JSStatementList (xs++[y])))
-}

parseError :: Token -> Alex a
-- parseError = throwError . UnexpectedToken
Expand Down Expand Up @@ -1172,20 +1160,6 @@ gc token = token_comment token
mgc :: [Token] -> [CommentAnnotation]
mgc xs = concatMap gc xs

{-
-- Get node comment
gnc (AST.NN _ _ ca) = ca
mgnc [(AST.NN _ _ ca)] = ca

-- Prepend a comment
pc :: AST.JSNode -> [CommentAnnotation] -> AST.JSNode
pc (AST.NN node span cs2) cs1 = (AST.NN node span (cs1++cs2))

mpc :: [AST.JSNode] -> [CommentAnnotation] -> [AST.JSNode]
-- mpc [(AST.NN node span cs2)] cs1 = [(AST.NN node span (cs1++cs2))]
mpc ((AST.NN node span cs2):xs) cs1 = (AST.NN node span (cs1++cs2)):xs
-}

-- ---------------------------------------------------------------------

fp :: AST.JSNode -> AST.JSNode
Expand Down
17 changes: 9 additions & 8 deletions src/Language/JavaScript/Parser/Lexer.hs
Original file line number Diff line number Diff line change
Expand Up @@ -289,17 +289,17 @@ classifyToken :: Token -> Int
classifyToken aToken =
case aToken of
IdentifierToken {} -> divide
NullToken {} -> divide
TrueToken {} -> divide
FalseToken {} -> divide
ThisToken {} -> divide
NullToken {} -> divide
TrueToken {} -> divide
FalseToken {} -> divide
ThisToken {} -> divide
-- OctalToken {} -> divide -- May have to extend parser to cope with these
DecimalToken {} -> divide
DecimalToken {} -> divide
HexIntegerToken {} -> divide
StringToken {} -> divide
StringToken {} -> divide
RightCurlyToken {} -> divide
RightParenToken {} -> divide
_other -> reg
_other -> reg


{-
Expand Down Expand Up @@ -389,7 +389,8 @@ getLastToken :: Alex Token
getLastToken = Alex $ \s@AlexState{alex_ust=ust} -> Right (s, previousToken ust)

setLastToken :: Token -> Alex ()
setLastToken tok = Alex $ \s -> Right (s{alex_ust=(alex_ust s){previousToken=tok}}, ())
setLastToken (WsToken {}) = Alex $ \s -> Right (s, ())
setLastToken tok = Alex $ \s -> Right (s{alex_ust=(alex_ust s){previousToken=tok}}, ())

getComment :: Alex [Token]
--getComments = reverse <$> Alex $ \s@AlexState{alex_ust=ust} -> Right (s, comments ust)
Expand Down

0 comments on commit e8c28c1

Please sign in to comment.