macroExpand localVar
This commit is contained in:
@@ -657,19 +657,25 @@ class SpecialForms {
|
|||||||
|
|
||||||
public static function builtinMacroExpanders(k:KissState, ?context:FrontendContext) {
|
public static function builtinMacroExpanders(k:KissState, ?context:FrontendContext) {
|
||||||
var map:Map<String, MacroFunction> = [];
|
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
|
// when macroExpanding an (object) expression, don't apply aliases to the field names
|
||||||
map["object"] = (wholeExp:ReaderExp, args:Array<ReaderExp>, k:KissState) -> {
|
map["object"] = (wholeExp:ReaderExp, args:Array<ReaderExp>, k:KissState) -> {
|
||||||
var b = wholeExp.expBuilder();
|
var b = wholeExp.expBuilder();
|
||||||
var pairs = Lambda.flatten([for (pair in args.groups(2)) {
|
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);
|
b.callSymbol("object", pairs);
|
||||||
};
|
};
|
||||||
|
|
||||||
map["lambda"] = (wholeExp:ReaderExp, args:Array<ReaderExp>, k:KissState) -> {
|
map["lambda"] = (wholeExp:ReaderExp, args:Array<ReaderExp>, k:KissState) -> {
|
||||||
var b = wholeExp.expBuilder();
|
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;
|
return map;
|
||||||
|
@@ -6,13 +6,21 @@
|
|||||||
expanded ,(printExp (macroExpand expression))]
|
expanded ,(printExp (macroExpand expression))]
|
||||||
,@b))
|
,@b))
|
||||||
|
|
||||||
|
(defMacro makeExampleNoValues [expression]
|
||||||
|
`{
|
||||||
|
,(printExp expression)
|
||||||
|
,(printExp (macroExpand expression))
|
||||||
|
})
|
||||||
|
|
||||||
(function _testAllForms []
|
(function _testAllForms []
|
||||||
|
// object
|
||||||
(makeExample
|
(makeExample
|
||||||
(object
|
(object
|
||||||
Stream (Stream.fromString ""))
|
Stream (Stream.fromString ""))
|
||||||
normal.Stream
|
normal.Stream
|
||||||
expanded.Stream)
|
expanded.Stream)
|
||||||
|
|
||||||
|
// lambda
|
||||||
(makeExample
|
(makeExample
|
||||||
(lambda [Stream] (Stream.fromString ""))
|
(lambda [Stream] (Stream.fromString ""))
|
||||||
(normal null)
|
(normal null)
|
||||||
@@ -23,4 +31,11 @@
|
|||||||
(normal null)
|
(normal null)
|
||||||
(expanded null))
|
(expanded null))
|
||||||
|
|
||||||
|
// localVar
|
||||||
|
(makeExampleNoValues
|
||||||
|
(localVar Stream (Stream.fromString "")))
|
||||||
|
|
||||||
|
(makeExampleNoValues
|
||||||
|
(localVar :Stream s (Stream.fromString "")))
|
||||||
|
|
||||||
)
|
)
|
Reference in New Issue
Block a user