summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/ccgtypes.nim20
-rw-r--r--tests/statictypes/tstaticimportcpp.nim6
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)