From a6c0cf88c6a02aa7845dca7c5c5025b915b78fbc Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Tue, 2 May 2023 16:46:08 -0600 Subject: [PATCH] collectWhileLet --- src/kiss/Macros.hx | 16 ++++++++++++++++ src/test/cases/BasicTestCase.kiss | 9 ++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/kiss/Macros.hx b/src/kiss/Macros.hx index 90b875c..eccc57f 100644 --- a/src/kiss/Macros.hx +++ b/src/kiss/Macros.hx @@ -839,6 +839,22 @@ class Macros { ]); }; + k.doc("collectWhileLet", 2, null, "(collectWhileLet [] )"); + macros["collectWhileLet"] = (wholeExp:ReaderExp, exps:Array, k:KissState) -> { + var b = wholeExp.expBuilder(); + var results = b.symbol(); + var nextExp = b.symbol(); + var body = b.begin(exps.slice(1)); + return b.let([results, b.list([])], [ + b.callSymbol("whileLet", [ + exps[0], + b.let([nextExp, body], + [b.callField("push", results, [nextExp])]) + ]), + results + ]); + }; + k.doc("withTempSet", 2, null, "(withTempSet [] )"); macros["withTempSet"] = (wholeExp:ReaderExp, exps:Array, k:KissState) -> { var b = wholeExp.expBuilder(); diff --git a/src/test/cases/BasicTestCase.kiss b/src/test/cases/BasicTestCase.kiss index fbe4875..b95b326 100644 --- a/src/test/cases/BasicTestCase.kiss +++ b/src/test/cases/BasicTestCase.kiss @@ -679,7 +679,14 @@ From:[(assert false (+ \"false \" \"should \" \"have \" \"been \" \"true\"))]" m stream (Stream.fromString "a\nb\nc")] (whileLet [(Some line) (stream.takeLine)] (Assert.equals (nth lines idx) line) - (+= idx 1)))) + (+= idx 1))) + (let [lines ["a" "b" "c"] + options [(Some "a") (Some "b") (Some "c") None] + collected + (collectWhileLet [(Some line) (options.shift)] + line)] + (doFor i (range collected.length) + (Assert.equals (nth lines i) (nth collected i))))) (function _testTrace [] (Assert.equals 5 (trace 5 "num"))