diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2015-10-16 23:21:29 +0200 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2015-12-15 23:06:35 +0100 |
commit | 06947965b1635c4f5ff2aebcf5dfef35c6e95f23 (patch) | |
tree | 0872856caab3d7528875d7a61f87d5bf6277482a /components | |
parent | 432087c0ea6a5a419273b448eec62eb7549ba242 (diff) | |
download | servo-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')
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 |