HCoop
/
bpt
/
guile.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix infinite loop in expander
[bpt/guile.git]
/
libguile
/
continuations.c
diff --git
a/libguile/continuations.c
b/libguile/continuations.c
index
1d67761
..
8dca62e
100644
(file)
--- a/
libguile/continuations.c
+++ b/
libguile/continuations.c
@@
-1,4
+1,4
@@
-/* Copyright (C) 1995,1996,1998,2000,2001,2004, 2006, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
+/* Copyright (C) 1995,1996,1998,2000,2001,2004, 2006, 2008, 2009, 2010, 2011, 2012, 2013
, 2014
Free Software Foundation, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
@@
-161,12
+161,15
@@
scm_i_make_continuation (int *first, struct scm_vm *vp, SCM vm_cont)
return make_continuation_trampoline (cont);
}
else
return make_continuation_trampoline (cont);
}
else
- return SCM_UNDEFINED;
+ {
+ scm_gc_after_nonlocal_exit ();
+ return SCM_UNDEFINED;
+ }
}
#undef FUNC_NAME
}
#undef FUNC_NAME
-SCM
-scm_i_continuation_to_frame (SCM continuation)
+int
+scm_i_continuation_to_frame (SCM continuation
, struct scm_frame *frame
)
{
SCM contregs;
scm_t_contregs *cont;
{
SCM contregs;
scm_t_contregs *cont;
@@
-177,13
+180,16
@@
scm_i_continuation_to_frame (SCM continuation)
if (scm_is_true (cont->vm_cont))
{
struct scm_vm_cont *data = SCM_VM_CONT_DATA (cont->vm_cont);
if (scm_is_true (cont->vm_cont))
{
struct scm_vm_cont *data = SCM_VM_CONT_DATA (cont->vm_cont);
- return scm_c_make_frame (SCM_VM_FRAME_KIND_CONT, data,
- (data->fp + data->reloc) - data->stack_base,
- (data->sp + data->reloc) - data->stack_base,
- data->ra);
+
+ frame->stack_holder = data;
+ frame->fp_offset = (data->fp + data->reloc) - data->stack_base;
+ frame->sp_offset = (data->sp + data->reloc) - data->stack_base;
+ frame->ip = data->ra;
+
+ return 1;
}
else
}
else
- return
SCM_BOOL_F
;
+ return
0
;
}
struct scm_vm *
}
struct scm_vm *