aboutsummaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
authorAnthony Ramine <n.oxyde@gmail.com>2015-10-16 23:21:29 +0200
committerAnthony Ramine <n.oxyde@gmail.com>2015-12-15 23:06:35 +0100
commit06947965b1635c4f5ff2aebcf5dfef35c6e95f23 (patch)
tree0872856caab3d7528875d7a61f87d5bf6277482a /components
parent432087c0ea6a5a419273b448eec62eb7549ba242 (diff)
downloadservo-06947965b1635c4f5ff2aebcf5dfef35c6e95f23.tar.gz
servo-06947965b1635c4f5ff2aebcf5dfef35c6e95f23.zip
Remove all our local patches to the WebIDL parser
All the tweaks we need can just be made through Configuration.py, and [Abstract] is being submitted upstream by Ms2ger.
Diffstat (limited to 'components')
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py11
-rw-r--r--components/script/dom/bindings/codegen/Configuration.py11
-rw-r--r--components/script/dom/bindings/codegen/parser/WebIDL.py48
-rw-r--r--components/script/dom/bindings/codegen/parser/external.patch51
-rw-r--r--components/script/dom/bindings/codegen/parser/module.patch22
-rwxr-xr-xcomponents/script/dom/bindings/codegen/parser/update.sh2
6 files changed, 56 insertions, 89 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index 75de595694c..705192e17a7 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -23,6 +23,7 @@ from WebIDL import (
from Configuration import (
MemberIsUnforgeable,
+ getModuleFromObject,
getTypesFromCallback,
getTypesFromDescriptor,
getTypesFromDictionary,
@@ -920,7 +921,7 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
assert not type.treatNonObjectAsNull() or not type.treatNonCallableAsNull()
callback = type.unroll().callback
- declType = CGGeneric('%s::%s' % (callback.module(), callback.identifier.name))
+ declType = CGGeneric('%s::%s' % (getModuleFromObject(callback), callback.identifier.name))
finalDeclType = CGTemplatedType("Rc", declType)
conversion = CGCallbackTempRoot(declType.define())
@@ -1281,7 +1282,7 @@ def getRetvalDeclarationForType(returnType, descriptorProvider):
return result
if returnType.isCallback():
callback = returnType.unroll().callback
- result = CGGeneric('Rc<%s::%s>' % (callback.module(), callback.identifier.name))
+ result = CGGeneric('Rc<%s::%s>' % (getModuleFromObject(callback), callback.identifier.name))
if returnType.nullable():
result = CGWrapper(result, pre="Option<", post=">")
return result
@@ -5157,7 +5158,7 @@ class CGDictionary(CGThing):
@staticmethod
def makeModuleName(dictionary):
- return dictionary.module()
+ return getModuleFromObject(dictionary)
def getMemberType(self, memberInfo):
member, info = memberInfo
@@ -6056,8 +6057,8 @@ class GlobalGenRoots():
def Bindings(config):
descriptors = (set(d.name + "Binding" for d in config.getDescriptors(register=True)) |
- set(d.module() for d in config.callbacks) |
- set(d.module() for d in config.getDictionaries()))
+ set(getModuleFromObject(d) for d in config.callbacks) |
+ set(getModuleFromObject(d) for d in config.getDictionaries()))
curr = CGList([CGGeneric("pub mod %s;\n" % name) for name in sorted(descriptors)])
curr = CGWrapper(curr, pre=AUTOGENERATED_WARNING_COMMENT)
return curr
diff --git a/components/script/dom/bindings/codegen/Configuration.py b/components/script/dom/bindings/codegen/Configuration.py
index d0af7e37929..0fa06c83ea7 100644
--- a/components/script/dom/bindings/codegen/Configuration.py
+++ b/components/script/dom/bindings/codegen/Configuration.py
@@ -2,7 +2,7 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-from WebIDL import IDLInterface
+from WebIDL import IDLExternalInterface, IDLInterface, WebIDLError
class Configuration:
@@ -23,6 +23,11 @@ class Configuration:
self.interfaces = {}
self.maxProtoChainLength = 0
for thing in parseData:
+ # Servo does not support external interfaces.
+ if isinstance(thing, IDLExternalInterface):
+ raise WebIDLError("Servo does not support external interfaces.",
+ [thing.location])
+
# Some toplevel things are sadly types, and those have an
# isInterface that doesn't mean the same thing as IDLObject's
# isInterface()...
@@ -345,6 +350,10 @@ class Descriptor(DescriptorProvider):
# Some utility methods
+def getModuleFromObject(object):
+ return object.location.filename().split('/')[-1].split('.webidl')[0] + 'Binding'
+
+
def getTypesFromDescriptor(descriptor):
"""
Get all argument and return types for all members of the descriptor
diff --git a/components/script/dom/bindings/codegen/parser/WebIDL.py b/components/script/dom/bindings/codegen/parser/WebIDL.py
index 90ec9e88921..f210d2c6028 100644
--- a/components/script/dom/bindings/codegen/parser/WebIDL.py
+++ b/components/script/dom/bindings/codegen/parser/WebIDL.py
@@ -526,8 +526,46 @@ class IDLExposureMixins():
class IDLExternalInterface(IDLObjectWithIdentifier, IDLExposureMixins):
def __init__(self, location, parentScope, identifier):
- raise WebIDLError("Servo does not support external interfaces.",
- [self.location])
+ assert isinstance(identifier, IDLUnresolvedIdentifier)
+ assert isinstance(parentScope, IDLScope)
+ self.parent = None
+ IDLObjectWithIdentifier.__init__(self, location, parentScope, identifier)
+ IDLExposureMixins.__init__(self, location)
+ IDLObjectWithIdentifier.resolve(self, parentScope)
+
+ def finish(self, scope):
+ IDLExposureMixins.finish(self, scope)
+ pass
+
+ def validate(self):
+ pass
+
+ def isExternal(self):
+ return True
+
+ def isInterface(self):
+ return True
+
+ def isConsequential(self):
+ return False
+
+ def addExtendedAttributes(self, attrs):
+ assert len(attrs) == 0
+
+ def resolve(self, parentScope):
+ pass
+
+ def getJSImplementation(self):
+ return None
+
+ def isJSImplemented(self):
+ return False
+
+ def getNavigatorProperty(self):
+ return None
+
+ def _getDependentObjects(self):
+ return set()
class IDLPartialInterface(IDLObject):
@@ -1643,9 +1681,6 @@ class IDLDictionary(IDLObjectWithScope):
self.identifier.name,
[member.location] + locations)
- def module(self):
- return self.location.filename().split('/')[-1].split('.webidl')[0] + 'Binding'
-
def addExtendedAttributes(self, attrs):
assert len(attrs) == 0
@@ -4157,9 +4192,6 @@ class IDLCallback(IDLObjectWithScope):
self._treatNonCallableAsNull = False
self._treatNonObjectAsNull = False
- def module(self):
- return self.location.filename().split('/')[-1].split('.webidl')[0] + 'Binding'
-
def isCallback(self):
return True
diff --git a/components/script/dom/bindings/codegen/parser/external.patch b/components/script/dom/bindings/codegen/parser/external.patch
deleted file mode 100644
index 964a6d8774a..00000000000
--- a/components/script/dom/bindings/codegen/parser/external.patch
+++ /dev/null
@@ -1,51 +0,0 @@
---- WebIDL.py
-+++ WebIDL.py
-@@ -505,46 +505,8 @@ class IDLExposureMixins():
-
- class IDLExternalInterface(IDLObjectWithIdentifier, IDLExposureMixins):
- def __init__(self, location, parentScope, identifier):
-- assert isinstance(identifier, IDLUnresolvedIdentifier)
-- assert isinstance(parentScope, IDLScope)
-- self.parent = None
-- IDLObjectWithIdentifier.__init__(self, location, parentScope, identifier)
-- IDLExposureMixins.__init__(self, location)
-- IDLObjectWithIdentifier.resolve(self, parentScope)
--
-- def finish(self, scope):
-- IDLExposureMixins.finish(self, scope)
-- pass
--
-- def validate(self):
-- pass
--
-- def isExternal(self):
-- return True
--
-- def isInterface(self):
-- return True
--
-- def isConsequential(self):
-- return False
--
-- def addExtendedAttributes(self, attrs):
-- assert len(attrs) == 0
--
-- def resolve(self, parentScope):
-- pass
--
-- def getJSImplementation(self):
-- return None
--
-- def isJSImplemented(self):
-- return False
--
-- def getNavigatorProperty(self):
-- return None
--
-- def _getDependentObjects(self):
-- return set()
-+ raise WebIDLError("Servo does not support external interfaces.",
-+ [self.location])
-
- class IDLPartialInterface(IDLObject):
- def __init__(self, location, name, members, nonPartialInterface):
diff --git a/components/script/dom/bindings/codegen/parser/module.patch b/components/script/dom/bindings/codegen/parser/module.patch
deleted file mode 100644
index aaec7c61b7e..00000000000
--- a/components/script/dom/bindings/codegen/parser/module.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- WebIDL.py
-+++ WebIDL.py
-@@ -1506,6 +1506,9 @@ class IDLDictionary(IDLObjectWithScope):
- self.identifier.name,
- [member.location] + locations)
-
-+ def module(self):
-+ return self.location.filename().split('/')[-1].split('.webidl')[0] + 'Binding'
-+
- def addExtendedAttributes(self, attrs):
- assert len(attrs) == 0
-
-@@ -3574,6 +3577,9 @@ class IDLCallbackType(IDLType, IDLObjectWithScope):
- self._treatNonCallableAsNull = False
- self._treatNonObjectAsNull = False
-
-+ def module(self):
-+ return self.location.filename().split('/')[-1].split('.webidl')[0] + 'Binding'
-+
- def isCallback(self):
- return True
-
diff --git a/components/script/dom/bindings/codegen/parser/update.sh b/components/script/dom/bindings/codegen/parser/update.sh
index 26f70aac6ae..a60821670b3 100755
--- a/components/script/dom/bindings/codegen/parser/update.sh
+++ b/components/script/dom/bindings/codegen/parser/update.sh
@@ -1,4 +1,2 @@
wget https://mxr.mozilla.org/mozilla-central/source/dom/bindings/parser/WebIDL.py?raw=1 -O WebIDL.py
-patch < external.patch
-patch < module.patch
patch < abstract.patch