diff options
Diffstat (limited to 'src/compiler')
| -rw-r--r-- | src/compiler/GF/Compile/GenerateBC.hs | 5 | ||||
| -rw-r--r-- | src/compiler/GF/Compile/TypeCheck/TC.hs | 5 |
2 files changed, 10 insertions, 0 deletions
diff --git a/src/compiler/GF/Compile/GenerateBC.hs b/src/compiler/GF/Compile/GenerateBC.hs index a121a3d5e..1f1e81ab9 100644 --- a/src/compiler/GF/Compile/GenerateBC.hs +++ b/src/compiler/GF/Compile/GenerateBC.hs @@ -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 = diff --git a/src/compiler/GF/Compile/TypeCheck/TC.hs b/src/compiler/GF/Compile/TypeCheck/TC.hs index 9a3cb7103..531d862f4 100644 --- a/src/compiler/GF/Compile/TypeCheck/TC.hs +++ b/src/compiler/GF/Compile/TypeCheck/TC.hs @@ -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)]) |
