Bug 957926 - Add JS::CreateTypeError. r=jorendorff
--- a/js/src/jsapi.h
+++ b/js/src/jsapi.h
@@ -4450,16 +4450,25 @@ struct JSErrorReport {
#define JSREPORT_IS_STRICT_MODE_ERROR(flags) (((flags) & \
JSREPORT_STRICT_MODE_ERROR) != 0)
extern JS_PUBLIC_API(JSErrorReporter)
JS_GetErrorReporter(JSContext *cx);
extern JS_PUBLIC_API(JSErrorReporter)
JS_SetErrorReporter(JSContext *cx, JSErrorReporter er);
+namespace JS {
+
+extern JS_PUBLIC_API(bool)
+CreateTypeError(JSContext *cx, HandleString stack, HandleString fileName,
+ uint32_t lineNumber, uint32_t columnNumber, JSErrorReport *report,
+ HandleString message, MutableHandleValue rval);
+
+} /* namespace JS */
+
/************************************************************************/
/*
* Dates.
*/
extern JS_PUBLIC_API(JSObject *)
JS_NewDateObject(JSContext *cx, int year, int mon, int mday, int hour, int min, int sec);
@@ -4716,17 +4725,17 @@ class AutoHideScriptedCaller
UnhideScriptedCaller(mContext);
}
protected:
JSContext *mContext;
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
-} /* namepsace JS */
+} /* namespace JS */
/*
* Encode/Decode interpreted scripts and functions to/from memory.
*/
extern JS_PUBLIC_API(void *)
JS_EncodeScript(JSContext *cx, JS::HandleScript script, uint32_t *lengthp);
--- a/js/src/jsexn.cpp
+++ b/js/src/jsexn.cpp
@@ -863,8 +863,28 @@ js_CopyErrorObject(JSContext *cx, Handle
uint32_t lineNumber = err->lineNumber();
uint32_t columnNumber = err->columnNumber();
JSExnType errorType = err->type();
// Create the Error object.
return ErrorObject::create(cx, errorType, stack, fileName,
lineNumber, columnNumber, ©Report, message);
}
+
+JS_PUBLIC_API(bool)
+JS::CreateTypeError(JSContext *cx, HandleString stack, HandleString fileName,
+ uint32_t lineNumber, uint32_t columnNumber, JSErrorReport *report,
+ HandleString message, MutableHandleValue rval)
+{
+ assertSameCompartment(cx, stack, fileName, message);
+ js::ScopedJSFreePtr<JSErrorReport> rep;
+ if (report)
+ rep = CopyErrorReport(cx, report);
+
+ RootedObject obj(cx,
+ js::ErrorObject::create(cx, JSEXN_TYPEERR, stack, fileName,
+ lineNumber, columnNumber, &rep, message));
+ if (!obj)
+ return false;
+
+ rval.setObject(*obj);
+ return true;
+}