Fix getting custom pragma from generic object (#20481)
* Merge devel Add another test case * Fix test Use getCustomPragmaVal instead of hasCustomPragma Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
This commit is contained in:
parent
e4e947232b
commit
1e52423774
2 changed files with 19 additions and 1 deletions
|
|
@ -1591,7 +1591,7 @@ proc customPragmaNode(n: NimNode): NimNode =
|
||||||
elif impl.kind in {nnkIdentDefs, nnkConstDef} and impl[0].kind == nnkPragmaExpr:
|
elif impl.kind in {nnkIdentDefs, nnkConstDef} and impl[0].kind == nnkPragmaExpr:
|
||||||
return impl[0][1]
|
return impl[0][1]
|
||||||
else:
|
else:
|
||||||
let timpl = typ.getImpl()
|
let timpl = getImpl(if typ.kind == nnkBracketExpr: typ[0] else: typ)
|
||||||
if timpl.len>0 and timpl[0].len>1:
|
if timpl.len>0 and timpl[0].len>1:
|
||||||
return timpl[0][1]
|
return timpl[0][1]
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
|
|
@ -157,3 +157,21 @@ block: # bug #19020
|
||||||
static:
|
static:
|
||||||
doAssert $bar.getCustomPragmaVal(typ) == "foo"
|
doAssert $bar.getCustomPragmaVal(typ) == "foo"
|
||||||
doAssert $bar.getCustomPragmaVal(typ) == "foo"
|
doAssert $bar.getCustomPragmaVal(typ) == "foo"
|
||||||
|
|
||||||
|
block hasCustomPragmaGeneric:
|
||||||
|
template examplePragma() {.pragma.}
|
||||||
|
type
|
||||||
|
Foo[T] {.examplePragma.} = object
|
||||||
|
x {.examplePragma.}: T
|
||||||
|
var f: Foo[string]
|
||||||
|
doAssert f.hasCustomPragma(examplePragma)
|
||||||
|
doAssert f.x.hasCustomPragma(examplePragma)
|
||||||
|
|
||||||
|
block getCustomPragmaValGeneric:
|
||||||
|
template examplePragma(x: int) {.pragma.}
|
||||||
|
type
|
||||||
|
Foo[T] {.examplePragma(42).} = object
|
||||||
|
x {.examplePragma(25).}: T
|
||||||
|
var f: Foo[string]
|
||||||
|
doAssert f.getCustomPragmaVal(examplePragma) == 42
|
||||||
|
doAssert f.x.getCustomPragmaVal(examplePragma) == 25
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue