From d5b14656f5d796880e806cf4bf0a0dc83cb7bd6a Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Sat, 17 Feb 2024 12:19:05 -0700 Subject: [PATCH] macroExpander for let --- src/kiss/SpecialForms.hx | 13 +++++++++++++ src/test/cases/MacroExpandTestCase.kiss | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/src/kiss/SpecialForms.hx b/src/kiss/SpecialForms.hx index f941a38..a1d3b08 100644 --- a/src/kiss/SpecialForms.hx +++ b/src/kiss/SpecialForms.hx @@ -678,6 +678,19 @@ class SpecialForms { b.callSymbol("localVar", [expandTypeAliases(args[0]), macroExpand(args[1])]); }; + map["let"] = (wholeExp:ReaderExp, args:Array, k:KissState) -> { + var b = wholeExp.expBuilder(); + var bindings = args[0]; + var bindingsList = Helpers.argList(bindings, "let", false); + var newBindingsList = Lambda.flatten([ + for (pair in bindingsList.groups(2)) { + [expandTypeAliases(pair[0]), macroExpand(pair[1])]; + } + ]); + var newBindings = b.list(newBindingsList); + b.callSymbol("let", [newBindings].concat(Lambda.map(args.slice(1), macroExpand))); + }; + return map; } diff --git a/src/test/cases/MacroExpandTestCase.kiss b/src/test/cases/MacroExpandTestCase.kiss index 34ff7e5..988f1c7 100644 --- a/src/test/cases/MacroExpandTestCase.kiss +++ b/src/test/cases/MacroExpandTestCase.kiss @@ -38,4 +38,10 @@ (makeExampleNoValues (localVar :Stream s (Stream.fromString ""))) + // let + (makeExampleNoValues + (let [:Stream s (Stream.fromString "") + Stream (Stream.fromString "")] + null)) + ) \ No newline at end of file