diff options
| author | aarne <aarne@cs.chalmers.se> | 2008-05-30 16:45:48 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2008-05-30 16:45:48 +0000 |
| commit | 3a20b4883d9b2d13e81df17c745071c8c53b2004 (patch) | |
| tree | e5a2e74e233fd625cd306dc6d661c8054f683d85 /src-3.0/GF/Compile/CheckGrammar.hs | |
| parent | c0ba151aa93d0aad2d616a33b62bbc255174b4b9 (diff) | |
error recovery in rename and check grammar: report all errors in a module before terminating
Diffstat (limited to 'src-3.0/GF/Compile/CheckGrammar.hs')
| -rw-r--r-- | src-3.0/GF/Compile/CheckGrammar.hs | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src-3.0/GF/Compile/CheckGrammar.hs b/src-3.0/GF/Compile/CheckGrammar.hs index e47496e97..f8383ea9f 100644 --- a/src-3.0/GF/Compile/CheckGrammar.hs +++ b/src-3.0/GF/Compile/CheckGrammar.hs @@ -56,6 +56,11 @@ showCheckModule mos m = do (st,(_,msg)) <- checkStart $ checkModule mos m return (st, unlines $ reverse msg) +mapsCheckTree :: + (Ord a) => ((a,b) -> Check (a,c)) -> BinTree a b -> Check (BinTree a c) +mapsCheckTree f = checkErr . mapsErrTree (\t -> checkStart (f t) >>= return . fst) + + -- | checking is performed in the dependency order of modules checkModule :: [SourceModule] -> SourceModule -> Check [SourceModule] checkModule ms (name,mod) = checkIn ("checking module" +++ prt name) $ case mod of @@ -63,24 +68,24 @@ checkModule ms (name,mod) = checkIn ("checking module" +++ prt name) $ case mod ModMod mo@(Module mt st fs me ops js) -> do checkRestrictedInheritance ms (name, mo) js' <- case mt of - MTAbstract -> mapMTree (checkAbsInfo gr name) js + MTAbstract -> mapsCheckTree (checkAbsInfo gr name) js - MTTransfer a b -> mapMTree (checkAbsInfo gr name) js + MTTransfer a b -> mapsCheckTree (checkAbsInfo gr name) js - MTResource -> mapMTree (checkResInfo gr name) js + MTResource -> mapsCheckTree (checkResInfo gr name) js MTConcrete a -> do checkErr $ topoSortOpers $ allOperDependencies name js ModMod abs <- checkErr $ lookupModule gr a js1 <- checkCompleteGrammar abs mo - mapMTree (checkCncInfo gr name (a,abs)) js1 + mapsCheckTree (checkCncInfo gr name (a,abs)) js1 - MTInterface -> mapMTree (checkResInfo gr name) js + MTInterface -> mapsCheckTree (checkResInfo gr name) js MTInstance a -> do ModMod abs <- checkErr $ lookupModule gr a -- checkCompleteInstance abs mo -- this is done in Rebuild - mapMTree (checkResInfo gr name) js + mapsCheckTree (checkResInfo gr name) js return $ (name, ModMod (Module mt st fs me ops js')) : ms |
