I think s7_call_with_catch needs to set a jump point for the
sc->longjmp_ok case, but I haven't figured out yet how to
capture the error handler result in all cases.
Here's what I have now:

(ca line 51216)

  else
    {
      declare_jump_info();
      TRACK(sc);
      store_jump_info(sc);
      set_jump_info(sc, S7_CALL_SET_JUMP); /* ?? */
      catch_cstack(p) = &new_goto_start;

      if (jump_loc == NO_JUMP)
        {
          push_stack(sc, OP_CATCH, error_handler, p);
          result = s7_call(sc, body, sc->nil);
          if (((opcode_t)sc->stack_end[-1]) == OP_CATCH) sc->stack_end -= 4;
        }
else result = sc->nil; /* wrong: should be the error handler result I think */

      restore_jump_info(sc);
    }

ffitest.c has test cases that break this code.

I'll poke at it tomorrow -- thanks for the bug report!

_______________________________________________
Cmdist mailing list
[email protected]
https://cm-mail.stanford.edu/mailman/listinfo/cmdist

Reply via email to