summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/ast.nim2
-rw-r--r--compiler/semtypes.nim8
-rw-r--r--tests/metatype/tautoproc.nim16
3 files changed, 24 insertions, 2 deletions
diff --git a/compiler/ast.nim b/compiler/ast.nim
index 7ff22e184..516954b88 100644
--- a/compiler/ast.nim
+++ b/compiler/ast.nim
@@ -1048,7 +1048,7 @@ proc discardSons(father: PNode) =
   father.sons = nil
 
 when defined(useNodeIds):
-  const nodeIdToDebug* = 482228 # 612794
+  const nodeIdToDebug* = 310841 # 612794
   #612840 # 612905 # 614635 # 614637 # 614641
   # 423408
   #429107 # 430443 # 441048 # 441090 # 441153
diff --git a/compiler/semtypes.nim b/compiler/semtypes.nim
index 0ecdeb529..b075e603d 100644
--- a/compiler/semtypes.nim
+++ b/compiler/semtypes.nim
@@ -864,7 +864,13 @@ proc semProcTypeNode(c: PContext, n, genericParams: PNode,
   var counter = 0
   for i in countup(1, n.len - 1):
     var a = n.sons[i]
-    if a.kind != nkIdentDefs: illFormedAst(a)
+    if a.kind != nkIdentDefs:
+      # for some generic instantiations the passed ':env' parameter
+      # for closures has already been produced (see bug #898). We simply
+      # skip this parameter here. It'll then be re-generated in another LL
+      # pass over this instantiation:
+      if a.kind == nkSym and sfFromGeneric in a.sym.flags: continue
+      illFormedAst(a)
     checkMinSonsLen(a, 3)
     var
       typ: PType = nil
diff --git a/tests/metatype/tautoproc.nim b/tests/metatype/tautoproc.nim
new file mode 100644
index 000000000..9e8ff0bcb
--- /dev/null
+++ b/tests/metatype/tautoproc.nim
@@ -0,0 +1,16 @@
+# bug #898
+
+proc measureTime(e: auto) =
+  discard
+
+proc generate(a: int): void =
+  discard
+
+proc runExample =
+  var builder: int = 0
+
+  measureTime:
+    builder.generate()
+
+measureTime:
+  discard