summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorhlaaftana <10591326+hlaaftana@users.noreply.github.com>2021-12-05 08:44:22 +0300
committerGitHub <noreply@github.com>2021-12-05 06:44:22 +0100
commit1ef945668d458163cb7116a8c936ff92b63d679d (patch)
tree1a2a614f5359922ed1bf94f02ade77002e4ce637 /compiler
parentc658de24b04be9f898359a4091c5815f28de8785 (diff)
downloadNim-1ef945668d458163cb7116a8c936ff92b63d679d.tar.gz
treat do with pragmas but no parens as proc (#19191)
fixes #19188
Diffstat (limited to 'compiler')
-rw-r--r--compiler/parser.nim12
1 files changed, 9 insertions, 3 deletions
diff --git a/compiler/parser.nim b/compiler/parser.nim
index 0ef6d1f54..9ff847ef6 100644
--- a/compiler/parser.nim
+++ b/compiler/parser.nim
@@ -1110,11 +1110,14 @@ proc optPragmas(p: var Parser): PNode =
 
 proc parseDoBlock(p: var Parser; info: TLineInfo): PNode =
   #| doBlock = 'do' paramListArrow pragma? colcom stmt
-  let params = parseParamList(p, retColon=false)
+  var params = parseParamList(p, retColon=false)
   let pragmas = optPragmas(p)
   colcom(p, result)
   result = parseStmt(p)
-  if params.kind != nkEmpty:
+  if params.kind != nkEmpty or pragmas.kind != nkEmpty:
+    if params.kind == nkEmpty:
+      params = newNodeP(nkFormalParams, p)
+      params.add(p.emptyNode) # return type
     result = newProcNode(nkDo, info,
       body = result, params = params, name = p.emptyNode, pattern = p.emptyNode,
       genericParams = p.emptyNode, pragmas = pragmas, exceptions = p.emptyNode)
@@ -1381,7 +1384,10 @@ proc postExprBlocks(p: var Parser, x: PNode): PNode =
       if stmtList[0].kind == nkStmtList: stmtList = stmtList[0]
 
       stmtList.flags.incl nfBlockArg
-      if openingParams.kind != nkEmpty:
+      if openingParams.kind != nkEmpty or openingPragmas.kind != nkEmpty:
+        if openingParams.kind == nkEmpty:
+          openingParams = newNodeP(nkFormalParams, p)
+          openingParams.add(p.emptyNode) # return type
         result.add newProcNode(nkDo, stmtList.info, body = stmtList,
                                params = openingParams,
                                name = p.emptyNode, pattern = p.emptyNode,