summaryrefslogtreecommitdiff
path: root/src/GF/Devel/GrammarToGFCC.hs
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2007-10-10 16:13:57 +0000
committeraarne <aarne@cs.chalmers.se>2007-10-10 16:13:57 +0000
commitf479ecac03de40d1cfa6f571b349c481f4c90df1 (patch)
tree01757b95c34021ba0cddec50a5f7cb773ae41762 /src/GF/Devel/GrammarToGFCC.hs
parentf93c17c7b1884fc495092f592e34c706751eb49e (diff)
optimizations on evaluated gf in gfc
Diffstat (limited to 'src/GF/Devel/GrammarToGFCC.hs')
-rw-r--r--src/GF/Devel/GrammarToGFCC.hs7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/GF/Devel/GrammarToGFCC.hs b/src/GF/Devel/GrammarToGFCC.hs
index 4fe2e6e0d..686e9f4bb 100644
--- a/src/GF/Devel/GrammarToGFCC.hs
+++ b/src/GF/Devel/GrammarToGFCC.hs
@@ -1,5 +1,7 @@
module GF.Devel.GrammarToGFCC (prGrammar2gfcc,mkCanon2gfcc) where
+import GF.Devel.OptimizeGF (unshareModule)
+
import GF.Grammar.Grammar
import qualified GF.Grammar.Lookup as Look
@@ -220,12 +222,15 @@ canon2canon abs = recollect . map cl2cl . repartition abs . purgeGrammar abs
purgeGrammar :: Ident -> SourceGrammar -> SourceGrammar
-purgeGrammar abstr gr = (M.MGrammar . filter complete . purge . M.modules) gr where
+purgeGrammar abstr gr =
+ (M.MGrammar . map unopt . filter complete . purge . M.modules) gr
+ where
purge = nubBy (\x y -> fst x == fst y) . filter (flip elem needed . fst)
needed = nub $ concatMap (requiredCanModules isSingle gr) acncs
acncs = abstr : M.allConcretes gr abstr
isSingle = True
complete (i,M.ModMod m) = M.isCompleteModule m --- not . isIncompleteCanon
+ unopt = unshareModule gr
type ParamEnv =
(Map.Map (Ident,[Label]) (Type,Integer), -- numbered labels