Merge branch 'master' of github.com:dopefishh/cc1516
[cc1516.git] / parse.icl
index 5af08db..1739eb9 100644 (file)
--- a/parse.icl
+++ b/parse.icl
@@ -48,13 +48,16 @@ parseFunDecl = liftM6 FunDecl
        (parseBBraces $ parseSepList CommaToken parseIdent)
        (optional (satTok DoubleColonToken *> parseFunType))
        (satTok CBraceOpenToken *> many parseVarDecl)
-       (many parseStmt <* satTok CBraceCloseToken)
+       (flatten <$> (many parseStmt <* satTok CBraceCloseToken))
 
-parseStmt :: Parser Token Stmt
-parseStmt = parseIfStmt <|> parseWhileStmt <|>
+parseStmt :: Parser Token [Stmt]
+parseStmt = (parseIfStmt <|> parseWhileStmt <|>
        parseSColon parseAssStmt <|> parseSColon parseReturnStmt <|>
        (parseSColon parseFunCall 
-               >>= \(ident, args, fs)->pure $ FunStmt ident args fs)
+               >>= \(ident, args, fs)->pure $ FunStmt ident args fs))
+       >>= \stmt->case stmt of
+               FunStmt "print" args fs = pure $ map (\a->FunStmt "print" [a] []) args
+               s = pure [s]
        where
                parseSColon :: (Parser Token a) -> Parser Token a
                parseSColon p = p <* satTok SColonToken
@@ -79,10 +82,10 @@ parseStmt = parseIfStmt <|> parseWhileStmt <|>
                        (parseBBraces parseExpr) <*> (parseBlock <|> parseOneLine))
 
                parseBlock :: Parser Token [Stmt]
-               parseBlock = parseBCBraces (many parseStmt)
+               parseBlock = parseBCBraces (flatten <$> many parseStmt)
 
                parseOneLine :: Parser Token [Stmt]
-               parseOneLine = pure <$> parseStmt
+               parseOneLine = parseStmt
 
 parseFunType :: Parser Token Type
 parseFunType = parseFT >>= \t -> case t of