From d849cab0345eb65e211a846ae40a38cb41d22e04 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Sat, 16 Oct 2021 23:39:00 -0400 Subject: [PATCH] awaitLet report async errors in kiss-VSCode commands --- src/kiss/Macros.hx | 17 +++++++++++------ src/kiss/SpecialForms.hx | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/kiss/Macros.hx b/src/kiss/Macros.hx index 88b799b..7d2ca63 100644 --- a/src/kiss/Macros.hx +++ b/src/kiss/Macros.hx @@ -626,14 +626,16 @@ class Macros { ]); }; - // TODO test this function awaitLet(wholeExp:ReaderExp, exps:Array, k:KissState) { - wholeExp.checkNumArgs(2, null, "(awaitLet [[promise bindings...]] [body...])"); + wholeExp.checkNumArgs(2, null, "(awaitLet [] )"); var bindingList = exps[0].bindingList("awaitLet"); var firstName = bindingList.shift(); var firstValue = bindingList.shift(); var b = wholeExp.expBuilder(); + var firstNameStr = firstName.symbolNameValue(); + var error = b.callSymbol("+", [b.str('awaitLet $firstNameStr rejected promise: '), b.symbol("reason")]); + return b.call(b.field("then", firstValue), [ b.call(b.symbol("lambda"), [ b.list([firstName]), @@ -646,10 +648,13 @@ class Macros { // Handle rejections: b.call(b.symbol("lambda"), [ b.list([b.symbol("reason")]), - b.call(b.symbol("throw"), [ - // TODO generalize CompileError to KissError which will also handle runtime errors - // with the same source position format - b.str("rejected promise") + b.callSymbol("#when", [ + b.symbol("vscode"), + b.callSymbol("errorMessage", [error]), + ]), + // If running VSCode js, this throw will be a no-op but it makes the expression type-unify: + b.callSymbol("throw", [ + error ]) ]) ]); diff --git a/src/kiss/SpecialForms.hx b/src/kiss/SpecialForms.hx index 05fb52f..3cfa819 100644 --- a/src/kiss/SpecialForms.hx +++ b/src/kiss/SpecialForms.hx @@ -286,7 +286,7 @@ class SpecialForms { // Type check syntax: map["the"] = (wholeExp:ReaderExp, args:Array, k:KissState) -> { - wholeExp.checkNumArgs(2, 3, '(the [optional: package] [type] [value])'); + wholeExp.checkNumArgs(2, 3, '(the )'); var pkg = ""; var whichArg = "first"; if (args.length == 3) {