summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorjcosborn <jcosborn@users.noreply.github.com>2018-10-30 00:41:12 -0500
committerAndreas Rumpf <rumpf_a@web.de>2018-10-30 06:41:12 +0100
commit69c0a9c6fb688d382d83c165860006977dd6bf04 (patch)
tree2b24bd098fa8df10fea6912b09c952ad455393b1
parente377c55c10d4faea8f8d1ccd8b826bfeb7fe46db (diff)
downloadNim-69c0a9c6fb688d382d83c165860006977dd6bf04.tar.gz
getTypeImpl now returns pragmas for object types (#9538)
-rw-r--r--compiler/vmdeps.nim16
-rw-r--r--tests/macros/tgettypeinst.nim18
2 files changed, 25 insertions, 9 deletions
diff --git a/compiler/vmdeps.nim b/compiler/vmdeps.nim
index 2dfe2d91f..8aac5fb87 100644
--- a/compiler/vmdeps.nim
+++ b/compiler/vmdeps.nim
@@ -82,12 +82,9 @@ proc mapTypeToAstX(cache: IdentCache; t: PType; info: TLineInfo;
     id
   template newIdentDefs(s): untyped = newIdentDefs(s, s.typ)
 
-  if inst:
-    if t.sym != nil:  # if this node has a symbol
-      if not allowRecursion:  # getTypeInst behavior: return symbol
-        return atomicType(t.sym)
-      #else:  # getTypeImpl behavior: turn off recursion
-      #  allowRecursion = false
+  if inst and not allowRecursion and t.sym != nil:
+    # getTypeInst behavior: return symbol
+    return atomicType(t.sym)
 
   case t.kind
   of tyNone: result = atomicType("none", mNone)
@@ -160,9 +157,10 @@ proc mapTypeToAstX(cache: IdentCache; t: PType; info: TLineInfo;
   of tyObject:
     if inst:
       result = newNodeX(nkObjectTy)
-      result.add newNodeI(nkEmpty, info)  # pragmas not reconstructed yet
-      if t.sons[0] == nil: result.add newNodeI(nkEmpty, info)  # handle parent object
-      else:
+      result.add t.sym.ast[2][0].copyTree  # copy object pragmas
+      if t.sons[0] == nil:
+        result.add newNodeI(nkEmpty, info)
+      else:  # handle parent object
         var nn = newNodeX(nkOfInherit)
         nn.add mapTypeToAst(t.sons[0], info)
         result.add nn
diff --git a/tests/macros/tgettypeinst.nim b/tests/macros/tgettypeinst.nim
index 2f1abe193..6a99dc8b7 100644
--- a/tests/macros/tgettypeinst.nim
+++ b/tests/macros/tgettypeinst.nim
@@ -183,3 +183,21 @@ test(Vec4[float32]):
 # bug #4862
 static:
   discard typedesc[(int, int)].getTypeImpl
+
+# custom pragmas
+template myAttr() {.pragma.}
+template myAttr2() {.pragma.}
+template myAttr3() {.pragma.}
+template serializationKey(key: string) {.pragma.}
+
+type
+  MyObj = object {.packed,myAttr,serializationKey: "one".}
+    myField {.myAttr2,serializationKey: "two".}: int
+    myField2 {.myAttr3,serializationKey: "three".}: float
+
+# field pragmas not currently supported
+test(MyObj):
+  type
+    _ = object {.packed,myAttr,serializationKey: "one".}
+      myField: int
+      myField2: float