File: macros.lisp

package info (click to toggle)
araneida 0.90.1-dfsg-2
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 700 kB
  • ctags: 643
  • sloc: lisp: 4,878; perl: 166; sh: 109; makefile: 34
file content (28 lines) | stat: -rw-r--r-- 970 bytes parent folder | download
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
(in-package :araneida)

#+sbcl
(defmacro with-ignored-signals (signals &body body)
  (let ((sighandlers
         (mapcar (lambda (sig) (list sig :ignore)) signals)))
    `(sb-sys:with-enabled-interrupts ,sighandlers ,@body)))

#+cmu
(defmacro with-ignored-signals (signals &body body)
  (let ((sighandlers
         (mapcar (lambda (sig) (list sig :ignore)) signals)))
    `(system:with-enabled-interrupts ,sighandlers ,@body)))

; Cribbed from Paul Graham
(defmacro with-gensyms (syms &body body)
  `(let ,(mapcar #'(lambda (s)
                     `(,s (gensym)))
                 syms)
    ,@body))

; Cribbed from PCL by Seibel
(defmacro once-only ((&rest names) &body body)
  (let ((gensyms (loop for n in names collect (gensym))))
    `(let (,@(loop for g in gensyms collect `(,g (gensym))))
      `(let (,,@(loop for g in gensyms for n in names collect ``(,,g ,,n)))
        ,(let (,@(loop for n in names for g in gensyms collect `(,n ,g)))
           ,@body)))))