From ca7bf3be8b5641716b9c9e75b0fdca9ca308c0e0 Mon Sep 17 00:00:00 2001 From: Jasper Jenkins Date: Wed, 11 Sep 2019 23:19:53 -0700 Subject: [PATCH] no commas for empty importcpp splat params (#12183) --- compiler/ccgcalls.nim | 13 ++++++++----- tests/cpp/tempty_generic_obj.nim | 11 +++++++++-- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/compiler/ccgcalls.nim b/compiler/ccgcalls.nim index 84b59d6328..686eb8fde9 100644 --- a/compiler/ccgcalls.nim +++ b/compiler/ccgcalls.nim @@ -394,11 +394,14 @@ proc genPatternCall(p: BProc; ri: PNode; pat: string; typ: PType): Rope = while i < pat.len: case pat[i] of '@': - if j < ri.len: - result.add genOtherArg(p, ri, j, typ) - for k in j+1 ..< ri.len: - result.add(~", ") - result.add genOtherArg(p, ri, k, typ) + var first = true + for k in j ..< ri.len: + let arg = genOtherArg(p, ri, k, typ) + if arg.len > 0: + if not first: + result.add(~", ") + first = false + result.add arg inc i of '#': if i+1 < pat.len and pat[i+1] in {'+', '@'}: diff --git a/tests/cpp/tempty_generic_obj.nim b/tests/cpp/tempty_generic_obj.nim index b61c699f64..d05a82f9a9 100644 --- a/tests/cpp/tempty_generic_obj.nim +++ b/tests/cpp/tempty_generic_obj.nim @@ -8,7 +8,7 @@ import typetraits # bug #4625 type - Vector {.importcpp: "std::vector<'0 >", header: "vector".} [T] = object + Vector[T] {.importcpp: "std::vector<'0 >", header: "vector".} = object proc initVector[T](): Vector[T] {.importcpp: "'0(@)", header: "vector", constructor.} @@ -24,7 +24,7 @@ vf.doSomething() # Nim uses doSomething[int] here in C++ # Alternative definition: # https://github.com/nim-lang/Nim/issues/7653 -type VectorAlt* {.importcpp: "std::vector", header: "", nodecl.} [T] = object +type VectorAlt*[T] {.importcpp: "std::vector", header: "", nodecl.} = object proc mkVector*[T]: VectorAlt[T] {.importcpp: "std::vector<'*0>()", header: "", constructor, nodecl.} proc foo(): VectorAlt[cint] = @@ -36,3 +36,10 @@ proc bar(): VectorAlt[cstring] = var x = foo() var y = bar() +proc init[T; Self: Vector[T]](_: typedesc[Self], n: csize): Vector[T] + {.importcpp: "std::vector<'*0>(@)", header: "", constructor, nodecl.} +proc size[T](x: Vector[T]): csize + {.importcpp: "#.size()", header: "", nodecl.} + +var z = Vector[int16].init(32) +assert z.size == 32