~ chicken-core (chicken-5) 4dca8212ee08050d45639e96a1510a2081e03a8b
commit 4dca8212ee08050d45639e96a1510a2081e03a8b Author: Christian Kellermann <ckeen@pestilenz.org> AuthorDate: Sun May 26 14:41:01 2013 +0200 Commit: Peter Bex <peter.bex@xs4all.nl> CommitDate: Sun May 26 17:01:29 2013 +0200 Add specialisation for make-promise, retain procedures as they are Signed-off-by: Peter Bex <peter.bex@xs4all.nl> diff --git a/chicken.import.scm b/chicken.import.scm index b394bf73..9e06b6e8 100644 --- a/chicken.import.scm +++ b/chicken.import.scm @@ -170,6 +170,7 @@ make-blob make-composite-condition make-parameter + make-promise make-property-condition maximum-flonum memory-statistics diff --git a/library.scm b/library.scm index 9bea2b45..f42ddd7f 100644 --- a/library.scm +++ b/library.scm @@ -4745,9 +4745,8 @@ EOF (##sys#structure? x 'promise) ) (define (make-promise obj) - (cond ((promise? obj) obj) - ((procedure? obj) (##sys#make-promise obj)) - (else (##sys#make-promise (lambda () obj))))) + (if (promise? obj) obj + (##sys#make-promise (lambda () obj)))) ;;; Internal string-reader: diff --git a/tests/r7rs-tests.scm b/tests/r7rs-tests.scm index c322a349..bba67291 100644 --- a/tests/r7rs-tests.scm +++ b/tests/r7rs-tests.scm @@ -65,7 +65,7 @@ (test #t promise? (make-promise (make-promise 1))) (test 1 force (make-promise 1)) -(test 1 force (make-promise (lambda _ 1))) +(test #t procedure? (force (make-promise (lambda _ 1)))) (test 1 force (make-promise (make-promise 1))) diff --git a/tests/runtests.sh b/tests/runtests.sh index 931e2f23..4fdd7fca 100755 --- a/tests/runtests.sh +++ b/tests/runtests.sh @@ -260,6 +260,10 @@ echo "======================================== syntax tests (r5rs_pitfalls) ..." echo "(expect two failures)" $interpret -i -s r5rs_pitfalls.scm +echo "======================================== r7rs tests ..." +$interpret -i -s r7rs-tests.scm + + echo "======================================== module tests ..." $interpret -include-path .. -s module-tests.scm $interpret -include-path .. -s module-tests-2.scm diff --git a/types.db b/types.db index 5510a367..05d54d13 100644 --- a/types.db +++ b/types.db @@ -1014,6 +1014,9 @@ (program-name (#(procedure #:clean #:enforce) program-name (#!optional string) string)) (promise? (#(procedure #:pure #:predicate (struct promise)) promise? (*) boolean)) +(make-promise (#(procedure #:enforce) make-promise (*) (struct promise)) + (((struct promise)) #(1))) + (put! (#(procedure #:clean #:enforce) put! (symbol symbol *) undefined) ((symbol symbol *) (##core#inline_allocate ("C_a_i_putprop" 8) #(1) #(2) #(3))))Trap