[CM] C Stack Unwinding
Woody Douglass
wdouglass at carnegierobotics.com
Thu Nov 4 06:26:57 PDT 2021
things just got even weirder. to get around the symbol problem i added
define_func = s7_let_ref(s, s7_rootlet(s), define_func);
so that define_func was the function and not a symbol. Now, the results
are still not consistent -- instead of getting
#f #t
like i did before this change, i now get
division-by-zero #t
instead of my catch being called, it seems like the default one is
being called
I'd eventually like to write a wrapper for s7_eval that looks something
like this
bool s7_eval_errorcheck(s7_scheme *s, s7_pointer arg, s7_pointer *out);
which returns true if out is the result of an error handler, and false
if not. that way, c functions can do something like
s7_pointer in, out;
//initialize in here
if (s7_eval_errorcheck(s, in, &out)) {
//do any c unwinding/cleanup, and then re-raise the
//error to get back to where we started
s7_error(s, s7_car(out), s7_cdr(out));
}
I'm still trying to figure out how feasible this is, any advice is
appreciated!
Thanks again,
Woody
On Thu, 2021-11-04 at 05:56 -0700, bil at ccrma.Stanford.EDU wrote:
> Argh -- this is two problems. First the documentation
> is incomplete or incorrect (depending on whether you've
> had lunch), and has been for a long time -- s7_define_function
> returns the function name as a symbol, whereas s7_make_function
> returns the function. The comment in s7.h is also wrong.
> Sorry about that! The second bug is that you didn't get
> an error when the catch process tried to apply the symbol
> to the error info arguments. I don't know why not yet.
> If you turn on S7_DEBUGGING, you'd get a complaint
> about trying to apply a symbol.
>
More information about the Cmdist
mailing list