diff --git a/cyclone.scm b/cyclone.scm index 114162eb..882ebeff 100644 --- a/cyclone.scm +++ b/cyclone.scm @@ -131,8 +131,8 @@ input-program))) (cond ((and library? (equal? lib-name '(scheme base))) - (set! globals (cons 'call/cc globals)) - (set! module-globals (cons 'call/cc module-globals)) + (set! globals (append '(call-with-values call/cc) globals)) + (set! module-globals (append '(call-with-values call/cc) module-globals)) (set! input-program (cons ;; Experimental version of call-with-values, diff --git a/eval.scm b/eval.scm index 2297d523..8ec1b5e1 100644 --- a/eval.scm +++ b/eval.scm @@ -188,6 +188,7 @@ (define primitive-procedures (list (list 'call/cc call/cc) + (list 'call-with-values call-with-values) (list 'Cyc-global-vars Cyc-global-vars) (list 'Cyc-get-cvar Cyc-get-cvar) (list 'Cyc-set-cvar! Cyc-set-cvar!) diff --git a/scheme/base.sld b/scheme/base.sld index 449d0905..647ba5b6 100644 --- a/scheme/base.sld +++ b/scheme/base.sld @@ -6,9 +6,9 @@ ;delete-duplicates call-with-current-continuation call/cc - ;call-with-values - ;dynamic-wind - ;values + call-with-values + dynamic-wind + values ;(Cyc-bin-op cmp x lst) ;(Cyc-bin-op-char cmp c cs) char=? @@ -74,14 +74,14 @@ (lambda (cont) (apply cont things)))) ;; TODO: just need something good enough for bootstrapping (for now) ;; does not have to be perfect (this is not, does not handle call/cc or exceptions) - ;(define (dynamic-wind before thunk after) - ; (before) - ; (call-with-values - ; thunk - ; (lambda (result) ;results - ; (after) - ; result))) - ; ;(apply values results)))) + (define (dynamic-wind before thunk after) + (before) + (call-with-values + thunk + (lambda (result) ;results + (after) + result))) + ;(apply values results)))) (define (Cyc-bin-op cmp x lst) (cond ((null? lst) #t) diff --git a/test.scm b/test.scm index 91d5f924..7de7ba0d 100644 --- a/test.scm +++ b/test.scm @@ -20,7 +20,7 @@ (define b (vector 10 20 30 40 50)) (vector-copy! b 1 a 0 2) (write (equal? b #(10 1 2 40 50))) -;(call-with-values -; (lambda () (values 1 1)) -; (lambda (a) (write a))) +(call-with-values + (lambda () (values 1 1)) + (lambda (a) (write a))) diff --git a/trans.scm b/trans.scm index bb6fc8af..7e403e50 100644 --- a/trans.scm +++ b/trans.scm @@ -126,7 +126,7 @@ (define (built-in-syms) - '(call/cc define)) + '(call-with-values call/cc define)) ;; Tuning (define *do-code-gen* #t) ; Generate C code?