diff --git a/src/kiss/Helpers.hx b/src/kiss/Helpers.hx index cecaa8f..ee24abd 100644 --- a/src/kiss/Helpers.hx +++ b/src/kiss/Helpers.hx @@ -698,22 +698,7 @@ class Helpers { } public static function argList(exp:ReaderExp, forThis:String, allowEmpty = true):Array { - return switch (exp.def) { - // At macro-time, a list of exps could be passed instead of a ListExp. Handle - // that tricky case: - case null if (Std.isOfType(exp, Array)): - var expList = cast(exp, Array); - var expDynamic:Dynamic = exp; - argList({pos:expList[0].pos, def: ListExp(expDynamic)}, forThis, allowEmpty); - case ListExp([]) if (allowEmpty): - []; - case ListExp([]) if (!allowEmpty): - throw KissError.fromExp(exp, 'arg list for $forThis must not be empty'); - case ListExp(argExps): - argExps; - default: - throw KissError.fromExp(exp, '$forThis arg list should be a list or list expression'); - }; + return Prelude.argList(exp, forThis, allowEmpty); } public static function bindingList(exp:ReaderExp, forThis:String, allowEmpty = false):Array { diff --git a/src/kiss/Prelude.hx b/src/kiss/Prelude.hx index 510698f..1312a18 100644 --- a/src/kiss/Prelude.hx +++ b/src/kiss/Prelude.hx @@ -554,6 +554,25 @@ class Prelude { }; } + public static function argList(exp:ReaderExp, forThis:String, allowEmpty = true):Array { + return switch (exp.def) { + // At macro-time, a list of exps could be passed instead of a ListExp. Handle + // that tricky case: + case null if (Std.isOfType(exp, Array)): + var expList = cast(exp, Array); + var expDynamic:Dynamic = exp; + argList({pos:expList[0].pos, def: ListExp(expDynamic)}, forThis, allowEmpty); + case ListExp([]) if (allowEmpty): + []; + case ListExp([]) if (!allowEmpty): + throw KissError.fromExp(exp, 'arg list for $forThis must not be empty'); + case ListExp(argExps): + argExps; + default: + throw KissError.fromExp(exp, '$forThis arg list should be a list or list expression'); + }; + } + public static function symbolNameValue(s:ReaderExp, allowTyped:Null = false, allowMeta:Null = false):String { return switch (s.def) { case Symbol(name): name;