diff options
author | dos-reis <gdr@axiomatics.org> | 2011-10-31 03:08:11 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2011-10-31 03:08:11 +0000 |
commit | 2eaece841c92e8a59aa4346ca85739babfd67fe9 (patch) | |
tree | 02126a77562d2d2079e5700e1428914d976f742a /src/interp/database.boot | |
parent | 8bb918e72e98092b6e927828d2ca66198608de4f (diff) | |
download | open-axiom-2eaece841c92e8a59aa4346ca85739babfd67fe9.tar.gz |
* interp/compiler.boot (evaluateConstructorModemap): Rename from
substituteInfoFunctorModemap.
(constructorCondition): New.
* interp/define.boot (compDefineCategory2): Compute dual signature
early on.
(compDefineFunctor1): Likewise.
(typingKind): New.
(deduceImplicitParameters): Use it.
* interp/database.boot (modemapsFromCategory): Take a first
argument as a DB. Tidy. Adjust caller. Add constructor condition.
(modemapsFromFunctor): Likewise. Lose last argument.
(mkDatabasePred): Remove.
(formal2Pattern): Likewise.
Diffstat (limited to 'src/interp/database.boot')
-rw-r--r-- | src/interp/database.boot | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/interp/database.boot b/src/interp/database.boot index 831de579..dc942f85 100644 --- a/src/interp/database.boot +++ b/src/interp/database.boot @@ -191,10 +191,14 @@ modemapsFromCategory(db,form,body,signature) == :[['ofCategory,a,m] for a in form.args for m in signature.source for cat? in dbDualSignature(db).source | cat? ]] op := dbConstructor db + cond := + dbImplicitData db is [isubst,icond] => + [['%exist,ASSOCRIGHT isubst,applySubst(sl,applySubst(isubst,icond))]] + nil mms := nil for (entry:= [[op,sig,:.],pred,sel]) in opAlist | listMember?(sig,LASSOC(op,nonCategorySigAlist)) repeat - pred' := MKPF([pred,:catPredList],'AND) + pred' := mkpf([pred,:catPredList,:cond],'AND) modemap := [["*1",:sig],[pred',sel]] mms := [[op,:interactiveModemapForm modemap],:mms] mms @@ -215,6 +219,10 @@ modemapsFromFunctor(db,form,opAlist) == $e := put(u,'mode,v,$e) nonCategorySigAlist := mkAlistOfExplicitCategoryOps signature.target or return nil + catCond := + dbImplicitData db is [isubst,icond] => + [['%exist,ASSOCRIGHT isubst,applySubst(f2p,applySubst(isubst,icond))]] + nil mms := nil for (entry := [[op,sig,:.],pred,sel]) in opAlist | or/[listMember?(sig,catSig) for catSig in @@ -235,7 +243,7 @@ modemapsFromFunctor(db,form,opAlist) == '"by pattern match" ] skip := 'SKIP modemap := [[form,:substitute(form,"$",sig)], - [mkpf([pred,:predList],'AND), + [mkpf([pred,:predList,:catCond],'AND), substitute(form,"$",sel),:skip]] mms := [[op,:interactiveModemapForm modemap],:mms] mms |