Emmanuel Rodriguez
2011-10-26 19:11:39 UTC
Hi,
I'm writing XS bindings for JavaScriptCore (WebKit's JavaScript
engine) and a lot of the functions in the API throw an exception. The
exception it self is a JavaScript variable (kind of like an SV* for
Perl).
At first I though of rethrowing that variable wrapped as an SV but I
don't know how to do this. I read somewhere that Perl_croak_sv can do
that but I get a runtime because the symbol is undefined:
/* undefined symbol: Perl_croak_sv */
SV *err;
err = jsc_perl_js_value_to_sv(ctx, exception);
Perl_croak_sv(aTHX_ err);
For now I reverted at returning the error as a JSON string and to use
croak but I'm leaking the string with the message since I can't free
it after croak():
char *error;
error = jsc_perl_js_value_to_json(ctx, exception);
croak("%s", error);/* How can we throw an SV ? */
free(error);/* FIXME is this free called ? */
Is it possible to throw an blessed exception from XS code? If so how
can I achieve this? Otherwise, how can I propagate an error as a
string and free the string?
I'm writing XS bindings for JavaScriptCore (WebKit's JavaScript
engine) and a lot of the functions in the API throw an exception. The
exception it self is a JavaScript variable (kind of like an SV* for
Perl).
At first I though of rethrowing that variable wrapped as an SV but I
don't know how to do this. I read somewhere that Perl_croak_sv can do
that but I get a runtime because the symbol is undefined:
/* undefined symbol: Perl_croak_sv */
SV *err;
err = jsc_perl_js_value_to_sv(ctx, exception);
Perl_croak_sv(aTHX_ err);
For now I reverted at returning the error as a JSON string and to use
croak but I'm leaking the string with the message since I can't free
it after croak():
char *error;
error = jsc_perl_js_value_to_json(ctx, exception);
croak("%s", error);/* How can we throw an SV ? */
free(error);/* FIXME is this free called ? */
Is it possible to throw an blessed exception from XS code? If so how
can I achieve this? Otherwise, how can I propagate an error as a
string and free the string?
--
Emmanuel Rodriguez
Emmanuel Rodriguez