summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorRegis Caillaud <35006197+Clonkk@users.noreply.github.com>2022-01-20 20:50:36 +0100
committerGitHub <noreply@github.com>2022-01-20 20:50:36 +0100
commit1563cb2f6e37f07c303d095dabde74955be1e523 (patch)
tree5caabb8a28b4d2e09e39bb46ab1a2587a799ca7c
parent927fa890ec91cf13d7e3aa87267b994c2812bdc8 (diff)
downloadNim-1563cb2f6e37f07c303d095dabde74955be1e523.tar.gz
Fix #11923 (#19427)
* Apply commit https://github.com/nim-lang/Nim/commit/5da931fe811717a45f2dd272ea6281979c3e8f0b that was never merged (was part of a bigger PR). Should fix issue #11932

* add a generic object for custom pragma
-rw-r--r--lib/core/macros.nim7
-rw-r--r--tests/pragmas/tcustom_pragma.nim10
2 files changed, 16 insertions, 1 deletions
diff --git a/lib/core/macros.nim b/lib/core/macros.nim
index 8ab893d21..28106493f 100644
--- a/lib/core/macros.nim
+++ b/lib/core/macros.nim
@@ -1523,7 +1523,12 @@ proc customPragmaNode(n: NimNode): NimNode =
   if n.kind in {nnkDotExpr, nnkCheckedFieldExpr}:
     let name = $(if n.kind == nnkCheckedFieldExpr: n[0][1] else: n[1])
     let typInst = getTypeInst(if n.kind == nnkCheckedFieldExpr or n[0].kind == nnkHiddenDeref: n[0][0] else: n[0])
-    var typDef = getImpl(if typInst.kind == nnkVarTy: typInst[0] else: typInst)
+    var typDef = getImpl(
+      if typInst.kind == nnkVarTy or
+         typInst.kind == nnkBracketExpr:
+        typInst[0]
+      else: typInst
+    )
     while typDef != nil:
       typDef.expectKind(nnkTypeDef)
       let typ = typDef[2]
diff --git a/tests/pragmas/tcustom_pragma.nim b/tests/pragmas/tcustom_pragma.nim
index b197a7c55..1c3709b26 100644
--- a/tests/pragmas/tcustom_pragma.nim
+++ b/tests/pragmas/tcustom_pragma.nim
@@ -17,11 +17,21 @@ block:
     MyObj = object
       myField1, myField2 {.myAttr: "hi".}: int
 
+    MyGenericObj[T] = object
+      myField1, myField2 {.myAttr: "hi".}: int
+
+
   var o: MyObj
   static:
     doAssert o.myField2.hasCustomPragma(myAttr)
     doAssert(not o.myField1.hasCustomPragma(myAttr))
 
+  var ogen: MyGenericObj[int]
+  static:
+    doAssert ogen.myField2.hasCustomPragma(myAttr)
+    doAssert(not ogen.myField1.hasCustomPragma(myAttr))
+
+
 import custom_pragma
 block: # A bit more advanced case
   type