From 28b301cbaa2d5ae6bc3b90013bfbb12bd40b60f9 Mon Sep 17 00:00:00 2001 From: Timothee Cour Date: Tue, 23 Mar 2021 00:33:09 -0700 Subject: [PATCH] fix #17454 (#17461) (cherry picked from commit d78ebe4a0eadb889255c77f6e375ecec9c706f19) --- lib/core/macros.nim | 20 +++++++++----------- tests/stdlib/tmacros.nim | 4 ++++ 2 files changed, 13 insertions(+), 11 deletions(-) create mode 100644 tests/stdlib/tmacros.nim diff --git a/lib/core/macros.nim b/lib/core/macros.nim index d2985bc72c..98f6b7a5fb 100644 --- a/lib/core/macros.nim +++ b/lib/core/macros.nim @@ -1256,7 +1256,15 @@ proc `body=`*(someProc: NimNode, val: NimNode) {.compileTime.} = else: badNodeKind someProc, "body=" -proc basename*(a: NimNode): NimNode {.compileTime, benign.} +proc basename*(a: NimNode): NimNode {.raises: [].} = + ## Pull an identifier from prefix/postfix expressions. + case a.kind + of nnkIdent: result = a + of nnkPostfix, nnkPrefix: result = a[1] + of nnkPragmaExpr: result = basename(a[0]) + else: + error("Do not know how to get basename of (" & treeRepr(a) & ")\n" & + repr(a), a) proc `$`*(node: NimNode): string {.compileTime.} = ## Get the string of an identifier node. @@ -1316,16 +1324,6 @@ proc insert*(a: NimNode; pos: int; b: NimNode) {.compileTime.} = a[i + 1] = a[i] a[pos] = b -proc basename*(a: NimNode): NimNode = - ## Pull an identifier from prefix/postfix expressions. - case a.kind - of nnkIdent: result = a - of nnkPostfix, nnkPrefix: result = a[1] - of nnkPragmaExpr: result = basename(a[0]) - else: - error("Do not know how to get basename of (" & treeRepr(a) & ")\n" & - repr(a), a) - proc `basename=`*(a: NimNode; val: string) {.compileTime.}= case a.kind of nnkIdent: diff --git a/tests/stdlib/tmacros.nim b/tests/stdlib/tmacros.nim new file mode 100644 index 0000000000..d22250221e --- /dev/null +++ b/tests/stdlib/tmacros.nim @@ -0,0 +1,4 @@ +import macros + +block: # bug #17454 + proc f(v: NimNode): string {.raises: [].} = $v