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["once"] = once.bind("defvar");
|
||||||
macros["oncePerInstance"] = once.bind("defprop");
|
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;
|
return macros;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -293,6 +293,10 @@ class BasicTestCase extends Test {
|
|||||||
function testVoid() {
|
function testVoid() {
|
||||||
_testVoid();
|
_testVoid();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testLetThrow() {
|
||||||
|
_testLetThrow();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class BasicObject {
|
class BasicObject {
|
||||||
|
|||||||
@@ -495,4 +495,14 @@
|
|||||||
(defun :Void myVoid [] (set voidRan true))
|
(defun :Void myVoid [] (set voidRan true))
|
||||||
(defun _testVoid []
|
(defun _testVoid []
|
||||||
(myVoid)
|
(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