whenLet, unlessLet
This commit is contained in:
@@ -421,7 +421,7 @@ class Macros {
|
||||
|
||||
// Macros that null-check and extract patterns from enums (inspired by Rust)
|
||||
function ifLet(wholeExp:ReaderExp, exps:Array<ReaderExp>, k:KissState) {
|
||||
wholeExp.checkNumArgs(2, null, "(ifLet [[enum bindings...]] [thenExp] [?elseExp])");
|
||||
wholeExp.checkNumArgs(2, 3, "(ifLet [[enum bindings...]] [thenExp] [?elseExp])");
|
||||
var b = wholeExp.expBuilder();
|
||||
|
||||
var thenExp = exps[1];
|
||||
@@ -462,10 +462,27 @@ class Macros {
|
||||
|
||||
macros["ifLet"] = ifLet;
|
||||
|
||||
// TODO whenLet
|
||||
// wholeExp.checkNumArgs(2, null, "(whenLet [[enum bindings...]] [body...])");
|
||||
// TODO unlessLet
|
||||
// wholeExp.checkNumArgs(2, null, "(unlessLet [[enum bindings...]] [body...])");
|
||||
macros["whenLet"] = (wholeExp:ReaderExp, exps:Array<ReaderExp>, k:KissState) -> {
|
||||
wholeExp.checkNumArgs(2, null, "(whenLet [[enum bindings...]] [body...])");
|
||||
var b = wholeExp.expBuilder();
|
||||
b.call(
|
||||
b.symbol("ifLet"), [
|
||||
exps[0],
|
||||
b.begin(exps.slice(1)),
|
||||
b.symbol("null")
|
||||
]);
|
||||
};
|
||||
|
||||
macros["unlessLet"] = (wholeExp:ReaderExp, exps:Array<ReaderExp>, k:KissState) -> {
|
||||
wholeExp.checkNumArgs(2, null, "(unlessLet [[enum bindings...]] [body...])");
|
||||
var b = wholeExp.expBuilder();
|
||||
b.call(
|
||||
b.symbol("ifLet"), [
|
||||
exps[0],
|
||||
b.symbol("null"),
|
||||
b.begin(exps.slice(1))
|
||||
]);
|
||||
};
|
||||
|
||||
// TODO use expBuilder()
|
||||
function awaitLet(wholeExp:ReaderExp, exps:Array<ReaderExp>, k:KissState) {
|
||||
|
@@ -447,9 +447,11 @@
|
||||
(Some b) some6]
|
||||
(Assert.equals 11 (+ a b))
|
||||
(Assert.fail))
|
||||
(ifLet [(Some a) oops]
|
||||
(Assert.fail))
|
||||
(ifLet [(Some (or 5 6)) some5]
|
||||
(Assert.pass))
|
||||
(ifLet [(Some a) none]
|
||||
(Assert.fail))
|
||||
(whenLet [(Some a) oops]
|
||||
(print "something went wrong!")
|
||||
(Assert.fail))
|
||||
(unlessLet [(Some (or 5 6)) some5]
|
||||
(print "something else went wrong!")
|
||||
(Assert.fail))))
|
Reference in New Issue
Block a user