diff options
| author | aarne <aarne@cs.chalmers.se> | 2008-03-15 21:02:59 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2008-03-15 21:02:59 +0000 |
| commit | 6cbb8086c8bcaca638b993a75017b7738cd923c9 (patch) | |
| tree | 5f8584f310d1a40f3ac85cfe17c7bc0eae656e38 /src/GF/Devel/Compute.hs | |
| parent | e60237136b0a8285874fd57d38ec3518aa94b162 (diff) | |
putting pattern macros in place (not properly tested yet)
Diffstat (limited to 'src/GF/Devel/Compute.hs')
| -rw-r--r-- | src/GF/Devel/Compute.hs | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/GF/Devel/Compute.hs b/src/GF/Devel/Compute.hs index c0a99f4fd..a9081c28a 100644 --- a/src/GF/Devel/Compute.hs +++ b/src/GF/Devel/Compute.hs @@ -306,7 +306,8 @@ computeTermOpt rec gr = comput True where case allParamValues gr ptyp of Ok vs -> do - cs' <- mapM (compBranchOpt g) cs + ps0 <- mapM (compPatternMacro . fst) cs + cs' <- mapM (compBranchOpt g) (zip ps0 (map snd cs)) sts <- mapM (matchPattern cs') vs ts <- mapM (\ (c,g') -> comp (g' ++ g) c) sts ps <- mapM term2patt vs @@ -382,6 +383,33 @@ computeTermOpt rec gr = comput True where R rs -> all (isCan . snd . snd) rs _ -> False + compPatternMacro p = case p of + PM m c -> case look m c of + Ok (EPatt p') -> compPatternMacro p' + _ -> prtBad "pattern expected as value of" p ---- should be in CheckGr + PAs x p -> do + p' <- compPatternMacro p + return $ PAs x p' + PAlt p q -> do + p' <- compPatternMacro p + q' <- compPatternMacro q + return $ PAlt p' q' + PSeq p q -> do + p' <- compPatternMacro p + q' <- compPatternMacro q + return $ PSeq p' q' + PRep p -> do + p' <- compPatternMacro p + return $ PRep p' + PNeg p -> do + p' <- compPatternMacro p + return $ PNeg p' + PR rs -> do + rs' <- mapPairsM compPatternMacro rs + return $ PR rs' + + _ -> return p + compBranch g (p,v) = do let g' = contP p ++ g v' <- comp g' v |
