Remove Prefable::terminator 🤖

This commit is contained in:
Anthony Ramine 2016-05-20 22:34:42 +02:00
parent adcecda047
commit a20db08f06
3 changed files with 17 additions and 17 deletions

View file

@ -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" +

View file

@ -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<JSFunctionSpec>]) {
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<JSPropertySpec>]) {
for prefable in properties {
define_properties(cx, obj, prefable.specs()).unwrap();
if let Some(specs) = prefable.specs() {
define_properties(cx, obj, specs).unwrap();
}
}
}

View file

@ -557,24 +557,17 @@ pub struct Prefable<T: 'static> {
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<T> Prefable<T> {
/// 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)
}
}