mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-14 23:33:28 +00:00
* fixes #8371, macros.hasCustomPragma doesn't crash anymore * fix macros.hasCustomPragma
This commit is contained in:
@@ -1284,7 +1284,7 @@ proc customPragmaNode(n: NimNode): NimNode =
|
||||
let
|
||||
typ = n.getTypeInst()
|
||||
|
||||
if typ.kind == nnkBracketExpr and typ.len > 1 and typ[1].kind == nnkProcTy:
|
||||
if typ.kind == nnkBracketExpr and typ.len > 1 and typ[1].kind == nnkProcTy:
|
||||
return typ[1][1]
|
||||
elif typ.typeKind == ntyTypeDesc:
|
||||
let impl = typ[1].getImpl()
|
||||
@@ -1319,6 +1319,8 @@ proc customPragmaNode(n: NimNode): NimNode =
|
||||
if identDefs.kind == nnkRecCase:
|
||||
identDefsStack.add(identDefs[0])
|
||||
for i in 1..<identDefs.len:
|
||||
# if it is and empty branch, skip
|
||||
if identDefs[i][0].kind == nnkNilLit: continue
|
||||
if identDefs[i][1].kind == nnkIdentDefs:
|
||||
identDefsStack.add(identDefs[i][1])
|
||||
else: # nnkRecList
|
||||
|
||||
@@ -154,3 +154,23 @@ block:
|
||||
let a: proc(x: int) {.defaultValue(5).} = nil
|
||||
static:
|
||||
doAssert hasCustomPragma(a.type, defaultValue)
|
||||
|
||||
# bug #8371
|
||||
template thingy {.pragma.}
|
||||
|
||||
type
|
||||
Cardinal = enum
|
||||
north, east, south, west
|
||||
Something = object
|
||||
a: float32
|
||||
case cardinal: Cardinal
|
||||
of north:
|
||||
b {.thingy.}: int
|
||||
of east:
|
||||
c: int
|
||||
of south: discard
|
||||
else: discard
|
||||
|
||||
var foo: Something
|
||||
foo.cardinal = north
|
||||
doAssert foo.b.hasCustomPragma(thingy) == true
|
||||
|
||||
Reference in New Issue
Block a user