diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/boot/tokens.boot | 2 | ||||
-rw-r--r-- | src/interp/category.boot | 15 | ||||
-rw-r--r-- | src/interp/sys-utility.boot | 4 |
3 files changed, 11 insertions, 10 deletions
diff --git a/src/boot/tokens.boot b/src/boot/tokens.boot index ad662ce7..3ba54900 100644 --- a/src/boot/tokens.boot +++ b/src/boot/tokens.boot @@ -245,6 +245,7 @@ for i in [ _ ["and", "AND"] , _ ["append", "APPEND"] , _ ["apply", "APPLY"] , _ + ["array?", "ARRAYP"] , _ ["arrayRef", "AREF"] , _ ["atom", "ATOM"] , _ ["bitmask", "SBIT"] , _ @@ -301,6 +302,7 @@ for i in [ _ ["subSequence", "SUBSEQ"] , _ ["substitute", "SUBST"] , _ ["substitute!", "NSUBST"] , _ + ["symbolEqual?", "EQ"], _ ["symbolFunction", "SYMBOL-FUNCTION"], _ ["symbolName", "SYMBOL-NAME"], _ ["symbolValue", "SYMBOL-VALUE"], _ diff --git a/src/interp/category.boot b/src/interp/category.boot index a63a4824..26a55326 100644 --- a/src/interp/category.boot +++ b/src/interp/category.boot @@ -163,10 +163,10 @@ SigListUnion(extra,original) == -- the extra list would like to add ** with PositiveIntegers. -- The PI map is therefore gives an implementation of "Subsumed" for x in SigListOpSubsume(o,extra) repeat - [[xfn,xsig,:.],xpred,:.]:=x - xfn=ofn and xsig=osig => + [[xfn,xsig,:.],xpred,:.] := x + symbolEqual?(xfn,ofn) and xsig = osig => --checking name and signature, but not a 'constant' marker - xpred=opred => extra:= delete(x,extra) + xpred = opred => extra:= delete(x,extra) --same signature and same predicate opred = true => extra:= delete(x,extra) -- PRETTYPRINT ("we ought to subsume",x,o) @@ -297,17 +297,16 @@ SigListOpSubsume([[name1,sig1,:.],:.],list) == --see "operator subsumption" in SYSTEM SCRIPT --if it does, returns the subsumed member lsig1 := #sig1 - ans:=[] - for (n:=[[name2,sig2,:.],:.]) in list repeat - name1=name2 and lsig1 = #sig2 and sig1 = sig2 => - ans:=[n,:ans] + ans := [] + for (n:=[[name2,sig2,:.],:.]) in list | symbolEqual?(name1,name2) repeat + lsig1 = #sig2 and sig1 = sig2 => ans := [n,:ans] return ans MachineLevelSubsume([name1,[out1,:in1],:flag1],[name2,[out2,:in2],:flag2]) == -- Checks for machine-level subsumption in the sense of SYSTEM SCRIPT -- true if the first signature subsumes the second -- flag1 = flag2 and: this really should be checked, but - name1=name2 and MachineLevelSubset(out1,out2) and + symbolEqual?(name1,name2) and MachineLevelSubset(out1,out2) and (and/[MachineLevelSubset(inarg2,inarg1) for inarg1 in in1 for inarg2 in in2] ) diff --git a/src/interp/sys-utility.boot b/src/interp/sys-utility.boot index ec35299a..db742d49 100644 --- a/src/interp/sys-utility.boot +++ b/src/interp/sys-utility.boot @@ -132,8 +132,8 @@ CONTAINED(x,y) == main where symbol? x => eq(x,y) equal(x,y) eq(x,y) == - atom y => EQ(x,y) - eq(x, first y) or eq(x, rest y) + cons? y => eq(x, first y) or eq(x, rest y) + symbolEqual?(x,y) equal(x,y) == atom y => x = y equal(x, first y) or equal(x, rest y) |