mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-27 13:32:51 -06:00
overload syntax; type printing in CheckGrammar
This commit is contained in:
@@ -299,7 +299,7 @@ transResDef x = case x of
|
||||
(p,pars) <- pardefs', (f,co) <- pars]
|
||||
DefOper defs -> do
|
||||
defs' <- liftM concat $ mapM getDefs defs
|
||||
returnl [mkOverload (f, G.ResOper pt pe) | (f,(pt,pe)) <- defs']
|
||||
returnl $ concatMap mkOverload [(f, G.ResOper pt pe) | (f,(pt,pe)) <- defs']
|
||||
|
||||
DefLintype defs -> do
|
||||
defs' <- liftM concat $ mapM getDefs defs
|
||||
@@ -309,10 +309,17 @@ transResDef x = case x of
|
||||
_ -> Bad $ "illegal definition form in resource" +++ printTree x
|
||||
where
|
||||
mkOverload (c,j) = case j of
|
||||
G.ResOper Nope (Yes (G.R fs@(_:_:_))) | isOverloading c fs ->
|
||||
(c,G.ResOverload [(ty,fu) | (_,(Just ty,fu)) <- fs])
|
||||
_ -> (c,j)
|
||||
isOverloading c fs = all (== GP.prt c) (map (GP.prt . fst) fs)
|
||||
G.ResOper _ (Yes (G.App keyw (G.R fs@(_:_:_)))) |
|
||||
isOverloading keyw c fs ->
|
||||
[(c,G.ResOverload [(ty,fu) | (_,(Just ty,fu)) <- fs])]
|
||||
|
||||
-- to enable separare type signature --- not type-checked
|
||||
G.ResOper (Yes (G.App keyw (G.RecType fs@(_:_:_)))) _ |
|
||||
isOverloading keyw c fs -> []
|
||||
_ -> [(c,j)]
|
||||
isOverloading keyw c fs =
|
||||
GP.prt keyw == "overload" && -- overload is a "soft keyword"
|
||||
all (== GP.prt c) (map (GP.prt . fst) fs)
|
||||
|
||||
transParDef :: ParDef -> Err (Ident, [G.Param])
|
||||
transParDef x = case x of
|
||||
|
||||
Reference in New Issue
Block a user