diff options
| author | krasimir <krasimir@chalmers.se> | 2009-01-31 10:49:01 +0000 |
|---|---|---|
| committer | krasimir <krasimir@chalmers.se> | 2009-01-31 10:49:01 +0000 |
| commit | ff0c0085cf9a3f2b02f31fdb7472b36547f055f9 (patch) | |
| tree | eff676c93875e167e071b83f4e8a4791883ed522 /src/GF/Compile/Extend.hs | |
| parent | 241e13247d4520fedabbc41fead3054d4d95114f (diff) | |
bug fix in the module dependencies checker
Diffstat (limited to 'src/GF/Compile/Extend.hs')
| -rw-r--r-- | src/GF/Compile/Extend.hs | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/src/GF/Compile/Extend.hs b/src/GF/Compile/Extend.hs index 4cf2101de..bb9310041 100644 --- a/src/GF/Compile/Extend.hs +++ b/src/GF/Compile/Extend.hs @@ -27,6 +27,7 @@ import GF.Grammar.Macros import GF.Data.Operations import Control.Monad +import Data.List(nub) extendModule :: [SourceModule] -> SourceModule -> Err SourceModule extendModule ms (name,m) @@ -38,21 +39,25 @@ extendModule ms (name,m) return (name,m') where extOne mo (n,cond) = do - (m0,isCompl) <- do - m <- lookupModule (MGrammar ms) n + m0 <- lookupModule (MGrammar ms) n - -- test that the module types match, and find out if the old is complete - testErr (sameMType (mtype m) (mtype mo)) - ("illegal extension type to module" +++ prt name) - return (m, isCompleteModule m) + -- test that the module types match, and find out if the old is complete + testErr (sameMType (mtype m) (mtype mo)) + ("illegal extension type to module" +++ prt name) - -- build extension in a way depending on whether the old module is complete - js1 <- extendMod isCompl (n, isInherited cond) name (jments m0) (jments mo) + let isCompl = isCompleteModule m0 - -- if incomplete, throw away extension information - let es = extend mo - let es' = if isCompl then es else (filter ((/=n) . fst) es) - return $ mo {extend = es', jments = js1} + -- build extension in a way depending on whether the old module is complete + js1 <- extendMod isCompl (n, isInherited cond) name (jments m0) (jments mo) + + -- if incomplete, throw away extension information + return $ + if isCompl + then mo {jments = js1} + else mo {extend = filter ((/=n) . fst) (extend mo) + ,mexdeps= nub (n : mexdeps mo) + ,jments = js1 + } -- | When extending a complete module: new information is inserted, -- and the process is interrupted if unification fails. |
