diff options
-rw-r--r-- | lib/pure/future.nim | 11 | ||||
-rw-r--r-- | tests/closure/tclosuremacro.nim | 8 |
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) |