diff --git a/src/apatheia/macroutils.nim b/src/apatheia/macroutils.nim index 7133c27..8d615fe 100644 --- a/src/apatheia/macroutils.nim +++ b/src/apatheia/macroutils.nim @@ -121,11 +121,11 @@ proc identPub*(name: string): NimNode = result = nnkPostfix.newTree(newIdentNode("*"), ident name) proc procIdentAppend*(id: NimNode, name: string): NimNode = + result = id.copyNimTree() if id.kind == nnkPostfix: - result = id result[1] = ident(result[1].strVal & name) else: - result = ident(result.strVal & name) + result = ident(id.strVal & name) proc mkCall*(callName, params: NimNode): NimNode = ## Create local variables for each parameter in the actual RPC call proc @@ -143,4 +143,4 @@ proc mkProc*(name, params, body: NimNode): NimNode = `body` result[3].del(0) for arg in args: - result[3].add arg + result.params.add arg diff --git a/src/apatheia/tasks.nim b/src/apatheia/tasks.nim index 5c84d91..032b30c 100644 --- a/src/apatheia/tasks.nim +++ b/src/apatheia/tasks.nim @@ -29,20 +29,22 @@ macro asyncTask*(p: untyped): untyped = echo "name: ", name # echo "ASYNC_TASK: call: \n", tcall.treeRepr - var asyncBody = newStmtList() - for paramId, paramType in paramsIter(params): - echo "param: ", paramId, " tp: ", paramType.treeRepr - asyncBody.add newCall("checkParamType", paramId) - let tcall = mkCall(ident name, params) - # echo "asyncTask:checks:\n", asyncBody.repr - # echo "asyncTask:tcall: ", tcall.repr - - echo "asyncTask:body:\n", body.repr let tp = mkProc(procId.procIdentAppend("Tasklet"), params, body) + var asyncBody = newStmtList() + let tcall = newCall(ident name) + for paramId, paramType in paramsIter(params): + echo "param: ", paramId, " tp: ", paramType.treeRepr + tcall.add newCall("checkParamType", paramId) + asyncBody.add tcall + let fn = mkProc(procId, params, asyncBody) + + # echo "asyncTask:fn:body:\n", fn.treerepr + result = newStmtList() result.add tp + result.add fn echo "asyncTask:body:\n", result.repr # echo "asyncTask:body:\n", result.treeRepr diff --git a/tests/tjobs.nim b/tests/tjobs.nim index 8888d8e..b6cdf1c 100644 --- a/tests/tjobs.nim +++ b/tests/tjobs.nim @@ -32,7 +32,7 @@ suite "async tests": var jobs = newJobQueue[float](taskpool = tp) echo "\nstart" - let res = await jobs.submit(addNums(1.0, 2.0,)) + let res = await jobs.submit(addNums2(1.0, 2.0,)) # await sleepAsync(100.milliseconds) echo "result: ", res.repr diff --git a/tests/ttasks.nim b/tests/ttasks.nim index 24909c5..235ac8c 100644 --- a/tests/ttasks.nim +++ b/tests/ttasks.nim @@ -11,6 +11,7 @@ import apatheia/tasks ## todo: setup basic async + threadsignal + taskpools example here ## + proc addNums(a, b: float): float {.asyncTask.} = os.sleep(500) echo "adding: ", a, " + ", b