localFunction

This commit is contained in:
2022-07-03 01:46:31 +00:00
parent d8c0015ec8
commit 12a2705d20

View File

@@ -232,6 +232,22 @@ class SpecialForms {
}
EFunction(FAnonymous, Helpers.makeFunction(null, returnsValue, args[0], args.slice(1), k, "lambda", [])).withMacroPosOf(wholeExp);
};
k.doc("localFunction", 3, null, "(localFunction <optional :Type> <name> [<args...>] <body...>)");
map["localFunction"] = (wholeExp:ReaderExp, args:Array<ReaderExp>, k:KissState) -> {
var name = "";
var returnsValue = switch (args[0].def) {
case TypedExp("Void", {pos:_, def: Symbol(fname)}):
name = fname;
false;
case Symbol(fname):
name = fname;
true;
default:
throw KissError.fromExp(wholeExp, "First argument to localFunction must be a function name with an optional return type. To make an anonymous function, use lambda instead.");
}
EFunction(FNamed(name, false), Helpers.makeFunction(null, returnsValue, args[1], args.slice(2), k, "localFunction", [])).withMacroPosOf(wholeExp);
};
function forExpr(formName:String, wholeExp:ReaderExp, args:Array<ReaderExp>, k:KissState) {
var uniqueVarName = "_" + Uuid.v4().toShort();