From 2a8e4e5bf4c9c8cc1c5e6af4f20fbe98ba50c9cf Mon Sep 17 00:00:00 2001 From: Mark Spanbroek Date: Mon, 19 Apr 2021 16:14:27 +0200 Subject: [PATCH] Allow wallet to be used as a reference type --- nitro/wallet/deref.nim | 46 ++++++++++++++++++++++++++++++++++++++ nitro/wallet/wallet.nim | 45 +++++++++++++++++++++++-------------- tests/nitro/testWallet.nim | 16 +++++++++++++ 3 files changed, 90 insertions(+), 17 deletions(-) create mode 100644 nitro/wallet/deref.nim diff --git a/nitro/wallet/deref.nim b/nitro/wallet/deref.nim new file mode 100644 index 0000000..c5ff5cd --- /dev/null +++ b/nitro/wallet/deref.nim @@ -0,0 +1,46 @@ +import std/macros + +func identName(identDefs: NimNode): NimNode = + identDefs.expectKind(nnkIdentDefs) + identDefs[0] + +func identType(identDefs: NimNode): NimNode = + identDefs.expectKind(nnkIdentDefs) + identDefs[^2] + +func `identType=`(identDefs: NimNode, identType: NimNode) = + identDefs.expectKind(nnkIdentDefs) + identDefs[^2] = identType + +func insertRef(function: NimNode) = + function.expectKind(nnkFuncDef) + var paramType = function.params[1].identType + if paramType.kind == nnkVarTy: + paramType = paramType[0] + function.params[1].identType = newNimNode(nnkRefTy, paramType).add(paramType) + +func paramNames(function: NimNode): seq[NimNode] = + function.expectKind(nnkFuncDef) + for i in 1..