From 7afdc2e1390ae402d0cd6d6b33c84db37c43fe0f Mon Sep 17 00:00:00 2001 From: hallgren Date: Mon, 9 Sep 2013 14:29:57 +0000 Subject: [PATCH] Fix an old name shadowing bug in concrete syntax by removing the refresh pass The refresh pass does not correctly keep track of the scope of local variables and can convert things like \x->(\x->x) x into \x1->(\x2->x2) x2. Fortunately, it appears that the refresh pass is not needed anymore, so it has been removed. --- gf.cabal | 2 +- src/compiler/GF/Compile.hs | 8 +++++--- src/compiler/GF/Compile/Compute/ConcreteLazy.hs | 2 +- src/compiler/GF/Compile/Compute/ConcreteStrict.hs | 4 ++-- src/compiler/GF/Compile/Optimize.hs | 2 +- src/compiler/GF/Compile/Refresh.hs | 7 ++++--- src/compiler/GF/Compile/TypeCheck/Abstract.hs | 2 +- src/compiler/GF/Grammar/MMacros.hs | 10 +++++----- 8 files changed, 20 insertions(+), 17 deletions(-) diff --git a/gf.cabal b/gf.cabal index 74c8a3c38..cec15550b 100644 --- a/gf.cabal +++ b/gf.cabal @@ -184,7 +184,7 @@ executable gf GF.Grammar.Binary GF.Compile.Update GF.Compile.CheckGrammar - GF.Compile.Refresh +-- GF.Compile.Refresh GF.Compile.Rename GF.Compile.ReadFiles GF.Compile.GrammarToPGF diff --git a/src/compiler/GF/Compile.hs b/src/compiler/GF/Compile.hs index 9463abcc0..67fd750a2 100644 --- a/src/compiler/GF/Compile.hs +++ b/src/compiler/GF/Compile.hs @@ -12,7 +12,7 @@ import GF.Compile.GeneratePMCFG import GF.Compile.GrammarToPGF import GF.Compile.ReadFiles import GF.Compile.Update -import GF.Compile.Refresh +--import GF.Compile.Refresh import GF.Compile.Coding import GF.Compile.Tags @@ -196,8 +196,10 @@ compileSourceModule opts env@(k,gr,_) mb_gfFile mo@(i,mi) = do if tagsFlag then generateTags k mo3 else compileCompleteModule k mo3 where compileCompleteModule k mo3 = do - (k',mo3r:_) <- runPass2 (head.snd) Refresh "refreshing" $ - refreshModule (k,gr) mo3 +-- (k',mo3r:_) <- runPass2 (head.snd) Refresh "refreshing" $ +-- refreshModule (k,gr) mo3 + let k' = k + mo3r = mo3 mo4 <- runPass2 id Optimize "optimizing" $ optimizeModule opts gr mo3r mo5 <- if isModCnc (snd mo4) && flag optPMCFG opts then runPass2' "generating PMCFG" $ generatePMCFG opts gr mb_gfFile mo4 diff --git a/src/compiler/GF/Compile/Compute/ConcreteLazy.hs b/src/compiler/GF/Compile/Compute/ConcreteLazy.hs index 4107329fb..fce118fec 100644 --- a/src/compiler/GF/Compile/Compute/ConcreteLazy.hs +++ b/src/compiler/GF/Compile/Compute/ConcreteLazy.hs @@ -24,7 +24,7 @@ import GF.Grammar.Printer import GF.Grammar.Predef import GF.Grammar.Macros import GF.Grammar.Lookup -import GF.Compile.Refresh +--import GF.Compile.Refresh import GF.Grammar.PatternMatch import GF.Grammar.Lockfield (isLockLabel,unlockRecord) ---- diff --git a/src/compiler/GF/Compile/Compute/ConcreteStrict.hs b/src/compiler/GF/Compile/Compute/ConcreteStrict.hs index 08c5229ef..3f417bae2 100644 --- a/src/compiler/GF/Compile/Compute/ConcreteStrict.hs +++ b/src/compiler/GF/Compile/Compute/ConcreteStrict.hs @@ -18,14 +18,14 @@ import GF.Data.Operations import GF.Grammar.Grammar import GF.Infra.Ident import GF.Infra.Option -import GF.Infra.Modules +--import GF.Infra.Modules import GF.Data.Str import GF.Grammar.ShowTerm import GF.Grammar.Printer import GF.Grammar.Predef import GF.Grammar.Macros import GF.Grammar.Lookup -import GF.Compile.Refresh +--import GF.Compile.Refresh import GF.Grammar.PatternMatch import GF.Grammar.Lockfield (isLockLabel,unlockRecord) ---- diff --git a/src/compiler/GF/Compile/Optimize.hs b/src/compiler/GF/Compile/Optimize.hs index 0599ed85b..3641440d8 100644 --- a/src/compiler/GF/Compile/Optimize.hs +++ b/src/compiler/GF/Compile/Optimize.hs @@ -21,7 +21,7 @@ import GF.Grammar.Printer import GF.Grammar.Macros import GF.Grammar.Lookup import GF.Grammar.Predef -import GF.Compile.Refresh +--import GF.Compile.Refresh import GF.Compile.Compute.Concrete import GF.Compile.CheckGrammar import GF.Compile.Update diff --git a/src/compiler/GF/Compile/Refresh.hs b/src/compiler/GF/Compile/Refresh.hs index edff8a479..837534afa 100644 --- a/src/compiler/GF/Compile/Refresh.hs +++ b/src/compiler/GF/Compile/Refresh.hs @@ -12,10 +12,10 @@ -- (Description of the module) ----------------------------------------------------------------------------- -module GF.Compile.Refresh (refreshTerm, refreshTermN, - refreshModule +module GF.Compile.Refresh ({-refreshTermN, refreshTerm, + refreshModule-} ) where - +{- import GF.Data.Operations import GF.Grammar.Grammar import GF.Infra.Ident @@ -143,3 +143,4 @@ inBlockSTM mo = do return v +-} \ No newline at end of file diff --git a/src/compiler/GF/Compile/TypeCheck/Abstract.hs b/src/compiler/GF/Compile/TypeCheck/Abstract.hs index d6886b6ca..dfded01d2 100644 --- a/src/compiler/GF/Compile/TypeCheck/Abstract.hs +++ b/src/compiler/GF/Compile/TypeCheck/Abstract.hs @@ -25,7 +25,7 @@ import GF.Infra.CheckM import GF.Grammar import GF.Grammar.Lookup import GF.Grammar.Unify -import GF.Compile.Refresh +--import GF.Compile.Refresh import GF.Compile.Compute.Abstract import GF.Compile.TypeCheck.TC diff --git a/src/compiler/GF/Grammar/MMacros.hs b/src/compiler/GF/Grammar/MMacros.hs index 233eb768f..c52ee4ce2 100644 --- a/src/compiler/GF/Grammar/MMacros.hs +++ b/src/compiler/GF/Grammar/MMacros.hs @@ -20,7 +20,7 @@ import GF.Data.Operations import GF.Grammar.Grammar import GF.Grammar.Printer import GF.Infra.Ident -import GF.Compile.Refresh +--import GF.Compile.Refresh import GF.Grammar.Values ----import GrammarST import GF.Grammar.Macros @@ -160,12 +160,12 @@ substitute v s = return . substTerm v s alphaConv :: [Var] -> (Var,Var) -> Exp -> Err Exp --- alphaConv oldvars (x,x') = substitute (x:x':oldvars) [(x,Vr x')] -alphaFresh :: [Var] -> Exp -> Err Exp -alphaFresh vs = refreshTermN $ maxVarIndex vs +--alphaFresh :: [Var] -> Exp -> Err Exp +--alphaFresh vs = refreshTermN $ maxVarIndex vs -- | done in a state monad -alphaFreshAll :: [Var] -> [Exp] -> Err [Exp] -alphaFreshAll vs = mapM $ alphaFresh vs +--alphaFreshAll :: [Var] -> [Exp] -> Err [Exp] +--alphaFreshAll vs = mapM $ alphaFresh vs -- | for display val2exp :: Val -> Err Exp