aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/codegen/CodegenRust.py
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2015-11-13 04:22:11 +0530
committerbors-servo <lbergstrom+bors@mozilla.com>2015-11-13 04:22:11 +0530
commitc44c73aa00ced6235266bd692833e22018f31138 (patch)
tree2ea99dbe608d1595a739b118cd2153c29ffa3b76 /components/script/dom/bindings/codegen/CodegenRust.py
parentfafc280179ddafab878dd261121cee17ba3b921c (diff)
parentd4ce25d07c3a76237f9a8f3631a13f86fa465359 (diff)
downloadservo-c44c73aa00ced6235266bd692833e22018f31138.tar.gz
servo-c44c73aa00ced6235266bd692833e22018f31138.zip
Auto merge of #8498 - nox:fix-variadic-and-default-arguments, r=jdm
Properly handle variadic arguments preceded by default values I broke that in #8197. <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/8498) <!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/bindings/codegen/CodegenRust.py')
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py19
1 files changed, 10 insertions, 9 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index 14a26268efd..226587b5283 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -1184,22 +1184,23 @@ class CGArgumentConverter(CGThing):
template, variadicConversion, declType, "slot")]
arg = "arg%d" % index
- vec = "Vec::with_capacity((%(argc)s - %(index)s) as usize)" % {'argc': argc, 'index': index}
if argument.type.isGeckoInterface():
- code = "let mut %s = RootedVec::new();\n*%s = %s;\n" % (arg, arg, vec)
+ vec = "RootedVec::new()"
innerConverter.append(CGGeneric("%s.push(JS::from_ref(&*slot));" % arg))
else:
- code = "let mut %s = %s;\n" % (arg, vec)
+ vec = "vec![]"
innerConverter.append(CGGeneric("%s.push(slot);" % arg))
- inner = CGIndenter(CGList(innerConverter, "\n"), 4).define()
+ inner = CGIndenter(CGList(innerConverter, "\n"), 8).define()
- code += """\
-for variadicArg in %(index)s..%(argc)s {
+ self.converter = CGGeneric("""\
+let mut %(arg)s = %(vec)s;
+if %(argc)s > %(index)s {
+ %(arg)s.reserve(%(argc)s as usize - %(index)s);
+ for variadicArg in %(index)s..%(argc)s {
%(inner)s
-}""" % {'argc': argc, 'index': index, 'inner': inner}
-
- self.converter = CGGeneric(code)
+ }
+}""" % {'arg': arg, 'argc': argc, 'index': index, 'inner': inner, 'vec': vec})
def define(self):
return self.converter.define()