summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2009-05-20 20:24:15 +0000
committerkrasimir <krasimir@chalmers.se>2009-05-20 20:24:15 +0000
commit8f2fb8275049f7622e8d95abf33b48b80ad887e5 (patch)
treed66faa43c6d8936ce43095dda49d58916b9fb30c /src
parent6de94f53002263878bfb03e31d26caefa4872f20 (diff)
more friendly error message when renaming patterns
Diffstat (limited to 'src')
-rw-r--r--src/GF/Compile/Rename.hs21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/GF/Compile/Rename.hs b/src/GF/Compile/Rename.hs
index 05ccfdb2c..c00e31d95 100644
--- a/src/GF/Compile/Rename.hs
+++ b/src/GF/Compile/Rename.hs
@@ -36,11 +36,13 @@ import GF.Grammar.Macros
import GF.Grammar.PrGrammar
import GF.Grammar.AppPredefined
import GF.Grammar.Lookup
+import GF.Grammar.Printer
import GF.Data.Operations
import Control.Monad
import Data.List (nub)
import Debug.Trace (trace)
+import Text.PrettyPrint
renameGrammar :: SourceGrammar -> Err SourceGrammar
renameGrammar g = liftM (MGrammar . reverse) $ foldM renameModule [] (modules g)
@@ -236,15 +238,15 @@ renamePattern env patt = case patt of
_ -> prtBad "unresolved pattern" patt
PC c ps -> do
- c' <- renameIdentTerm env $ Cn c
+ c' <- renid $ Cn c
case c' of
- QC p d -> renp $ PP p d ps
--- Q p d -> renp $ PP p d ps --- why this? AR 15/3/2008
- _ -> prtBad "unresolved pattern" c' ---- (PC c ps', concat vs)
+ QC m c -> renp $ PP m c ps
+ Q _ _ -> Bad $ render (text "data constructor expected but" <+> ppTerm Qualified 0 c' <+> text "is found instead")
+ _ -> Bad $ render (text "unresolved data constructor" <+> ppTerm Qualified 0 c')
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')
_ -> return (p,c) --- temporarily, for bw compat
psvss <- mapM renp ps
@@ -252,14 +254,15 @@ renamePattern env patt = case patt of
return (PP p' c' ps', concat vs)
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')
_ -> prtBad "not a pattern macro" patt
return (PM p' c', [])
- PV x -> case renid (Vr x) of
- Ok (QC m c) -> return (PP m c [],[])
- _ -> return (patt, [x])
+ PV x -> do case renid (Vr x) of
+ Ok (QC m c) -> return (PP m c [],[])
+ 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
let (ls,ps) = unzip r