1
0
forked from GitHub/gf-core

more friendly error message when renaming patterns

This commit is contained in:
krasimir
2009-05-20 20:24:15 +00:00
parent 6de94f5300
commit 8f2fb82750
7 changed files with 55 additions and 9 deletions

View File

@@ -36,11 +36,13 @@ import GF.Grammar.Macros
import GF.Grammar.PrGrammar import GF.Grammar.PrGrammar
import GF.Grammar.AppPredefined import GF.Grammar.AppPredefined
import GF.Grammar.Lookup import GF.Grammar.Lookup
import GF.Grammar.Printer
import GF.Data.Operations import GF.Data.Operations
import Control.Monad import Control.Monad
import Data.List (nub) import Data.List (nub)
import Debug.Trace (trace) import Debug.Trace (trace)
import Text.PrettyPrint
renameGrammar :: SourceGrammar -> Err SourceGrammar renameGrammar :: SourceGrammar -> Err SourceGrammar
renameGrammar g = liftM (MGrammar . reverse) $ foldM renameModule [] (modules g) renameGrammar g = liftM (MGrammar . reverse) $ foldM renameModule [] (modules g)
@@ -236,15 +238,15 @@ renamePattern env patt = case patt of
_ -> prtBad "unresolved pattern" patt _ -> prtBad "unresolved pattern" patt
PC c ps -> do PC c ps -> do
c' <- renameIdentTerm env $ Cn c c' <- renid $ Cn c
case c' of case c' of
QC p d -> renp $ PP p d ps QC m c -> renp $ PP m c ps
-- Q p d -> renp $ PP p d ps --- why this? AR 15/3/2008 Q _ _ -> Bad $ render (text "data constructor expected but" <+> ppTerm Qualified 0 c' <+> text "is found instead")
_ -> prtBad "unresolved pattern" c' ---- (PC c ps', concat vs) _ -> Bad $ render (text "unresolved data constructor" <+> ppTerm Qualified 0 c')
PP p c ps -> do PP p c ps -> do
(p', c') <- case renameIdentTerm env (QC p c) of (p', c') <- case renid (QC p c) of
Ok (QC p' c') -> return (p',c') Ok (QC p' c') -> return (p',c')
_ -> return (p,c) --- temporarily, for bw compat _ -> return (p,c) --- temporarily, for bw compat
psvss <- mapM renp ps psvss <- mapM renp ps
@@ -252,14 +254,15 @@ renamePattern env patt = case patt of
return (PP p' c' ps', concat vs) return (PP p' c' ps', concat vs)
PM p c -> do PM p c -> do
(p', c') <- case renameIdentTerm env (Q p c) of (p', c') <- case renid (Q p c) of
Ok (Q p' c') -> return (p',c') Ok (Q p' c') -> return (p',c')
_ -> prtBad "not a pattern macro" patt _ -> prtBad "not a pattern macro" patt
return (PM p' c', []) return (PM p' c', [])
PV x -> case renid (Vr x) of PV x -> do case renid (Vr x) of
Ok (QC m c) -> return (PP m c [],[]) Ok (QC m c) -> return (PP m c [],[])
_ -> return (patt, [x]) Ok (Q m c) -> Bad $ render (text "data constructor expected but" <+> ppTerm Qualified 0 (Q m c) <+> text "is found instead")
_ -> return (patt, [x])
PR r -> do PR r -> do
let (ls,ps) = unzip r let (ls,ps) = unzip r

View File

@@ -0,0 +1,14 @@
abstract funpatt = {
-- this should raise error
-- we cannot pattern match on functions
cat D ;
fun D1 : D ;
D2 : D ;
fun d : D -> Int ;
def d D1 = 1 ;
d D2 = 2 ;
}

View File

@@ -0,0 +1 @@
i -src testsuite/compiler/renamer/funpatt.gf

View File

@@ -0,0 +1,7 @@
data constructor expected but funpatt.D1 is found instead
OCCURRED IN

View File

@@ -0,0 +1,13 @@
abstract varpatt = {
-- this should raise error
-- we cannot pattern match on functions
cat D ;
fun D1 : D ;
D2 : D ;
fun d : D -> Int ;
def d x = 1 ;
}

View File

@@ -0,0 +1,4 @@
i -src testsuite/compiler/renamer/varpatt.gf
pt -compute d D1
pt -compute d D2

View File

@@ -0,0 +1,4 @@
1