aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/bindings/callback.rs12
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py172
-rw-r--r--components/script/dom/bindings/conversions.rs22
-rw-r--r--components/script/dom/bindings/error.rs20
-rw-r--r--components/script/dom/bindings/proxyhandler.rs35
-rw-r--r--components/script/dom/bindings/structuredclone.rs4
-rw-r--r--components/script/dom/bindings/utils.rs94
-rw-r--r--components/script/dom/browsercontext.rs47
-rw-r--r--components/script/dom/customevent.rs3
-rw-r--r--components/script/dom/errorevent.rs7
-rw-r--r--components/script/dom/eventtarget.rs4
-rw-r--r--components/script/dom/messageevent.rs7
-rw-r--r--components/script/dom/window.rs6
-rw-r--r--components/script/dom/xmlhttprequest.rs8
-rw-r--r--components/script/lib.rs3
-rw-r--r--components/script/script_task.rs2
-rw-r--r--components/script/timers.rs5
17 files changed, 231 insertions, 220 deletions
diff --git a/components/script/dom/bindings/callback.rs b/components/script/dom/bindings/callback.rs
index 88fafd1188a..a879e469e27 100644
--- a/components/script/dom/bindings/callback.rs
+++ b/components/script/dom/bindings/callback.rs
@@ -122,13 +122,13 @@ impl CallbackInterface {
let obj = RootedObject::new(cx, self.callback());
unsafe {
let c_name = CString::new(name).unwrap();
- if JS_GetProperty(cx, obj.handle(), c_name.as_ptr(),
- callable.handle_mut()) == 0 {
+ if !JS_GetProperty(cx, obj.handle(), c_name.as_ptr(),
+ callable.handle_mut()) {
return Err(Error::JSFailed);
}
if !callable.ptr.is_object() ||
- IsCallable(callable.ptr.to_object()) == 0 {
+ !IsCallable(callable.ptr.to_object()) {
return Err(Error::Type(
format!("The value of the {} property is not callable", name)));
}
@@ -145,7 +145,7 @@ pub fn wrap_call_this_object<T: Reflectable>(cx: *mut JSContext,
assert!(!rval.get().is_null());
unsafe {
- if JS_WrapObject(cx, rval) == 0 {
+ if !JS_WrapObject(cx, rval) {
rval.set(ptr::null_mut());
}
}
@@ -198,11 +198,11 @@ impl Drop for CallSetup {
unsafe { JS_LeaveCompartment(self.cx, self.old_compartment); }
let need_to_deal_with_exception =
self.handling == ExceptionHandling::Report &&
- unsafe { JS_IsExceptionPending(self.cx) } != 0;
+ unsafe { JS_IsExceptionPending(self.cx) };
if need_to_deal_with_exception {
unsafe {
let old_global = RootedObject::new(self.cx, self.exception_compartment.ptr);
- let saved = JS_SaveFrameChain(self.cx) != 0;
+ let saved = JS_SaveFrameChain(self.cx);
{
let _ac = JSAutoCompartment::new(self.cx, old_global.ptr);
JS_ReportPendingException(self.cx);
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index 00df29230c3..9c5592c67b2 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -341,7 +341,7 @@ class CGMethodCall(CGThing):
code = (
"if argc < %d {\n"
" throw_type_error(cx, \"Not enough arguments to %s.\");\n"
- " return JSFalse;\n"
+ " return false;\n"
"}" % (requiredArgs, methodName))
self.cgRoot.prepend(
CGWrapper(CGGeneric(code), pre="\n", post="\n"))
@@ -514,11 +514,11 @@ class CGMethodCall(CGThing):
CGSwitch("argcount",
argCountCases,
CGGeneric("throw_type_error(cx, \"Not enough arguments to %s.\");\n"
- "return JSFalse;" % methodName)))
+ "return false;" % methodName)))
# XXXjdm Avoid unreachable statement warnings
# overloadCGThings.append(
# CGGeneric('panic!("We have an always-returning default case");\n'
- # 'return JSFalse;'))
+ # 'return false;'))
self.cgRoot = CGWrapper(CGList(overloadCGThings, "\n"),
pre="\n")
@@ -659,7 +659,7 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
# failureCode will prevent pending exceptions from being set in cases when
# they really should be!
if exceptionCode is None:
- exceptionCode = "return JSFalse;"
+ exceptionCode = "return false;"
needsRooting = typeNeedsRooting(type, descriptorProvider)
@@ -890,7 +890,7 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
if invalidEnumValueFatal:
handleInvalidEnumValueCode = exceptionCode
else:
- handleInvalidEnumValueCode = "return JSTrue;"
+ handleInvalidEnumValueCode = "return true;"
transmute = "mem::transmute(index)"
if isMember == 'Dictionary':
@@ -943,7 +943,7 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
else:
template = conversion
else:
- template = CGIfElseWrapper("IsCallable(${val}.get().to_object()) != 0",
+ template = CGIfElseWrapper("IsCallable(${val}.get().to_object())",
conversion,
onFailureNotCallable(failureCode)).define()
template = wrapObjectTemplate(
@@ -1019,7 +1019,7 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
declType = CGGeneric(typeName)
template = ("match %s::new(cx, ${val}) {\n"
" Ok(dictionary) => dictionary,\n"
- " Err(_) => return JSFalse,\n"
+ " Err(_) => return false,\n"
"}" % typeName)
return handleOptional(template, declType, handleDefaultNull("%s::empty(cx)" % typeName))
@@ -1044,7 +1044,7 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
conversionBehavior = "()"
if failureCode is None:
- failureCode = 'return JSFalse'
+ failureCode = 'return false'
declType = CGGeneric(builtinNames[type.tag()])
if type.nullable():
@@ -1223,7 +1223,7 @@ class CGArgumentConverter(CGThing):
return self.converter.define()
-def wrapForType(jsvalRef, result='result', successCode='return JSTrue;', pre=''):
+def wrapForType(jsvalRef, result='result', successCode='return true;', pre=''):
"""
Reflect a Rust value into JS.
@@ -1767,7 +1767,7 @@ class CGDOMJSClass(CGThing):
def define(self):
traceHook = 'Some(%s)' % TRACE_HOOK_NAME
if self.descriptor.isGlobal():
- traceHook = "Some(js::jsapi::_Z24JS_GlobalObjectTraceHookP8JSTracerP8JSObject)"
+ traceHook = "Some(js::jsapi::JS_GlobalObjectTraceHook)"
flags = "JSCLASS_IS_GLOBAL | JSCLASS_DOM_GLOBAL"
slots = "JSCLASS_GLOBAL_SLOT_COUNT + 1"
else:
@@ -1807,7 +1807,7 @@ static Class: DOMJSClass = DOMJSClass {
ext: js::jsapi::ClassExtension {
outerObject: %s,
innerObject: None,
- isWrappedNative: 0,
+ isWrappedNative: false,
weakmapKeyDelegateOp: None,
objectMovedOp: None,
},
@@ -2687,7 +2687,7 @@ class CGPerSignatureCall(CGThing):
errorResult = None
if self.isFallible():
- errorResult = " JSFalse"
+ errorResult = " false"
cgThings.append(CGCallGenerator(
errorResult,
@@ -2810,7 +2810,7 @@ class CGSetterCall(CGPerSignatureCall):
def wrap_return_value(self):
# We have no return value
- return "\nreturn JSTrue;"
+ return "\nreturn true;"
def getArgc(self):
return "1"
@@ -2830,7 +2830,7 @@ class CGAbstractStaticBindingMethod(CGAbstractMethod):
Argument('libc::c_uint', 'argc'),
Argument('*mut JSVal', 'vp'),
]
- CGAbstractMethod.__init__(self, descriptor, name, "u8", args, extern=True)
+ CGAbstractMethod.__init__(self, descriptor, name, "bool", args, extern=True)
def definition_body(self):
preamble = CGGeneric("""\
@@ -2853,7 +2853,7 @@ class CGSpecializedMethod(CGAbstractExternMethod):
args = [Argument('*mut JSContext', 'cx'), Argument('HandleObject', '_obj'),
Argument('*const %s' % descriptor.concreteType, 'this'),
Argument('*const JSJitMethodCallArgs', 'args')]
- CGAbstractExternMethod.__init__(self, descriptor, name, 'u8', args)
+ CGAbstractExternMethod.__init__(self, descriptor, name, 'bool', args)
def definition_body(self):
nativeName = CGSpecializedMethod.makeNativeName(self.descriptor,
@@ -2862,7 +2862,7 @@ class CGSpecializedMethod(CGAbstractExternMethod):
self.descriptor, self.method),
pre="let this = &*this;\n"
"let args = &*args;\n"
- "let argc = args.argc_;\n")
+ "let argc = args._base.argc_;\n")
@staticmethod
def makeNativeName(descriptor, method):
@@ -2902,7 +2902,7 @@ class CGSpecializedGetter(CGAbstractExternMethod):
Argument('HandleObject', '_obj'),
Argument('*const %s' % descriptor.concreteType, 'this'),
Argument('JSJitGetterCallArgs', 'args')]
- CGAbstractExternMethod.__init__(self, descriptor, name, "u8", args)
+ CGAbstractExternMethod.__init__(self, descriptor, name, "bool", args)
def definition_body(self):
nativeName = CGSpecializedGetter.makeNativeName(self.descriptor,
@@ -2957,7 +2957,7 @@ class CGSpecializedSetter(CGAbstractExternMethod):
Argument('HandleObject', 'obj'),
Argument('*const %s' % descriptor.concreteType, 'this'),
Argument('JSJitSetterCallArgs', 'args')]
- CGAbstractExternMethod.__init__(self, descriptor, name, "u8", args)
+ CGAbstractExternMethod.__init__(self, descriptor, name, "bool", args)
def definition_body(self):
nativeName = CGSpecializedSetter.makeNativeName(self.descriptor,
@@ -2991,7 +2991,7 @@ class CGStaticSetter(CGAbstractStaticBindingMethod):
"let args = CallArgs::from_vp(vp, argc);\n"
"if argc == 0 {\n"
" throw_type_error(cx, \"Not enough arguments to %s setter.\");\n"
- " return JSFalse;\n"
+ " return false;\n"
"}" % self.attr.identifier.name)
call = CGSetterCall(["global.r()"], self.attr.type, nativeName, self.descriptor,
self.attr)
@@ -3013,12 +3013,12 @@ class CGSpecializedForwardingSetter(CGSpecializedSetter):
assert all(ord(c) < 128 for c in forwardToAttrName)
return CGGeneric("""\
let mut v = RootedValue::new(cx, UndefinedValue());
-if JS_GetProperty(cx, obj, %s as *const u8 as *const libc::c_char, v.handle_mut()) == 0 {
- return JSFalse;
+if !JS_GetProperty(cx, obj, %s as *const u8 as *const libc::c_char, v.handle_mut()) {
+ return false;
}
if !v.ptr.is_object() {
throw_type_error(cx, "Value.%s is not an object.");
- return JSFalse;
+ return false;
}
let target_obj = RootedObject::new(cx, v.ptr.to_object());
JS_SetProperty(cx, target_obj.handle(), %s as *const u8 as *const libc::c_char, args.get(0))
@@ -3051,18 +3051,21 @@ class CGMemberJITInfo(CGThing):
initializer = fill(
"""
JSJitInfo {
- _bindgen_data_1_: ${opName} as *const ::libc::c_void,
+ call: ${opName} as *const ::libc::c_void,
protoID: PrototypeList::ID::${name} as u16,
depth: ${depth},
- _bitfield_1: ((JSJitInfo_OpType::${opType} as u32) << 0) |
- ((JSJitInfo_AliasSet::${aliasSet} as u32) << 4) |
- ((JSValueType::${returnType} as u32) << 8) |
- ((${isInfallible} as u32) << 16) |
- ((${isMovable} as u32) << 17) |
- ((${isAlwaysInSlot} as u32) << 18) |
- ((${isLazilyCachedInSlot} as u32) << 19) |
- ((${isTypedMethod} as u32) << 20) |
- ((${slotIndex} as u32) << 21)
+ _bitfield_1:
+ JSJitInfo::new_bitfield_1(
+ OpType::${opType} as u8,
+ AliasSet::${aliasSet} as u8,
+ JSValueType::${returnType} as u8,
+ ${isInfallible},
+ ${isMovable},
+ ${isAlwaysInSlot},
+ ${isLazilyCachedInSlot},
+ ${isTypedMethod},
+ ${slotIndex} as u16,
+ )
}
""",
opName=opName,
@@ -3953,7 +3956,7 @@ class CGProxySpecialOperation(CGPerSignatureCall):
argument = arguments[1]
info = getJSToNativeConversionInfo(
argument.type, descriptor, treatNullAs=argument.treatNullAs,
- exceptionCode="return JSFalse;")
+ exceptionCode="return false;")
template = info.template
declType = info.declType
needsRooting = info.needsRooting
@@ -4082,7 +4085,7 @@ class CGDOMJSProxyHandler_getOwnPropertyDescriptor(CGAbstractExternMethod):
Argument('HandleId', 'id'),
Argument('MutableHandle<JSPropertyDescriptor>', 'desc')]
CGAbstractExternMethod.__init__(self, descriptor, "getOwnPropertyDescriptor",
- "u8", args)
+ "bool", args)
self.descriptor = descriptor
def getBody(self):
@@ -4097,7 +4100,7 @@ class CGDOMJSProxyHandler_getOwnPropertyDescriptor(CGAbstractExternMethod):
readonly = toStringBool(self.descriptor.operations['IndexedSetter'] is None)
fillDescriptor = ("desc.get().value = result_root.ptr;\n"
"fill_property_descriptor(&mut *desc.ptr, *proxy.ptr, %s);\n"
- "return JSTrue;" % readonly)
+ "return true;" % readonly)
templateValues = {
'jsvalRef': 'result_root.handle_mut()',
'successCode': fillDescriptor,
@@ -4114,7 +4117,7 @@ class CGDOMJSProxyHandler_getOwnPropertyDescriptor(CGAbstractExternMethod):
readonly = toStringBool(self.descriptor.operations['NamedSetter'] is None)
fillDescriptor = ("desc.get().value = result_root.ptr;\n"
"fill_property_descriptor(&mut *desc.ptr, *proxy.ptr, %s);\n"
- "return JSTrue;" % readonly)
+ "return true;" % readonly)
templateValues = {
'jsvalRef': 'result_root.handle_mut()',
'successCode': fillDescriptor,
@@ -4124,7 +4127,7 @@ class CGDOMJSProxyHandler_getOwnPropertyDescriptor(CGAbstractExternMethod):
# ResolveOwnProperty or EnumerateOwnProperties filter out named
# properties that shadow prototype properties.
namedGet = ("\n" +
- "if RUST_JSID_IS_STRING(id) != 0 && !has_property_on_prototype(cx, proxy, id) {\n" +
+ "if RUST_JSID_IS_STRING(id) && !has_property_on_prototype(cx, proxy, id) {\n" +
CGIndenter(CGProxyNamedGetter(self.descriptor, templateValues)).define() + "\n" +
"}\n")
else:
@@ -4134,18 +4137,18 @@ class CGDOMJSProxyHandler_getOwnPropertyDescriptor(CGAbstractExternMethod):
let expando = RootedObject::new(cx, get_expando_object(proxy));
//if (!xpc::WrapperFactory::IsXrayWrapper(proxy) && (expando = GetExpandoObject(proxy))) {
if !expando.ptr.is_null() {
- if JS_GetPropertyDescriptorById(cx, expando.handle(), id, desc) == 0 {
- return JSFalse;
+ if !JS_GetPropertyDescriptorById(cx, expando.handle(), id, desc) {
+ return false;
}
if !desc.get().obj.is_null() {
// Pretend the property lives on the wrapper.
desc.get().obj = *proxy.ptr;
- return JSTrue;
+ return true;
}
}
""" + namedGet + """\
desc.get().obj = ptr::null_mut();
-return JSTrue;"""
+return true;"""
def definition_body(self):
return CGGeneric(self.getBody())
@@ -4158,7 +4161,7 @@ class CGDOMJSProxyHandler_defineProperty(CGAbstractExternMethod):
Argument('HandleId', 'id'),
Argument('Handle<JSPropertyDescriptor>', 'desc'),
Argument('*mut ObjectOpResult', 'opresult')]
- CGAbstractExternMethod.__init__(self, descriptor, "defineProperty", "u8", args)
+ CGAbstractExternMethod.__init__(self, descriptor, "defineProperty", "bool", args)
self.descriptor = descriptor
def getBody(self):
@@ -4171,25 +4174,25 @@ class CGDOMJSProxyHandler_defineProperty(CGAbstractExternMethod):
" let this = UnwrapProxy(proxy);\n" +
" let this = &*this;\n" +
CGIndenter(CGProxyIndexedSetter(self.descriptor)).define() +
- " return JSTrue;\n" +
+ " return true;\n" +
"}\n")
elif self.descriptor.operations['IndexedGetter']:
set += ("if get_array_index_from_id(cx, id).is_some() {\n" +
- " return JSFalse;\n" +
+ " return false;\n" +
" //return ThrowErrorMessage(cx, MSG_NO_PROPERTY_SETTER, \"%s\");\n" +
"}\n") % self.descriptor.name
namedSetter = self.descriptor.operations['NamedSetter']
if namedSetter:
- set += ("if RUST_JSID_IS_STRING(id) != 0 {\n" +
+ set += ("if RUST_JSID_IS_STRING(id) {\n" +
CGIndenter(CGProxyNamedSetter(self.descriptor)).define() +
" (*opresult).code_ = 0; /* SpecialCodes::OkCode */\n" +
- " return JSTrue;\n" +
+ " return true;\n" +
"} else {\n" +
- " return JSFalse;\n" +
+ " return false;\n" +
"}\n")
else:
- set += ("if RUST_JSID_IS_STRING(id) != 0 {\n" +
+ set += ("if RUST_JSID_IS_STRING(id) {\n" +
CGIndenter(CGProxyNamedGetter(self.descriptor)).define() +
" if (found) {\n"
# TODO(Issue 5876)
@@ -4197,10 +4200,10 @@ class CGDOMJSProxyHandler_defineProperty(CGAbstractExternMethod):
" // ? opresult.succeed()\n" +
" // : ThrowErrorMessage(cx, MSG_NO_NAMED_SETTER, \"${name}\");\n" +
" (*opresult).code_ = 0; /* SpecialCodes::OkCode */\n" +
- " return JSTrue;\n" +
+ " return true;\n" +
" }\n" +
" (*opresult).code_ = 0; /* SpecialCodes::OkCode */\n" +
- " return JSTrue;\n"
+ " return true;\n"
"}\n") % (self.descriptor.name, self.descriptor.name)
set += "return proxyhandler::define_property(%s);" % ", ".join(a.name for a in self.args)
return set
@@ -4214,14 +4217,14 @@ class CGDOMJSProxyHandler_delete(CGAbstractExternMethod):
args = [Argument('*mut JSContext', 'cx'), Argument('HandleObject', 'proxy'),
Argument('HandleId', 'id'),
Argument('*mut ObjectOpResult', 'res')]
- CGAbstractExternMethod.__init__(self, descriptor, "delete", "u8", args)
+ CGAbstractExternMethod.__init__(self, descriptor, "delete", "bool", args)
self.descriptor = descriptor
def getBody(self):
set = ""
if self.descriptor.operations['NamedDeleter']:
set += CGProxyNamedDeleter(self.descriptor).define()
- set += "return proxyhandler::delete(%s) as u8;" % ", ".join(a.name for a in self.args)
+ set += "return proxyhandler::delete(%s);" % ", ".join(a.name for a in self.args)
return set
def definition_body(self):
@@ -4233,7 +4236,7 @@ class CGDOMJSProxyHandler_ownPropertyKeys(CGAbstractExternMethod):
args = [Argument('*mut JSContext', 'cx'),
Argument('HandleObject', 'proxy'),
Argument('*mut AutoIdVector', 'props')]
- CGAbstractExternMethod.__init__(self, descriptor, "own_property_keys", "u8", args)
+ CGAbstractExternMethod.__init__(self, descriptor, "own_property_keys", "bool", args)
self.descriptor = descriptor
def getBody(self):
@@ -4272,7 +4275,7 @@ class CGDOMJSProxyHandler_ownPropertyKeys(CGAbstractExternMethod):
GetPropertyKeys(cx, rooted_expando.handle(), JSITER_OWNONLY | JSITER_HIDDEN | JSITER_SYMBOLS, props);
}
- return JSTrue;
+ return true;
""")
return body
@@ -4284,8 +4287,8 @@ class CGDOMJSProxyHandler_ownPropertyKeys(CGAbstractExternMethod):
class CGDOMJSProxyHandler_hasOwn(CGAbstractExternMethod):
def __init__(self, descriptor):
args = [Argument('*mut JSContext', 'cx'), Argument('HandleObject', 'proxy'),
- Argument('HandleId', 'id'), Argument('*mut u8', 'bp')]
- CGAbstractExternMethod.__init__(self, descriptor, "hasOwn", "u8", args)
+ Argument('HandleId', 'id'), Argument('*mut bool', 'bp')]
+ CGAbstractExternMethod.__init__(self, descriptor, "hasOwn", "bool", args)
self.descriptor = descriptor
def getBody(self):
@@ -4296,18 +4299,18 @@ class CGDOMJSProxyHandler_hasOwn(CGAbstractExternMethod):
" let this = UnwrapProxy(proxy);\n" +
" let this = &*this;\n" +
CGIndenter(CGProxyIndexedGetter(self.descriptor)).define() + "\n" +
- " *bp = found as u8;\n" +
- " return JSTrue;\n" +
+ " *bp = found;\n" +
+ " return true;\n" +
"}\n\n")
else:
indexed = ""
namedGetter = self.descriptor.operations['NamedGetter']
if namedGetter:
- named = ("if RUST_JSID_IS_STRING(id) != 0 && !has_property_on_prototype(cx, proxy, id) {\n" +
+ named = ("if RUST_JSID_IS_STRING(id) && !has_property_on_prototype(cx, proxy, id) {\n" +
CGIndenter(CGProxyNamedGetter(self.descriptor)).define() + "\n" +
- " *bp = found as u8;\n"
- " return JSTrue;\n"
+ " *bp = found;\n"
+ " return true;\n"
"}\n" +
"\n")
else:
@@ -4316,16 +4319,16 @@ class CGDOMJSProxyHandler_hasOwn(CGAbstractExternMethod):
return indexed + """\
let expando = RootedObject::new(cx, get_expando_object(proxy));
if !expando.ptr.is_null() {
- let mut b: u8 = 1;
- let ok = JS_HasPropertyById(cx, expando.handle(), id, &mut b) != 0;
- *bp = (b != 0) as u8;
- if !ok || *bp != 0 {
- return ok as u8;
+ let mut b = true;
+ let ok = JS_HasPropertyById(cx, expando.handle(), id, &mut b);
+ *bp = b;
+ if !ok || *bp {
+ return ok;
}
}
""" + named + """\
-*bp = JSFalse;
-return JSTrue;"""
+*bp = false;
+return true;"""
def definition_body(self):
return CGGeneric(self.getBody())
@@ -4336,26 +4339,26 @@ class CGDOMJSProxyHandler_get(CGAbstractExternMethod):
args = [Argument('*mut JSContext', 'cx'), Argument('HandleObject', 'proxy'),
Argument('HandleObject', '_receiver'), Argument('HandleId', 'id'),
Argument('MutableHandleValue', 'vp')]
- CGAbstractExternMethod.__init__(self, descriptor, "get", "u8", args)
+ CGAbstractExternMethod.__init__(self, descriptor, "get", "bool", args)
self.descriptor = descriptor
def getBody(self):
getFromExpando = """\
let expando = RootedObject::new(cx, get_expando_object(proxy));
if !expando.ptr.is_null() {
- let mut hasProp = 0;
- if JS_HasPropertyById(cx, expando.handle(), id, &mut hasProp) == 0 {
- return JSFalse;
+ let mut hasProp = false;
+ if !JS_HasPropertyById(cx, expando.handle(), id, &mut hasProp) {
+ return false;
}
- if hasProp != 0 {
- return (JS_GetPropertyById(cx, expando.handle(), id, vp) != 0) as u8;
+ if hasProp {
+ return JS_GetPropertyById(cx, expando.handle(), id, vp);
}
}"""
templateValues = {
'jsvalRef': 'vp',
- 'successCode': 'return JSTrue;',
+ 'successCode': 'return true;',
}
indexedGetter = self.descriptor.operations['IndexedGetter']
@@ -4377,7 +4380,7 @@ if !expando.ptr.is_null() {
namedGetter = self.descriptor.operations['NamedGetter']
if namedGetter:
- getNamed = ("if RUST_JSID_IS_STRING(id) != 0 {\n" +
+ getNamed = ("if RUST_JSID_IS_STRING(id) {\n" +
CGIndenter(CGProxyNamedGetter(self.descriptor, templateValues)).define() +
"}\n")
else:
@@ -4390,15 +4393,15 @@ if !expando.ptr.is_null() {
%s
let mut found = false;
if !get_property_on_prototype(cx, proxy, id, &mut found, vp) {
- return JSFalse;
+ return false;
}
if found {
- return JSTrue;
+ return true;
}
%s
*vp.ptr = UndefinedValue();
-return JSTrue;""" % (getIndexedOrExpando, getNamed)
+return true;""" % (getIndexedOrExpando, getNamed)
def definition_body(self):
return CGGeneric(self.getBody())
@@ -4479,7 +4482,7 @@ class CGClassConstructHook(CGAbstractExternMethod):
def __init__(self, descriptor):
args = [Argument('*mut JSContext', 'cx'), Argument('u32', 'argc'), Argument('*mut JSVal', 'vp')]
CGAbstractExternMethod.__init__(self, descriptor, CONSTRUCT_HOOK_NAME,
- 'u8', args)
+ 'bool', args)
self._ctor = self.descriptor.interface.ctor()
def define(self):
@@ -4509,7 +4512,7 @@ class CGClassNameConstructHook(CGAbstractExternMethod):
CGAbstractExternMethod.__init__(self, descriptor,
CONSTRUCT_HOOK_NAME + "_" +
self._ctor.identifier.name,
- 'u8', args)
+ 'bool', args)
def definition_body(self):
preamble = CGGeneric("""\
@@ -5077,7 +5080,7 @@ class CGBindingRoot(CGThing):
'js::jsapi::{RootedValue, JSNativeWrapper, JSNative, JSObject, JSPropertyDescriptor}',
'js::jsapi::{RootedId, JS_InternString, RootedString, INTERNED_STRING_TO_JSID}',
'js::jsapi::{JSPropertySpec}',
- 'js::jsapi::{JSString, JSTracer, JSJitInfo, JSJitInfo_OpType, JSJitInfo_AliasSet}',
+ 'js::jsapi::{JSString, JSTracer, JSJitInfo, OpType, AliasSet}',
'js::jsapi::{MutableHandle, Handle, HandleId, JSType, JSValueType}',
'js::jsapi::{SymbolCode, ObjectOpResult, HandleValueArray}',
'js::jsapi::{JSJitGetterCallArgs, JSJitSetterCallArgs, JSJitMethodCallArgs, CallArgs}',
@@ -5092,7 +5095,6 @@ class CGBindingRoot(CGThing):
'js::glue::{RUST_JS_NumberValue, RUST_JSID_IS_STRING, int_to_jsid}',
'js::glue::AppendToAutoIdVector',
'js::rust::GCMethods',
- 'js::{JSTrue, JSFalse}',
'dom::bindings',
'dom::bindings::global::GlobalRef',
'dom::bindings::global::global_object_for_js_object',
@@ -5629,7 +5631,7 @@ class CallbackMethod(CallbackMember):
" elements_: ${argv}\n"
" }, rval.handle_mut())\n"
"};\n"
- "if ok == 0 {\n"
+ "if !ok {\n"
" return Err(JSFailed);\n"
"}\n").substitute(replacements)
@@ -5673,7 +5675,7 @@ class CallbackOperationBase(CallbackMethod):
if not self.singleOperation:
return 'JS::Rooted<JS::Value> callable(cx);\n' + getCallableFromProp
return (
- 'let isCallable = unsafe { IsCallable(self.parent.callback()) != 0 };\n'
+ 'let isCallable = unsafe { IsCallable(self.parent.callback()) };\n'
'let callable =\n' +
CGIndenter(
CGIfElseWrapper('isCallable',
diff --git a/components/script/dom/bindings/conversions.rs b/components/script/dom/bindings/conversions.rs
index 23105fa7810..725889ef099 100644
--- a/components/script/dom/bindings/conversions.rs
+++ b/components/script/dom/bindings/conversions.rs
@@ -186,7 +186,7 @@ impl ToJSValConvertible for () {
impl ToJSValConvertible for JSVal {
fn to_jsval(&self, cx: *mut JSContext, rval: MutableHandleValue) {
rval.set(*self);
- if unsafe { JS_WrapValue(cx, rval) } == 0 {
+ if unsafe { !JS_WrapValue(cx, rval) } {
panic!("JS_WrapValue failed.");
}
}
@@ -195,7 +195,7 @@ impl ToJSValConvertible for JSVal {
impl ToJSValConvertible for HandleValue {
fn to_jsval(&self, cx: *mut JSContext, rval: MutableHandleValue) {
rval.set(self.get());
- if unsafe { JS_WrapValue(cx, rval) } == 0 {
+ if unsafe { !JS_WrapValue(cx, rval) } {
panic!("JS_WrapValue failed.");
}
}
@@ -397,7 +397,7 @@ impl ToJSValConvertible for str {
let mut string_utf16: Vec<u16> = Vec::with_capacity(self.len());
unsafe {
string_utf16.extend(self.utf16_units());
- let jsstr = JS_NewUCStringCopyN(cx, string_utf16.as_ptr() as *const i16,
+ let jsstr = JS_NewUCStringCopyN(cx, string_utf16.as_ptr(),
string_utf16.len() as libc::size_t);
if jsstr.is_null() {
panic!("JS_NewUCStringCopyN failed");
@@ -426,7 +426,7 @@ pub enum StringificationBehavior {
/// contain valid UTF-16.
pub fn jsstring_to_str(cx: *mut JSContext, s: *mut JSString) -> DOMString {
let mut length = 0;
- let latin1 = unsafe { JS_StringHasLatin1Chars(s) != 0 };
+ let latin1 = unsafe { JS_StringHasLatin1Chars(s) };
if latin1 {
let chars = unsafe {
JS_GetLatin1StringCharsAndLength(cx, ptr::null(), s, &mut length)
@@ -479,7 +479,7 @@ pub fn jsstring_to_str(cx: *mut JSContext, s: *mut JSString) -> DOMString {
/// string, or if the string does not contain valid UTF-16.
pub fn jsid_to_str(cx: *mut JSContext, id: HandleId) -> DOMString {
unsafe {
- assert!(RUST_JSID_IS_STRING(id) != 0);
+ assert!(RUST_JSID_IS_STRING(id));
jsstring_to_str(cx, RUST_JSID_TO_STRING(id))
}
}
@@ -519,7 +519,7 @@ impl FromJSValConvertible for USVString {
debug!("ToString failed");
return Err(());
}
- let latin1 = unsafe { JS_StringHasLatin1Chars(jsstr) != 0 };
+ let latin1 = unsafe { JS_StringHasLatin1Chars(jsstr) };
if latin1 {
return Ok(USVString(jsstring_to_str(cx, jsstr)));
}
@@ -555,7 +555,7 @@ impl FromJSValConvertible for ByteString {
return Err(());
}
- let latin1 = unsafe { JS_StringHasLatin1Chars(string) != 0 };
+ let latin1 = unsafe { JS_StringHasLatin1Chars(string) };
if latin1 {
let mut length = 0;
let chars = unsafe {
@@ -591,7 +591,7 @@ impl ToJSValConvertible for Reflector {
let obj = self.get_jsobject().get();
assert!(!obj.is_null());
rval.set(ObjectValue(unsafe { &*obj }));
- if unsafe { JS_WrapValue(cx, rval) } == 0 {
+ if unsafe { !JS_WrapValue(cx, rval) } {
panic!("JS_WrapValue failed.");
}
}
@@ -670,14 +670,14 @@ pub unsafe fn private_from_proto_chain(mut obj: *mut JSObject,
proto_id: u16, proto_depth: u16)
-> Result<*const libc::c_void, ()> {
let dom_class = try!(get_dom_class(obj).or_else(|_| {
- if IsWrapper(obj) == 1 {
+ if IsWrapper(obj) {
debug!("found wrapper");
obj = UnwrapObject(obj, /* stopAtOuter = */ 0);
if obj.is_null() {
debug!("unwrapping security wrapper failed");
Err(())
} else {
- assert!(IsWrapper(obj) == 0);
+ assert!(!IsWrapper(obj));
debug!("unwrapped successfully");
get_dom_class(obj)
}
@@ -774,7 +774,7 @@ impl ToJSValConvertible for *mut JSObject {
fn to_jsval(&self, cx: *mut JSContext, rval: MutableHandleValue) {
rval.set(ObjectOrNullValue(*self));
unsafe {
- assert!(JS_WrapValue(cx, rval) != 0);
+ assert!(JS_WrapValue(cx, rval));
}
}
}
diff --git a/components/script/dom/bindings/error.rs b/components/script/dom/bindings/error.rs
index 9b2238e3ec0..3e9c2871a38 100644
--- a/components/script/dom/bindings/error.rs
+++ b/components/script/dom/bindings/error.rs
@@ -10,7 +10,7 @@ use dom::bindings::global::GlobalRef;
use dom::domexception::{DOMErrorName, DOMException};
use js::jsapi::JSAutoCompartment;
use js::jsapi::{JSContext, JSObject, RootedValue};
-use js::jsapi::{JSErrorFormatString, JSExnType, JS_ReportErrorNumber1};
+use js::jsapi::{JSErrorFormatString, JSExnType, JS_ReportErrorNumber};
use js::jsapi::{JS_IsExceptionPending, JS_ReportPendingException, JS_SetPendingException};
use js::jsapi::{JS_RestoreFrameChain, JS_SaveFrameChain};
use js::jsval::UndefinedValue;
@@ -105,22 +105,22 @@ pub fn throw_dom_exception(cx: *mut JSContext, global: GlobalRef,
Error::QuotaExceeded => DOMErrorName::QuotaExceededError,
Error::TypeMismatch => DOMErrorName::TypeMismatchError,
Error::Type(message) => {
- assert!(unsafe { JS_IsExceptionPending(cx) } == 0);
+ assert!(unsafe { !JS_IsExceptionPending(cx) });
throw_type_error(cx, &message);
return;
},
Error::Range(message) => {
- assert!(unsafe { JS_IsExceptionPending(cx) } == 0);
+ assert!(unsafe { !JS_IsExceptionPending(cx) });
throw_range_error(cx, &message);
return;
},
Error::JSFailed => {
- assert!(unsafe { JS_IsExceptionPending(cx) } == 1);
+ assert!(unsafe { JS_IsExceptionPending(cx) });
return;
}
};
- assert!(unsafe { JS_IsExceptionPending(cx) } == 0);
+ assert!(unsafe { !JS_IsExceptionPending(cx) });
let exception = DOMException::new(global, code);
let mut thrown = RootedValue::new(cx, UndefinedValue());
exception.to_jsval(cx, thrown.handle_mut());
@@ -132,13 +132,13 @@ pub fn throw_dom_exception(cx: *mut JSContext, global: GlobalRef,
/// Report a pending exception, thereby clearing it.
pub fn report_pending_exception(cx: *mut JSContext, obj: *mut JSObject) {
unsafe {
- if JS_IsExceptionPending(cx) != 0 {
+ if JS_IsExceptionPending(cx) {
let saved = JS_SaveFrameChain(cx);
{
let _ac = JSAutoCompartment::new(cx, obj);
JS_ReportPendingException(cx);
}
- if saved != 0 {
+ if saved {
JS_RestoreFrameChain(cx);
}
}
@@ -148,7 +148,7 @@ pub fn report_pending_exception(cx: *mut JSContext, obj: *mut JSObject) {
/// Throw an exception to signal that a `JSVal` can not be converted to any of
/// the types in an IDL union type.
pub fn throw_not_in_union(cx: *mut JSContext, names: &'static str) {
- assert!(unsafe { JS_IsExceptionPending(cx) } == 0);
+ assert!(unsafe { !JS_IsExceptionPending(cx) });
let error = format!("argument could not be converted to any of: {}", names);
throw_type_error(cx, &error);
}
@@ -156,7 +156,7 @@ pub fn throw_not_in_union(cx: *mut JSContext, names: &'static str) {
/// Throw an exception to signal that a `JSObject` can not be converted to a
/// given DOM type.
pub fn throw_invalid_this(cx: *mut JSContext, proto_id: u16) {
- debug_assert!(unsafe { JS_IsExceptionPending(cx) } == 0);
+ debug_assert!(unsafe { !JS_IsExceptionPending(cx) });
let error = format!("\"this\" object does not implement interface {}.",
proto_id_to_name(proto_id));
throw_type_error(cx, &error);
@@ -205,7 +205,7 @@ unsafe extern fn get_error_message(_user_ref: *mut libc::c_void,
fn throw_js_error(cx: *mut JSContext, error: &str, error_number: u32) {
let error = CString::new(error).unwrap();
unsafe {
- JS_ReportErrorNumber1(cx,
+ JS_ReportErrorNumber(cx,
Some(get_error_message),
ptr::null_mut(), error_number, error.as_ptr());
}
diff --git a/components/script/dom/bindings/proxyhandler.rs b/components/script/dom/bindings/proxyhandler.rs
index 60c473db1d2..d12a732d53a 100644
--- a/components/script/dom/bindings/proxyhandler.rs
+++ b/components/script/dom/bindings/proxyhandler.rs
@@ -18,7 +18,6 @@ use js::jsapi::{JSErrNum, JS_StrictPropertyStub};
use js::jsapi::{JS_DefinePropertyById6, JS_NewObjectWithGivenProto};
use js::jsapi::{JS_GetPropertyDescriptorById};
use js::jsval::ObjectValue;
-use js::{JSFalse, JSTrue};
use js::{JSPROP_ENUMERATE, JSPROP_GETTER, JSPROP_READONLY};
use libc;
use std::{mem, ptr};
@@ -33,19 +32,19 @@ pub unsafe extern fn get_property_descriptor(cx: *mut JSContext,
proxy: HandleObject,
id: HandleId,
desc: MutableHandle<JSPropertyDescriptor>)
- -> u8 {
+ -> bool {
let handler = GetProxyHandler(proxy.get());
- if InvokeGetOwnPropertyDescriptor(handler, cx, proxy, id, desc) == 0 {
- return JSFalse;
+ if !InvokeGetOwnPropertyDescriptor(handler, cx, proxy, id, desc) {
+ return false;
}
if !desc.get().obj.is_null() {
- return JSTrue;
+ return true;
}
let mut proto = RootedObject::new(cx, ptr::null_mut());
- if GetObjectProto(cx, proxy, proto.handle_mut()) == 0 {
+ if !GetObjectProto(cx, proxy, proto.handle_mut()) {
desc.get().obj = ptr::null_mut();
- return JSTrue;
+ return true;
}
JS_GetPropertyDescriptorById(cx, proto.handle(), id, desc)
@@ -55,13 +54,13 @@ pub unsafe extern fn get_property_descriptor(cx: *mut JSContext,
pub unsafe extern fn define_property(cx: *mut JSContext, proxy: HandleObject,
id: HandleId, desc: Handle<JSPropertyDescriptor>,
result: *mut ObjectOpResult)
- -> u8 {
+ -> bool {
//FIXME: Workaround for https://github.com/mozilla/rust/issues/13385
let setter: *const libc::c_void = mem::transmute(desc.get().setter);
let setter_stub: *const libc::c_void = mem::transmute(JS_StrictPropertyStub);
if (desc.get().attrs & JSPROP_GETTER) != 0 && setter == setter_stub {
- (*result).code_ = JSErrNum::JSMSG_GETTER_ONLY as u32;
- return JSTrue;
+ (*result).code_ = JSErrNum::JSMSG_GETTER_ONLY as ::libc::uintptr_t;
+ return true;
}
let expando = RootedObject::new(cx, ensure_expando_object(cx, proxy));
@@ -70,11 +69,11 @@ pub unsafe extern fn define_property(cx: *mut JSContext, proxy: HandleObject,
/// Deletes an expando off the given `proxy`.
pub unsafe extern fn delete(cx: *mut JSContext, proxy: HandleObject, id: HandleId,
- bp: *mut ObjectOpResult) -> u8 {
+ bp: *mut ObjectOpResult) -> bool {
let expando = RootedObject::new(cx, get_expando_object(proxy));
if expando.ptr.is_null() {
(*bp).code_ = 0 /* OkCode */;
- return JSTrue;
+ return true;
}
delete_property_by_id(cx, expando.handle(), id, bp)
@@ -83,16 +82,16 @@ pub unsafe extern fn delete(cx: *mut JSContext, proxy: HandleObject, id: HandleI
/// Controls whether the Extensible bit can be changed
pub unsafe extern fn prevent_extensions(_cx: *mut JSContext,
_proxy: HandleObject,
- result: *mut ObjectOpResult) -> u8 {
- (*result).code_ = JSErrNum::JSMSG_CANT_PREVENT_EXTENSIONS as u32;
- JSTrue
+ result: *mut ObjectOpResult) -> bool {
+ (*result).code_ = JSErrNum::JSMSG_CANT_PREVENT_EXTENSIONS as ::libc::uintptr_t;
+ true
}
/// Reports whether the object is Extensible
pub unsafe extern fn is_extensible(_cx: *mut JSContext, _proxy: HandleObject,
- succeeded: *mut u8) -> u8 {
- *succeeded = JSTrue;
- JSTrue
+ succeeded: *mut bool) -> bool {
+ *succeeded = true;
+ true
}
/// Get the expando object, or null if there is none.
diff --git a/components/script/dom/bindings/structuredclone.rs b/components/script/dom/bindings/structuredclone.rs
index 68757f5ed29..dcdfbea965d 100644
--- a/components/script/dom/bindings/structuredclone.rs
+++ b/components/script/dom/bindings/structuredclone.rs
@@ -31,7 +31,7 @@ impl StructuredCloneData {
ptr::null(), ptr::null_mut(),
HandleValue::undefined())
};
- if result == 0 {
+ if !result {
unsafe { JS_ClearPendingException(cx); }
return Err(Error::DataClone);
}
@@ -49,7 +49,7 @@ impl StructuredCloneData {
assert!(JS_ReadStructuredClone(
global.get_cx(), self.data, self.nbytes,
JS_STRUCTURED_CLONE_VERSION, rval,
- ptr::null(), ptr::null_mut()) != 0);
+ ptr::null(), ptr::null_mut()));
}
}
}
diff --git a/components/script/dom/bindings/utils.rs b/components/script/dom/bindings/utils.rs
index 52cf58e4ff0..7a76e51ba2a 100644
--- a/components/script/dom/bindings/utils.rs
+++ b/components/script/dom/bindings/utils.rs
@@ -204,7 +204,7 @@ unsafe impl Sync for NativeProperties {}
/// A JSNative that cannot be null.
pub type NonNullJSNative =
- unsafe extern "C" fn (arg1: *mut JSContext, arg2: c_uint, arg3: *mut JSVal) -> u8;
+ unsafe extern "C" fn (arg1: *mut JSContext, arg2: c_uint, arg3: *mut JSVal) -> bool;
/// Creates the *interface prototype object* (if a `proto_class` is given)
/// and the *interface object* (if a `constructor` is given).
@@ -252,7 +252,7 @@ pub fn do_create_interface_objects(cx: *mut JSContext,
assert!(JS_DefineProperty1(cx, constructor.handle(), b"prototype\0".as_ptr() as *const libc::c_char,
rval.handle(),
JSPROP_PERMANENT | JSPROP_READONLY,
- None, None) != 0);
+ None, None));
}
define_constructor(cx, receiver, cs.as_ptr(), constructor.handle());
}
@@ -280,13 +280,13 @@ fn define_constructor(cx: *mut JSContext,
name: *const libc::c_char,
constructor: HandleObject) {
unsafe {
- let mut already_defined = 0;
- assert!(JS_AlreadyHasOwnProperty(cx, receiver, name, &mut already_defined) != 0);
+ let mut already_defined = false;
+ assert!(JS_AlreadyHasOwnProperty(cx, receiver, name, &mut already_defined));
- if already_defined == 0 {
+ if !already_defined {
assert!(JS_DefineProperty1(cx, receiver, name,
constructor,
- 0, None, None) != 0);
+ 0, None, None));
}
}
@@ -317,7 +317,7 @@ fn create_interface_object(cx: *mut JSContext,
unsafe {
if !proto.get().is_null() {
- assert!(JS_LinkConstructorAndPrototype(cx, constructor.handle(), proto) != 0);
+ assert!(JS_LinkConstructorAndPrototype(cx, constructor.handle(), proto));
}
}
@@ -334,7 +334,7 @@ fn define_constants(cx: *mut JSContext, obj: HandleObject,
assert!(JS_DefineProperty(cx, obj, spec.name.as_ptr() as *const libc::c_char,
value.handle(),
JSPROP_ENUMERATE | JSPROP_READONLY |
- JSPROP_PERMANENT, None, None) != 0);
+ JSPROP_PERMANENT, None, None));
}
}
}
@@ -345,7 +345,7 @@ fn define_constants(cx: *mut JSContext, obj: HandleObject,
fn define_methods(cx: *mut JSContext, obj: HandleObject,
methods: &'static [JSFunctionSpec]) {
unsafe {
- assert!(JS_DefineFunctions(cx, obj, methods.as_ptr(), PropertyDefinitionBehavior::DefineAllProperties) != 0);
+ assert!(JS_DefineFunctions(cx, obj, methods.as_ptr(), PropertyDefinitionBehavior::DefineAllProperties));
}
}
@@ -355,7 +355,7 @@ fn define_methods(cx: *mut JSContext, obj: HandleObject,
fn define_properties(cx: *mut JSContext, obj: HandleObject,
properties: &'static [JSPropertySpec]) {
unsafe {
- assert!(JS_DefineProperties(cx, obj, properties.as_ptr()) != 0);
+ assert!(JS_DefineProperties(cx, obj, properties.as_ptr()));
}
}
@@ -386,9 +386,9 @@ fn create_interface_prototype_object(cx: *mut JSContext, global: HandleObject,
/// A throwing constructor, for those interfaces that have neither
/// `NoInterfaceObject` nor `Constructor`.
pub unsafe extern fn throwing_constructor(cx: *mut JSContext, _argc: c_uint,
- _vp: *mut JSVal) -> u8 {
+ _vp: *mut JSVal) -> bool {
throw_type_error(cx, "Illegal constructor.");
- 0
+ false
}
/// An array of *mut JSObject of size PrototypeList::ID::Count
@@ -450,7 +450,7 @@ impl Reflector {
/// Get the reflector.
#[inline]
pub fn get_jsobject(&self) -> HandleObject {
- HandleObject { ptr: self.object.get() }
+ unsafe { HandleObject::from_marked_location(self.object.get()) }
}
/// Initialize the reflector. (May be called only once.)
@@ -488,22 +488,22 @@ pub fn get_property_on_prototype(cx: *mut JSContext, proxy: HandleObject,
unsafe {
//let proto = GetObjectProto(proxy);
let mut proto = RootedObject::new(cx, ptr::null_mut());
- if JS_GetPrototype(cx, proxy, proto.handle_mut()) == 0 ||
+ if !JS_GetPrototype(cx, proxy, proto.handle_mut()) ||
proto.ptr.is_null() {
*found = false;
return true;
}
- let mut has_property = 0;
- if JS_HasPropertyById(cx, proto.handle(), id, &mut has_property) == 0 {
+ let mut has_property = false;
+ if !JS_HasPropertyById(cx, proto.handle(), id, &mut has_property) {
return false;
}
- *found = has_property != 0;
+ *found = has_property;
let no_output = vp.ptr.is_null();
- if has_property == 0 || no_output {
+ if !has_property || no_output {
return true;
}
- JS_ForwardGetPropertyTo(cx, proto.handle(), id, proxy, vp) != 0
+ JS_ForwardGetPropertyTo(cx, proto.handle(), id, proxy, vp)
}
}
@@ -511,7 +511,7 @@ pub fn get_property_on_prototype(cx: *mut JSContext, proxy: HandleObject,
/// `jsid` is not an integer.
pub fn get_array_index_from_id(_cx: *mut JSContext, id: HandleId) -> Option<u32> {
unsafe {
- if RUST_JSID_IS_INT(id) != 0 {
+ if RUST_JSID_IS_INT(id) {
return Some(RUST_JSID_TO_INT(id) as u32);
}
None
@@ -558,7 +558,7 @@ pub fn is_platform_object(obj: *mut JSObject) -> bool {
return true;
}
// Now for simplicity check for security wrappers before anything else
- if IsWrapper(obj) == 1 {
+ if IsWrapper(obj) {
let unwrapped_obj = UnwrapObject(obj, /* stopAtOuter = */ 0);
if unwrapped_obj.is_null() {
return false;
@@ -579,15 +579,15 @@ pub fn get_dictionary_property(cx: *mut JSContext,
rval: MutableHandleValue)
-> Result<bool, ()> {
fn has_property(cx: *mut JSContext, object: HandleObject, property: &CString,
- found: &mut u8) -> bool {
+ found: &mut bool) -> bool {
unsafe {
- JS_HasProperty(cx, object, property.as_ptr(), found) != 0
+ JS_HasProperty(cx, object, property.as_ptr(), found)
}
}
fn get_property(cx: *mut JSContext, object: HandleObject, property: &CString,
value: MutableHandleValue) -> bool {
unsafe {
- JS_GetProperty(cx, object, property.as_ptr(), value) != 0
+ JS_GetProperty(cx, object, property.as_ptr(), value)
}
}
@@ -596,12 +596,12 @@ pub fn get_dictionary_property(cx: *mut JSContext,
return Ok(false);
}
- let mut found: u8 = 0;
+ let mut found = false;
if !has_property(cx, object, &property, &mut found) {
return Err(());
}
- if found == 0 {
+ if !found {
return Ok(false);
}
@@ -625,7 +625,7 @@ pub fn set_dictionary_property(cx: *mut JSContext,
let property = CString::new(property).unwrap();
unsafe {
- if JS_SetProperty(cx, object, property.as_ptr(), value) == 0 {
+ if !JS_SetProperty(cx, object, property.as_ptr(), value) {
return Err(());
}
}
@@ -639,7 +639,7 @@ pub fn has_property_on_prototype(cx: *mut JSContext, proxy: HandleObject,
// MOZ_ASSERT(js::IsProxy(proxy) && js::GetProxyHandler(proxy) == handler);
let mut found = false;
!get_property_on_prototype(cx, proxy, id, &mut found,
- MutableHandleValue { ptr: ptr::null_mut() }) || found
+ unsafe { MutableHandleValue::from_marked_location(ptr::null_mut()) }) || found
}
/// Create a DOM global object with the given class.
@@ -648,7 +648,7 @@ pub fn create_dom_global(cx: *mut JSContext, class: *const JSClass,
-> *mut JSObject {
unsafe {
let mut options = CompartmentOptions::default();
- options.version_ = JSVersion::JSVERSION_LATEST;
+ options.version_ = JSVersion::JSVERSION_ECMA_5;
options.traceGlobal_ = trace;
let obj =
@@ -725,7 +725,7 @@ pub unsafe extern fn outerize_global(_cx: *mut JSContext, obj: HandleObject) ->
/// Deletes the property `id` from `object`.
pub unsafe fn delete_property_by_id(cx: *mut JSContext, object: HandleObject,
- id: HandleId, bp: *mut ObjectOpResult) -> u8 {
+ id: HandleId, bp: *mut ObjectOpResult) -> bool {
JS_DeletePropertyById1(cx, object, id, bp)
}
@@ -734,12 +734,12 @@ unsafe fn generic_call(cx: *mut JSContext, argc: libc::c_uint, vp: *mut JSVal,
call: unsafe extern fn(*const JSJitInfo, *mut JSContext,
HandleObject, *mut libc::c_void, u32,
*mut JSVal)
- -> u8)
- -> u8 {
+ -> bool)
+ -> bool {
let args = CallArgs::from_vp(vp, argc);
let thisobj = args.thisv();
if !thisobj.get().is_null_or_undefined() && !thisobj.get().is_object() {
- return 0;
+ return false;
}
let obj = if thisobj.get().is_object() {
thisobj.get().to_object()
@@ -754,12 +754,12 @@ unsafe fn generic_call(cx: *mut JSContext, argc: libc::c_uint, vp: *mut JSVal,
Ok(val) => val,
Err(()) => {
if is_lenient {
- debug_assert!(JS_IsExceptionPending(cx) == 0);
+ debug_assert!(!JS_IsExceptionPending(cx));
*vp = UndefinedValue();
- return 1;
+ return true;
} else {
throw_invalid_this(cx, proto_id);
- return 0;
+ return false;
}
}
};
@@ -769,14 +769,14 @@ unsafe fn generic_call(cx: *mut JSContext, argc: libc::c_uint, vp: *mut JSVal,
/// Generic method of IDL interface.
pub unsafe extern fn generic_method(cx: *mut JSContext,
argc: libc::c_uint, vp: *mut JSVal)
- -> u8 {
+ -> bool {
generic_call(cx, argc, vp, false, CallJitMethodOp)
}
/// Generic getter of IDL interface.
pub unsafe extern fn generic_getter(cx: *mut JSContext,
argc: libc::c_uint, vp: *mut JSVal)
- -> u8 {
+ -> bool {
generic_call(cx, argc, vp, false, CallJitGetterOp)
}
@@ -784,25 +784,25 @@ pub unsafe extern fn generic_getter(cx: *mut JSContext,
pub unsafe extern fn generic_lenient_getter(cx: *mut JSContext,
argc: libc::c_uint,
vp: *mut JSVal)
- -> u8 {
+ -> bool {
generic_call(cx, argc, vp, true, CallJitGetterOp)
}
unsafe extern fn call_setter(info: *const JSJitInfo, cx: *mut JSContext,
handle: HandleObject, this: *mut libc::c_void,
argc: u32, vp: *mut JSVal)
- -> u8 {
- if CallJitSetterOp(info, cx, handle, this, argc, vp) == 0 {
- return 0;
+ -> bool {
+ if !CallJitSetterOp(info, cx, handle, this, argc, vp) {
+ return false;
}
*vp = UndefinedValue();
- 1
+ true
}
/// Generic setter of IDL interface.
pub unsafe extern fn generic_setter(cx: *mut JSContext,
argc: libc::c_uint, vp: *mut JSVal)
- -> u8 {
+ -> bool {
generic_call(cx, argc, vp, false, call_setter)
}
@@ -810,7 +810,7 @@ pub unsafe extern fn generic_setter(cx: *mut JSContext,
pub unsafe extern fn generic_lenient_setter(cx: *mut JSContext,
argc: libc::c_uint,
vp: *mut JSVal)
- -> u8 {
+ -> bool {
generic_call(cx, argc, vp, true, call_setter)
}
@@ -831,10 +831,10 @@ pub fn validate_qualified_name(qualified_name: &str) -> ErrorResult {
unsafe extern "C" fn instance_class_has_proto_at_depth(clasp: *const js::jsapi::Class,
proto_id: u32,
- depth: u32) -> u8 {
+ depth: u32) -> bool {
let domclass: *const DOMJSClass = clasp as *const _;
let domclass = &*domclass;
- (domclass.dom_class.interface_chain[depth as usize] as u32 == proto_id) as u8
+ domclass.dom_class.interface_chain[depth as usize] as u32 == proto_id
}
#[allow(missing_docs)] // FIXME
diff --git a/components/script/dom/browsercontext.rs b/components/script/dom/browsercontext.rs
index 3209231d196..3df44a5ba9b 100644
--- a/components/script/dom/browsercontext.rs
+++ b/components/script/dom/browsercontext.rs
@@ -13,14 +13,13 @@ use dom::element::Element;
use dom::window::Window;
use js::glue::{CreateWrapperProxyHandler, ProxyTraps, WrapperNew};
use js::glue::{GetProxyPrivate};
-use js::jsapi::{Handle, HandleValue, Heap, JS_ForwardSetPropertyTo, ObjectOpResult, RootedObject, RootedValue};
+use js::jsapi::{Handle, Heap, JS_ForwardSetPropertyTo, ObjectOpResult, RootedObject, RootedValue};
use js::jsapi::{HandleId, HandleObject, MutableHandle, MutableHandleValue};
use js::jsapi::{JSAutoCompartment, JSAutoRequest};
use js::jsapi::{JSContext, JSErrNum, JSObject, JSPropertyDescriptor};
use js::jsapi::{JS_AlreadyHasOwnPropertyById, JS_ForwardGetPropertyTo};
use js::jsapi::{JS_DefinePropertyById6, JS_GetPropertyDescriptorById};
use js::jsval::{ObjectValue, UndefinedValue};
-use js::{JSFalse, JSTrue};
use std::default::Default;
use std::ptr;
@@ -115,20 +114,20 @@ unsafe fn GetSubframeWindow(cx: *mut JSContext, proxy: HandleObject, id: HandleI
#[allow(unsafe_code)]
unsafe extern fn getOwnPropertyDescriptor(cx: *mut JSContext, proxy: HandleObject, id: HandleId,
- desc: MutableHandle<JSPropertyDescriptor>) -> u8 {
+ desc: MutableHandle<JSPropertyDescriptor>) -> bool {
let window = GetSubframeWindow(cx, proxy, id);
if let Some(window) = window {
let mut val = RootedValue::new(cx, UndefinedValue());
window.to_jsval(cx, val.handle_mut());
(*desc.ptr).value = val.ptr;
fill_property_descriptor(&mut *desc.ptr, *proxy.ptr, true);
- return JSTrue;
+ return true;
}
let target = RootedObject::new(cx, GetProxyPrivate(*proxy.ptr).to_object());
// XXX This should be JS_GetOwnPropertyDescriptorById
- if JS_GetPropertyDescriptorById(cx, target.handle(), id, desc) == 0 {
- return JSFalse;
+ if !JS_GetPropertyDescriptorById(cx, target.handle(), id, desc) {
+ return false;
}
if (*desc.ptr).obj != target.ptr {
@@ -138,7 +137,7 @@ unsafe extern fn getOwnPropertyDescriptor(cx: *mut JSContext, proxy: HandleObjec
(*desc.ptr).obj = *proxy.ptr;
}
- JSTrue
+ true
}
#[allow(unsafe_code)]
@@ -146,14 +145,14 @@ unsafe extern fn defineProperty(cx: *mut JSContext,
proxy: HandleObject,
id: HandleId,
desc: Handle<JSPropertyDescriptor>,
- res: *mut ObjectOpResult) -> u8 {
+ res: *mut ObjectOpResult) -> bool {
if get_array_index_from_id(cx, id).is_some() {
// Spec says to Reject whether this is a supported index or not,
// since we have no indexed setter or indexed creator. That means
// throwing in strict mode (FIXME: Bug 828137), doing nothing in
// non-strict mode.
- (*res).code_ = JSErrNum::JSMSG_CANT_DEFINE_WINDOW_ELEMENT as u32;
- return JSTrue;
+ (*res).code_ = JSErrNum::JSMSG_CANT_DEFINE_WINDOW_ELEMENT as ::libc::uintptr_t;
+ return true;
}
let target = RootedObject::new(cx, GetProxyPrivate(*proxy.ptr).to_object());
@@ -161,21 +160,21 @@ unsafe extern fn defineProperty(cx: *mut JSContext,
}
#[allow(unsafe_code)]
-unsafe extern fn hasOwn(cx: *mut JSContext, proxy: HandleObject, id: HandleId, bp: *mut u8) -> u8 {
+unsafe extern fn hasOwn(cx: *mut JSContext, proxy: HandleObject, id: HandleId, bp: *mut bool) -> bool {
let window = GetSubframeWindow(cx, proxy, id);
if window.is_some() {
- *bp = JSTrue;
- return JSTrue;
+ *bp = true;
+ return true;
}
let target = RootedObject::new(cx, GetProxyPrivate(*proxy.ptr).to_object());
- let mut found = 0;
- if JS_AlreadyHasOwnPropertyById(cx, target.handle(), id, &mut found) == 0 {
- return JSFalse;
+ let mut found = false;
+ if !JS_AlreadyHasOwnPropertyById(cx, target.handle(), id, &mut found) {
+ return false;
}
- *bp = (found != 0) as u8;
- JSTrue
+ *bp = found;
+ true
}
#[allow(unsafe_code)]
@@ -183,11 +182,11 @@ unsafe extern fn get(cx: *mut JSContext,
proxy: HandleObject,
receiver: HandleObject,
id: HandleId,
- vp: MutableHandleValue) -> u8 {
+ vp: MutableHandleValue) -> bool {
let window = GetSubframeWindow(cx, proxy, id);
if let Some(window) = window {
window.to_jsval(cx, vp);
- return JSTrue;
+ return true;
}
let target = RootedObject::new(cx, GetProxyPrivate(*proxy.ptr).to_object());
@@ -200,16 +199,16 @@ unsafe extern fn set(cx: *mut JSContext,
receiver: HandleObject,
id: HandleId,
vp: MutableHandleValue,
- res: *mut ObjectOpResult) -> u8 {
+ res: *mut ObjectOpResult) -> bool {
if get_array_index_from_id(cx, id).is_some() {
// Reject (which means throw if and only if strict) the set.
- (*res).code_ = JSErrNum::JSMSG_READ_ONLY as u32;
- return JSTrue;
+ (*res).code_ = JSErrNum::JSMSG_READ_ONLY as ::libc::uintptr_t;
+ return true;
}
let target = RootedObject::new(cx, GetProxyPrivate(*proxy.ptr).to_object());
let receiver = RootedValue::new(cx, ObjectValue(&**receiver.ptr));
- JS_ForwardSetPropertyTo(cx, target.handle(), id, HandleValue { ptr: vp.ptr }, receiver.handle(), res)
+ JS_ForwardSetPropertyTo(cx, target.handle(), id, vp.to_handle(), receiver.handle(), res)
}
static PROXY_HANDLER: ProxyTraps = ProxyTraps {
diff --git a/components/script/dom/customevent.rs b/components/script/dom/customevent.rs
index f865d49ebd6..05c905056ab 100644
--- a/components/script/dom/customevent.rs
+++ b/components/script/dom/customevent.rs
@@ -51,6 +51,7 @@ impl CustomEvent {
ev.r().InitCustomEvent(global.get_cx(), type_, bubbles, cancelable, detail);
ev
}
+ #[allow(unsafe_code)]
pub fn Constructor(global: GlobalRef,
type_: DOMString,
init: &CustomEventBinding::CustomEventInit) -> Fallible<Root<CustomEvent>>{
@@ -58,7 +59,7 @@ impl CustomEvent {
type_,
init.parent.bubbles,
init.parent.cancelable,
- HandleValue { ptr: &init.detail }))
+ unsafe { HandleValue::from_marked_location(&init.detail) }))
}
}
diff --git a/components/script/dom/errorevent.rs b/components/script/dom/errorevent.rs
index e58a80ca259..2d95586c350 100644
--- a/components/script/dom/errorevent.rs
+++ b/components/script/dom/errorevent.rs
@@ -13,7 +13,7 @@ use dom::bindings::js::{MutHeapJSVal, Root};
use dom::bindings::trace::JSTraceable;
use dom::bindings::utils::reflect_dom_object;
use dom::event::{Event, EventBubbles, EventCancelable};
-use js::jsapi::{HandleValue, JSContext};
+use js::jsapi::{RootedValue, HandleValue, JSContext};
use js::jsval::JSVal;
use std::borrow::ToOwned;
use std::cell::Cell;
@@ -102,11 +102,14 @@ impl ErrorEvent {
EventCancelable::NotCancelable
};
+ // Dictionaries need to be rooted
+ // https://github.com/servo/servo/issues/6381
+ let error = RootedValue::new(global.get_cx(), init.error);
let event = ErrorEvent::new(global, type_,
bubbles, cancelable,
msg, file_name,
line_num, col_num,
- HandleValue { ptr: &init.error });
+ error.handle());
Ok(event)
}
diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs
index 2b79934d4a7..ee2887afa83 100644
--- a/components/script/dom/eventtarget.rs
+++ b/components/script/dom/eventtarget.rs
@@ -224,11 +224,11 @@ impl EventTarget {
name.as_ptr(),
nargs,
ARG_NAMES.as_mut_ptr(),
- source.as_ptr() as *const i16,
+ source.as_ptr(),
source.len() as size_t,
handler.handle_mut())
};
- if rv == 0 || handler.ptr.is_null() {
+ if !rv || handler.ptr.is_null() {
report_pending_exception(cx, self.reflector().get_jsobject().get());
return;
}
diff --git a/components/script/dom/messageevent.rs b/components/script/dom/messageevent.rs
index 1b0a129f12b..f9487f6431e 100644
--- a/components/script/dom/messageevent.rs
+++ b/components/script/dom/messageevent.rs
@@ -12,7 +12,7 @@ use dom::bindings::js::Root;
use dom::bindings::utils::reflect_dom_object;
use dom::event::Event;
use dom::eventtarget::EventTarget;
-use js::jsapi::{HandleValue, Heap, JSContext};
+use js::jsapi::{RootedValue, HandleValue, Heap, JSContext};
use js::jsval::JSVal;
use std::borrow::ToOwned;
use std::default::Default;
@@ -67,8 +67,11 @@ impl MessageEvent {
type_: DOMString,
init: &MessageEventBinding::MessageEventInit)
-> Fallible<Root<MessageEvent>> {
+ // Dictionaries need to be rooted
+ // https://github.com/servo/servo/issues/6381
+ let data = RootedValue::new(global.get_cx(), init.data);
let ev = MessageEvent::new(global, type_, init.parent.bubbles, init.parent.cancelable,
- HandleValue { ptr: &init.data },
+ data.handle(),
init.origin.clone(), init.lastEventId.clone());
Ok(ev)
}
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs
index c4d04b3ec1c..81b2900c19a 100644
--- a/components/script/dom/window.rs
+++ b/components/script/dom/window.rs
@@ -779,9 +779,9 @@ impl<'a, T: Reflectable> ScriptHelpers for &'a T {
let _ac = JSAutoCompartment::new(cx, globalhandle.get());
let options = CompileOptionsWrapper::new(cx, filename.as_ptr(), 0);
unsafe {
- if Evaluate2(cx, options.ptr, code.as_ptr() as *const i16,
- code.len() as libc::size_t,
- rval) == 0 {
+ if !Evaluate2(cx, options.ptr, code.as_ptr(),
+ code.len() as libc::size_t,
+ rval) {
debug!("error evaluating JS string");
report_pending_exception(cx, globalhandle.get());
}
diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs
index cbe1551f339..fb9a53ee5e8 100644
--- a/components/script/dom/xmlhttprequest.rs
+++ b/components/script/dom/xmlhttprequest.rs
@@ -692,10 +692,10 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
let decoded = UTF_8.decode(&self.response.borrow(), DecoderTrap::Replace).unwrap().to_owned();
let decoded: Vec<u16> = decoded.utf16_units().collect();
unsafe {
- if JS_ParseJSON(cx,
- decoded.as_ptr() as *const i16,
- decoded.len() as u32,
- rval.handle_mut()) == 0 {
+ if !JS_ParseJSON(cx,
+ decoded.as_ptr(),
+ decoded.len() as u32,
+ rval.handle_mut()) {
JS_ClearPendingException(cx);
return NullValue();
}
diff --git a/components/script/lib.rs b/components/script/lib.rs
index 2d900d32099..14d74cb2f94 100644
--- a/components/script/lib.rs
+++ b/components/script/lib.rs
@@ -7,6 +7,7 @@
#![feature(borrow_state)]
#![feature(box_syntax)]
#![feature(cell_extras)]
+#![feature(const_fn)]
#![feature(core)]
#![feature(core_intrinsics)]
#![feature(custom_attribute)]
@@ -142,7 +143,7 @@ fn perform_platform_specific_initialization() {}
#[allow(unsafe_code)]
pub fn init() {
unsafe {
- assert_eq!(js::jsapi::JS_Init(), 1);
+ assert_eq!(js::jsapi::JS_Init(), true);
}
// Create the global vtables used by the (generated) DOM
diff --git a/components/script/script_task.rs b/components/script/script_task.rs
index ba4581cbdc1..4c72ab33463 100644
--- a/components/script/script_task.rs
+++ b/components/script/script_task.rs
@@ -658,7 +658,7 @@ impl ScriptTask {
}
unsafe {
- unsafe extern "C" fn empty_wrapper_callback(_: *mut JSContext, _: *mut JSObject) -> u8 { 1 }
+ unsafe extern "C" fn empty_wrapper_callback(_: *mut JSContext, _: *mut JSObject) -> bool { true }
SetDOMProxyInformation(ptr::null(), 0, Some(shadow_check_callback));
SetDOMCallbacks(runtime.rt(), &DOM_CALLBACKS);
SetPreserveWrapperCallback(runtime.rt(), Some(empty_wrapper_callback));
diff --git a/components/script/timers.rs b/components/script/timers.rs
index 97aa20a3fa7..1704ba3cbbf 100644
--- a/components/script/timers.rs
+++ b/components/script/timers.rs
@@ -232,6 +232,7 @@ impl TimerManager {
}
}
+ #[allow(unsafe_code)]
pub fn fire_timer<T: Reflectable>(&self, timer_id: TimerId, this: &T) {
let (is_interval, callback, args): (IsInterval, TimerCallback, Vec<JSVal>) =
@@ -245,7 +246,9 @@ impl TimerManager {
match callback {
TimerCallback::FunctionTimerCallback(function) => {
- let arg_handles = args.iter().by_ref().map(|arg| HandleValue { ptr: arg }).collect();
+ let arg_handles = args.iter().by_ref().map(|arg| unsafe {
+ HandleValue::from_marked_location(arg)
+ }).collect();
let _ = function.Call_(this, arg_handles, Report);
}
TimerCallback::StringTimerCallback(code_str) => {