diff options
| author | hallgren <hallgren@chalmers.se> | 2013-03-12 16:36:58 +0000 |
|---|---|---|
| committer | hallgren <hallgren@chalmers.se> | 2013-03-12 16:36:58 +0000 |
| commit | e5ce4d4b1e7d2a6de343f184329ed23530ed0c9b (patch) | |
| tree | 9e8858c3b3a49ad28db9f63d8e47b9cbd8451e30 | |
| parent | 78b3487cb73f7efa98b0340b53f87d99095bd10e (diff) | |
partial evaluator: push predefined functions inside variants
This should prevent errors like
Internal error in Compute.ConcreteNew:
Applying Predef.drop: Expected a value of type String, got VFV [VString "gewandt",VString "gewendet"]
| -rw-r--r-- | src/compiler/GF/Compile/Compute/ConcreteNew.hs | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/compiler/GF/Compile/Compute/ConcreteNew.hs b/src/compiler/GF/Compile/Compute/ConcreteNew.hs index c853458f8..22df5301b 100644 --- a/src/compiler/GF/Compile/Compute/ConcreteNew.hs +++ b/src/compiler/GF/Compile/Compute/ConcreteNew.hs @@ -378,7 +378,7 @@ vapply v vs = VError {} -> v -- VClosure env (Abs b x t) -> beta gr env b x t vs VAbs bt _ (Bind f) -> vbeta bt f vs - VApp pre vs1 -> err msg id $ delta pre (vs1++vs) + VApp pre vs1 -> err msg vfv $ mapM (delta pre) (varyList (vs1++vs)) where --msg = const (VApp pre (vs1++vs)) msg = bug . (("Applying Predef."++showIdent (predefName pre)++": ")++) @@ -394,6 +394,10 @@ vbeta bt f (v:vs) = ap (VFV avs) = vfv [vapply (f v) vs|v<-avs] ap v = vapply (f v) vs +vary (VFV vs) = vs +vary v = [v] +varyList = mapM vary + {- beta env b x t (v:vs) = case (b,v) of |
