@@ -22,6 +22,7 @@ import Language.PureScript.Names
22import Language.PureScript.CodeGen.JS.AST
22import Language.PureScript.CodeGen.JS.AST
23import qualified Language.PureScript.Parser.Common as C
23import qualified Language.PureScript.Parser.Common as C
24import Control.Applicative
24import Control.Applicative
25import Data.Functor.Identity
26import Data.Functor.Identity
26import qualified Text.Parsec as P
27import qualified Text.Parsec as P
27import qualified Text.Parsec.Token as P
28import qualified Text.Parsec.Token as P
@@ -46,14 +47,20 @@ parseObjectLiteral :: P.Parsec String u JS
46parseObjectLiteral = JSObjectLiteral <$> P.braces C.tokenParser (P.commaSep C.tokenParser parseIdentifierAndValue)
47parseObjectLiteral = JSObjectLiteral <$> P.braces C.tokenParser (P.commaSep C.tokenParser parseIdentifierAndValue)
48parseIdentifierAndValue :: P.Parsec String u (String, JS)
49parseIdentifierAndValue :: P.Parsec String u (String, JS)
49−parseIdentifierAndValue = (,) <$> (C.identifier <* C.colon)
50+parseIdentifierAndValue = (,) <$> (identifier <* C.colon)
50 <*> parseJS
51 <*> parseJS
53+identifier :: P.Parsec String u String
55+ ident <- C.identifier
56+ when (ident `elem` C.reservedJsNames) $ P.unexpected $ ("reserved identifier " ++ show ident)
52parseFunction :: P.Parsec String u JS
59parseFunction :: P.Parsec String u JS
53parseFunction = do
60parseFunction = do
54 C.reserved "function"
61 C.reserved "function"
55 name <- P.optionMaybe C.identifier
62 name <- P.optionMaybe C.identifier
56− args <- P.parens C.tokenParser $ P.commaSep C.tokenParser C.identifier
63+ args <- P.parens C.tokenParser $ P.commaSep C.tokenParser identifier
57 body <- parseJS
64 body <- parseJS
58 return $ JSFunction name args body
65 return $ JSFunction name args body
@@ -61,7 +68,7 @@ parseBlock :: P.Parsec String u JS
61parseBlock = JSBlock <$> P.braces C.tokenParser (P.many parseJS)
68parseBlock = JSBlock <$> P.braces C.tokenParser (P.many parseJS)
63parseVar :: P.Parsec String u JS
70parseVar :: P.Parsec String u JS
64−parseVar = JSVar <$> C.identifier
71+parseVar = JSVar <$> identifier
66parseJSAtom :: P.Parsec String u JS
73parseJSAtom :: P.Parsec String u JS
67parseJSAtom = P.choice
74parseJSAtom = P.choice
@@ -80,7 +87,7 @@ parseJSAtom = P.choice
80 , P.parens C.tokenParser parseJS ]
87 , P.parens C.tokenParser parseJS ]
82parseAccessor :: JS -> P.Parsec String u JS
89parseAccessor :: JS -> P.Parsec String u JS
83−parseAccessor js = P.try $ flip JSAccessor js <$> (C.dot *> P.notFollowedBy C.opLetter *> C.identifier)
90+parseAccessor js = P.try $ flip JSAccessor js <$> (C.dot *> P.notFollowedBy C.opLetter *> identifier)
85parseIndexer :: JS -> P.Parsec String u JS
92parseIndexer :: JS -> P.Parsec String u JS
86parseIndexer js = P.try $ flip JSIndexer js <$> (P.squares C.tokenParser parseJS)
93parseIndexer js = P.try $ flip JSIndexer js <$> (P.squares C.tokenParser parseJS)