summaryrefslogtreecommitdiff
path: root/src/GF/Source
diff options
context:
space:
mode:
authoraarne <unknown>2005-05-30 20:08:14 +0000
committeraarne <unknown>2005-05-30 20:08:14 +0000
commit3a3342a0f96ba33d0df745b87f700b9998c86f4f (patch)
tree65b80ed0a88f823ed680b76c06ad0c518f94f612 /src/GF/Source
parent5bf9a7fe706e4e2d45f148dddf591c34ed1b72b3 (diff)
restricted inheritance almost implemented
Diffstat (limited to 'src/GF/Source')
-rw-r--r--src/GF/Source/GrammarToSource.hs15
-rw-r--r--src/GF/Source/SourceToGrammar.hs18
2 files changed, 19 insertions, 14 deletions
diff --git a/src/GF/Source/GrammarToSource.hs b/src/GF/Source/GrammarToSource.hs
index 8b10b7dee..ad89d5540 100644
--- a/src/GF/Source/GrammarToSource.hs
+++ b/src/GF/Source/GrammarToSource.hs
@@ -5,9 +5,9 @@
-- Stability : (stable)
-- Portability : (portable)
--
--- > CVS $Date: 2005/05/26 14:18:17 $
+-- > CVS $Date: 2005/05/30 21:08:15 $
-- > CVS $Author: aarne $
--- > CVS $Revision: 1.21 $
+-- > CVS $Revision: 1.22 $
--
-- From internal source syntax to BNFC-generated (used for printing).
-----------------------------------------------------------------------------
@@ -45,12 +45,17 @@ trModule (i,mo) = case mo of
MTInstance a -> P.MTInstance i' (tri a)
MTInterface -> P.MTInterface i'
body = P.MBody
- (trExtend (extends m))
+ (trExtends (extend m))
(mkOpens (map trOpen (opens m)))
(mkTopDefs (concatMap trAnyDef (tree2list (jments m)) ++ map trFlag (flags m)))
-trExtend :: [Ident] -> P.Extend
-trExtend i = ifNull P.NoExt (P.Ext . map (P.IAll . tri)) i ---- IAll
+trExtends :: [(Ident,MInclude Ident)] -> P.Extend
+trExtends [] = P.NoExt
+trExtends es = (P.Ext $ map tre es) where
+ tre (i,c) = case c of
+ MIAll -> P.IAll (tri i)
+ MIOnly is -> P.ISome (tri i) (map tri is)
+ MIExcept is -> P.IMinus (tri i) (map tri is)
---- this has to be completed with other mtys
forName (MTConcrete a) = tri a
diff --git a/src/GF/Source/SourceToGrammar.hs b/src/GF/Source/SourceToGrammar.hs
index 2247bd8d7..4af60f1bf 100644
--- a/src/GF/Source/SourceToGrammar.hs
+++ b/src/GF/Source/SourceToGrammar.hs
@@ -5,9 +5,9 @@
-- Stability : (stable)
-- Portability : (portable)
--
--- > CVS $Date: 2005/05/30 18:39:44 $
+-- > CVS $Date: 2005/05/30 21:08:15 $
-- > CVS $Author: aarne $
--- > CVS $Revision: 1.25 $
+-- > CVS $Revision: 1.26 $
--
-- based on the skeleton Haskell module generated by the BNF converter
-----------------------------------------------------------------------------
@@ -112,7 +112,7 @@ transModDef x = case x of
opens' <- mapM transOpen opens
return (id', GM.ModWith mtyp' mstat' m' [] opens')
MWithE extends m opens -> do
- extends' <- mapM transIncludedExt extends
+ extends' <- liftM (map fst) $ mapM transIncludedExt extends
m' <- transIdent m
opens' <- mapM transOpen opens
return (id', GM.ModWith mtyp' mstat' m' extends' opens')
@@ -168,7 +168,7 @@ transTransfer x = case x of
TransferIn open -> liftM Left $ transOpen open
TransferOut open -> liftM Right $ transOpen open
-transExtend :: Extend -> Err [Ident]
+transExtend :: Extend -> Err [(Ident,GM.MInclude Ident)]
transExtend x = case x of
Ext ids -> mapM transIncludedExt ids
NoExt -> return []
@@ -192,15 +192,15 @@ transQualOpen x = case x of
transIncluded :: Included -> Err (Ident,[Ident])
transIncluded x = case x of
- IAll i -> liftM (flip (curry id) []) $ transIdent i
+ IAll i -> liftM (flip (curry id) []) $ transIdent i
ISome i ids -> liftM2 (curry id) (transIdent i) (mapM transIdent ids)
IMinus i ids -> liftM2 (curry id) (transIdent i) (mapM transIdent ids) ----
-transIncludedExt :: Included -> Err Ident ---- (Ident,[Ident])
+transIncludedExt :: Included -> Err (Ident, GM.MInclude Ident)
transIncludedExt x = case x of
- IAll i -> transIdent i
- ISome i ids -> transIdent i
- IMinus i ids -> transIdent i
+ IAll i -> liftM2 (,) (transIdent i) (return GM.MIAll)
+ ISome i ids -> liftM2 (,) (transIdent i) (liftM GM.MIOnly $ mapM transIdent ids)
+ IMinus i ids -> liftM2 (,) (transIdent i) (liftM GM.MIExcept $ mapM transIdent ids)
transAbsDef :: TopDef -> Err (Either [(Ident, G.Info)] [GO.Option])
transAbsDef x = case x of