From 12a2705d206a332b9f91ed7478b40c7b428d3504 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Sun, 3 Jul 2022 01:46:31 +0000 Subject: [PATCH] localFunction --- src/kiss/SpecialForms.hx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/kiss/SpecialForms.hx b/src/kiss/SpecialForms.hx index 9e00e06..b1dca40 100644 --- a/src/kiss/SpecialForms.hx +++ b/src/kiss/SpecialForms.hx @@ -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 [] )"); + map["localFunction"] = (wholeExp:ReaderExp, args:Array, 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, k:KissState) { var uniqueVarName = "_" + Uuid.v4().toShort();