File: PJS_Exceptions.c

package info (click to toggle)
libjavascript-perl 1.08-1%2Blenny1
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 412 kB
  • ctags: 203
  • sloc: perl: 1,686; ansic: 1,620; makefile: 55
file content (31 lines) | stat: -rw-r--r-- 998 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#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));
        }
    }
}