letThrow as a convenient way to debug a try-catch expression
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -293,6 +293,10 @@ class BasicTestCase extends Test {
|
||||
function testVoid() {
|
||||
_testVoid();
|
||||
}
|
||||
|
||||
function testLetThrow() {
|
||||
_testLetThrow();
|
||||
}
|
||||
}
|
||||
|
||||
class BasicObject {
|
||||
|
@@ -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))))
|
Reference in New Issue
Block a user