diff options
Diffstat (limited to 'src/util.scm')
-rw-r--r-- | src/util.scm | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/util.scm b/src/util.scm new file mode 100644 index 0000000..7bf89ac --- /dev/null +++ b/src/util.scm | |||
@@ -0,0 +1,37 @@ | |||
1 | (module (jimmy util) * | ||
2 | |||
3 | (import scheme (chicken base) | ||
4 | (chicken condition)) | ||
5 | |||
6 | (define-syntax define-public | ||
7 | (syntax-rules () | ||
8 | ((define-public (name . arg) forms ...) | ||
9 | (begin (export name) | ||
10 | (define (name . arg) forms ...))) | ||
11 | ((define-public (name args ...) forms ...) | ||
12 | (begin (export name) | ||
13 | (define (name args ...) forms ...))) | ||
14 | ((define-public name value) | ||
15 | (begin (export name) | ||
16 | (define name value))))) | ||
17 | |||
18 | (define-syntax ignore-errors | ||
19 | (syntax-rules () | ||
20 | ((ignore-errors x) | ||
21 | (handle-exceptions e #f x)))) | ||
22 | |||
23 | (define (alist-walk lis . keys) | ||
24 | (if (null? keys) | ||
25 | lis | ||
26 | (let ((kv (assoc (car keys) lis))) | ||
27 | (cond | ||
28 | ((not kv) #f) | ||
29 | ((atom? (cdr kv)) | ||
30 | (and (null? (cdr keys)) ; this shouldn't error... | ||
31 | (cdr kv))) | ||
32 | ((list? (cdr kv)) | ||
33 | (apply alist-walk (cdr kv) (cdr keys))))))) | ||
34 | |||
35 | ) | ||
36 | |||
37 | |||