Skip to content
This repository has been archived by the owner on Mar 26, 2024. It is now read-only.

Commit

Permalink
Merge pull request #252 from picrin-scheme/escape-continuation
Browse files Browse the repository at this point in the history
make benz's call/cc accessible from picrin
  • Loading branch information
nyuichi committed Jan 26, 2015
2 parents 58f856a + 7d772fc commit 4c3a9fe
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 0 deletions.
4 changes: 4 additions & 0 deletions contrib/03.callcc/callcc.c
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,10 @@ pic_callcc_callcc(pic_state *pic)
void
pic_init_callcc(pic_state *pic)
{
pic_deflibrary (pic, "(picrin control)") {
pic_define(pic, "escape", pic_ref(pic, pic->PICRIN_BASE, "call-with-current-continuation"));
}

pic_deflibrary (pic, "(scheme base)") {
pic_redefun(pic, pic->PICRIN_BASE, "call-with-current-continuation", pic_callcc_callcc);
pic_redefun(pic, pic->PICRIN_BASE, "call/cc", pic_callcc_callcc);
Expand Down
3 changes: 3 additions & 0 deletions contrib/10.partcont/docs/doc.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,6 @@ Delimited control operators.
- **(reset h)**
- **(shift k)**

Escape Continuation

- **(escape f)**
16 changes: 16 additions & 0 deletions t/escape.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
(import (scheme base)
(picrin control)
(picrin test))

(test-begin)

(test 1 (escape (lambda (exit) (begin (exit 1) 2))))

(define cont #f)

(test "calling dead escape continuation"
(guard (c ((error-object? c) (error-object-message c)))
(escape (lambda (exit) (set! cont exit)))
(cont 3)))

(test-end)

0 comments on commit 4c3a9fe

Please sign in to comment.