summaryrefslogtreecommitdiff
path: root/src/GF/Devel/Compile
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2007-12-06 21:43:21 +0000
committeraarne <aarne@cs.chalmers.se>2007-12-06 21:43:21 +0000
commit64ebc4f1679b89bccb4328641a2432096e3288b6 (patch)
tree53ee2f1b22a4e8b9f92acb256b62d753977b0daa /src/GF/Devel/Compile
parentfe30e3274872db43e96ed9db467e51f12f53effb (diff)
new type checker type checks
Diffstat (limited to 'src/GF/Devel/Compile')
-rw-r--r--src/GF/Devel/Compile/CheckGrammar.hs35
-rw-r--r--src/GF/Devel/Compile/Compile.hs5
2 files changed, 19 insertions, 21 deletions
diff --git a/src/GF/Devel/Compile/CheckGrammar.hs b/src/GF/Devel/Compile/CheckGrammar.hs
index 1c957ca71..4bf9049f2 100644
--- a/src/GF/Devel/Compile/CheckGrammar.hs
+++ b/src/GF/Devel/Compile/CheckGrammar.hs
@@ -47,12 +47,13 @@ import GF.Infra.Ident
--import GF.Grammar.LookAbs
--import GF.Grammar.ReservedWords ----
-import GF.Grammar.PatternMatch (testOvershadow)
-import GF.Grammar.AppPredefined
+import GF.Devel.Grammar.PatternMatch (testOvershadow)
+import GF.Devel.Grammar.AppPredefined
--import GF.Grammar.Lockfield (isLockLabel)
+import GF.Devel.CheckM
+
import GF.Data.Operations
-import GF.Infra.CheckM
import Data.List
import qualified Data.Set as Set
@@ -77,8 +78,8 @@ checkModule gf0 (name,mo) = checkIn ("checking module" +++ prt name) $ do
MTConcrete aname -> do
checkErr $ topoSortOpers $ allOperDependencies name $ mjments mo
abs <- checkErr $ lookupModule gr aname
- js1 <- checkCompleteGrammar abs mo
- judgementOpModule (checkCncInfo gr name (aname,abs)) js1
+ mo1 <- checkCompleteGrammar abs mo
+ entryOpModule (checkCncInfo gr name (aname,abs)) mo1
MTInterface -> judgementOpModule (checkResInfo gr name) mo
@@ -124,8 +125,8 @@ justCheckLTerm src t = do
((t',_),_) <- checkStart (inferLType src t)
return t'
-checkAbsInfo :: GF -> Ident -> Ident -> Judgement -> Check Judgement
-checkAbsInfo st m c info = return info ----
+checkAbsInfo :: GF -> Ident -> Judgement -> Check Judgement
+checkAbsInfo st m info = return info ----
{-
checkAbsInfo st m (c,info) = do
@@ -198,18 +199,18 @@ checkCompleteGrammar abs cnc = do
checkWarn $
"Warning: no linearization type for" +++ prt c ++
", inserting default {s : Str}"
- return $ Map.insert c (cncCat defLinType) js
+ return $ Map.insert c (Left (cncCat defLinType)) js
_ -> return js
-checkResInfo :: GF -> Ident -> Ident -> Judgement -> Check Judgement
-checkResInfo gr mo c info = do
+checkResInfo :: GF -> Ident -> Judgement -> Check Judgement
+checkResInfo gr mo info = do
---- checkReservedId c
case jform info of
JOper -> chIn "operation" $ case (jtype info, jdef info) of
(_,Meta _) -> do
checkWarn "No definition given to oper"
return info
- (Meta,de) -> do
+ (Meta _,de) -> do
(de',ty') <- infer de
return (resOper ty' de')
(ty, de) -> do
@@ -237,7 +238,7 @@ checkResInfo gr mo c info = do
where
infer = inferLType gr
check = checkLType gr
- chIn cat = checkIn ("Happened in" +++ cat +++ prt c +++ ":")
+ chIn cat = checkIn ("Happened in" +++ cat) ---- +++ prt c +++ ":")
comp = computeLType gr
checkUniq xss = case xss of
@@ -265,7 +266,7 @@ checkCncInfo gr cnc (a,abs) c info = do
---- return (c, CncFun (Just (cat,(cont,val))) (Yes trm') mpr)
-- cat for cf, typ for pe
- JCat (Yes typ) mdef mpr -> chIn "linearization type of" $ do
+ JCat -> chIn "linearization type of" $ do
checkErr $ lookupCatContext gr a c
typ' <- checkIfLinType gr (jtype info)
{- ----
@@ -278,7 +279,7 @@ checkCncInfo gr cnc (a,abs) c info = do
checkPrintname gr (jprintname info)
return (info {jtype = typ'})
- _ -> checkResInfo gr cnc c info
+ _ -> checkResInfo gr cnc info
where
env = gr
@@ -620,7 +621,7 @@ inferLType gr trm = case trm of
_ -> False
inferPatt p = case p of
- PP q c ps | q /= cPredef -> checkErr $ lookupOperType gr q c >>= snd . prodForm
+ PP q c ps | q /= cPredef -> checkErr $ lookupOperType gr q c >>= return . snd . prodForm
PAs _ p -> inferPatt p
PNeg p -> inferPatt p
PAlt p q -> checks [inferPatt p, inferPatt q]
@@ -1053,14 +1054,12 @@ allOperDependencies m = allDependencies (==m)
allDependencies :: (Ident -> Bool) -> Map.Map Ident JEntry -> [(Ident,[Ident])]
allDependencies ism b =
- [(f, nub (concatMap opty (pts i))) | (f,i) <- tree2list b]
+ [(f, nub (concatMap opersIn (pts i))) | (f,Left i) <- Map.assocs b]
where
opersIn t = case t of
Q n c | ism n -> [c]
QC n c | ism n -> [c]
_ -> collectOp opersIn t
- opty (Yes ty) = opersIn ty
- opty _ = []
pts i = [jtype i, jdef i]
---- AbsFun pty ptr -> [pty] --- ptr is def, which can be mutual
diff --git a/src/GF/Devel/Compile/Compile.hs b/src/GF/Devel/Compile/Compile.hs
index 490117e27..3b8558586 100644
--- a/src/GF/Devel/Compile/Compile.hs
+++ b/src/GF/Devel/Compile/Compile.hs
@@ -4,10 +4,9 @@ module GF.Devel.Compile.Compile (batchCompile) where
import GF.Devel.Compile.GetGrammar
import GF.Devel.Compile.Extend
import GF.Devel.Compile.Rename
+import GF.Devel.Compile.CheckGrammar
----import GF.Grammar.Refresh
-----import GF.Devel.CheckGrammar
----import GF.Devel.Optimize
---import GF.Compile.Evaluate ----
----import GF.Devel.OptimizeGF
import GF.Devel.Grammar.Terms
@@ -157,7 +156,7 @@ compileSourceModule opts env@(k,gr) mo@(i,mi) = do
if null warnings then return () else putp warnings $ return ()
intermOut opts (iOpt "show_typecheck") (prMod moc)
- return (k,moc) ----
+ return (k,mor) ----
{- ----