aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2014-06-20 09:28:59 +0100
committerJosh Matthews <josh@joshmatthews.net>2014-06-20 09:28:59 +0100
commit9eff8b458fc4e1c1f6e4798a1bf2e22728a2cc6f (patch)
tree2c4ce43734e82814ab32a657324c33632b3966ac /src
parent32025fd2e5e752a08fb50a0d5879b9ddb4f59050 (diff)
parent5a1ed6396ecd312e57f0b3c7e27bdff9948386ed (diff)
downloadservo-9eff8b458fc4e1c1f6e4798a1bf2e22728a2cc6f.tar.gz
servo-9eff8b458fc4e1c1f6e4798a1bf2e22728a2cc6f.zip
Merge pull request #2668 from Ms2ger/CreateInterfaceObjects-failures
Handle JSAPI OOM failures by task failure as soon as possible.
Diffstat (limited to 'src')
-rw-r--r--src/components/script/dom/bindings/codegen/CodegenRust.py7
-rw-r--r--src/components/script/dom/bindings/utils.rs82
2 files changed, 28 insertions, 61 deletions
diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py
index 37dde04973d..075f1096769 100644
--- a/src/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/src/components/script/dom/bindings/codegen/CodegenRust.py
@@ -1877,10 +1877,8 @@ class CGCreateInterfaceObjectsMethod(CGAbstractMethod):
# if we don't need to create anything, why are we generating this?
assert needInterfaceObject or needInterfacePrototypeObject
- getParentProto = ("let parentProto: *mut JSObject = %s;\n" +
- "if parentProto.is_null() {\n" +
- " return ptr::mut_null();\n" +
- "}\n") % getParentProto
+ getParentProto = ("let parentProto: *mut JSObject = %s;\n"
+ "assert!(parentProto.is_not_null());\n") % getParentProto
if self.descriptor.interface.ctor():
constructHook = CONSTRUCT_HOOK_NAME
@@ -1953,6 +1951,7 @@ class CGGetPerInterfaceObject(CGAbstractMethod):
let cachedObject: *mut JSObject = *protoOrIfaceArray.offset(%s as int);
if cachedObject.is_null() {
let tmp: *mut JSObject = CreateInterfaceObjects(aCx, aGlobal, aReceiver);
+ assert!(tmp.is_not_null());
*protoOrIfaceArray.offset(%s as int) = tmp;
tmp
} else {
diff --git a/src/components/script/dom/bindings/utils.rs b/src/components/script/dom/bindings/utils.rs
index ab81ed2c8fc..6b57c6be382 100644
--- a/src/components/script/dom/bindings/utils.rs
+++ b/src/components/script/dom/bindings/utils.rs
@@ -230,9 +230,6 @@ pub fn CreateInterfaceObjects2(cx: *mut JSContext, global: *mut JSObject, receiv
proto = CreateInterfacePrototypeObject(cx, global, protoProto,
protoClass, methods,
properties, constants);
- if proto.is_null() {
- return ptr::mut_null();
- }
unsafe {
JS_SetReservedSlot(proto, DOM_PROTO_INSTANCE_CLASS_SLOT,
@@ -247,9 +244,6 @@ pub fn CreateInterfaceObjects2(cx: *mut JSContext, global: *mut JSObject, receiv
constructor, ctorNargs, proto,
staticMethods, constants, s)
});
- if interface.is_null() {
- return ptr::mut_null();
- }
}
if protoClass.is_not_null() {
@@ -268,52 +262,40 @@ fn CreateInterfaceObject(cx: *mut JSContext, global: *mut JSObject, receiver: *m
unsafe {
let fun = JS_NewFunction(cx, constructorNative, ctorNargs,
JSFUN_CONSTRUCTOR, global, name);
- if fun.is_null() {
- return ptr::mut_null();
- }
+ assert!(fun.is_not_null());
let constructor = JS_GetFunctionObject(fun);
assert!(constructor.is_not_null());
match staticMethods {
- Some(staticMethods) => {
- if !DefineMethods(cx, constructor, staticMethods) {
- return ptr::mut_null();
- }
- },
+ Some(staticMethods) => DefineMethods(cx, constructor, staticMethods),
_ => (),
}
match constants {
- Some(constants) => {
- if !DefineConstants(cx, constructor, constants) {
- return ptr::mut_null();
- }
- },
+ Some(constants) => DefineConstants(cx, constructor, constants),
_ => (),
}
- if proto.is_not_null() && JS_LinkConstructorAndPrototype(cx, constructor, proto) == 0 {
- return ptr::mut_null();
+ if proto.is_not_null() {
+ assert!(JS_LinkConstructorAndPrototype(cx, constructor, proto) != 0);
}
let mut alreadyDefined = 0;
- if JS_AlreadyHasOwnProperty(cx, receiver, name, &mut alreadyDefined) == 0 {
- return ptr::mut_null();
- }
+ assert!(JS_AlreadyHasOwnProperty(cx, receiver, name, &mut alreadyDefined) != 0);
- if alreadyDefined == 0 &&
- JS_DefineProperty(cx, receiver, name, ObjectValue(&*constructor),
- None, None, 0) == 0 {
- return ptr::mut_null();
+ if alreadyDefined == 0 {
+ assert!(JS_DefineProperty(cx, receiver, name,
+ ObjectValue(&*constructor),
+ None, None, 0) != 0);
}
return constructor;
}
}
-fn DefineConstants(cx: *mut JSContext, obj: *mut JSObject, constants: &'static [ConstantSpec]) -> bool {
- constants.iter().all(|spec| {
+fn DefineConstants(cx: *mut JSContext, obj: *mut JSObject, constants: &'static [ConstantSpec]) {
+ for spec in constants.iter() {
let jsval = match spec.value {
NullVal => NullValue(),
IntVal(i) => Int32Value(i),
@@ -323,23 +305,23 @@ fn DefineConstants(cx: *mut JSContext, obj: *mut JSObject, constants: &'static [
VoidVal => UndefinedValue(),
};
unsafe {
- JS_DefineProperty(cx, obj, spec.name.as_ptr() as *libc::c_char,
- jsval, None, None,
- JSPROP_ENUMERATE | JSPROP_READONLY |
- JSPROP_PERMANENT) != 0
+ assert!(JS_DefineProperty(cx, obj, spec.name.as_ptr() as *libc::c_char,
+ jsval, None, None,
+ JSPROP_ENUMERATE | JSPROP_READONLY |
+ JSPROP_PERMANENT) != 0);
}
- })
+ }
}
-fn DefineMethods(cx: *mut JSContext, obj: *mut JSObject, methods: &'static [JSFunctionSpec]) -> bool {
+fn DefineMethods(cx: *mut JSContext, obj: *mut JSObject, methods: &'static [JSFunctionSpec]) {
unsafe {
- JS_DefineFunctions(cx, obj, methods.as_ptr()) != 0
+ assert!(JS_DefineFunctions(cx, obj, methods.as_ptr()) != 0);
}
}
-fn DefineProperties(cx: *mut JSContext, obj: *mut JSObject, properties: &'static [JSPropertySpec]) -> bool {
+fn DefineProperties(cx: *mut JSContext, obj: *mut JSObject, properties: &'static [JSPropertySpec]) {
unsafe {
- JS_DefineProperties(cx, obj, properties.as_ptr()) != 0
+ assert!(JS_DefineProperties(cx, obj, properties.as_ptr()) != 0);
}
}
@@ -350,34 +332,20 @@ fn CreateInterfacePrototypeObject(cx: *mut JSContext, global: *mut JSObject,
constants: Option<&'static [ConstantSpec]>) -> *mut JSObject {
unsafe {
let ourProto = JS_NewObjectWithUniqueType(cx, protoClass, parentProto, global);
- if ourProto.is_null() {
- return ptr::mut_null();
- }
+ assert!(ourProto.is_not_null());
match methods {
- Some(methods) => {
- if !DefineMethods(cx, ourProto, methods) {
- return ptr::mut_null();
- }
- },
+ Some(methods) => DefineMethods(cx, ourProto, methods),
_ => (),
}
match properties {
- Some(properties) => {
- if !DefineProperties(cx, ourProto, properties) {
- return ptr::mut_null();
- }
- },
+ Some(properties) => DefineProperties(cx, ourProto, properties),
_ => (),
}
match constants {
- Some(constants) => {
- if !DefineConstants(cx, ourProto, constants) {
- return ptr::mut_null();
- }
- },
+ Some(constants) => DefineConstants(cx, ourProto, constants),
_ => (),
}