LINUX.ORG.RU

История изменений

Исправление 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();
  }