2016-05-20 4:13 GMT+02:00 Jesse Schalken <m...@jesseschalken.com>:

>
> On Fri, May 20, 2016 at 4:35 AM, Rasmus Schultz <ras...@mindplay.dk>
> wrote:
>
>> This is inconsistent with at least JavaScript and C#, where the stack
>> trace is populated at the throw site. (Probably others?)
>>
>
> I'm not sure about C#, but in JavaScript (Node.js):
>
> function get_error() {
>     return new Error('my error');
> }
>
> function do_throw(e) {
>     throw e;
> }
>
> try {
>     do_throw(get_error());
> } catch (e) {
>     console.log(e.stack);
> }
>
>
> results in:
>
> Error: my error
>     at get_error (/home/jesse/src/test.js:2:12)
>     at Object.<anonymous> (/home/jesse/src/test.js:10:14)
>     at Module._compile (module.js:413:34)
>     at Object.Module._extensions..js (module.js:422:10)
>     at Module.load (module.js:357:32)
>     at Function.Module._load (module.js:314:12)
>     at Function.Module.runMain (module.js:447:10)
>     at startup (node.js:146:18)
>     at node.js:404:3
>
>
> The top frame is the construction (get_error) and the site of the throw
> (do_throw) doesn't appear in the stack at all.
>

The comparison with JavaScript isn't a good one, since you can throw
everything in JS. If they didn't provide the stack trace upon throw, you
would not have a stack trace at all if you throw a plain string.

Reply via email to