macroExpander for let
This commit is contained in:
@@ -678,6 +678,19 @@ class SpecialForms {
|
|||||||
b.callSymbol("localVar", [expandTypeAliases(args[0]), macroExpand(args[1])]);
|
b.callSymbol("localVar", [expandTypeAliases(args[0]), macroExpand(args[1])]);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
map["let"] = (wholeExp:ReaderExp, args:Array<ReaderExp>, 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;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,4 +38,10 @@
|
|||||||
(makeExampleNoValues
|
(makeExampleNoValues
|
||||||
(localVar :Stream s (Stream.fromString "")))
|
(localVar :Stream s (Stream.fromString "")))
|
||||||
|
|
||||||
|
// let
|
||||||
|
(makeExampleNoValues
|
||||||
|
(let [:Stream s (Stream.fromString "")
|
||||||
|
Stream (Stream.fromString "")]
|
||||||
|
null))
|
||||||
|
|
||||||
)
|
)
|
||||||
Reference in New Issue
Block a user