jmacro 0.5 → 0.5.1
raw patch · 2 files changed
+30/−17 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- Language/Javascript/JMacro/QQ.hs +29/−16
- jmacro.cabal +1/−1
Language/Javascript/JMacro/QQ.hs view
@@ -228,7 +228,7 @@ jsLang :: P.LanguageDef () jsLang = javaStyle { P.reservedNames = ["var","return","if","else","while","for","in","break","new","function","switch","case","default","fun","try","catch","finally","foreign"],- P.reservedOpNames = ["--","*","/","+","-",".","%","?","=","==","!=","<",">","&&","||","++","===",">=","<=","->","::","::!"],+ P.reservedOpNames = ["|>","<|","+=","-=","*=","/=","%=","--","*","/","+","-",".","%","?","=","==","!=","<",">","&&","||","++","===",">=","<=","->","::","::!"], P.identLetter = alphaNum <|> oneOf "_$", P.identStart = letter <|> oneOf "_$", P.commentLine = "//",@@ -345,7 +345,7 @@ <|> switchStat <|> forStat <|> braces statblock- <|> assignStat+ <|> assignOpStat <|> tryStat <|> applStat <|> breakStat@@ -387,7 +387,7 @@ return [ForeignStat i t] returnStat =- reserved "return" >> (:[]) . ReturnStat <$> expr+ reserved "return" >> (:[]) . ReturnStat <$> option (ValExpr $ JVar $ StrI "null") expr ifStat = do reserved "if"@@ -461,9 +461,15 @@ jFor' before p after bs = before ++ [WhileStat (toJExpr p) b'] where b' = BlockStat $ bs ++ after -- assignStat = do- e1 <- try $ dotExpr <* reservedOp "="+ assignOpStat = do+ let rop x = reservedOp x >> return x+ (e1,op) <- try $ liftM2 (,) dotExpr (fmap (take 1) $+ rop "="+ <|> rop "+="+ <|> rop "*="+ <|> rop "/="+ <|> rop "%="+ ) let gofail = fail ("Invalid assignment.") case e1 of ValExpr (JVar (StrI "this")) -> gofail@@ -472,7 +478,7 @@ ValExpr _ -> gofail _ -> return () e2 <- expr- return [AssignStat e1 e2]+ return [AssignStat e1 (if op == "=" then e2 else InfixExpr op e1 e2)] applStat = expr2stat' =<< expr@@ -523,13 +529,16 @@ addIf ans <|> return ans rawExpr = buildExpressionParser table dotExpr <?> "expression" table = [[iop "*", iop "/", iop "%"],- [iop "++", iop "+", iop "-"],+ [iop "++", iop "+", iop "-", iop "--"], [iope "==", iope "!=", iope "<", iope ">", iope ">=", iope "<=", iope "==="],- [iop "&&", iop "||"]+ [iop "&&", iop "||"],+ [applOp, applOpRev] ] iop s = Infix (reservedOp s >> return (InfixExpr s)) AssocLeft iope s = Infix (reservedOp s >> return (InfixExpr s)) AssocNone+ applOp = Infix (reservedOp "<|" >> return (\x y -> ApplExpr x [y])) AssocRight+ applOpRev = Infix (reservedOp "|>" >> return (\x y -> ApplExpr y [x])) AssocLeft dotExpr :: JMParser JExpr dotExpr = do@@ -570,7 +579,7 @@ negnum = either (JInt . negate) (JDouble . negate) <$> try (char '-' >> natFloat) str = JStr <$> (myStringLiteral '"' <|> myStringLiteral '\'') regex = do- s <- myStringLiteralNoBr '/'+ s <- regexLiteral --myStringLiteralNoBr '/' case compileM (BS.pack s) [] of Right _ -> return (JRegEx s) Left err -> fail ("Parse error in regexp: " ++ err)@@ -693,14 +702,18 @@ return [c,c2] _ -> return [c] -myStringLiteralNoBr :: Char -> JMParser String-myStringLiteralNoBr t = do- _ <- char t+--tricky bit to deal with regex literals and comments / / -- if we hit // inside, then we fail, since that isn't ending the regex but introducing a comment, and thus the initial / could not have introduced a regex.+regexLiteral :: JMParser String+regexLiteral = do+ _ <- char '/' x <- concat <$> many myChar- _ <- char t- return x+ _ <- char '/'+ b <- option False (char '/' >> return True)+ if b+ then mzero+ else return x where myChar = do- c <- noneOf [t,'\n']+ c <- noneOf ['/','\n'] case c of '\\' -> do c2 <- anyChar
jmacro.cabal view
@@ -1,5 +1,5 @@ name: jmacro-version: 0.5+version: 0.5.1 synopsis: QuasiQuotation library for programmatic generation of Javascript code. description: Javascript syntax, functional syntax, hygienic names, compile-time guarantees of syntactic correctness, limited typechecking. category: Language