aboutsummaryrefslogtreecommitdiff
path: root/src/interp/parse.boot
diff options
context:
space:
mode:
Diffstat (limited to 'src/interp/parse.boot')
-rw-r--r--src/interp/parse.boot21
1 files changed, 9 insertions, 12 deletions
diff --git a/src/interp/parse.boot b/src/interp/parse.boot
index 278de20e..6daf3ea3 100644
--- a/src/interp/parse.boot
+++ b/src/interp/parse.boot
@@ -197,22 +197,19 @@ parseAtAt t ==
parseHas: %ParseForm -> %Form
parseHas t ==
t isnt ["has",x,y] => systemErrorHere ["parseHas",t]
- mkand [["has",x,u] for u in fn y] where
- mkand x ==
- x is [a] => a
- ["and",:x]
+ ["has",x,fn y] where
fn y ==
y is [":" ,op,["Mapping",:map]] =>
op:= (STRINGP op => INTERN op; op)
- [["SIGNATURE",op,map]]
- y is ["Join",:u] => "append"/[fn z for z in u]
- y is ["CATEGORY",:u] => "append"/[fn z for z in u]
+ ["SIGNATURE",op,map]
+ y is ["Join",:u] => ["Join",:[fn z for z in u]]
+ y is ["CATEGORY",kind,:u] => ["CATEGORY",kind,:[fn z for z in u]]
kk:= getConstructorKindFromDB opOf y
- kk = "domain" or kk = "category" => [makeNonAtomic y]
- y is ["ATTRIBUTE",:.] => [y]
- y is ["SIGNATURE",:.] => [y]
- y is [":",op,type] => [["SIGNATURE",op,[type],"constant"]]
- [["ATTRIBUTE",y]]
+ kk = "domain" or kk = "category" => makeNonAtomic y
+ y is ["ATTRIBUTE",:.] => y
+ y is ["SIGNATURE",:.] => y
+ y is [":",op,type] => ["SIGNATURE",op,[type],"constant"]
+ ["ATTRIBUTE",y]
parseDEF: %ParseForm -> %Form
parseDEF t ==