aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/bindings/codegen/CodegenRust.py
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2013-09-12 14:36:06 -0700
committerJosh Matthews <josh@joshmatthews.net>2013-09-12 14:40:00 -0700
commita410651fbad7d4a558d5f7a8d9f240fd8cc614ae (patch)
tree4b753fda0fd34f69f4b82e9fe0f52afa050b89a3 /src/components/script/dom/bindings/codegen/CodegenRust.py
parent72b6978b24cc63ac2f9209cccb91203d579f3aee (diff)
downloadservo-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.py15
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):