From 186e8676aa5cfbcdfe1883ef2006696fc8c546ee Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Mon, 3 Apr 2023 08:32:42 -0600 Subject: [PATCH] onceLambda macro --- kiss/src/kiss/Macros.hx | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/kiss/src/kiss/Macros.hx b/kiss/src/kiss/Macros.hx index 973a1d52..24041621 100644 --- a/kiss/src/kiss/Macros.hx +++ b/kiss/src/kiss/Macros.hx @@ -1238,6 +1238,25 @@ class Macros { ].concat(body))]); }; + k.doc("onceLambda", 3, null, "(onceLambda [] )"); + macros["onceLambda"] = (wholeExp:ReaderExp, exps:Array, k:KissState) -> { + var b = wholeExp.expBuilder(); + + var args = exps[0]; + var body = exps.slice(1); + var flagSymbol = b.symbol(); + + return b.let([ + b.meta("mut", flagSymbol), b.symbol("false") + ], [b.callSymbol("lambda", [ + args, + b.callSymbol("unless", [ + flagSymbol, + b.set(flagSymbol, b.symbol("true")) + ].concat(body)) + ])]); + }; + // Time a block's evaluation k.doc("measureTime",1, null, "(measureTime )"); macros["measureTime"] = (wholeExp:ReaderExp, exps:Array, k:KissState) -> {