SCM SCM_callep (SCM f) { struct SCM_jmp_buf scmjb; SCM continuation = SCM_allocate_continuation(&scmjb); scmjb.back_pointer = continuation; if ( setjmp(scmjb.jb) != 0 ) { return jumpvalue; } else { return SCM_invoke1(f,continuation); } }
SCM SCM_invoke_continuation (SCM self, unsigned long number, va_list arguments) { SCM current_k = va_arg(arguments,SCM); SCM value = va_arg(arguments,SCM); return SCM_invoke1(SCM_Unwrap(self)->closure.environment[0],value); }