summaryrefslogtreecommitdiff
path: root/src/GF/Compile
diff options
context:
space:
mode:
authoraarne <unknown>2005-01-11 15:06:12 +0000
committeraarne <unknown>2005-01-11 15:06:12 +0000
commit87b55df10f00fd23d89a89bfb7c4354ff455d83d (patch)
tree91d46e3592a49de8cf7b6b3917fcc0077df1dbd6 /src/GF/Compile
parentbb3d2e1d42e662a3add785670f289787d2e492e2 (diff)
-val optimization
Diffstat (limited to 'src/GF/Compile')
-rw-r--r--src/GF/Compile/Compile.hs10
-rw-r--r--src/GF/Compile/GrammarToCanon.hs4
-rw-r--r--src/GF/Compile/Optimize.hs1
3 files changed, 12 insertions, 3 deletions
diff --git a/src/GF/Compile/Compile.hs b/src/GF/Compile/Compile.hs
index b320a46f1..a540caca5 100644
--- a/src/GF/Compile/Compile.hs
+++ b/src/GF/Compile/Compile.hs
@@ -252,9 +252,12 @@ generateModuleCode :: Options -> InitPath -> SourceModule -> IOE GFC.CanonModule
generateModuleCode opts path minfo@(name,info) = do
let pname = prefixPathName path (prt name)
minfo0 <- ioeErr $ redModInfo minfo
- minfo' <- return $ if optim
- then shareModule fullOpt minfo0 -- parametrization and sharing
- else shareModule basicOpt minfo0 -- sharing only
+ minfo' <- return $
+ if optim
+ then shareModule fullOpt minfo0 -- parametrization and sharing
+ else if values
+ then shareModule valOpt minfo0 -- tables as courses-of-values
+ else shareModule basicOpt minfo0 -- sharing only
-- for resource, also emit gfr
case info of
@@ -279,6 +282,7 @@ generateModuleCode opts path minfo@(name,info) = do
nomulti = not $ oElem makeMulti opts
emit = oElem emitCode opts && not (oElem notEmitCode opts)
optim = oElem optimizeCanon opts
+ values = oElem optimizeValues opts
-- for old GF: sort into modules, write files, compile as usual
diff --git a/src/GF/Compile/GrammarToCanon.hs b/src/GF/Compile/GrammarToCanon.hs
index 12baa43f2..55390c390 100644
--- a/src/GF/Compile/GrammarToCanon.hs
+++ b/src/GF/Compile/GrammarToCanon.hs
@@ -198,6 +198,10 @@ redCTerm t = case t of
ps' <- mapM redPatt ps
ts' <- mapM redCTerm ts
return $ G.T ty' $ map (uncurry G.Cas) $ zip (map singleton ps') ts'
+ V ty ts -> do
+ ty' <- redCType ty
+ ts' <- mapM redCTerm ts
+ return $ G.V ty' ts'
S u v -> liftM2 G.S (redCTerm u) (redCTerm v)
K s -> return $ G.K (G.KS s)
EInt i -> return $ G.EInt $ toInteger i
diff --git a/src/GF/Compile/Optimize.hs b/src/GF/Compile/Optimize.hs
index 61ff8de32..d379a2ecd 100644
--- a/src/GF/Compile/Optimize.hs
+++ b/src/GF/Compile/Optimize.hs
@@ -188,6 +188,7 @@ evalPrintname gr c ppr lin =
Abs _ b -> oneBranch b
R (r:_) -> oneBranch $ snd $ snd r
T _ (c:_) -> oneBranch $ snd c
+ V _ (c:_) -> oneBranch c
FV (t:_) -> oneBranch t
C x y -> C (oneBranch x) (oneBranch y)
S x _ -> oneBranch x