forked from GitHub/gf-core
the compiler now allows + to be used as a floating point addition in the abstract syntax
This commit is contained in:
@@ -131,6 +131,11 @@ compileFun gr arity st vs (Let (x, (_, e1)) e2) h0 bs args =
|
||||
let (h1,bs1,arg,is1) = compileLambda gr st vs [] e1 h0 bs
|
||||
(h2,bs2,is2) = compileFun gr arity st ((x,arg):vs) e2 h1 bs1 args
|
||||
in (h2,bs2,is1++is2)
|
||||
compileFun gr arity st vs (Glue e1 e2) h0 bs args =
|
||||
let (h1,bs1,arg1,is1) = compileArg gr st vs e1 h0 bs
|
||||
(h2,bs2,arg2,is2) = compileArg gr st vs e2 h1 bs1
|
||||
(st1,is3) = pushArgs st [arg2,arg1]
|
||||
in (h2,bs2,is1++is2++is3++[ADD])
|
||||
compileFun gr arity st vs e _ _ _ = error (show e)
|
||||
|
||||
compileArg gr st vs (Q(m,id)) h0 bs =
|
||||
|
||||
@@ -46,6 +46,7 @@ data AExp =
|
||||
| ARecType [ALabelling]
|
||||
| AR [AAssign]
|
||||
| AP AExp Label Val
|
||||
| AGlue AExp AExp
|
||||
| AData Val
|
||||
deriving (Eq,Show)
|
||||
|
||||
@@ -162,6 +163,10 @@ checkExp th tenv@(k,rho,gamma) e ty = do
|
||||
P r l -> do (r',cs) <- checkExp th tenv r (VRecType [(l,typ)])
|
||||
return (AP r' l typ,cs)
|
||||
|
||||
Glue x y -> do cs1 <- eqVal k valAbsFloat typ
|
||||
(x,cs2) <- checkExp th tenv x typ
|
||||
(y,cs3) <- checkExp th tenv y typ
|
||||
return (AGlue x y,cs1++cs2++cs3)
|
||||
_ -> checkInferExp th tenv e typ
|
||||
|
||||
checkInferExp :: Theory -> TCEnv -> Exp -> Val -> Err (AExp, [(Val,Val)])
|
||||
|
||||
Reference in New Issue
Block a user