Fix return (#7225)
This commit is contained in:
parent
0a8684db4c
commit
9c7374abcd
2 changed files with 10 additions and 6 deletions
|
|
@ -71,14 +71,17 @@ type
|
||||||
PromiseJs* {.importcpp: "Promise".} = ref object
|
PromiseJs* {.importcpp: "Promise".} = ref object
|
||||||
## A JavaScript Promise
|
## A JavaScript Promise
|
||||||
|
|
||||||
|
|
||||||
proc replaceReturn(node: var NimNode) =
|
proc replaceReturn(node: var NimNode) =
|
||||||
var z = 0
|
var z = 0
|
||||||
for s in node:
|
for s in node:
|
||||||
var son = node[z]
|
var son = node[z]
|
||||||
|
let jsResolve = ident("jsResolve")
|
||||||
if son.kind == nnkReturnStmt:
|
if son.kind == nnkReturnStmt:
|
||||||
node[z] = nnkReturnStmt.newTree(nnkCall.newTree(ident("jsResolve"), son[0]))
|
let value = if son[0].kind != nnkEmpty: nnkCall.newTree(jsResolve, son[0]) else: jsResolve
|
||||||
|
node[z] = nnkReturnStmt.newTree(value)
|
||||||
elif son.kind == nnkAsgn and son[0].kind == nnkIdent and $son[0] == "result":
|
elif son.kind == nnkAsgn and son[0].kind == nnkIdent and $son[0] == "result":
|
||||||
node[z] = nnkAsgn.newTree(son[0], nnkCall.newTree(ident("jsResolve"), son[1]))
|
node[z] = nnkAsgn.newTree(son[0], nnkCall.newTree(jsResolve, son[1]))
|
||||||
else:
|
else:
|
||||||
replaceReturn(son)
|
replaceReturn(son)
|
||||||
inc z
|
inc z
|
||||||
|
|
@ -92,8 +95,7 @@ proc generateJsasync(arg: NimNode): NimNode =
|
||||||
assert arg.kind == nnkProcDef
|
assert arg.kind == nnkProcDef
|
||||||
result = arg
|
result = arg
|
||||||
var isVoid = false
|
var isVoid = false
|
||||||
var jsResolveNode = ident("jsResolve")
|
let jsResolve = ident("jsResolve")
|
||||||
|
|
||||||
if arg.params[0].kind == nnkEmpty:
|
if arg.params[0].kind == nnkEmpty:
|
||||||
result.params[0] = nnkBracketExpr.newTree(ident("Future"), ident("void"))
|
result.params[0] = nnkBracketExpr.newTree(ident("Future"), ident("void"))
|
||||||
isVoid = true
|
isVoid = true
|
||||||
|
|
@ -112,7 +114,7 @@ proc generateJsasync(arg: NimNode): NimNode =
|
||||||
var resolve: NimNode
|
var resolve: NimNode
|
||||||
if isVoid:
|
if isVoid:
|
||||||
resolve = quote:
|
resolve = quote:
|
||||||
var `jsResolveNode` {.importcpp: "undefined".}: Future[void]
|
var `jsResolve` {.importcpp: "undefined".}: Future[void]
|
||||||
else:
|
else:
|
||||||
resolve = quote:
|
resolve = quote:
|
||||||
proc jsResolve[T](a: T): Future[T] {.importcpp: "#".}
|
proc jsResolve[T](a: T): Future[T] {.importcpp: "#".}
|
||||||
|
|
@ -124,7 +126,7 @@ proc generateJsasync(arg: NimNode): NimNode =
|
||||||
|
|
||||||
if len(code) > 0 and isVoid:
|
if len(code) > 0 and isVoid:
|
||||||
var voidFix = quote:
|
var voidFix = quote:
|
||||||
return `jsResolveNode`
|
return `jsResolve`
|
||||||
result.body.add(voidFix)
|
result.body.add(voidFix)
|
||||||
|
|
||||||
result.pragma = quote:
|
result.pragma = quote:
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,8 @@ proc e: int {.discardable.} =
|
||||||
|
|
||||||
proc x(e: int): Future[void] {.async.} =
|
proc x(e: int): Future[void] {.async.} =
|
||||||
var s = await y(e)
|
var s = await y(e)
|
||||||
|
if e > 2:
|
||||||
|
return
|
||||||
echo s
|
echo s
|
||||||
e()
|
e()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue