diff options
| author | aarne <unknown> | 2005-01-11 15:06:12 +0000 |
|---|---|---|
| committer | aarne <unknown> | 2005-01-11 15:06:12 +0000 |
| commit | 87b55df10f00fd23d89a89bfb7c4354ff455d83d (patch) | |
| tree | 91d46e3592a49de8cf7b6b3917fcc0077df1dbd6 /src/GF/Canon/Share.hs | |
| parent | bb3d2e1d42e662a3add785670f289787d2e492e2 (diff) | |
-val optimization
Diffstat (limited to 'src/GF/Canon/Share.hs')
| -rw-r--r-- | src/GF/Canon/Share.hs | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/GF/Canon/Share.hs b/src/GF/Canon/Share.hs index 63e12436a..f482505b0 100644 --- a/src/GF/Canon/Share.hs +++ b/src/GF/Canon/Share.hs @@ -1,4 +1,4 @@ -module Share (shareModule, OptSpec, basicOpt, fullOpt) where +module Share (shareModule, OptSpec, basicOpt, fullOpt, valOpt) where import AbsGFC import Ident @@ -13,8 +13,10 @@ import qualified Modules as M type OptSpec = [Integer] --- doOptFactor opt = elem 2 opt +doOptValues opt = elem 3 opt basicOpt = [] fullOpt = [2] +valOpt = [3] shareModule :: OptSpec -> (Ident, CanonModInfo) -> (Ident, CanonModInfo) shareModule opt (i,m) = case m of @@ -30,6 +32,7 @@ shareInfo _ i = i shareOpt :: OptSpec -> Term -> Term shareOpt opt | doOptFactor opt = share . factor 0 + | doOptValues opt = values | otherwise = share -- we need no counter to create new variable names, since variables are @@ -114,3 +117,7 @@ replace old new trm = case trm of R _ -> True _ -> False +values :: Term -> Term +values t = case t of + T ty cs -> V ty [values t | Cas _ t <- cs] -- assumes proper order + _ -> C.composSafeOp values t |
