macroExpand localVar

This commit is contained in:
2024-02-17 11:28:43 -07:00
parent c2ab12909f
commit 4591626818
2 changed files with 24 additions and 3 deletions

View File

@@ -657,19 +657,25 @@ class SpecialForms {
public static function builtinMacroExpanders(k:KissState, ?context:FrontendContext) {
var map:Map<String, MacroFunction> = [];
var macroExpand = Kiss.macroExpand.bind(_, k);
var expandTypeAliases = Helpers.expandTypeAliases.bind(_, k);
// when macroExpanding an (object) expression, don't apply aliases to the field names
map["object"] = (wholeExp:ReaderExp, args:Array<ReaderExp>, k:KissState) -> {
var b = wholeExp.expBuilder();
var pairs = Lambda.flatten([for (pair in args.groups(2)) {
[pair[0], Kiss.macroExpand(pair[1], k)];
[pair[0], macroExpand(pair[1])];
}]);
b.callSymbol("object", pairs);
};
map["lambda"] = (wholeExp:ReaderExp, args:Array<ReaderExp>, k:KissState) -> {
var b = wholeExp.expBuilder();
b.callSymbol("lambda", [Helpers.expandTypeAliases(args[0], k)].concat([for (exp in args.slice(1)) Kiss.macroExpand(exp, k)]));
b.callSymbol("lambda", [expandTypeAliases(args[0])].concat([for (exp in args.slice(1)) macroExpand(exp)]));
};
map["localVar"] = (wholeExp:ReaderExp, args:Array<ReaderExp>, k:KissState) -> {
var b = wholeExp.expBuilder();
b.callSymbol("localVar", [expandTypeAliases(args[0]), macroExpand(args[1])]);
};
return map;

View File

@@ -6,13 +6,21 @@
expanded ,(printExp (macroExpand expression))]
,@b))
(defMacro makeExampleNoValues [expression]
`{
,(printExp expression)
,(printExp (macroExpand expression))
})
(function _testAllForms []
// object
(makeExample
(object
Stream (Stream.fromString ""))
normal.Stream
expanded.Stream)
// lambda
(makeExample
(lambda [Stream] (Stream.fromString ""))
(normal null)
@@ -23,4 +31,11 @@
(normal null)
(expanded null))
// localVar
(makeExampleNoValues
(localVar Stream (Stream.fromString "")))
(makeExampleNoValues
(localVar :Stream s (Stream.fromString "")))
)