#include "JavaScript.h"
void PJS_report_exception(PJS_Context *pcx) {
jsval val;
JSObject *object;
/* If ERRSV is already set we can just return */
if (SvTRUE(ERRSV)) {
return;
}
/* No need to report exception if there isn't one */
if (JS_IsExceptionPending(PJS_GetJSContext(pcx)) == JS_FALSE) {
return;
}
JS_GetPendingException(PJS_GetJSContext(pcx), &val);
if (JSVALToSV(PJS_GetJSContext(pcx), NULL, val, &ERRSV) == JS_FALSE) {
croak("Failed to convert error object to perl object");
}
JS_ClearPendingException(PJS_GetJSContext(pcx));
/* convert internal JS parser exceptions into JavaScript::Error objects. */
if (JSVAL_IS_OBJECT(val)) {
JS_ValueToObject(PJS_GetJSContext(pcx), val, &object);
if (strcmp(OBJ_GET_CLASS(PJS_GetJSContext(pcx), object)->name, "Error") == 0) {
sv_bless(ERRSV, gv_stashpvn(PJS_ERROR_PACKAGE, strlen(PJS_ERROR_PACKAGE), TRUE));
}
}
}