aboutsummaryrefslogtreecommitdiff
path: root/src/interp
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2011-08-11 14:12:54 +0000
committerdos-reis <gdr@axiomatics.org>2011-08-11 14:12:54 +0000
commita1de530b8c7a40177f1e8c0ebf84d8e9359ef503 (patch)
tree07f84445aaca4d4eebf6ee2f8d2583fe1a058066 /src/interp
parent7d8802bb51e5f907e661469b94bf352766d7ffde (diff)
downloadopen-axiom-a1de530b8c7a40177f1e8c0ebf84d8e9359ef503.tar.gz
* interp/define.boot (extendsCategoryBasic): Handle attribute
third argument too.
Diffstat (limited to 'src/interp')
-rw-r--r--src/interp/define.boot9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/interp/define.boot b/src/interp/define.boot
index 493d87de..c854eb27 100644
--- a/src/interp/define.boot
+++ b/src/interp/define.boot
@@ -320,15 +320,20 @@ extendsCategory(dom,u,v,env) ==
extendsCategoryBasic(dom,u,v,env) ==
v is ['IF,p,['ATTRIBUTE,c],.] =>
- uVec := compMakeCategoryObject(u,env).expr
+ uVec := compMakeCategoryObject(u,env).expr or return false
cons? c and isCategoryForm(c,env) =>
LASSOC(c,second categoryHierarchy uVec) is [=p,:.]
LASSOC(c,categoryAttributes uVec) is [=p,:.]
u is ["Join",:l] => or/[extendsCategoryBasic(dom,x,v,env) for x in l]
u = v => true
+ v is ['ATTRIBUTE,c] =>
+ cons? c and isCategoryForm(c,env) => extendsCategoryBasic(dom,u,c,env)
+ u is ['CATEGORY,.,:l] => or/[extendsCategoryBasic(dom,x,v,env) for x in l]
+ 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] =>
- uVec := compMakeCategoryObject(u,env).expr
+ 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] =>
v is ['IF,:.] => listMember?(v,l)