diff options
-rw-r--r-- | compiler/ccgtypes.nim | 20 | ||||
-rw-r--r-- | tests/statictypes/tstaticimportcpp.nim | 6 |
2 files changed, 17 insertions, 9 deletions
diff --git a/compiler/ccgtypes.nim b/compiler/ccgtypes.nim index 82508e37e..66ad34c32 100644 --- a/compiler/ccgtypes.nim +++ b/compiler/ccgtypes.nim @@ -734,6 +734,16 @@ proc getTypeDescAux(m: BModule, origTyp: PType, check: var IntSet): Rope = let cppName = getTypeName(m, t, sig) var i = 0 var chunkStart = 0 + + template addResultType(ty: untyped) = + if ty == nil or ty.kind == tyVoid: + result.add(~"void") + elif ty.kind == tyStatic: + internalAssert m.config, ty.n != nil + result.add ty.n.renderTree + else: + result.add getTypeDescAux(m, ty, check) + while i < cppName.data.len: if cppName.data[i] == '\'': var chunkEnd = i-1 @@ -743,13 +753,7 @@ proc getTypeDescAux(m: BModule, origTyp: PType, check: var IntSet): Rope = chunkStart = i let typeInSlot = resolveStarsInCppType(origTyp, idx + 1, stars) - if typeInSlot == nil or typeInSlot.kind == tyVoid: - result.add(~"void") - elif typeInSlot.kind == tyStatic: - internalAssert m.config, typeInSlot.n != nil - result.add typeInSlot.n.renderTree - else: - result.add getTypeDescAux(m, typeInSlot, check) + addResultType(typeInSlot) else: inc i @@ -759,7 +763,7 @@ proc getTypeDescAux(m: BModule, origTyp: PType, check: var IntSet): Rope = result = cppName & "<" for i in 1 .. origTyp.len-2: if i > 1: result.add(" COMMA ") - result.add(getTypeDescAux(m, origTyp.sons[i], check)) + addResultType(origTyp.sons[i]) result.add("> ") # always call for sideeffects: assert t.kind != tyTuple diff --git a/tests/statictypes/tstaticimportcpp.nim b/tests/statictypes/tstaticimportcpp.nim index 0cbbc1df6..125dcb98d 100644 --- a/tests/statictypes/tstaticimportcpp.nim +++ b/tests/statictypes/tstaticimportcpp.nim @@ -1,6 +1,6 @@ discard """ targets: "cpp" -output: "[0, 0, 10, 0]\n5\n1.2\n15\ntest\n[0, 0, 20, 0]" +output: "[0, 0, 10, 0]\n5\n1.2\n15\ntest\n[0, 0, 20, 0]\n4" """ {.emit: """/*TYPESECTION*/ @@ -26,6 +26,8 @@ type GenericIntType {.importcpp: "GenericIntType<'0, '1>".} [N: static[int]; T] = object data: array[N, T] + GenericIntTypeAlt {.importcpp: "GenericIntType".} [N: static[int]; T] = object + GenericTType {.importcpp: "GenericTType<'0>".} [T] = object field: T @@ -40,6 +42,7 @@ var c = GenericTType[float]() d = SimpleStruct(field: 15) e = GenericTType[string](field: "test") + f = GenericIntTypeAlt[4, int8]() a.data[2] = 10 b.field = 5 @@ -57,3 +60,4 @@ proc plus(a, b: GenInt4): GenInt4 = echo plus(a, a).data +echo sizeof(f) |