aboutsummaryrefslogtreecommitdiff
path: root/src/interp/database.boot
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2011-10-31 03:08:11 +0000
committerdos-reis <gdr@axiomatics.org>2011-10-31 03:08:11 +0000
commit2eaece841c92e8a59aa4346ca85739babfd67fe9 (patch)
tree02126a77562d2d2079e5700e1428914d976f742a /src/interp/database.boot
parent8bb918e72e98092b6e927828d2ca66198608de4f (diff)
downloadopen-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.boot12
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