diff options
| author | aarne <aarne@cs.chalmers.se> | 2008-12-08 07:15:19 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2008-12-08 07:15:19 +0000 |
| commit | de8bea8d692617d0028f9c2f5716f1e303490ff2 (patch) | |
| tree | 98c36bc7f0ef1dd2d69c2a9807d1fe13d6c38fdc /src/GF/Grammar/Macros.hs | |
| parent | cbb495f5d991a5e3825895ab10a69af7654e8055 (diff) | |
data structures for param values with number, preparing optimized pattern matching in grammar compilation
Diffstat (limited to 'src/GF/Grammar/Macros.hs')
| -rw-r--r-- | src/GF/Grammar/Macros.hs | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/GF/Grammar/Macros.hs b/src/GF/Grammar/Macros.hs index be03c02a7..065dcef60 100644 --- a/src/GF/Grammar/Macros.hs +++ b/src/GF/Grammar/Macros.hs @@ -437,7 +437,9 @@ linAsStr s = mkRecord linLabel [K s] -- default linearization {s = s} term2patt :: Term -> Err Patt term2patt trm = case termForm trm of Ok ([], Vr x, []) -> return (PV x) - Ok ([], Val ty x, []) -> return (PVal ty x) + Ok ([], Val te ty x, []) -> do + te' <- term2patt te + return (PVal te' ty x) Ok ([], Con c, aa) -> do aa' <- mapM term2patt aa return (PC c aa') @@ -488,7 +490,7 @@ patt2term :: Patt -> Term patt2term pt = case pt of PV x -> Vr x PW -> Vr identW --- not parsable, should not occur - PVal t i -> Val t i + PVal v t i -> Val (patt2term v) t i PMacro c -> Cn c PM p c -> Q p c @@ -623,9 +625,10 @@ composOp co trm = vs' <- mapM co vs return (V ty' vs') - Val ty i -> - do ty' <- co ty - return (Val ty' i) + Val te ty i -> + do te' <- co te + ty' <- co ty + return (Val te' ty' i) Let (x,(mt,a)) b -> do a' <- co a |
