summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJake Leahy <jake@leahy.dev>2023-12-06 14:59:38 +1100
committerGitHub <noreply@github.com>2023-12-06 04:59:38 +0100
commit44b64e726ec4aa9076d2d69e88c5d593131f8ee3 (patch)
treeb6654c4645b5bcab0ab02fe9b93b8dfdd17da286
parentd20b4d5168780b9c6a3bd2fde28b171cb7414c98 (diff)
downloadNim-44b64e726ec4aa9076d2d69e88c5d593131f8ee3.tar.gz
Don't recurse into inner functions during asyncjs transform (#23036)
Closes #13341
-rw-r--r--lib/js/asyncjs.nim2
-rw-r--r--tests/js/tasyncjs.nim5
2 files changed, 7 insertions, 0 deletions
diff --git a/lib/js/asyncjs.nim b/lib/js/asyncjs.nim
index 8e2f85156..045d1e6b5 100644
--- a/lib/js/asyncjs.nim
+++ b/lib/js/asyncjs.nim
@@ -90,6 +90,8 @@ proc replaceReturn(node: var NimNode) =
       node[z] = nnkReturnStmt.newTree(value)
     elif son.kind == nnkAsgn and son[0].kind == nnkIdent and $son[0] == "result":
       node[z] = nnkAsgn.newTree(son[0], nnkCall.newTree(jsResolve, son[1]))
+    elif son.kind in RoutineNodes:
+      discard
     else:
       replaceReturn(son)
     inc z
diff --git a/tests/js/tasyncjs.nim b/tests/js/tasyncjs.nim
index 3de143643..f3b273c44 100644
--- a/tests/js/tasyncjs.nim
+++ b/tests/js/tasyncjs.nim
@@ -99,4 +99,9 @@ block asyncPragmaInType:
   proc foo() {.async.} = discard
   var x: Handler = foo
 
+block: # 13341
+  proc f {.async.} =
+    proc g: int =
+      result = 123
+
 discard main()