summaryrefslogtreecommitdiff
path: root/parser.hs
diff options
context:
space:
mode:
authortomsmeding <tom.smeding@gmail.com>2017-02-02 22:29:41 +0100
committertomsmeding <tom.smeding@gmail.com>2017-02-02 22:30:16 +0100
commit185623be46dfd9a60e5a021259a6c7778cfb07cd (patch)
tree8bbbe2edeec7fb7018a52f5cf52ed0a24ab48e59 /parser.hs
parentdd1a2323e743df5ca3109bae6e213cd7b02dddee (diff)
Parse and typecheck casts
Diffstat (limited to 'parser.hs')
-rw-r--r--parser.hs11
1 files changed, 10 insertions, 1 deletions
diff --git a/parser.hs b/parser.hs
index 6e8b828..942c63c 100644
--- a/parser.hs
+++ b/parser.hs
@@ -99,7 +99,16 @@ exprTable =
prefix name op = E.Prefix (exUnOp_ op <$ symbol name)
pExpression :: Parser Expression
-pExpression = E.buildExpressionParser exprTable pExLit
+pExpression = E.buildExpressionParser exprTable (pExCast <|> pExLit)
+
+pExCast :: Parser Expression
+pExCast = do
+ symbol "cast"
+ symbol "("
+ t <- pType
+ symbol ")"
+ e <- pParenExpr
+ return $ ExCast t e
pExLit :: Parser Expression
pExLit = (exLit_ <$> pLiteral) <|> pParenExpr