fix awaitLet

This commit is contained in:
2023-02-18 16:00:47 -07:00
parent 2665b5df8f
commit 8dd6f1578c

View File

@@ -752,24 +752,25 @@ class Macros {
macros["assertLet"] = ifLet.bind(true); macros["assertLet"] = ifLet.bind(true);
k.doc("awaitLet", 2, null, "(awaitLet [<promise bindings...>] <?catchHandler> <body...>)"); k.doc("awaitLet", 2, null, "(awaitLet [<promise bindings...>] <?catchHandler> <body...>)");
function awaitLet(rejectionHandler:ReaderExp->ReaderExp, wholeExp:ReaderExp, exps:Array<ReaderExp>, k:KissState) { function awaitLet(rejectionHandler:ReaderExp, wholeExp:ReaderExp, exps:Array<ReaderExp>, k:KissState) {
var bindingList = exps[0].bindingList("awaitLet"); var bindingList = exps[0].bindingList("awaitLet");
var firstName = bindingList.shift(); var firstName = bindingList.shift();
var firstValue = bindingList.shift(); var firstValue = bindingList.shift();
var b = wholeExp.expBuilder(); var b = wholeExp.expBuilder();
var rejectionHandlerArgsAndBody = [];
if (rejectionHandler == null) { if (rejectionHandler == null) {
function error(firstName:ReaderExp) { function error(firstName:ReaderExp) {
return b.callSymbol("+", [b.str('awaitLet ${firstName.symbolNameValue()} rejected promise: '), b.symbol("reason")]); return b.callSymbol("+", [b.str('awaitLet ${firstName.symbolNameValue()} rejected promise: '), b.symbol("reason")]);
} }
rejectionHandler = switch (exps[1].def) { rejectionHandler = b.symbol();
case CallExp({pos: _, def: Symbol("catch")}, args): rejectionHandlerArgsAndBody = switch (exps[1].def) {
case CallExp({pos: _, def: Symbol("catch")}, catchArgs):
exps.splice(1,1); exps.splice(1,1);
(exp) -> b.callSymbol("lambda", args); catchArgs;
default: default:
(firstName) -> b.callSymbol("lambda", [ [b.list([b.symbol("reason")])].concat([
b.list([b.symbol("reason")]),
b.callSymbol("#when", [ b.callSymbol("#when", [
b.symbol("vscode"), b.symbol("vscode"),
b.callSymbol("Vscode.window.showErrorMessage", [error(firstName)]), b.callSymbol("Vscode.window.showErrorMessage", [error(firstName)]),
@@ -795,14 +796,23 @@ class Macros {
default: default:
} }
return b.call(b.field("then", firstValue), [ var exp = b.call(b.field("then", firstValue), [
b.callSymbol("lambda", [ b.callSymbol("lambda", [
b.list([firstName]), b.list([firstName]),
innerExp innerExp
]), ]),
// Handle rejections: rejectionHandler
rejectionHandler(firstName)
]); ]);
if (rejectionHandlerArgsAndBody.length > 0) {
exp = b.callSymbol("withFunctions", [
b.list([b.call(b.typed("Dynamic", rejectionHandler),
rejectionHandlerArgsAndBody)]),
exp
]);
}
return exp;
} }
macros["awaitLet"] = awaitLet.bind(null); macros["awaitLet"] = awaitLet.bind(null);