From dab514a843f3d515e1ab022e5aa16a5e828b8abf Mon Sep 17 00:00:00 2001 From: Marius Vollmer Date: Sat, 3 Jan 2004 21:56:35 +0000 Subject: [PATCH] *** empty log message *** --- doc/ref/ChangeLog | 5 +++ libguile/ChangeLog | 23 +++++++++++- test-suite/ChangeLog | 5 +++ test-suite/tests/continuations.test | 54 +++++++++++++++++++++++++++++ 4 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 test-suite/tests/continuations.test diff --git a/doc/ref/ChangeLog b/doc/ref/ChangeLog index a2f53fc9e..6e879f2c2 100644 --- a/doc/ref/ChangeLog +++ b/doc/ref/ChangeLog @@ -1,3 +1,8 @@ +2004-01-03 Marius Vollmer + + * scheme-control.texi: Document the frames stuff and other random + changes. + 2004-01-04 Kevin Ryde * srfi-modules.texi (SRFI-1 Filtering and Partitioning): For partition diff --git a/libguile/ChangeLog b/libguile/ChangeLog index 74bcb7d13..7491f45d9 100644 --- a/libguile/ChangeLog +++ b/libguile/ChangeLog @@ -1,7 +1,28 @@ +2004-01-03 Marius Vollmer + + * dynwind.h, scm_dynwind.c (scm_t_frame_flags, scm_t_wind_flags, + scm_begin_frame, scm_end_frame, scm_on_unwind, scm_on_rewind): + New. + (scm_dowinds, scm_i_dowinds): scm_dowinds has been renamed to + scm_i_dowinds and extended to handle frames and to invoke a 'turn' + function when the outermost wind point has been reached. The + latter is used to copy a continuation stack at the right time. + scm_dowinds remains available. + (SCM_GUARDSP, SCM_BEFORE_GUARD, SCM_AFTER_GUARD, SCM_GUARD_DATA, + tc16_guard, guards_print): Removed. + (scm_internal_dynamic_wind): Reimplemented using frames. + + * continuations.c (copy_stack): New, do only the stack copying + part of copy_stack_and_call. + (copy_stack_and_call): Copy the stack after unwinding and before + rewinding. + (scm_dynthrow): Do not call scm_dowinds, this is now done by + copy_stack_and_call. + 2004-01-04 Kevin Ryde * numbers.c (scm_less_p): Don't convert frac to float for compares, - can give results due to rounding. + can give bad results due to rounding. 2003-12-26 Marius Vollmer diff --git a/test-suite/ChangeLog b/test-suite/ChangeLog index 5273dce93..5f726969b 100644 --- a/test-suite/ChangeLog +++ b/test-suite/ChangeLog @@ -1,3 +1,8 @@ +2004-01-03 Marius Vollmer + + * standalone/test-unwind.c: New test, for the frames stuff. + * standalone/Makefile.am: Compile and run it. + 2004-01-04 Kevin Ryde * tests/exceptions.test (false-if-exception): Add tests. diff --git a/test-suite/tests/continuations.test b/test-suite/tests/continuations.test new file mode 100644 index 000000000..04b6a85c3 --- /dev/null +++ b/test-suite/tests/continuations.test @@ -0,0 +1,54 @@ +;;;; -*- scheme -*- +;;;; continuations.test --- test suite for continutations +;;;; +;;;; Copyright (C) 2003 Free Software Foundation, Inc. +;;;; +;;;; This program is free software; you can redistribute it and/or modify +;;;; it under the terms of the GNU General Public License as published by +;;;; the Free Software Foundation; either version 2, or (at your option) +;;;; any later version. +;;;; +;;;; This program is distributed in the hope that it will be useful, +;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;;; GNU General Public License for more details. +;;;; +;;;; You should have received a copy of the GNU General Public License +;;;; along with this software; see the file COPYING. If not, write to +;;;; the Free Software Foundation, Inc., 59 Temple Place, Suite 330, +;;;; Boston, MA 02111-1307 USA + +(define-module (test-suite test-continuations) + :use-module (test-suite lib)) + +(define (block-reentry body) + (let ((active #f)) + (dynamic-wind + (lambda () + (if active + (throw 'no-reentry))) + (lambda () + (set! active #t) + (body)) + (lambda () #f)))) + +(define (catch-tag body) + (catch #t + body + (lambda (tag . args) tag))) + +(define (check-cont) + (catch-tag + (lambda () + (block-reentry (lambda () (call/cc identity)))))) + +(define (dont-crash-please) + (let ((k (check-cont))) + (if (procedure? k) + (k 12) + k))) + +(with-test-prefix "continuations" + + (pass-if "throwing to a rewound catch context" + (eq? (dont-crash-please) 'no-reentry))) -- 2.20.1