diff options
author | metagn <metagngn@gmail.com> | 2023-04-11 10:37:53 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-11 09:37:53 +0200 |
commit | be06446ffecd7665651a25d6b07fade5cc019296 (patch) | |
tree | f92c7b3eb87146a9fde7dc85a29fd6af8f40a1d0 | |
parent | 1bb117cd7a49954832d21e6a1502492770acb77b (diff) | |
download | Nim-be06446ffecd7665651a25d6b07fade5cc019296.tar.gz |
fix #15691 (#21623)
`semProcAux` has a check for `checkMinSonsLen(n, bodyPos + 1)`
-rw-r--r-- | compiler/semstmts.nim | 2 | ||||
-rw-r--r-- | tests/macros/t15691.nim | 22 |
2 files changed, 22 insertions, 2 deletions
diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index 10cf65305..ff144ea2e 100644 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -2303,7 +2303,6 @@ proc semMethod(c: PContext, n: PNode): PNode = proc semConverterDef(c: PContext, n: PNode): PNode = if not isTopLevel(c): localError(c.config, n.info, errXOnlyAtModuleScope % "converter") - checkSonsLen(n, bodyPos + 1, c.config) result = semProcAux(c, n, skConverter, converterPragmas) # macros can transform converters to nothing: if namePos >= result.safeLen: return result @@ -2318,7 +2317,6 @@ proc semConverterDef(c: PContext, n: PNode): PNode = addConverterDef(c, LazySym(sym: s)) proc semMacroDef(c: PContext, n: PNode): PNode = - checkSonsLen(n, bodyPos + 1, c.config) result = semProcAux(c, n, skMacro, macroPragmas) # macros can transform macros to nothing: if namePos >= result.safeLen: return result diff --git a/tests/macros/t15691.nim b/tests/macros/t15691.nim new file mode 100644 index 000000000..c1e8a8648 --- /dev/null +++ b/tests/macros/t15691.nim @@ -0,0 +1,22 @@ +discard """ + action: compile +""" + +import std/macros + +macro simplifiedExpandMacros(body: typed): untyped = + result = body + +simplifiedExpandMacros: + proc testProc() = discard + +simplifiedExpandMacros: + template testTemplate(): untyped = discard + +# Error: illformed AST: macro testMacro(): untyped = +simplifiedExpandMacros: + macro testMacro(): untyped = discard + +# Error: illformed AST: converter testConverter(x: int): float = +simplifiedExpandMacros: + converter testConverter(x: int): float = discard |