summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--lib/pure/future.nim11
-rw-r--r--tests/closure/tclosuremacro.nim8
2 files changed, 13 insertions, 6 deletions
diff --git a/lib/pure/future.nim b/lib/pure/future.nim
index 2401c4f72..349ee2dcc 100644
--- a/lib/pure/future.nim
+++ b/lib/pure/future.nim
@@ -26,8 +26,15 @@ proc createProcType(p, b: PNimrodNode): PNimrodNode {.compileTime.} =
     for i in 0 .. <p.len:
       let ident = p[i]
       var identDefs = newNimNode(nnkIdentDefs)
-      identDefs.add newIdentNode("i" & $i)
-      identDefs.add(ident)
+      case ident.kind
+      of nnkExprColonExpr:
+        identDefs.add ident[0]
+        identDefs.add ident[1]
+      of nnkIdent:
+        identDefs.add newIdentNode("i" & $i)
+        identDefs.add(ident)
+      else:
+        error("Incorrect type list in proc type declaration.")
       identDefs.add newEmptyNode()
       formalParams.add identDefs
   of nnkIdent:
diff --git a/tests/closure/tclosuremacro.nim b/tests/closure/tclosuremacro.nim
index 008078bbb..12e463316 100644
--- a/tests/closure/tclosuremacro.nim
+++ b/tests/closure/tclosuremacro.nim
@@ -5,6 +5,7 @@ discard """
 3
 3
 noReturn
+6
 '''
 """
 
@@ -36,8 +37,7 @@ echo doWithOneAndTwo((x, y) => x + y)
 
 noReturn(() -> void => echo("noReturn"))
 
-when false:
-  proc pass2(f: (int, int) -> int): (int) -> int =
-    (x: int) -> int => f(2, x)
+proc pass2(f: (int, int) -> int): (int) -> int =
+  (x: int) -> int => f(2, x)
 
-  #echo pass2((x, y) => x + y)
+echo pass2((x, y) => x + y)(4)