setMin, setMax

This commit is contained in:
2022-06-28 04:38:31 +00:00
parent 82f05a274c
commit 698e6cbf39
2 changed files with 17 additions and 0 deletions

View File

@@ -633,6 +633,7 @@ class Helpers {
field: field,
keyValue: (key:ReaderExp, value:ReaderExp) -> KeyValueExp(key, value).withPosOf(posRef),
begin: (exps:Array<ReaderExp>) -> callSymbol("begin", exps),
set: (v:ReaderExp, value:ReaderExp) -> callSymbol("set", [v, value]),
let: let,
objectWith: objectWith,
throwKissError: (reason:String) -> {

View File

@@ -960,6 +960,22 @@ class Macros {
b.begin(k.collectedBlocks[blockName]);
};
// These are implemented as variadic functions, so checkNumArgs() is never actually called,
// but the docs might be useful
k.doc("min", 2, null, "(min <v1> <v2> <more values...>)");
k.doc("max", 2, null, "(max <v1> <v2> <more values...>)");
k.doc("setMin", 2, null, "(setMin <var> <v2> <more values...>)");
k.doc("setMax", 2, null, "(setMax <var> <v2> <more values...>)");
function setCompMacro(compType:String) {
return (wholeExp:ReaderExp, exps:Array<ReaderExp>, k:KissState) -> {
var b = wholeExp.expBuilder();
b.set(exps[0], b.callSymbol(compType, exps));
}
}
macros["setMin"] = setCompMacro("min");
macros["setMax"] = setCompMacro("max");
k.doc("clamp", 2, 3, "(clamp <expr> <min or null> <?max or null>)");
macros["clamp"] = (wholeExp:ReaderExp, exps:Array<ReaderExp>, k:KissState) -> {
var b = wholeExp.expBuilder();