DRY bindingList() extractor
This commit is contained in:
@@ -347,4 +347,13 @@ class Helpers {
|
||||
begin: (exps:Array<ReaderExp>) -> CallExp(Symbol("begin").withPosOf(posRef), exps).withPosOf(posRef)
|
||||
};
|
||||
}
|
||||
|
||||
public static function bindingList(exp:ReaderExp, forThis:String):Array<ReaderExp> {
|
||||
return switch (exp.def) {
|
||||
case ListExp(bindingExps) if (bindingExps.length > 0 && bindingExps.length % 2 == 0):
|
||||
bindingExps;
|
||||
default:
|
||||
throw CompileError.fromExp(exp, '$forThis bindings should be a list expression with an even number of sub expressions (at least 2)');
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@@ -424,13 +424,7 @@ class Macros {
|
||||
// TODO use expBuilder()
|
||||
function awaitLet(wholeExp:ReaderExp, exps:Array<ReaderExp>, k:KissState) {
|
||||
wholeExp.checkNumArgs(2, null, "(awaitLet [[promise bindings...]] [body...])");
|
||||
// TODO make a dry bindingList extractor function
|
||||
var bindingList = switch (exps[0].def) {
|
||||
case ListExp(bindingExps) if (bindingExps.length > 0 && bindingExps.length % 2 == 0):
|
||||
bindingExps;
|
||||
default:
|
||||
throw CompileError.fromExp(exps[0], 'awaitLet bindings should be a list expression with an even number of sub expressions (at least 2)');
|
||||
};
|
||||
var bindingList = exps[0].bindingList("awaitLet");
|
||||
var firstName = bindingList.shift();
|
||||
var firstValue = bindingList.shift();
|
||||
return CallExp(FieldExp("then", firstValue).withPosOf(wholeExp), [
|
||||
|
@@ -166,12 +166,7 @@ class SpecialForms {
|
||||
|
||||
map["let"] = (wholeExp:ReaderExp, args:Array<ReaderExp>, k:KissState) -> {
|
||||
wholeExp.checkNumArgs(2, null, "(let [[bindings...]] [body...])");
|
||||
var bindingList = switch (args[0].def) {
|
||||
case ListExp(bindingExps) if (bindingExps.length > 0 && bindingExps.length % 2 == 0):
|
||||
bindingExps;
|
||||
default:
|
||||
throw CompileError.fromExp(args[0], 'let bindings should be a list expression with an even number of sub expressions');
|
||||
};
|
||||
var bindingList = args[0].bindingList("let");
|
||||
var bindingPairs = bindingList.groups(2);
|
||||
var varDefs = [];
|
||||
for (bindingPair in bindingPairs) {
|
||||
|
Reference in New Issue
Block a user