aboutsummaryrefslogtreecommitdiff
path: root/src/interp/g-util.boot
diff options
context:
space:
mode:
Diffstat (limited to 'src/interp/g-util.boot')
-rw-r--r--src/interp/g-util.boot22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/interp/g-util.boot b/src/interp/g-util.boot
index 5908287c..128e683b 100644
--- a/src/interp/g-util.boot
+++ b/src/interp/g-util.boot
@@ -51,6 +51,28 @@ PPtoFile(x, fname) ==
-- Convert an arbitrary lisp object to canonical boolean.
bool x ==
NULL NULL x
+
+TruthP x ==
+ --True if x is a predicate that's always true
+ x is nil => nil
+ x=true => true
+ x is ['QUOTE,:.] => true
+ nil
+
+--% Record and Union utils.
+
+stripUnionTags doms ==
+ [if dom is [":",.,dom'] then dom' else dom for dom in doms]
+
+isTaggedUnion u ==
+ u is ['Union,:tl] and tl and first tl is [":",.,.] and true
+
+getUnionOrRecordTags u ==
+ tags := nil
+ if u is ['Union, :tl] or u is ['Record, :tl] then
+ for t in tl repeat
+ if t is [":",tag,.] then tags := cons(tag, tags)
+ tags
--% Various lispy things