diff options
author | dos-reis <gdr@axiomatics.org> | 2011-10-22 17:15:56 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2011-10-22 17:15:56 +0000 |
commit | eaa1adc1cb6ed9ec07ff56614700fe713ba6667c (patch) | |
tree | c37aeb6ed1ebfe0adbe0ced27a1402aa4dad043a /src/interp/define.boot | |
parent | 5da95c1b34152d06c776e1c446a51c6703b46cc6 (diff) | |
download | open-axiom-eaa1adc1cb6ed9ec07ff56614700fe713ba6667c.tar.gz |
* interp/br-op2.boot (htSayExplicitExports): Don't forget possible
constant marker in exported signatures.
* interp/cattable.boot (simpHas): Likewise.
* interp/format.boot (form2String1): Likewise.
* interp/i-eval.boot (evaluateSignature): Likewise.
* interp/i-funsel.boot (hasCaty): Likewise.
(hasAttSig): Likewise.
* interp/define.boot (extendsCategory): Likewise.
(extendsCategoryBasic): Likewise.
(catExtendsCat?): Likewise.
(mkExportFromDescription): New.
(mkCategoryPackage): Use it.
* boot/tokens.boot: Add new selectors: mapOpsig, mapOperation,
mapPredicate, and mapImpl.
Diffstat (limited to 'src/interp/define.boot')
-rw-r--r-- | src/interp/define.boot | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/interp/define.boot b/src/interp/define.boot index 23d92eb1..da7c2ed0 100644 --- a/src/interp/define.boot +++ b/src/interp/define.boot @@ -574,7 +574,8 @@ extendsCategory(dom,u,v,env) == v := substSlotNumbers(v,$template,$functorForm) extendsCategoryBasic(dom,u,v,env) => true $why := - v is ['SIGNATURE,op,sig] => [u,['" has no ",:formatOpSignature(op,sig)]] + v is ['SIGNATURE,op,sig,:.] => + [u,['" has no ",:formatOpSignature(op,sig)]] [u,'" has no",v] nil @@ -592,7 +593,7 @@ extendsCategoryBasic(dom,u,v,env) == uVec := compMakeCategoryObject(u,env).expr or return false LASSOC(c,categoryAttributes uVec) is [=true] isCategoryForm(v,env) => catExtendsCat?(u,v,env) - v is ['SIGNATURE,op,sig] => + v is ['SIGNATURE,op,sig,:.] => uVec := compMakeCategoryObject(u,env).expr or return false or/[categoryRef(uVec,i) is [[=op,=sig],:.] for i in 6..maxIndex uVec] u is ['CATEGORY,.,:l] => @@ -617,8 +618,8 @@ catExtendsCat?(u,v,env) == substSlotNumbers(form,template,domain) == form is [op,:.] and symbolMember?(op,allConstructors()) => expandType(form,template,domain) - form is ['SIGNATURE,op,sig] => - ['SIGNATURE,op,[substSlotNumbers(x,template,domain) for x in sig]] + form is ['SIGNATURE,op,sig,:q] => + ['SIGNATURE,op,[substSlotNumbers(x,template,domain) for x in sig],:q] form is ['CATEGORY,k,:u] => ['CATEGORY,k,:[substSlotNumbers(x,template,domain) for x in u]] expandType(form,template,domain) @@ -964,6 +965,14 @@ makeCategoryPredicates(form,u) == for x in u repeat pl := fn(x,pl) pl +++ Subroutine of mkCategoryPackage. +++ Return a category-level declaration of an operation described by `desc'. +mkExportFromDescription desc == + t := + desc.mapKind = 'CONST => ['constant] + nil + ['SIGNATURE,desc.mapOperation,desc.mapSignature,:t] + mkCategoryPackage(form is [op,:argl],cat,def) == catdb := constructorDB op packageName:= makeDefaultPackageName symbolName op @@ -977,13 +986,13 @@ mkCategoryPackage(form is [op,:argl],cat,def) == packageArgl := [nameForDollar,:argl] capsuleDefAlist := fn(def,nil) where fn(x,oplist) == x isnt [.,:.] => oplist - x is ['DEF,y,:.] => [y,:oplist] + x is ['DEF,y,:.] => [opOf y,:oplist] fn(x.args,fn(x.op,oplist)) catvec := eval mkEvalableCategoryForm form fullCatOpList := categoryExports JoinInner([catvec],$e) catOpList := - [['SIGNATURE,op1,sig] for [[op1,sig],:.] in fullCatOpList - | assoc(op1,capsuleDefAlist)] + [mkExportFromDescription desc for desc in fullCatOpList + | symbolMember?(desc.mapOperation,capsuleDefAlist)] null catOpList => nil packageCategory := ['CATEGORY,'package, |