From 8f88149282e7ae98359bb292b6c1f4b28f80b0f8 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 --- kiss/src/kiss/Macros.hx | 17 +++++++++++------ kiss/src/kiss/SpecialForms.hx | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/kiss/src/kiss/Macros.hx b/kiss/src/kiss/Macros.hx index 88b799ba..7d2ca63b 100644 --- a/kiss/src/kiss/Macros.hx +++ b/kiss/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/kiss/src/kiss/SpecialForms.hx b/kiss/src/kiss/SpecialForms.hx index 05fb52f4..3cfa8193 100644 --- a/kiss/src/kiss/SpecialForms.hx +++ b/kiss/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) {