* Apply commit 5da931fe81 that was never merged (was part of a bigger PR). Should fix issue #11932
* add a generic object for custom pragma
This commit is contained in:
parent
927fa890ec
commit
1563cb2f6e
2 changed files with 16 additions and 1 deletions
|
|
@ -1523,7 +1523,12 @@ proc customPragmaNode(n: NimNode): NimNode =
|
||||||
if n.kind in {nnkDotExpr, nnkCheckedFieldExpr}:
|
if n.kind in {nnkDotExpr, nnkCheckedFieldExpr}:
|
||||||
let name = $(if n.kind == nnkCheckedFieldExpr: n[0][1] else: n[1])
|
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])
|
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:
|
while typDef != nil:
|
||||||
typDef.expectKind(nnkTypeDef)
|
typDef.expectKind(nnkTypeDef)
|
||||||
let typ = typDef[2]
|
let typ = typDef[2]
|
||||||
|
|
|
||||||
|
|
@ -17,11 +17,21 @@ block:
|
||||||
MyObj = object
|
MyObj = object
|
||||||
myField1, myField2 {.myAttr: "hi".}: int
|
myField1, myField2 {.myAttr: "hi".}: int
|
||||||
|
|
||||||
|
MyGenericObj[T] = object
|
||||||
|
myField1, myField2 {.myAttr: "hi".}: int
|
||||||
|
|
||||||
|
|
||||||
var o: MyObj
|
var o: MyObj
|
||||||
static:
|
static:
|
||||||
doAssert o.myField2.hasCustomPragma(myAttr)
|
doAssert o.myField2.hasCustomPragma(myAttr)
|
||||||
doAssert(not o.myField1.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
|
import custom_pragma
|
||||||
block: # A bit more advanced case
|
block: # A bit more advanced case
|
||||||
type
|
type
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue