aboutsummaryrefslogtreecommitdiff
path: root/src/interp/database.boot
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2011-10-30 21:14:11 +0000
committerdos-reis <gdr@axiomatics.org>2011-10-30 21:14:11 +0000
commit8bb918e72e98092b6e927828d2ca66198608de4f (patch)
tree492fa74760d305c4dfaab44c334794af4cee715f /src/interp/database.boot
parent91e29dea40e9ca5a2d7d566bdc91c9542492ac14 (diff)
downloadopen-axiom-8bb918e72e98092b6e927828d2ca66198608de4f.tar.gz
* interp/define.boot (compDefineCategory2): Compute dual signature
early on. (compDefineFunctor1): Likewise. * interp/database.boot (modemapsFromCategory): Take a first argument as a DB. Tidy. Adjust caller. (modemapsFromFunctor): Likewise. Lose last argument. (mkDatabasePred): Remove. (formal2Pattern): Likewise.
Diffstat (limited to 'src/interp/database.boot')
-rw-r--r--src/interp/database.boot29
1 files changed, 12 insertions, 17 deletions
diff --git a/src/interp/database.boot b/src/interp/database.boot
index e24d6a2b..831de579 100644
--- a/src/interp/database.boot
+++ b/src/interp/database.boot
@@ -203,10 +203,11 @@ modemapsFromCategory(db,form,body,signature) ==
++ of the function `form.op' with `signature'. Return a list of modemaps
++ for operations from `opAlist' explicitly exported by the functor.
++ Note: the structure of modemaps same as for modemapsFromCategory.
-modemapsFromFunctor(form,opAlist,signature) ==
- form := [.,:argl] := formal2Pattern form
- opAlist := formal2Pattern opAlist
- signature := formal2Pattern signature
+modemapsFromFunctor(db,form,opAlist) ==
+ f2p := pairList(form.args,rest $PatternVariableList) -- "*1" is for "$"
+ form := [.,:argl] := applySubst(f2p,form)
+ opAlist := applySubst(f2p,opAlist)
+ signature := applySubst(f2p,dbConstructorModemap(db).mmSignature)
for u in form for v in signature repeat
if symbolMember?(u,$PatternVariableList) then
-- we are going to be EVALing categories containing these
@@ -221,20 +222,21 @@ modemapsFromFunctor(form,opAlist,signature) ==
skip :=
argl ~= nil and CONTAINED("$",sig.source) => 'SKIP
nil
- sel := substitute(form,"$",sel)
patternList := listOfPatternIds sig
--get relevant predicates
predList :=
- [[a,m] for a in argl for m in signature.source
- | symbolMember?(a,$PatternVariableList)]
- sig := substitute(form,"$",sig)
- pred' := MKPF([pred,:[mkDatabasePred y for y in predList]],'AND)
+ [[(cat? => 'ofCategory; 'ofType),a,m]
+ for a in argl for m in signature.source
+ for cat? in dbDualSignature(db).source
+ | symbolMember?(a,$PatternVariableList)]
l := listOfPatternIds predList
if "OR"/[not symbolMember?(u,l) for u in argl] then
sayMSG ['"cannot handle modemap for",:bright op,
'"by pattern match" ]
skip := 'SKIP
- modemap := [[form,:sig],[pred',sel,:skip]]
+ modemap := [[form,:substitute(form,"$",sig)],
+ [mkpf([pred,:predList],'AND),
+ substitute(form,"$",sel),:skip]]
mms := [[op,:interactiveModemapForm modemap],:mms]
mms
@@ -607,13 +609,6 @@ flattenSignatureList(x) ==
ll
nil
-mkDatabasePred [a,t] ==
- isCategoryForm(t,$e) => ['ofCategory,a,t]
- ['ofType,a,t]
-
-formal2Pattern x ==
- applySubst(pairList($FormalMapVariableList,rest $PatternVariableList),x)
-
updateDatabase(fname,cname,systemdir?) ==
-- for now in NRUNTIME do database update only if forced
not $forceDatabaseUpdate => nil