letThrow as a convenient way to debug a try-catch expression

This commit is contained in:
2021-05-22 14:18:00 -06:00
parent d0bf6c1062
commit 9899faf645
3 changed files with 23 additions and 1 deletions

View File

@@ -594,6 +594,14 @@ class Macros {
macros["once"] = once.bind("defvar");
macros["oncePerInstance"] = once.bind("defprop");
// Replace "try" with this in a try-catch statement to let all exceptions throw
// their original call stacks. This is more convenient for debugging than trying to
// comment out the "try" and its catches, and re-balance parens
macros["letThrow"] = (wholeExp:ReaderExp, exps:Array<ReaderExp>, k:KissState) -> {
wholeExp.checkNumArgs(1, null, "(letThrow [thing] [catches...])");
exps[0];
};
return macros;
}

View File

@@ -293,6 +293,10 @@ class BasicTestCase extends Test {
function testVoid() {
_testVoid();
}
function testLetThrow() {
_testLetThrow();
}
}
class BasicObject {

View File

@@ -495,4 +495,14 @@
(defun :Void myVoid [] (set voidRan true))
(defun _testVoid []
(myVoid)
(Assert.isTrue voidRan))
(Assert.isTrue voidRan))
(defun _testLetThrow []
(try
{
(letThrow
(throw "the error we want")
(catch [e] (Assert.fail)))
(Assert.fail)}
(catch [:String e]
(Assert.equals "the error we want" e))))