aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/components/script/dom/bindings/codegen/BindingGen.py3
-rw-r--r--src/components/script/dom/bindings/codegen/CodegenRust.py193
-rw-r--r--src/components/script/dom/bindings/codegen/GlobalGen.py4
3 files changed, 62 insertions, 138 deletions
diff --git a/src/components/script/dom/bindings/codegen/BindingGen.py b/src/components/script/dom/bindings/codegen/BindingGen.py
index 8a5149d4421..408280dacfb 100644
--- a/src/components/script/dom/bindings/codegen/BindingGen.py
+++ b/src/components/script/dom/bindings/codegen/BindingGen.py
@@ -19,8 +19,7 @@ def generate_binding_rs(config, outputprefix, webidlfile):
filename = outputprefix + ".rs"
root = CGBindingRoot(config, outputprefix, webidlfile)
- root2 = CGBindingRoot(config, outputprefix, webidlfile)
- if replaceFileIfChanged(filename, root.declare() + root2.define()):
+ if replaceFileIfChanged(filename, root.define()):
print "Generating binding implementation: %s" % (filename)
def main():
diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py
index a634f91d60b..2162d445c24 100644
--- a/src/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/src/components/script/dom/bindings/codegen/CodegenRust.py
@@ -141,11 +141,9 @@ class CGThing():
"""
def __init__(self):
pass # Nothing for now
- def declare(self):
- """Produce code for a header file."""
- assert(False) # Override me!
+
def define(self):
- """Produce code for a cpp file."""
+ """Produce code for a Rust file."""
assert(False) # Override me!
class CGMethodCall(CGThing):
@@ -1575,9 +1573,7 @@ class CGNativePropertyHooks(CGThing):
def __init__(self, descriptor):
CGThing.__init__(self)
self.descriptor = descriptor
- def declare(self):
- #return "extern const NativePropertyHooks NativeHooks;\n"
- return ""
+
def define(self):
if self.descriptor.concrete and self.descriptor.proxy:
resolveOwnProperty = "ResolveOwnProperty"
@@ -1600,20 +1596,14 @@ class CGIndenter(CGThing):
A class that takes another CGThing and generates code that indents that
CGThing by some number of spaces. The default indent is two spaces.
"""
- def __init__(self, child, indentLevel=2, declareOnly=False):
+ def __init__(self, child, indentLevel=2):
CGThing.__init__(self)
self.child = child
self.indent = " " * indentLevel
- self.declareOnly = declareOnly
- def declare(self):
- decl = self.child.declare()
- if decl is not "":
- return re.sub(lineStartDetector, self.indent, decl)
- else:
- return ""
+
def define(self):
defn = self.child.define()
- if defn is not "" and not self.declareOnly:
+ if defn is not "":
return re.sub(lineStartDetector, self.indent, defn)
else:
return defn
@@ -1622,38 +1612,21 @@ class CGWrapper(CGThing):
"""
Generic CGThing that wraps other CGThings with pre and post text.
"""
- def __init__(self, child, pre="", post="", declarePre=None,
- declarePost=None, definePre=None, definePost=None,
- declareOnly=False, defineOnly=False, reindent=False):
+ def __init__(self, child, pre="", post="", reindent=False):
CGThing.__init__(self)
self.child = child
- self.declarePre = declarePre or pre
- self.declarePost = declarePost or post
- self.definePre = definePre or pre
- self.definePost = definePost or post
- self.declareOnly = declareOnly
- self.defineOnly = defineOnly
+ self.pre = pre
+ self.post = post
self.reindent = reindent
- def declare(self):
- if self.defineOnly:
- return ''
- decl = self.child.declare()
- if self.reindent:
- # We don't use lineStartDetector because we don't want to
- # insert whitespace at the beginning of our _first_ line.
- decl = stripTrailingWhitespace(
- decl.replace("\n", "\n" + (" " * len(self.declarePre))))
- return self.declarePre + decl + self.declarePost
+
def define(self):
- if self.declareOnly:
- return ''
defn = self.child.define()
if self.reindent:
# We don't use lineStartDetector because we don't want to
# insert whitespace at the beginning of our _first_ line.
defn = stripTrailingWhitespace(
- defn.replace("\n", "\n" + (" " * len(self.definePre))))
- return self.definePre + defn + self.definePost
+ defn.replace("\n", "\n" + (" " * len(self.pre))))
+ return self.pre + defn + self.post
class CGImports(CGWrapper):
"""
@@ -1681,7 +1654,7 @@ class CGImports(CGWrapper):
statements.extend('use %s;' % i for i in sorted(imports))
CGWrapper.__init__(self, child,
- declarePre='\n'.join(statements) + '\n\n')
+ pre='\n'.join(statements) + '\n\n')
@staticmethod
def getDeclarationFilename(decl):
@@ -1698,23 +1671,20 @@ class CGIfWrapper(CGWrapper):
post="\n}")
class CGNamespace(CGWrapper):
- def __init__(self, namespace, child, declareOnly=False, public=False):
+ def __init__(self, namespace, child, public=False):
pre = "%smod %s {\n" % ("pub " if public else "", namespace)
post = "} // mod %s\n" % namespace
- CGWrapper.__init__(self, child, pre=pre, post=post,
- declareOnly=declareOnly)
+ CGWrapper.__init__(self, child, pre=pre, post=post)
+
@staticmethod
- def build(namespaces, child, declareOnly=False, public=False):
+ def build(namespaces, child, public=False):
"""
Static helper method to build multiple wrapped namespaces.
"""
if not namespaces:
- return CGWrapper(child, declareOnly=declareOnly)
- inner = CGNamespace.build(namespaces[1:], child, declareOnly=declareOnly, public=public)
- return CGNamespace(namespaces[0], inner, declareOnly=declareOnly, public=public)
-
- def declare(self):
- return ""
+ return child
+ inner = CGNamespace.build(namespaces[1:], child, public=public)
+ return CGNamespace(namespaces[0], inner, public=public)
def DOMClass(descriptor):
protoList = ['PrototypeList::id::' + proto for proto in descriptor.prototypeChain]
@@ -1737,9 +1707,7 @@ class CGDOMJSClass(CGThing):
def __init__(self, descriptor):
CGThing.__init__(self)
self.descriptor = descriptor
- def declare(self):
- #return "extern DOMJSClass Class;\n"
- return ""
+
def define(self):
traceHook = "Some(%s)" % TRACE_HOOK_NAME
if self.descriptor.createGlobal:
@@ -1791,9 +1759,7 @@ class CGPrototypeJSClass(CGThing):
def __init__(self, descriptor):
CGThing.__init__(self)
self.descriptor = descriptor
- def declare(self):
- # We're purely for internal consumption
- return ""
+
def define(self):
return """
static PrototypeClassName__: [u8, ..%s] = %s;
@@ -1829,9 +1795,7 @@ class CGInterfaceObjectJSClass(CGThing):
def __init__(self, descriptor):
CGThing.__init__(self)
self.descriptor = descriptor
- def declare(self):
- # We're purely for internal consumption
- return ""
+
def define(self):
if True:
return ""
@@ -1872,8 +1836,7 @@ class CGList(CGThing):
self.children.insert(0, child)
def join(self, generator):
return self.joiner.join(filter(lambda s: len(s) > 0, (child for child in generator)))
- def declare(self):
- return self.join(child.declare() for child in self.children if child is not None)
+
def define(self):
return self.join(child.define() for child in self.children if child is not None)
@@ -1890,13 +1853,11 @@ class CGGeneric(CGThing):
A class that spits out a fixed string into the codegen. Can spit out a
separate string for the declaration too.
"""
- def __init__(self, define="", declare=""):
- self.declareText = declare
- self.defineText = define
- def declare(self):
- return self.declareText
+ def __init__(self, text):
+ self.text = text
+
def define(self):
- return self.defineText
+ return self.text
def getTypes(descriptor):
"""
@@ -2045,7 +2006,6 @@ class CGAbstractMethod(CGThing):
self.name = name
self.returnType = returnType
self.args = args
- self.inline = inline
self.alwaysInline = alwaysInline
self.extern = extern
self.templateArgs = templateArgs
@@ -2079,17 +2039,10 @@ class CGAbstractMethod(CGThing):
return "\n unsafe {" if self.unsafe else ""
def _unsafe_close(self):
return "\n }\n" if self.unsafe else ""
- def declare(self):
- if self.inline:
- return self._define()
- #return "%sfn %s%s(%s)%s;\n" % (self._decorators(), self.name, self._template(),
- # self._argstring(), self._returnType())
- return ""
- def _define(self, fromDeclare=False):
+ def define(self, fromDeclare=False):
return self.definition_prologue(fromDeclare) + "\n" + self.definition_body() + self.definition_epilogue()
- def define(self):
- return "" if self.inline else self._define()
+
def definition_prologue(self, fromDeclare):
return "%sfn %s%s(%s)%s {%s" % (self._decorators(), self.name, self._template(),
self._argstring(fromDeclare), self._returnType(), self._unsafe_open())
@@ -2180,9 +2133,6 @@ class CGAbstractExternMethod(CGAbstractMethod):
def __init__(self, descriptor, name, returnType, args):
CGAbstractMethod.__init__(self, descriptor, name, returnType, args,
inline=False, extern=True)
- def declare(self):
- # We only have implementation
- return ""
class PropertyArrays():
def __init__(self, descriptor):
@@ -2380,10 +2330,6 @@ class CGDefineDOMInterfaceMethod(CGAbstractMethod):
args = [Argument('&mut JSPageInfo', 'js_info')]
CGAbstractMethod.__init__(self, descriptor, 'DefineDOMInterface', 'bool', args, pub=True)
- def declare(self):
- #return CGAbstractMethod.declare(self)
- return ""
-
def define(self):
return CGAbstractMethod.define(self)
@@ -2945,9 +2891,6 @@ class CGMemberJITInfo(CGThing):
self.member = member
self.descriptor = descriptor
- def declare(self):
- return ""
-
def defineJitInfo(self, infoName, opName, infallible):
protoID = "PrototypeList::id::%s as u32" % self.descriptor.name
depth = self.descriptor.interface.inheritanceDepth()
@@ -3021,9 +2964,6 @@ class CGEnum(CGThing):
CGThing.__init__(self)
self.enum = enum
- def declare(self):
- return ""
-
def define(self):
return """
#[repr(uint)]
@@ -3176,7 +3116,7 @@ class CGUnionStruct(CGThing):
self.type = type
self.descriptorProvider = descriptorProvider
- def declare(self):
+ def define(self):
templateVars = map(lambda t: getUnionTypeTemplateVars(t, self.descriptorProvider),
self.type.flatMemberTypes)
enumValues = [
@@ -3186,8 +3126,6 @@ class CGUnionStruct(CGThing):
"%s\n"
"}\n") % (self.type, "\n".join(enumValues))
- def define(self):
- return ""
class CGUnionConversionStruct(CGThing):
def __init__(self, type, descriptorProvider):
@@ -3307,7 +3245,7 @@ class CGUnionConversionStruct(CGThing):
pre="pub fn TryConvertTo%s(cx: *JSContext, value: JSVal) -> %s {\n" % (t.name, returnType),
post="\n}")
- def declare(self):
+ def define(self):
methods = [self.from_value_method()]
methods.extend(self.try_method(t) for t in self.type.flatMemberTypes)
return """
@@ -3315,8 +3253,6 @@ impl %s {
%s
}""" % (self.type, CGIndenter(CGList(methods, "\n\n")).define())
- def define(self):
- return ""
class ClassItem:
""" Use with CGClass """
@@ -3699,7 +3635,7 @@ class CGClass(CGThing):
in self.templateSpecialization])
return className
- def declare(self):
+ def define(self):
result = ''
if self.templateArgs:
templateArgs = [a.declare() for a in self.templateArgs]
@@ -3775,8 +3711,6 @@ class CGClass(CGThing):
result += "}"
return result
- def define(self):
- return ''
class CGXrayHelper(CGAbstractExternMethod):
def __init__(self, descriptor, name, args, properties):
@@ -3930,8 +3864,7 @@ class CGProxyUnwrap(CGAbstractMethod):
def __init__(self, descriptor):
args = [Argument('*JSObject', 'obj')]
CGAbstractMethod.__init__(self, descriptor, "UnwrapProxy", '*' + descriptor.concreteType, args, alwaysInline=True)
- def declare(self):
- return ""
+
def definition_body(self):
return """ /*if (xpc::WrapperFactory::IsXrayWrapper(obj)) {
obj = js::UnwrapObject(obj);
@@ -4320,9 +4253,7 @@ class CGDOMJSProxyHandlerDOMClass(CGThing):
def __init__(self, descriptor):
CGThing.__init__(self)
self.descriptor = descriptor
- def declare(self):
- #return "extern const DOMClass Class;\n"
- return ""
+
def define(self):
return """
static Class: DOMClass = """ + DOMClass(self.descriptor) + """;
@@ -4382,7 +4313,7 @@ class CGDescriptor(CGThing):
cgThings.append(CGPrototypeJSClass(descriptor))
properties = PropertyArrays(descriptor)
- cgThings.append(CGGeneric(define=str(properties)))
+ cgThings.append(CGGeneric(str(properties)))
cgThings.append(CGCreateInterfaceObjectsMethod(descriptor, properties))
# Set up our Xray callbacks as needed.
@@ -4432,8 +4363,6 @@ class CGDescriptor(CGThing):
# post='\n')
self.cgRoot = cgThings
- def declare(self):
- return self.cgRoot.declare()
def define(self):
return self.cgRoot.define()
@@ -4477,8 +4406,6 @@ class CGNamespacedEnum(CGThing):
# Save the result.
self.node = curr
- def declare(self):
- return self.node.declare()
def define(self):
return self.node.define()
@@ -4501,9 +4428,12 @@ class CGDictionary(CGThing):
defaultValue=member.defaultValue))
for member in dictionary.members ]
- def declare(self):
+ def define(self):
if not self.generatable:
return ""
+ return self.struct() + "\n" + self.impl()
+
+ def struct(self):
d = self.dictionary
if d.parent:
inheritance = " parent: %s::%s,\n" % (self.makeModuleName(d.parent),
@@ -4524,9 +4454,7 @@ class CGDictionary(CGThing):
"}").substitute( { "selfName": self.makeClassName(d),
"inheritance": inheritance }))
- def define(self):
- if not self.generatable:
- return ""
+ def impl(self):
d = self.dictionary
if d.parent:
initParent = ("// Per spec, we init the parent's members first\n"
@@ -4755,8 +4683,8 @@ class CGBindingRoot(CGThing):
CGList([CGGeneric(" use dom::bindings::utils::EnumEntry;"),
CGEnum(e)]), public=True)
def makeEnumTypedef(e):
- return CGGeneric(declare=("pub type %s = self::%sValues::valuelist;\n" %
- (e.identifier.name, e.identifier.name)))
+ return CGGeneric("pub type %s = self::%sValues::valuelist;\n" %
+ (e.identifier.name, e.identifier.name))
cgthings = [ fun(e) for e in config.getEnums(webIDLFile)
for fun in [makeEnum, makeEnumTypedef] ]
@@ -4878,8 +4806,7 @@ class CGBindingRoot(CGThing):
# Store the final result.
self.root = curr
- def declare(self):
- return stripTrailingWhitespace(self.root.declare())
+
def define(self):
return stripTrailingWhitespace(self.root.define())
@@ -5795,7 +5722,7 @@ class GlobalGenRoots():
return "dom::%s" % descriptor.name.lower()
descriptors = [d.name for d in config.getDescriptors(register=True, hasInterfaceObject=True)]
- curr = CGList([CGGeneric(declare="pub use dom::%s::%s;\n" % (name.lower(), name)) for name in descriptors])
+ curr = CGList([CGGeneric("pub use dom::%s::%s;\n" % (name.lower(), name)) for name in descriptors])
curr = CGWrapper(curr, pre=AUTOGENERATED_WARNING_COMMENT)
return curr
@@ -5803,7 +5730,7 @@ class GlobalGenRoots():
def BindingDeclarations(config):
descriptors = [d.name for d in config.getDescriptors(register=True)]
- curr = CGList([CGGeneric(declare="pub mod %sBinding;\n" % name) for name in descriptors])
+ curr = CGList([CGGeneric("pub mod %sBinding;\n" % name) for name in descriptors])
curr = CGWrapper(curr, pre=AUTOGENERATED_WARNING_COMMENT)
return curr
@@ -5811,19 +5738,19 @@ class GlobalGenRoots():
def InheritTypes(config):
descriptors = config.getDescriptors(register=True, hasInterfaceObject=True)
- allprotos = [CGGeneric(declare="#[allow(unused_imports)];\n"),
- CGGeneric(declare="use dom::types::*;\n"),
- CGGeneric(declare="use dom::bindings::js::JS;\n"),
- CGGeneric(declare="use dom::bindings::trace::Traceable;\n"),
- CGGeneric(declare="use extra::serialize::{Encodable, Encoder};\n"),
- CGGeneric(declare="use js::jsapi::JSTracer;\n\n")]
+ allprotos = [CGGeneric("#[allow(unused_imports)];\n"),
+ CGGeneric("use dom::types::*;\n"),
+ CGGeneric("use dom::bindings::js::JS;\n"),
+ CGGeneric("use dom::bindings::trace::Traceable;\n"),
+ CGGeneric("use extra::serialize::{Encodable, Encoder};\n"),
+ CGGeneric("use js::jsapi::JSTracer;\n\n")]
for descriptor in descriptors:
name = descriptor.name
- protos = [CGGeneric(declare='pub trait %s {}\n' % (name + 'Base'))]
+ protos = [CGGeneric('pub trait %s {}\n' % (name + 'Base'))]
for proto in descriptor.prototypeChain:
- protos += [CGGeneric(declare='impl %s for %s {}\n' % (proto + 'Base',
+ protos += [CGGeneric('impl %s for %s {}\n' % (proto + 'Base',
descriptor.concreteType))]
- derived = [CGGeneric(declare='pub trait %s { fn %s(&self) -> bool; }\n' %
+ derived = [CGGeneric('pub trait %s { fn %s(&self) -> bool; }\n' %
(name + 'Derived', 'is_' + name.lower()))]
for protoName in descriptor.prototypeChain[1:-1]:
protoDescriptor = config.getDescriptor(protoName)
@@ -5836,10 +5763,10 @@ class GlobalGenRoots():
'selfName': name + 'Derived',
'baseName': protoDescriptor.concreteType,
'parentName': protoDescriptor.prototypeChain[-2].lower()})
- derived += [CGGeneric(declare=delegate)]
- derived += [CGGeneric(declare='\n')]
+ derived += [CGGeneric(delegate)]
+ derived += [CGGeneric('\n')]
- cast = [CGGeneric(declare=string.Template('''pub trait ${castTraitName} {
+ cast = [CGGeneric(string.Template('''pub trait ${castTraitName} {
fn from<T: ${fromBound}>(derived: &JS<T>) -> JS<Self> {
unsafe { derived.clone().transmute() }
}
@@ -5853,9 +5780,9 @@ class GlobalGenRoots():
'castTraitName': name + 'Cast',
'fromBound': name + 'Base',
'toBound': name + 'Derived'})),
- CGGeneric(declare="impl %s for %s {}\n\n" % (name + 'Cast', name))]
+ CGGeneric("impl %s for %s {}\n\n" % (name + 'Cast', name))]
- trace = [CGGeneric(declare=string.Template('''impl Traceable for ${name} {
+ trace = [CGGeneric(string.Template('''impl Traceable for ${name} {
fn trace(&self, tracer: *mut JSTracer) {
unsafe {
self.encode(&mut *tracer);
diff --git a/src/components/script/dom/bindings/codegen/GlobalGen.py b/src/components/script/dom/bindings/codegen/GlobalGen.py
index bbf3477ad77..90310fc9aff 100644
--- a/src/components/script/dom/bindings/codegen/GlobalGen.py
+++ b/src/components/script/dom/bindings/codegen/GlobalGen.py
@@ -21,9 +21,7 @@ def generate_file(config, name):
filename = name + '.rs'
root = getattr(GlobalGenRoots, name)(config)
- code = root.declare()
- root2 = getattr(GlobalGenRoots, name)(config)
- code += root2.define()
+ code = root.define()
if replaceFileIfChanged(filename, code):
print "Generating %s" % (filename)