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.
This commit is contained in:
Anthony Ramine 2015-10-16 23:21:29 +02:00
parent 432087c0ea
commit 06947965b1
6 changed files with 56 additions and 89 deletions

View file

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

View file

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

View file

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

View file

@ -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):

View file

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

View file

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