diff --git a/src/kiss/SpecialForms.hx b/src/kiss/SpecialForms.hx index cc880ff..f941a38 100644 --- a/src/kiss/SpecialForms.hx +++ b/src/kiss/SpecialForms.hx @@ -657,19 +657,25 @@ class SpecialForms { public static function builtinMacroExpanders(k:KissState, ?context:FrontendContext) { var map:Map = []; - + 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, 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, 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, k:KissState) -> { + var b = wholeExp.expBuilder(); + b.callSymbol("localVar", [expandTypeAliases(args[0]), macroExpand(args[1])]); }; return map; diff --git a/src/test/cases/MacroExpandTestCase.kiss b/src/test/cases/MacroExpandTestCase.kiss index f096a42..34ff7e5 100644 --- a/src/test/cases/MacroExpandTestCase.kiss +++ b/src/test/cases/MacroExpandTestCase.kiss @@ -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 ""))) + ) \ No newline at end of file