From 7710dc42dbcc1883529b49803eeccf2484bfc1ba Mon Sep 17 00:00:00 2001 From: hallgren Date: Tue, 12 Mar 2013 16:36:58 +0000 Subject: [PATCH] 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"] --- src/compiler/GF/Compile/Compute/ConcreteNew.hs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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