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/PatternMatch.hs | |
| parent | cbb495f5d991a5e3825895ab10a69af7654e8055 (diff) | |
data structures for param values with number, preparing optimized pattern matching in grammar compilation
Diffstat (limited to 'src/GF/Grammar/PatternMatch.hs')
| -rw-r--r-- | src/GF/Grammar/PatternMatch.hs | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/GF/Grammar/PatternMatch.hs b/src/GF/Grammar/PatternMatch.hs index 92d75f2d3..e576dc12e 100644 --- a/src/GF/Grammar/PatternMatch.hs +++ b/src/GF/Grammar/PatternMatch.hs @@ -75,9 +75,11 @@ tryMatch (p,t) = do isInConstantFormt = True -- tested already in matchPattern trym p t' = case (p,t') of - (PVal _ i, (_,Val _ j,_)) + (PVal _ _ i, (_,Val _ _ j,_)) | i == j -> return [] | otherwise -> Bad $ "no match of values" + (PVal pa _ _,_) -> trym pa t' + (_, (_,Val te _ _,_)) -> tryMatch (p, te) (_,(x,Empty,y)) -> trym p (x,K [],y) -- because "" = [""] = [] (PV IW, _) | isInConstantFormt -> return [] -- optimization with wildcard (PV x, _) | isInConstantFormt -> return [(x,t)] @@ -151,6 +153,7 @@ isInConstantForm trm = case trm of Empty -> True Alias _ _ t -> isInConstantForm t EInt _ -> True + Val _ _ _ -> True _ -> False ---- isInArgVarForm trm varsOfPatt :: Patt -> [Ident] |
