summaryrefslogtreecommitdiff
path: root/src/GF/Devel/Compile.hs
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2007-10-10 20:29:10 +0000
committeraarne <aarne@cs.chalmers.se>2007-10-10 20:29:10 +0000
commit697cf5f440a4ad9c1308b4e257347200076a8f9b (patch)
treed63cef3e7b7a53b81e24b6d56903db51043c8051 /src/GF/Devel/Compile.hs
parent0fdb2dbc48f4dec187168981b04ef20eef5034b9 (diff)
tuning gf optimization
Diffstat (limited to 'src/GF/Devel/Compile.hs')
-rw-r--r--src/GF/Devel/Compile.hs18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/GF/Devel/Compile.hs b/src/GF/Devel/Compile.hs
index 0054ff4b7..43deb4493 100644
--- a/src/GF/Devel/Compile.hs
+++ b/src/GF/Devel/Compile.hs
@@ -104,13 +104,15 @@ compileOne opts env@(_,srcgr) file = do
case gf of
- -- for compiled gf, read the file and update environment, also source env
+ -- for compiled gf, read the file and update environment
+ -- also undo common subexp optimization, to enable normal computations
"gfc" -> do
sm0 <- putp ("+ reading" +++ file) $ getSourceModule opts file
- sm <- {- putp "creating indirections" $ -} ioeErr $ extendModule mos sm0
+ let sm1 = unsubexpModule sm0
+ sm <- {- putp "creating indirections" $ -} ioeErr $ extendModule mos sm1
extendCompileEnv env sm
- -- for gf source, do full compilation
+ -- for gf source, do full compilation and generate code
_ -> do
let modu = unsuffixFile file
@@ -123,7 +125,7 @@ compileOne opts env@(_,srcgr) file = do
getSourceModule opts file
(k',sm) <- compileSourceModule opts env sm0
cm <- putpp " generating code... " $ generateModuleCode opts path sm
-
+ -- sm is optimized before generation, but not in the env
extendCompileEnvInt env (k',sm)
@@ -170,7 +172,7 @@ generateModuleCode opts path minfo@(name,info) = do
let pname = prefixPathName path (prt name)
let minfo0 = minfo
- let minfo1 = shareModule minfo
+ let minfo1 = (if isConcr info then optModule else id) minfo
let minfo2 = minfo1
let (file,out) = (gfcFile pname, prGrammar (MGrammar [minfo2]))
@@ -180,9 +182,9 @@ generateModuleCode opts path minfo@(name,info) = do
where
putp = putPointE opts
putpp = putPointEsil opts
- isCompilable mi = case mi of
- ModMod m -> not $ isModCnc m && mstatus m == MSIncomplete
- _ -> True
+ isConcr mi = case mi of
+ ModMod m -> isModCnc m && mstatus m /= MSIncomplete
+ _ -> False
-- auxiliaries