diff options
author | Josh Matthews <josh@joshmatthews.net> | 2013-09-12 14:36:06 -0700 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2013-09-12 14:40:00 -0700 |
commit | a410651fbad7d4a558d5f7a8d9f240fd8cc614ae (patch) | |
tree | 4b753fda0fd34f69f4b82e9fe0f52afa050b89a3 /src/components/script/dom/bindings/codegen/CodegenRust.py | |
parent | 72b6978b24cc63ac2f9209cccb91203d579f3aee (diff) | |
download | servo-a410651fbad7d4a558d5f7a8d9f240fd8cc614ae.tar.gz servo-a410651fbad7d4a558d5f7a8d9f240fd8cc614ae.zip |
Make Element.set_attr require an AbstractNode so we can always downcast.
Diffstat (limited to 'src/components/script/dom/bindings/codegen/CodegenRust.py')
-rw-r--r-- | src/components/script/dom/bindings/codegen/CodegenRust.py | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 92f1f73c17d..1e433b25608 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -3140,8 +3140,8 @@ class CGSetterCall(CGPerSignatureCall): A class to generate a native object setter call for a particular IDL setter. """ - def __init__(self, argType, nativeMethodName, descriptor, attr): - CGPerSignatureCall.__init__(self, None, [], + def __init__(self, argsPre, argType, nativeMethodName, descriptor, attr): + CGPerSignatureCall.__init__(self, None, argsPre, [FakeArgument(argType, attr)], nativeMethodName, False, descriptor, attr, setter=True) @@ -3357,9 +3357,16 @@ class CGSpecializedSetter(CGAbstractExternMethod): def definition_body(self): name = self.attr.identifier.name nativeName = "Set" + MakeNativeName(self.descriptor.binaryNames.get(name, name)) - return CGWrapper(CGIndenter(CGSetterCall(self.attr.type, nativeName, + argsPre = [] + extraPre = '' + if name in self.descriptor.needsAbstract: + abstractName = re.sub(r'<\w+>', '', self.descriptor.nativeType) + extraPre = ' let abstract_this = %s::from_box(this);\n' % abstractName + argsPre = ['abstract_this'] + return CGWrapper(CGIndenter(CGSetterCall(argsPre, self.attr.type, nativeName, self.descriptor, self.attr)), - pre=" let obj = (*obj.unnamed);\n" + + pre=extraPre + + " let obj = (*obj.unnamed);\n" + " let this = &mut (*this).payload;\n").define() def infallibleForMember(member, type, descriptorProvider): |