summaryrefslogtreecommitdiff
path: root/src/compiler/GF
diff options
context:
space:
mode:
authorhallgren <hallgren@chalmers.se>2013-03-12 16:36:58 +0000
committerhallgren <hallgren@chalmers.se>2013-03-12 16:36:58 +0000
commite5ce4d4b1e7d2a6de343f184329ed23530ed0c9b (patch)
tree9e8858c3b3a49ad28db9f63d8e47b9cbd8451e30 /src/compiler/GF
parent78b3487cb73f7efa98b0340b53f87d99095bd10e (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"]
Diffstat (limited to 'src/compiler/GF')
-rw-r--r--src/compiler/GF/Compile/Compute/ConcreteNew.hs6
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