diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index b833d431f7f..e7fcb887782 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -1409,8 +1409,7 @@ class PropertyDefiner: assert len(array) != 0 specs = [] prefableSpecs = [] - prefableTemplate = ' Prefable { pref: %s, specs: %s[%d], terminator: %s }' - hasTerminator = 'true' if specTerminator else 'false' + prefableTemplate = ' Prefable { pref: %s, specs: %s[%d] }' for cond, members in groupby(array, lambda m: getCondition(m, self.descriptor)): currentSpecs = [specTemplate % getDataTuple(m) for m in members] @@ -1418,7 +1417,7 @@ class PropertyDefiner: currentSpecs.append(specTerminator) specs.append("&[\n" + ",\n".join(currentSpecs) + "]\n") prefableSpecs.append( - prefableTemplate % (cond, name + "_specs", len(specs) - 1, hasTerminator)) + prefableTemplate % (cond, name + "_specs", len(specs) - 1)) specsArray = ("const %s_specs: &'static [&'static[%s]] = &[\n" + ",\n".join(specs) + "\n" + diff --git a/components/script/dom/bindings/interface.rs b/components/script/dom/bindings/interface.rs index f1e6a886eb7..8791cd4da08 100644 --- a/components/script/dom/bindings/interface.rs +++ b/components/script/dom/bindings/interface.rs @@ -216,7 +216,9 @@ pub unsafe fn create_callback_interface_object( rval.set(JS_NewObject(cx, ptr::null())); assert!(!rval.ptr.is_null()); for prefable in constants { - define_constants(cx, rval.handle(), prefable.specs()); + if let Some(specs) = prefable.specs() { + define_constants(cx, rval.handle(), specs); + } } define_name(cx, rval.handle(), name); define_on_global_object(cx, receiver, name, rval.handle()); @@ -363,7 +365,9 @@ unsafe fn create_object( define_prefable_methods(cx, rval.handle(), methods); define_prefable_properties(cx, rval.handle(), properties); for prefable in constants { - define_constants(cx, rval.handle(), prefable.specs()); + if let Some(specs) = prefable.specs() { + define_constants(cx, rval.handle(), specs); + } } } @@ -373,7 +377,9 @@ pub unsafe fn define_prefable_methods( obj: HandleObject, methods: &'static [Prefable]) { for prefable in methods { - define_methods(cx, obj, prefable.specs()).unwrap(); + if let Some(specs) = prefable.specs() { + define_methods(cx, obj, specs).unwrap(); + } } } @@ -383,7 +389,9 @@ pub unsafe fn define_prefable_properties( obj: HandleObject, properties: &'static [Prefable]) { for prefable in properties { - define_properties(cx, obj, prefable.specs()).unwrap(); + if let Some(specs) = prefable.specs() { + define_properties(cx, obj, specs).unwrap(); + } } } diff --git a/components/script/dom/bindings/utils.rs b/components/script/dom/bindings/utils.rs index 607f74456d2..3ba5838a4fa 100644 --- a/components/script/dom/bindings/utils.rs +++ b/components/script/dom/bindings/utils.rs @@ -557,24 +557,17 @@ pub struct Prefable { pub pref: Option<&'static str>, /// The underlying slice of specifications. pub specs: &'static [T], - /// Whether the specifications contain special terminating entries that should be - /// included or not. - pub terminator: bool, } impl Prefable { /// Retrieve the slice represented by this container, unless the condition /// guarding it is false. - pub fn specs(&self) -> &'static [T] { + pub fn specs(&self) -> Option<&'static [T]> { if let Some(pref) = self.pref { if !prefs::get_pref(pref).as_boolean().unwrap_or(false) { - return if self.terminator { - &self.specs[self.specs.len() - 1..] - } else { - &[] - }; + return None; } } - self.specs + Some(self.specs) } }