aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog4
-rw-r--r--src/interp/category.boot50
2 files changed, 26 insertions, 28 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index c9293590..92835dbf 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -5,6 +5,10 @@
2011-11-13 Gabriel Dos Reis <gdr@cs.tamu.edu>
+ * interp/category.boot (JoinInner): Tidy.
+
+2011-11-13 Gabriel Dos Reis <gdr@cs.tamu.edu>
+
* interp/sys-driver.boot (initializeDatabases): Honor --initial-db.
(initializeGlobalState): Don't bind $compileDefaultsOnly.
* interp/sys-globals.boot ($compileDefaultsOnly): Remove.
diff --git a/src/interp/category.boot b/src/interp/category.boot
index 3e14a9b3..4d0acc49 100644
--- a/src/interp/category.boot
+++ b/src/interp/category.boot
@@ -375,29 +375,23 @@ JoinInner(l,$e) ==
$NewCatVec: local := nil
CondList:= nil
for u in l repeat
- for at in categoryAttributes u repeat
- at2:= first at
- if at2 isnt [.,:.] then at2 := [at2]
+ for [at,pred] in categoryAttributes u repeat
+ if at isnt [.,:.] then at := [at]
-- the variable $Attributes is built globally, so that true
-- attributes can be detected without calling isCategoryForm
- symbolMember?(first at2,$Attributes) => nil
- null isCategoryForm(at2,$e) =>
- $Attributes:=[first at2,:$Attributes]
- nil
- pred:= second at
- -- The predicate under which this category is conditional
+ symbolMember?(first at,$Attributes) => nil
+ not isCategoryForm(at,$e) => $Attributes:=[first at,:$Attributes]
listMember?(pred,get("$Information","special",$e)) =>
- l:= [:l,CatEval(at2,$e)]
+ l := [:l,CatEval(at,$e)]
--It's true, so we add this as unconditional
pred isnt ["and",:.] =>
- CondList := [[CatEval(at2,$e),pred],:CondList]
- pred':=
- [u
- for u in rest pred | not listMember?(u,get("$Information","special",$e))
- and not (u=true)]
- null pred' => l:= [:l,CatEval(at2,$e)]
- # pred'=1 => CondList:= [[CatEval(at2,$e),pred'],:CondList]
- CondList:= [[CatEval(at2,$e),["and",:pred']],:CondList]
+ CondList := [[CatEval(at,$e),pred],:CondList]
+ pred' := [u for u in pred.args |
+ not listMember?(u,get("$Information","special",$e))
+ and u isnt true]
+ pred' = nil => l := [:l,CatEval(at,$e)]
+ pred' is [.] => CondList := [[CatEval(at,$e),pred'],:CondList]
+ CondList := [[CatEval(at,$e),["and",:pred']],:CondList]
[$NewCatVec,:l]:= l
l':= [:CondList,:[[u,true] for u in l]]
-- This is a list of all the categories that this extends
@@ -476,15 +470,15 @@ JoinInner(l,$e) ==
for u in categoryExports $NewCatVec repeat
if not listMember?(u,sigl) then
[s,c,i]:= u
- if c=true
- then sigl:= [[s,condition,i],:sigl]
- else sigl:= [[s,["and",condition,c],i],:sigl]
+ sigl :=
+ c is true => [[s,condition,i],:sigl]
+ [[s,["and",condition,c],i],:sigl]
for u in categoryAttributes $NewCatVec repeat
if not listMember?(u,attl) then
[a,c]:= u
- if c=true
- then attl:= [[a,condition],:attl]
- else attl:= [[a,["and",condition,c]],:attl]
+ attl :=
+ c is true => [[a,condition],:attl]
+ [[a,["and",condition,c]],:attl]
if reallynew then
n:= # $NewCatVec
FundamentalAncestors:= [[b.0,condition,n],:FundamentalAncestors]
@@ -511,19 +505,19 @@ JoinInner(l,$e) ==
v:= assoc(first u,attl)
null v =>
attl:=
- second u=true => [[first u,newpred],:attl]
+ second u is true => [[first u,newpred],:attl]
[[first u,["and",newpred,second u]],:attl]
second v=true => nil
attl:= remove(attl,v)
attl:=
- second u=true => [[first u,mkOr(second v,newpred,$e)],:attl]
+ second u is true => [[first u,mkOr(second v,newpred,$e)],:attl]
[[first u,mkOr(second v,mkAnd(newpred,second u,$e),$e)],:attl]
sigl:=
SigListUnion(
[AddPredicate(DropImplementations u,newpred) for u in categoryExports(first b)],sigl) where
AddPredicate(op is [sig,oldpred,:implem],newpred) ==
- newpred=true => op
- oldpred=true => [sig,newpred,:implem]
+ newpred is true => op
+ oldpred is true => [sig,newpred,:implem]
[sig,mkpf([oldpred,newpred],"and"),:implem]
FundamentalAncestors:= [x for x in FundamentalAncestors | rest x]
--strip out the pointer to Principal Ancestor