diff options
author | Yale AI Dept <ai@nebula.cs.yale.edu> | 1993-07-14 13:08:00 -0500 |
---|---|---|
committer | Duncan McGreggor <duncan.mcgreggor@rackspace.com> | 1993-07-14 13:08:00 -0500 |
commit | 4e987026148fe65c323afbc93cd560c07bf06b3f (patch) | |
tree | 26ae54177389edcbe453d25a00c38c2774e8b7d4 /util/annotation-utils.scm |
Import to github.
Diffstat (limited to 'util/annotation-utils.scm')
-rw-r--r-- | util/annotation-utils.scm | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/util/annotation-utils.scm b/util/annotation-utils.scm new file mode 100644 index 0000000..8e2baf2 --- /dev/null +++ b/util/annotation-utils.scm @@ -0,0 +1,41 @@ + +;;; Some general utilities for dealing with annotations + +;;; Lookup an annotation on a var + +(define (lookup-annotation var aname) + (lookup-annotation-1 (var-annotations var) aname)) + +(define (lookup-annotation-1 a aname) + (if (null? a) + '#f + (if (eq? aname (annotation-value-name (car a))) + (car a) + (lookup-annotation-1 (cdr a) aname)))) + +;;; This parses a string denoting a strictness property into a list +;;; of booleans. "S,N,S" -> (#t #f #t) + +(define (parse-strictness str) + (parse-strictness-1 str 0)) + +(define (parse-strictness-1 str i) + (if (>= i (string-length str)) + (signal-bad-strictness-annotation str) + (let* ((ch (char-downcase (string-ref str i))) + (s (cond ((char=? ch '#\s) + '#t) + ((char=? ch '#\n) + '#f) + (else + (signal-bad-strictness-annotation str))))) + (cond ((eqv? (1+ i) (string-length str)) + (list s)) + ((char=? (string-ref str (1+ i)) '#\,) + (cons s (parse-strictness-1 str (+ i 2)))) + (else + (signal-bad-strictness-annotation str)))))) + +(define (signal-bad-strictness-annotation str) + (fatal-error 'bad-strictness "Bad strictness annotation: ~A~%" str)) + |