defnew allow empty binding list

This commit is contained in:
2021-05-21 12:57:10 -06:00
parent 238bdfd9ff
commit 4f5f0a4d41
2 changed files with 3 additions and 3 deletions

View File

@@ -408,9 +408,9 @@ class Helpers {
};
}
public static function bindingList(exp:ReaderExp, forThis:String):Array<ReaderExp> {
public static function bindingList(exp:ReaderExp, forThis:String, allowEmpty = false):Array<ReaderExp> {
return switch (exp.def) {
case ListExp(bindingExps) if (bindingExps.length > 0 && bindingExps.length % 2 == 0):
case ListExp(bindingExps) if ((allowEmpty || 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)');

View File

@@ -531,7 +531,7 @@ class Macros {
wholeExp.checkNumArgs(2, null, "(defnew [[args...]] [[property bindings...]] [body...]");
var args = exps[0];
var bindingList = exps[1].bindingList("defnew");
var bindingList = exps[1].bindingList("defnew", true);
var bindingPairs = Prelude.groups(bindingList, 2);
var propertyDefs = [for (bindingPair in bindingPairs) {