summaryrefslogtreecommitdiff
path: root/src/GF/Grammar/PatternMatch.hs
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2008-12-08 07:15:19 +0000
committeraarne <aarne@cs.chalmers.se>2008-12-08 07:15:19 +0000
commitde8bea8d692617d0028f9c2f5716f1e303490ff2 (patch)
tree98c36bc7f0ef1dd2d69c2a9807d1fe13d6c38fdc /src/GF/Grammar/PatternMatch.hs
parentcbb495f5d991a5e3825895ab10a69af7654e8055 (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.hs5
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]