* syncase.scm: fix bad let.

(gensym): fix failure on non-threaded
This commit is contained in:
Rob Browning 2002-03-12 21:53:56 +00:00
commit 56fd1933cc

View file

@ -160,17 +160,36 @@
;;
(define gensym
(let ((counter 0))
(lambda (. rest)
(let ((val (number->string counter)))
(define next-id
(if (provided? 'threads)
(let ((symlock (make-mutex)))
(lambda ()
(let ((result #f))
(with-mutex symlock
(set! result counter)
(set! counter (+ counter 1)))
result)))
;; faster, non-threaded case.
(lambda ()
(let ((result counter))
(set! counter (+ counter 1))
result))))
;; actual gensym body code.
(lambda (. rest)
(let* ((next-val (next-id))
(valstr (number->string next-val)))
(cond
((null? rest)
(string->symbol (string-append "syntmp-" val)))
(string->symbol (string-append "syntmp-" valstr)))
((null? (cdr rest))
(string->symbol (string-append "syntmp-" (car rest) "-" val)))
(string->symbol (string-append "syntmp-" (car rest) "-" valstr)))
(else
(error
"syncase's gensym called with the wrong number of arguments")))))))
(string-append
"syncase's gensym expected 0 or 1 arguments, got "
(length rest)))))))))
;;; Load the preprocessed code