diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2015-11-12 21:10:45 +0100 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2015-11-12 21:10:45 +0100 |
commit | d4ce25d07c3a76237f9a8f3631a13f86fa465359 (patch) | |
tree | 1f8e54b33d18a9871cc31b411a8b9d7086b8f703 /components/script/dom/bindings/codegen/CodegenRust.py | |
parent | e394c0d85968677216da0ab923761b21cbe029a7 (diff) | |
download | servo-d4ce25d07c3a76237f9a8f3631a13f86fa465359.tar.gz servo-d4ce25d07c3a76237f9a8f3631a13f86fa465359.zip |
Properly handle variadic arguments preceded by default values
I broke that in #8197.
Diffstat (limited to 'components/script/dom/bindings/codegen/CodegenRust.py')
-rw-r--r-- | components/script/dom/bindings/codegen/CodegenRust.py | 19 |
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 260ef1e9006..33928ad8206 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -1189,22 +1189,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() |