From b40966981ca80603c7ffed2c690ced2abaa8498a Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sun, 21 Sep 2014 15:14:48 +0200 Subject: [PATCH 1/2] Share code to compute the type of a union. This does not change the generated code. --- .../script/dom/bindings/codegen/CodegenRust.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index e16a8664e82..3b02e2a0700 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -422,6 +422,12 @@ def typeIsSequenceOrHasSequenceMember(type): def typeNeedsRooting(type, descriptorProvider): return type.isGeckoInterface() and descriptorProvider.getDescriptor(type.name).needsRooting + +def union_native_type(t): + name = t.unroll().name + return '%s::%s' % (name, name) + + def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, isDefinitelyObject=False, isMember=False, @@ -576,7 +582,7 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, raise TypeError("Can't handle sequence arguments yet") if type.isUnion(): - declType = CGGeneric(type.name + "::" + type.name) + declType = CGGeneric(union_native_type(type)) if type.nullable(): declType = CGWrapper(declType, pre="Option<", post=" >") @@ -1075,7 +1081,7 @@ def getRetvalDeclarationForType(returnType, descriptorProvider): result = CGWrapper(result, pre="Option<", post=">") return result if returnType.isUnion(): - result = CGGeneric('%s::%s' % (returnType.unroll().name, returnType.unroll().name)) + result = CGGeneric(union_native_type(returnType)) if returnType.nullable(): result = CGWrapper(result, pre="Option<", post=">") return result @@ -4751,9 +4757,7 @@ class CGNativeMember(ClassMethod): return decl.define(), True, True if type.isUnion(): - if type.nullable(): - type = type.inner - return str(type) + "::" + str(type), False, True + return union_native_type(type), False, True if type.isGeckoInterface() and not type.isCallbackInterface(): iface = type.unroll().inner From d6321230dec2e8abd52b58c69d7e7f2e6ad76d58 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sun, 21 Sep 2014 16:13:05 +0200 Subject: [PATCH 2/2] Remove the glob import for UnionTypes. --- components/script/dom/bindings/codegen/CodegenRust.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index 3b02e2a0700..f73ccbb10fe 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -425,7 +425,7 @@ def typeNeedsRooting(type, descriptorProvider): def union_native_type(t): name = t.unroll().name - return '%s::%s' % (name, name) + return 'UnionTypes::%s::%s' % (name, name) def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, @@ -4543,9 +4543,8 @@ class CGBindingRoot(CGThing): 'dom::bindings::conversions::{FromJSValConvertible, ToJSValConvertible}', 'dom::bindings::conversions::IDLInterface', 'dom::bindings::conversions::{Default, Empty}', - 'dom::bindings::codegen::{PrototypeList, RegisterBindings}', + 'dom::bindings::codegen::{PrototypeList, RegisterBindings, UnionTypes}', 'dom::bindings::codegen::Bindings::*', - 'dom::bindings::codegen::UnionTypes::*', 'dom::bindings::error::{FailureUnknown, Fallible, Error, ErrorResult}', 'dom::bindings::error::throw_dom_exception', 'dom::bindings::error::throw_type_error',