summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2007-07-02 11:53:04 +0000
committeraarne <aarne@cs.chalmers.se>2007-07-02 11:53:04 +0000
commitc7f488b11e2a44875c80fd456ff5f5b5d86c30d5 (patch)
treea27be33a62e264ad0e266c59ae9db80a4e721073 /src
parentda6e0efc1118660b39cbbfcde7f01d380661749a (diff)
contravariance in forgiving lock fields
Diffstat (limited to 'src')
-rw-r--r--src/GF/Compile/CheckGrammar.hs9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/GF/Compile/CheckGrammar.hs b/src/GF/Compile/CheckGrammar.hs
index 8c113ba97..e980ec14f 100644
--- a/src/GF/Compile/CheckGrammar.hs
+++ b/src/GF/Compile/CheckGrammar.hs
@@ -912,7 +912,8 @@ checkIfEqLType env t u trm = do
checkWarn $ "WARNING: missing lock field" +++ unwords (map prt lo)
return (True,t',u',[])
Bad s -> return (False,t',u',s)
- where
+
+ where
-- t is a subtype of u
--- quick hack version of TC.eqVal
@@ -967,6 +968,12 @@ checkIfEqLType env t u trm = do
in case others of
_:_ -> Bad $ "missing record fields" +++ unwords (map prt others)
_ -> return locks
+ -- contravariance
+ (Prod x a b, Prod y c d) -> do
+ ls1 <- missingLock g c a
+ ls2 <- missingLock g b d
+ return $ ls1 ++ ls2
+
_ -> Bad ""
sTypes = [typeStr, typeTok, typeString]