* syncase.scm: fix bad let.
(gensym): fix failure on non-threaded
This commit is contained in:
parent
efb378b01f
commit
56fd1933cc
1 changed files with 29 additions and 10 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue