From de8bea8d692617d0028f9c2f5716f1e303490ff2 Mon Sep 17 00:00:00 2001 From: aarne Date: Mon, 8 Dec 2008 07:15:19 +0000 Subject: data structures for param values with number, preparing optimized pattern matching in grammar compilation --- src/GF/Grammar/PatternMatch.hs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/GF/Grammar/PatternMatch.hs') 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] -- cgit v1.2.3