aboutsummaryrefslogtreecommitdiff
path: root/src/interp/define.boot
diff options
context:
space:
mode:
Diffstat (limited to 'src/interp/define.boot')
-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)