История изменений
Исправление Bad_ptr, (текущая версия) :
try ты пишешь вместо '(call-with-c...c...)',
Procedure proc = (Procedure) arg1; // это твоя (lambda (cc) (cc cc))
Continuation cont = new Continuation (); // our continuation
try { //
return proc.apply1(cont); // это call-with-c-c
} // тут ты в лямбду передаёшь cc оно же cont
catch (CalledContinuation ex)
{
if (ex.continuation != cont) // проверяешь, если киданутое continuation -- то самое, которое ты пережовал в лямбду
// our значит == cont, которое создано перед try
throw ex; // Если нет, кидаешь дальше.
return ex.value; // Если да -- возвращаешь значение
}
finally
{
cont.mark_invalid();
}
Исправление Bad_ptr, :
try ты пишешь вместо '(call-with-c...c...)',
Procedure proc = (Procedure) arg1; // это твоя (lambda (cc) (cc cc))
Continuation cont = new Continuation (); // our continuation
try { //
return proc.apply1(cont); // это call-with-c-c
} // тут ты в лямбду передаёшь cc оно же cont
catch (CalledContinuation ex)
{
if (ex.continuation != cont) // проверяешь, если киданутое continuation -- то самое, которое ты пережовал в лямбду
// our значит == cont, которое создано в try
throw ex; // Если нет, кидаешь дальше.
return ex.value; // Если да -- возвращаешь значение
}
finally
{
cont.mark_invalid();
}
Исходная версия Bad_ptr, :
try ты пишешь вместо '(call-with-c...c...)',
Procedure proc = (Procedure) arg1; // это твоя (lambda (cc) (cc cc))
Continuation cont = new Continuation ();
try { //
return proc.apply1(cont); // это call-with-c-c
} // тут ты в лямбду передаёшь cc оно же cont
catch (CalledContinuation ex)
{
if (ex.continuation != cont) // проверяешь, если киданутое continuation -- то самое, которое ты пережовал в лямбду
// our значит == cont, которое создано в try
throw ex; // Если нет, кидаешь дальше.
return ex.value; // Если да -- возвращаешь значение
}
finally
{
cont.mark_invalid();
}