mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 594455 Add assertions for defaultCompartments. r=jorendorff
This commit is contained in:
parent
faba5e7e52
commit
9aad841305
@ -1277,6 +1277,7 @@ private:
|
||||
JSObject *
|
||||
js_InitFunctionAndObjectClasses(JSContext *cx, JSObject *obj)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JSObject *fun_proto, *obj_proto;
|
||||
|
||||
/* If cx has no global object, use obj so prototypes can be found. */
|
||||
@ -1327,6 +1328,7 @@ js_InitFunctionAndObjectClasses(JSContext *cx, JSObject *obj)
|
||||
JS_PUBLIC_API(JSBool)
|
||||
JS_InitStandardClasses(JSContext *cx, JSObject *obj)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
|
||||
/*
|
||||
@ -2908,6 +2910,7 @@ JS_GetObjectId(JSContext *cx, JSObject *obj, jsid *idp)
|
||||
JS_PUBLIC_API(JSObject *)
|
||||
JS_NewGlobalObject(JSContext *cx, JSClass *clasp)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
JS_ASSERT(clasp->flags & JSCLASS_IS_GLOBAL);
|
||||
JSObject *obj = NewNonFunction<WithProto::Given>(cx, Valueify(clasp), NULL, NULL);
|
||||
@ -2947,6 +2950,7 @@ JS_NewCompartmentAndGlobalObject(JSContext *cx, JSClass *clasp, JSPrincipals *pr
|
||||
JS_PUBLIC_API(JSObject *)
|
||||
JS_NewObject(JSContext *cx, JSClass *jsclasp, JSObject *proto, JSObject *parent)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, proto, parent);
|
||||
|
||||
@ -2966,6 +2970,7 @@ JS_NewObject(JSContext *cx, JSClass *jsclasp, JSObject *proto, JSObject *parent)
|
||||
JS_PUBLIC_API(JSObject *)
|
||||
JS_NewObjectWithGivenProto(JSContext *cx, JSClass *jsclasp, JSObject *proto, JSObject *parent)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, proto, parent);
|
||||
|
||||
@ -3979,6 +3984,7 @@ JS_SetReservedSlot(JSContext *cx, JSObject *obj, uint32 index, jsval v)
|
||||
JS_PUBLIC_API(JSObject *)
|
||||
JS_NewArrayObject(JSContext *cx, jsint length, jsval *vector)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
/* NB: jsuint cast does ToUint32. */
|
||||
assertSameCompartment(cx, JSValueArray(vector, vector ? (jsuint)length : 0));
|
||||
@ -4080,6 +4086,7 @@ JS_PUBLIC_API(JSFunction *)
|
||||
JS_NewFunction(JSContext *cx, JSNative native, uintN nargs, uintN flags,
|
||||
JSObject *parent, const char *name)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JSAtom *atom;
|
||||
|
||||
CHECK_REQUEST(cx);
|
||||
@ -4255,6 +4262,7 @@ js_generic_native_method_dispatcher(JSContext *cx, uintN argc, Value *vp)
|
||||
JS_PUBLIC_API(JSBool)
|
||||
JS_DefineFunctions(JSContext *cx, JSObject *obj, JSFunctionSpec *fs)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
uintN flags;
|
||||
JSObject *ctor;
|
||||
JSFunction *fun;
|
||||
@ -4304,6 +4312,7 @@ JS_PUBLIC_API(JSFunction *)
|
||||
JS_DefineFunction(JSContext *cx, JSObject *obj, const char *name, JSNative call,
|
||||
uintN nargs, uintN attrs)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj);
|
||||
JSAtom *atom = js_Atomize(cx, name, strlen(name), 0);
|
||||
@ -4315,6 +4324,7 @@ JS_DefineUCFunction(JSContext *cx, JSObject *obj,
|
||||
const jschar *name, size_t namelen, JSNative call,
|
||||
uintN nargs, uintN attrs)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj);
|
||||
JSAtom *atom = js_AtomizeChars(cx, name, AUTO_NAMELEN(name, namelen), 0);
|
||||
@ -4359,6 +4369,7 @@ JS_CompileUCScriptForPrincipals(JSContext *cx, JSObject *obj, JSPrincipals *prin
|
||||
const jschar *chars, size_t length,
|
||||
const char *filename, uintN lineno)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj, principals);
|
||||
|
||||
@ -4377,6 +4388,7 @@ JS_PUBLIC_API(JSScript *)
|
||||
JS_CompileUCScript(JSContext *cx, JSObject *obj, const jschar *chars, size_t length,
|
||||
const char *filename, uintN lineno)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
return JS_CompileUCScriptForPrincipals(cx, obj, NULL, chars, length, filename, lineno);
|
||||
}
|
||||
|
||||
@ -4386,6 +4398,7 @@ JS_CompileScriptForPrincipals(JSContext *cx, JSObject *obj,
|
||||
const char *bytes, size_t length,
|
||||
const char *filename, uintN lineno)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
|
||||
jschar *chars = js_InflateString(cx, bytes, &length);
|
||||
@ -4400,6 +4413,7 @@ JS_PUBLIC_API(JSScript *)
|
||||
JS_CompileScript(JSContext *cx, JSObject *obj, const char *bytes, size_t length,
|
||||
const char *filename, uintN lineno)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
return JS_CompileScriptForPrincipals(cx, obj, NULL, bytes, length, filename, lineno);
|
||||
}
|
||||
|
||||
@ -4447,6 +4461,7 @@ JS_BufferIsCompilableUnit(JSContext *cx, JSObject *obj, const char *bytes, size_
|
||||
JS_PUBLIC_API(JSScript *)
|
||||
JS_CompileFile(JSContext *cx, JSObject *obj, const char *filename)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
FILE *fp;
|
||||
uint32 tcflags;
|
||||
JSScript *script;
|
||||
@ -4481,6 +4496,7 @@ JS_PUBLIC_API(JSScript *)
|
||||
JS_CompileFileHandleForPrincipals(JSContext *cx, JSObject *obj, const char *filename, FILE *file,
|
||||
JSPrincipals *principals)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
uint32 tcflags;
|
||||
JSScript *script;
|
||||
|
||||
@ -4500,12 +4516,14 @@ JS_CompileFileHandleForPrincipals(JSContext *cx, JSObject *obj, const char *file
|
||||
JS_PUBLIC_API(JSScript *)
|
||||
JS_CompileFileHandle(JSContext *cx, JSObject *obj, const char *filename, FILE *file)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
return JS_CompileFileHandleForPrincipals(cx, obj, filename, file, NULL);
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(JSObject *)
|
||||
JS_NewScriptObject(JSContext *cx, JSScript *script)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, script);
|
||||
if (!script)
|
||||
@ -4569,6 +4587,7 @@ JS_CompileUCFunctionForPrincipals(JSContext *cx, JSObject *obj,
|
||||
const jschar *chars, size_t length,
|
||||
const char *filename, uintN lineno)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JSFunction *fun;
|
||||
JSAtom *funAtom, *argAtom;
|
||||
uintN i;
|
||||
@ -4639,6 +4658,7 @@ JS_CompileUCFunction(JSContext *cx, JSObject *obj, const char *name,
|
||||
const jschar *chars, size_t length,
|
||||
const char *filename, uintN lineno)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
return JS_CompileUCFunctionForPrincipals(cx, obj, NULL, name, nargs, argnames,
|
||||
chars, length, filename, lineno);
|
||||
}
|
||||
@ -4650,6 +4670,7 @@ JS_CompileFunctionForPrincipals(JSContext *cx, JSObject *obj,
|
||||
const char *bytes, size_t length,
|
||||
const char *filename, uintN lineno)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
jschar *chars = js_InflateString(cx, bytes, &length);
|
||||
if (!chars)
|
||||
return NULL;
|
||||
@ -4666,6 +4687,7 @@ JS_CompileFunction(JSContext *cx, JSObject *obj, const char *name,
|
||||
const char *bytes, size_t length,
|
||||
const char *filename, uintN lineno)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
return JS_CompileFunctionForPrincipals(cx, obj, NULL, name, nargs, argnames, bytes, length,
|
||||
filename, lineno);
|
||||
}
|
||||
@ -4673,6 +4695,7 @@ JS_CompileFunction(JSContext *cx, JSObject *obj, const char *name,
|
||||
JS_PUBLIC_API(JSString *)
|
||||
JS_DecompileScript(JSContext *cx, JSScript *script, const char *name, uintN indent)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JSPrinter *jp;
|
||||
JSString *str;
|
||||
|
||||
@ -4695,6 +4718,7 @@ JS_DecompileScript(JSContext *cx, JSScript *script, const char *name, uintN inde
|
||||
JS_PUBLIC_API(JSString *)
|
||||
JS_DecompileFunction(JSContext *cx, JSFunction *fun, uintN indent)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, fun);
|
||||
return js_DecompileToString(cx, "JS_DecompileFunction", fun,
|
||||
@ -4706,6 +4730,7 @@ JS_DecompileFunction(JSContext *cx, JSFunction *fun, uintN indent)
|
||||
JS_PUBLIC_API(JSString *)
|
||||
JS_DecompileFunctionBody(JSContext *cx, JSFunction *fun, uintN indent)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, fun);
|
||||
return js_DecompileToString(cx, "JS_DecompileFunctionBody", fun,
|
||||
@ -4717,6 +4742,7 @@ JS_DecompileFunctionBody(JSContext *cx, JSFunction *fun, uintN indent)
|
||||
JS_PUBLIC_API(JSBool)
|
||||
JS_ExecuteScript(JSContext *cx, JSObject *obj, JSScript *script, jsval *rval)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JSBool ok;
|
||||
|
||||
CHECK_REQUEST(cx);
|
||||
@ -4747,6 +4773,7 @@ JS_EvaluateUCScriptForPrincipals(JSContext *cx, JSObject *obj,
|
||||
const char *filename, uintN lineno,
|
||||
jsval *rval)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JSScript *script;
|
||||
JSBool ok;
|
||||
|
||||
@ -4770,6 +4797,7 @@ JS_PUBLIC_API(JSBool)
|
||||
JS_EvaluateUCScript(JSContext *cx, JSObject *obj, const jschar *chars, uintN length,
|
||||
const char *filename, uintN lineno, jsval *rval)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
return JS_EvaluateUCScriptForPrincipals(cx, obj, NULL, chars, length, filename, lineno, rval);
|
||||
}
|
||||
|
||||
@ -4779,6 +4807,7 @@ JS_EvaluateScriptForPrincipals(JSContext *cx, JSObject *obj, JSPrincipals *princ
|
||||
const char *bytes, uintN nbytes,
|
||||
const char *filename, uintN lineno, jsval *rval)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
size_t length = nbytes;
|
||||
jschar *chars = js_InflateString(cx, bytes, &length);
|
||||
if (!chars)
|
||||
@ -4793,6 +4822,7 @@ JS_PUBLIC_API(JSBool)
|
||||
JS_EvaluateScript(JSContext *cx, JSObject *obj, const char *bytes, uintN nbytes,
|
||||
const char *filename, uintN lineno, jsval *rval)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
return JS_EvaluateScriptForPrincipals(cx, obj, NULL, bytes, nbytes, filename, lineno, rval);
|
||||
}
|
||||
|
||||
@ -4800,6 +4830,7 @@ JS_PUBLIC_API(JSBool)
|
||||
JS_CallFunction(JSContext *cx, JSObject *obj, JSFunction *fun, uintN argc, jsval *argv,
|
||||
jsval *rval)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JSBool ok;
|
||||
|
||||
CHECK_REQUEST(cx);
|
||||
@ -4813,6 +4844,7 @@ JS_PUBLIC_API(JSBool)
|
||||
JS_CallFunctionName(JSContext *cx, JSObject *obj, const char *name, uintN argc, jsval *argv,
|
||||
jsval *rval)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj, JSValueArray(argv, argc));
|
||||
|
||||
@ -4829,6 +4861,7 @@ JS_PUBLIC_API(JSBool)
|
||||
JS_CallFunctionValue(JSContext *cx, JSObject *obj, jsval fval, uintN argc, jsval *argv,
|
||||
jsval *rval)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JSBool ok;
|
||||
|
||||
CHECK_REQUEST(cx);
|
||||
|
@ -67,6 +67,11 @@ JS_ALWAYS_INLINE T *
|
||||
NewFinalizableGCThing(JSContext *cx, unsigned thingKind)
|
||||
{
|
||||
JS_ASSERT(thingKind < js::gc::FINALIZE_LIMIT);
|
||||
#ifdef JS_THREADSAFE
|
||||
JS_ASSERT_IF((cx->compartment == cx->runtime->defaultCompartment),
|
||||
(thingKind == js::gc::FINALIZE_STRING) ||
|
||||
(thingKind == js::gc::FINALIZE_SHORT_STRING));
|
||||
#endif
|
||||
|
||||
METER(cx->compartment->compartmentStats[thingKind].alloc++);
|
||||
do {
|
||||
|
@ -69,12 +69,19 @@ JS_Assert(const char *s, const char *file, JSIntn ln);
|
||||
|
||||
#define JS_ALWAYS_TRUE(expr) JS_ASSERT(expr)
|
||||
|
||||
# ifdef JS_THREADSAFE
|
||||
# define JS_THREADSAFE_ASSERT(expr) JS_ASSERT(expr)
|
||||
# else
|
||||
# define JS_THREADSAFE_ASSERT(expr) ((void) 0)
|
||||
# endif
|
||||
|
||||
#else
|
||||
|
||||
#define JS_ASSERT(expr) ((void) 0)
|
||||
#define JS_ASSERT_IF(cond,expr) ((void) 0)
|
||||
#define JS_NOT_REACHED(reason)
|
||||
#define JS_ALWAYS_TRUE(expr) ((void) (expr))
|
||||
#define JS_THREADSAFE_ASSERT(expr) ((void) 0)
|
||||
|
||||
#endif /* defined(DEBUG) */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user