From 8bcc7e8b9ea39524bac14f6c89de5213509f4099 Mon Sep 17 00:00:00 2001 From: b3liever <43617260+b3liever@users.noreply.github.com> Date: Tue, 7 Jan 2020 12:25:51 +0200 Subject: [PATCH] basename supports pragmaexpr (#13045) * basename supports pragmaexpr * update changelog --- changelogs/changelog_X_XX_X.md | 3 ++- lib/core/macros.nim | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/changelogs/changelog_X_XX_X.md b/changelogs/changelog_X_XX_X.md index ece2702ba..10fcb6fce 100644 --- a/changelogs/changelog_X_XX_X.md +++ b/changelogs/changelog_X_XX_X.md @@ -16,7 +16,8 @@ - `set[T].len` is now an alias for `set[T].card` (cardinality) ## Library changes - +- `macros.basename` and `basename=` got support for `PragmaExpr`, + so that an expression like `MyEnum {.pure.}` is handled correctly. ## Language additions diff --git a/lib/core/macros.nim b/lib/core/macros.nim index b513be403..f97b4a15f 100644 --- a/lib/core/macros.nim +++ b/lib/core/macros.nim @@ -1328,8 +1328,9 @@ proc insert*(a: NimNode; pos: int; b: NimNode) {.compileTime.} = proc basename*(a: NimNode): NimNode = ## Pull an identifier from prefix/postfix expressions. case a.kind - of nnkIdent: return a - of nnkPostfix, nnkPrefix: return a[1] + 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) @@ -1340,6 +1341,7 @@ proc `basename=`*(a: NimNode; val: string) {.compileTime.}= a.strVal = val of nnkPostfix, nnkPrefix: a[1] = ident(val) + of nnkPragmaExpr: `basename=`(a[0], val) else: error("Do not know how to get basename of (" & treeRepr(a) & ")\n" & repr(a), a)