diff options
| author | aarne <unknown> | 2005-09-19 12:01:18 +0000 |
|---|---|---|
| committer | aarne <unknown> | 2005-09-19 12:01:18 +0000 |
| commit | 517d7ec419e8f5a0f9a56e10dbdfe1bbe82fafa5 (patch) | |
| tree | a7d44c3c6db7cec2c3b8d97ab58b5beac018f992 /src/GF/Canon | |
| parent | 8342cba9bd25cc2277702781ef8d07469c2feac8 (diff) | |
more clee fix
Diffstat (limited to 'src/GF/Canon')
| -rw-r--r-- | src/GF/Canon/Subexpressions.hs | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/src/GF/Canon/Subexpressions.hs b/src/GF/Canon/Subexpressions.hs index 6d351a0b2..b1891d065 100644 --- a/src/GF/Canon/Subexpressions.hs +++ b/src/GF/Canon/Subexpressions.hs @@ -5,16 +5,16 @@ -- Stability : (stable) -- Portability : (portable) -- --- > CVS $Date: 2005/09/19 10:05:48 $ +-- > CVS $Date: 2005/09/19 13:01:18 $ -- > CVS $Author: aarne $ --- > CVS $Revision: 1.2 $ +-- > CVS $Revision: 1.3 $ -- -- Common subexpression elimination. -- all tables. AR 18\/9\/2005. ----------------------------------------------------------------------------- module GF.Canon.Subexpressions ( - elimSubtermsMod, prSubtermStat, unSubelimCanon + elimSubtermsMod, prSubtermStat, unSubelimCanon, unSubelimModule ) where import GF.Canon.AbsGFC @@ -76,17 +76,24 @@ prSubtermStat gr = unlines [prt mo ++++ expsIn mo js | (mo,js) <- mos] where unSubelimCanon :: CanonGrammar -> CanonGrammar unSubelimCanon gr@(M.MGrammar modules) = - M.MGrammar $ map unparModule modules where - unparModule (i,m) = case m of + M.MGrammar $ map unSubelimModule modules + +unSubelimModule :: CanonModule -> CanonModule +unSubelimModule mo@(i,m) = case m of M.ModMod (M.Module mt@(M.MTConcrete _) st fs me ops js) -> - (i, M.ModMod (M.Module mt st fs me ops (mapTree unparInfo js))) + (i, M.ModMod (M.Module mt st fs me ops + (rebuild (map unparInfo (tree2list js))))) _ -> (i,m) - unparInfo (c,info) = case info of - CncFun k xs t m -> (c, CncFun k xs (unparTerm t) m) - _ -> (c,info) - unparTerm t = case t of - I c -> errVal t $ liftM unparTerm $ lookupGlobal gr c - _ -> C.composSafeOp unparTerm t + where + unparInfo (c,info) = case info of + CncFun k xs t m -> [(c, CncFun k xs (unparTerm t) m)] + ResOper _ _ -> [] + _ -> [(c,info)] + unparTerm t = case t of + I c -> errVal t $ liftM unparTerm $ lookupGlobal gr c + _ -> C.composSafeOp unparTerm t + gr = M.MGrammar [mo] + rebuild = buildTree . concat -- implementation |
