diff options
| author | hallgren <hallgren@chalmers.se> | 2012-10-24 17:49:20 +0000 |
|---|---|---|
| committer | hallgren <hallgren@chalmers.se> | 2012-10-24 17:49:20 +0000 |
| commit | 9f8c0f86f1ab8d49d4b45c29fafcf815a4384ba6 (patch) | |
| tree | 22a468dff9433b868b0e2ed2c3a0aeeaed99d15a /src/compiler/GF/Compile | |
| parent | 6fcd435cd9068c755ee30de252cb959ac20944f9 (diff) | |
Compute.ConcreteNew: support variants
Also add a missing check for Predef values in apply.
Diffstat (limited to 'src/compiler/GF/Compile')
| -rw-r--r-- | src/compiler/GF/Compile/Compute/ConcreteNew.hs | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/compiler/GF/Compile/Compute/ConcreteNew.hs b/src/compiler/GF/Compile/Compute/ConcreteNew.hs index e61a12a22..d614c022a 100644 --- a/src/compiler/GF/Compile/Compute/ConcreteNew.hs +++ b/src/compiler/GF/Compile/Compute/ConcreteNew.hs @@ -28,10 +28,10 @@ data Value | VRecType [(Label,Value)] | VRec [(Label,Value)] | VTbl Type [Value] - | VC Value Value +-- | VC Value Value | VPatt Patt | VPattType Value - | VFV Value + | VFV [Value] | VAlts Value [(Value, Value)] | VError String deriving Show @@ -75,10 +75,13 @@ eval gr env t@(ExtR t1 t2) = [] -> VRec (rs1 ++ rs2) _ -> error _ -> error -eval gr env t = error ("eval "++show t) +eval gr env (FV ts) = VFV (map (eval gr env) ts) +eval gr env t = error ("unimplemented: eval "++show t) apply gr env t [] = eval gr env t -apply gr env (Q x) vs = case lookupResDef gr x of +apply gr env (Q x) vs + | fst x == cPredef = VApp x vs -- hmm + | otherwise = case lookupResDef gr x of Ok t -> apply gr [] t vs Bad err -> error err apply gr env (App t1 t2) vs = apply gr env t1 (eval gr env t2 : vs) @@ -101,4 +104,5 @@ value2term gr xs (VSort s) = Sort s value2term gr xs (VImplArg v) = ImplArg (value2term gr xs v) value2term gr xs (VTblType p res) = Table (value2term gr xs p) (value2term gr xs res) value2term gr xs (VRecType rs) = RecType [(l,value2term gr xs v) | (l,v) <- rs] -value2term gr xs v = error ("value2term "++show v) +value2term gr xs (VFV vs) = FV (map (value2term gr xs) vs) +value2term gr xs v = error ("unimplemented: value2term "++show v) |
