about summary refs log tree commit diff stats
path: root/src/util.scm
blob: 7bf89acef0165dbb47d8f6b091af35bc564b3e63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
(module (jimmy util) *

  (import scheme (chicken base)
          (chicken condition))

  (define-syntax define-public
    (syntax-rules ()
      ((define-public (name . arg) forms ...)
       (begin (export name)
              (define (name . arg) forms ...)))
      ((define-public (name args ...) forms ...)
       (begin (export name)
              (define (name args ...) forms ...)))
      ((define-public name value)
       (begin (export name)
              (define name value)))))

  (define-syntax ignore-errors
    (syntax-rules ()
      ((ignore-errors x)
       (handle-exceptions e #f x))))

  (define (alist-walk lis . keys)
    (if (null? keys)
        lis
        (let ((kv (assoc (car keys) lis)))
          (cond
           ((not kv) #f)
           ((atom? (cdr kv))
            (and (null? (cdr keys))       ; this shouldn't error...
                 (cdr kv)))
           ((list? (cdr kv))
            (apply alist-walk (cdr kv) (cdr keys)))))))

  )