From d78f103e9ad486350922d588f9832feb4fd6d7c1 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Sat, 17 Feb 2024 12:47:47 -0700 Subject: [PATCH] macroExpand for/doFor --- src/kiss/SpecialForms.hx | 10 ++++++++++ src/test/cases/MacroExpandTestCase.kiss | 13 +++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/kiss/SpecialForms.hx b/src/kiss/SpecialForms.hx index 603cfce..dff5f17 100644 --- a/src/kiss/SpecialForms.hx +++ b/src/kiss/SpecialForms.hx @@ -696,6 +696,16 @@ class SpecialForms { b.callSymbol("localFunction", [expandTypeAliases(args[0])].concat(args.slice(1).map(macroExpand))); }; + function forExpander (keyword:String) { + map[keyword] = (wholeExp:ReaderExp, args:Array, k:KissState) -> { + var b = wholeExp.expBuilder(); + + b.callSymbol(keyword, [expandTypeAliases(args[0])].concat(args.slice(1).map(macroExpand))); + }; + } + forExpander("for"); + forExpander("doFor"); + return map; } diff --git a/src/test/cases/MacroExpandTestCase.kiss b/src/test/cases/MacroExpandTestCase.kiss index 9740027..c504533 100644 --- a/src/test/cases/MacroExpandTestCase.kiss +++ b/src/test/cases/MacroExpandTestCase.kiss @@ -57,5 +57,18 @@ (makeExampleNoValues (localFunction :Stream s [] (Stream.fromString ""))) + // for/doFor + + (localVar listOfLists [["a b c"]["d e f"]]) + (defAlias &ident lol listOfLists) + (defAlias &type Texty String) + + (makeExampleNoValues + (for [:Texty t1 :Texty t2 :Texty t3] lol + null)) + + (makeExampleNoValues + (doFor [:Texty t1 :Texty t2 :Texty t3] lol + null)) ) \ No newline at end of file