diff options
| author | aarne <aarne@cs.chalmers.se> | 2007-10-10 20:29:10 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2007-10-10 20:29:10 +0000 |
| commit | 697cf5f440a4ad9c1308b4e257347200076a8f9b (patch) | |
| tree | d63cef3e7b7a53b81e24b6d56903db51043c8051 /src/GF/Devel/Compile.hs | |
| parent | 0fdb2dbc48f4dec187168981b04ef20eef5034b9 (diff) | |
tuning gf optimization
Diffstat (limited to 'src/GF/Devel/Compile.hs')
| -rw-r--r-- | src/GF/Devel/Compile.hs | 18 |
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 |
