diff options
author | dos-reis <gdr@axiomatics.org> | 2011-10-28 02:46:40 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2011-10-28 02:46:40 +0000 |
commit | 744779f998fb99f7625b1b1af9dcbfae527935bd (patch) | |
tree | a96b1be87dc0417361eb8c558d7bd51a1f1cef22 /src/interp/database.boot | |
parent | 6a3913853aeb542f155a1164eb48aba1724f17f7 (diff) | |
download | open-axiom-744779f998fb99f7625b1b1af9dcbfae527935bd.tar.gz |
* interp/sys-globals.boot ($lisplibModemapAlist): Remove.
* interp/lisplib.boot (compileConstructorLib): Do not bind
$lisplibModemapAlist.
(compDefineLisplib): Likewise.
* interp/database.boot (modemapsFromCategory): Rename from
augLisplibModmapsFromCategory. Tidy. Avoid use of special
variable $lisplibModemapAlist.
(modemapsFromFunctor): Rename from augmentLisplibFromFunctor.
Tidy. Avoid use of special variable $lisplibModemapAlist.
* interp/define.boot (compDefineCategory2): Adjust.
(compDefineFunctor1): Likewise.
Diffstat (limited to 'src/interp/database.boot')
-rw-r--r-- | src/interp/database.boot | 86 |
1 files changed, 49 insertions, 37 deletions
diff --git a/src/interp/database.boot b/src/interp/database.boot index bee544b0..ffd10de7 100644 --- a/src/interp/database.boot +++ b/src/interp/database.boot @@ -172,58 +172,70 @@ getConstructorKind ctor == --% Functions for manipulating MODEMAP DATABASE -augLisplibModemapsFromCategory(form is [op,:argl],body,signature) == - sl := [["$",:"*1"],:pairList(argl,rest $PatternVariableList)] - form:= applySubst(sl,form) - body:= applySubst(sl,body) - signature:= applySubst(sl,signature) - opAlist:= applySubst(sl,categoryExports $domainShell) or return nil - nonCategorySigAlist:= +++ We are about to finish the elaboration of the category `form' with +++ given `body' and `signature'. Return the list of all modemaps +++ of operators exported by generic instantiation of the category constructor. +++ Note: The structure of the modemaps is that understood by the +++ interpreter, but that of the of the compiler. +modemapsFromCategory(form,body,signature) == + sl := [["$",:"*1"],:pairList(form.args,rest $PatternVariableList)] + form := applySubst(sl,form) + body := applySubst(sl,body) + signature := applySubst(sl,signature) + opAlist := applySubst(sl,categoryExports $domainShell) or return nil + nonCategorySigAlist := mkAlistOfExplicitCategoryOps substitute("*1","$",body) - domainList:= - [[a,m] for a in rest form for m in rest signature | + domainList := + [[a,m] for a in form.args for m in signature.source | isCategoryForm(m,$EmptyEnvironment)] - catPredList:= [['ofCategory,:u] for u in [["*1",form],:domainList]] + catPredList := [['ofCategory,:u] for u in [["*1",form],:domainList]] + op := form.op + mms := nil for (entry:= [[op,sig,:.],pred,sel]) in opAlist | listMember?(sig,LASSOC(op,nonCategorySigAlist)) repeat - pred':= MKPF([pred,:catPredList],'AND) - modemap:= [["*1",:sig],[pred',sel]] - $lisplibModemapAlist:= - [[op,:interactiveModemapForm modemap],:$lisplibModemapAlist] - -augmentLisplibModemapsFromFunctor(form,opAlist,signature) == - form:= [formOp,:argl]:= formal2Pattern form - opAlist:= formal2Pattern opAlist - signature:= formal2Pattern signature + pred' := MKPF([pred,:catPredList],'AND) + modemap := [["*1",:sig],[pred',sel]] + mms := [[op,:interactiveModemapForm modemap],:mms] + mms + +++ We are about to finish the elaboration of the generic instantiation +++ 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 for u in form for v in signature repeat if symbolMember?(u,$PatternVariableList) then -- we are going to be EVALing categories containing these -- pattern variables - $e:=put(u,'mode,v,$e) - nonCategorySigAlist:= - mkAlistOfExplicitCategoryOps first signature or return nil - for (entry:= [[op,sig,:.],pred,sel]) in opAlist | + $e := put(u,'mode,v,$e) + nonCategorySigAlist := + mkAlistOfExplicitCategoryOps signature.target or return nil + mms := nil + for (entry := [[op,sig,:.],pred,sel]) in opAlist | or/[listMember?(sig,catSig) for catSig in allLASSOCs(op,nonCategorySigAlist)] repeat - skip:= - argl and CONTAINED("$",rest sig) => 'SKIP + skip := + argl ~= nil and CONTAINED("$",sig.source) => 'SKIP nil - sel:= substitute(form,"$",sel) - patternList:= listOfPatternIds sig + sel := substitute(form,"$",sel) + patternList := listOfPatternIds sig --get relevant predicates - predList:= - [[a,m] for a in argl for m in rest signature + 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) - l:=listOfPatternIds predList - if "OR"/[null symbolMember?(u,l) for u in argl] then + sig := substitute(form,"$",sig) + pred' := MKPF([pred,:[mkDatabasePred y for y in predList]],'AND) + 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]] - $lisplibModemapAlist:= [[op,:interactiveModemapForm modemap], - :$lisplibModemapAlist] + skip := 'SKIP + modemap := [[form,:sig],[pred',sel,:skip]] + mms := [[op,:interactiveModemapForm modemap],:mms] + mms rebuildCDT(filemode) == clearConstructorAndLisplibCaches() |