1 : /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2 : *
3 : * ***** BEGIN LICENSE BLOCK *****
4 : * Version: MPL 1.1/GPL 2.0/LGPL 2.1
5 : *
6 : * The contents of this file are subject to the Mozilla Public License Version
7 : * 1.1 (the "License"); you may not use this file except in compliance with
8 : * the License. You may obtain a copy of the License at
9 : * http://www.mozilla.org/MPL/
10 : *
11 : * Software distributed under the License is distributed on an "AS IS" basis,
12 : * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13 : * for the specific language governing rights and limitations under the
14 : * License.
15 : *
16 : * The Original Code is Mozilla Communicator client code, released
17 : * March 31, 1998.
18 : *
19 : * The Initial Developer of the Original Code is
20 : * Netscape Communications Corporation.
21 : * Portions created by the Initial Developer are Copyright (C) 1998
22 : * the Initial Developer. All Rights Reserved.
23 : *
24 : * Contributor(s):
25 : *
26 : * Alternatively, the contents of this file may be used under the terms of
27 : * either of the GNU General Public License Version 2 or later (the "GPL"),
28 : * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
29 : * in which case the provisions of the GPL or the LGPL are applicable instead
30 : * of those above. If you wish to allow use of your version of this file only
31 : * under the terms of either the GPL or the LGPL, and not to allow others to
32 : * use your version of this file under the terms of the MPL, indicate your
33 : * decision by deleting the provisions above and replace them with the notice
34 : * and other provisions required by the GPL or the LGPL. If you do not delete
35 : * the provisions above, a recipient may use your version of this file under
36 : * the terms of any one of the MPL, the GPL or the LGPL.
37 : *
38 : * ***** END LICENSE BLOCK ***** */
39 :
40 : /*
41 : * JS runtime exception classes.
42 : */
43 :
44 : #ifndef jsexn_h___
45 : #define jsexn_h___
46 :
47 : #include "jsobj.h"
48 :
49 : /*
50 : * Initialize the exception constructor/prototype hierarchy.
51 : */
52 : extern JSObject *
53 : js_InitExceptionClasses(JSContext *cx, JSObject *obj);
54 :
55 : /*
56 : * Given a JSErrorReport, check to see if there is an exception associated with
57 : * the error number. If there is, then create an appropriate exception object,
58 : * set it as the pending exception, and set the JSREPORT_EXCEPTION flag on the
59 : * error report. Exception-aware host error reporters should probably ignore
60 : * error reports so flagged. Returns JS_TRUE if an associated exception is
61 : * found and set, JS_FALSE otherwise.
62 : */
63 : extern JSBool
64 : js_ErrorToException(JSContext *cx, const char *message, JSErrorReport *reportp,
65 : JSErrorCallback callback, void *userRef);
66 :
67 : /*
68 : * Called if a JS API call to js_Execute or js_InternalCall fails; calls the
69 : * error reporter with the error report associated with any uncaught exception
70 : * that has been raised. Returns true if there was an exception pending, and
71 : * the error reporter was actually called.
72 : *
73 : * The JSErrorReport * that the error reporter is called with is currently
74 : * associated with a JavaScript object, and is not guaranteed to persist after
75 : * the object is collected. Any persistent uses of the JSErrorReport contents
76 : * should make their own copy.
77 : *
78 : * The flags field of the JSErrorReport will have the JSREPORT_EXCEPTION flag
79 : * set; embeddings that want to silently propagate JavaScript exceptions to
80 : * other contexts may want to use an error reporter that ignores errors with
81 : * this flag.
82 : */
83 : extern JSBool
84 : js_ReportUncaughtException(JSContext *cx);
85 :
86 : extern JSErrorReport *
87 : js_ErrorFromException(JSContext *cx, jsval exn);
88 :
89 : extern const JSErrorFormatString *
90 : js_GetLocalizedErrorMessage(JSContext* cx, void *userRef, const char *locale,
91 : const unsigned errorNumber);
92 :
93 : /*
94 : * Make a copy of errobj parented to scope.
95 : *
96 : * cx must be in the same compartment as scope. errobj may be in a different
97 : * compartment, but it must be an Error object (not a wrapper of one) and it
98 : * must not be one of the prototype objects created by js_InitExceptionClasses
99 : * (errobj->getPrivate() must not be NULL).
100 : */
101 : extern JSObject *
102 : js_CopyErrorObject(JSContext *cx, JSObject *errobj, JSObject *scope);
103 :
104 : static JS_INLINE JSProtoKey
105 47356 : GetExceptionProtoKey(int exn)
106 : {
107 47356 : JS_ASSERT(JSEXN_ERR <= exn);
108 47356 : JS_ASSERT(exn < JSEXN_LIMIT);
109 47356 : return JSProtoKey(JSProto_Error + exn);
110 : }
111 :
112 : #endif /* jsexn_h___ */
|