From 586582a7c7a93b3d33befb5d3791efcbd61ba719 Mon Sep 17 00:00:00 2001 From: Jaremy Creechley Date: Thu, 8 Feb 2024 11:29:23 -0700 Subject: [PATCH] rough sketch --- src/apatheia/macroutils.nim | 1 + src/apatheia/tasks.nim | 55 +++++++++++++++++++++++-------------- 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/src/apatheia/macroutils.nim b/src/apatheia/macroutils.nim index b38c4f8..b5b9408 100644 --- a/src/apatheia/macroutils.nim +++ b/src/apatheia/macroutils.nim @@ -20,6 +20,7 @@ proc firstArgument*(params: NimNode): (NimNode, NimNode) = result = (ident "", newNimNode(nnkEmpty)) iterator paramsIter*(params: NimNode): tuple[name, ntype: NimNode] = + ## iterators through the parameters for i in 1 ..< params.len: let arg = params[i] let argType = arg[^2] diff --git a/src/apatheia/tasks.nim b/src/apatheia/tasks.nim index 3afc283..5aee393 100644 --- a/src/apatheia/tasks.nim +++ b/src/apatheia/tasks.nim @@ -1,27 +1,42 @@ +import std/[macros, strutils] + +macro asyncTask*(p: untyped): untyped = + + let + procId = p[0] + procLineInfo = p.lineInfoObj + genericParams = p[2] + params = p[3] + pragmas = p[4] + body = p[6] + name = repr(procId).strip(false, true, {'*'}) + + echo "ASYNC_TASK: name: ", name + echo "ASYNC_TASK: params: \n", params.treeRepr + +proc doHashes*(args: openArray[byte]) {.asyncTask.} = + + echo "args: ", args.len() + -proc doHashes*[T: object](args: openArray[T], obj: Object) {.asyncTask.} = +when false: + proc doHashesTask*(args: seq[Data]) = + discard - let x = args + proc doHashes*(args: seq[Data]) {.async.} = + # setup signals ... etc + # memory stuffs + # create future + let argsPtr = addr args[0] + let argsLen = args.len() + GC_ref(args) - -proc doHashesTask*(args: seq[Data]) = - ... - -proc doHashes*(args: seq[Data]) {.async.} = - # setup signals ... etc - # memory stuffs - # create future - let argsPtr = addr args[0] - let argsLen = args.len() - GC_ref(args) - - doHashes(toOpenArray(argsPtr, argsLen)) - GC_unref(args) + doHashes(toOpenArray(argsPtr, argsLen)) + GC_unref(args) -proc processHashes*(args: seq[Data]) {.async.} = - - ## do some processing on another thread - let res = await doHashes(args) + proc processHashes*(args: seq[Data]) {.async.} = + ## do some processing on another thread + let res = await doHashes(args)