diff options
-rw-r--r-- | lib/core/macros.nim | 4 | ||||
-rw-r--r-- | tests/pragmas/tcustom_pragma.nim | 20 |
2 files changed, 23 insertions, 1 deletions
diff --git a/lib/core/macros.nim b/lib/core/macros.nim index 8a1be3720..345c53b08 100644 --- a/lib/core/macros.nim +++ b/lib/core/macros.nim @@ -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 diff --git a/tests/pragmas/tcustom_pragma.nim b/tests/pragmas/tcustom_pragma.nim index a5f86b54d..d7b199a22 100644 --- a/tests/pragmas/tcustom_pragma.nim +++ b/tests/pragmas/tcustom_pragma.nim @@ -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 |