error-stack-parser
error-stack-parser copied to clipboard
Add support for setEvalOrigin
Work in progress fix for #32. I'm opening the PR early to check the approach and ask some questions 😄
So far I have hacked in basic v8 support and tested on Chrome 58. I'll do the other engines and eval tests when i'm happy with the approach.
A few questions about setEvalOrigin. Given this program:
// index.js
function f() {
return g();
}
function g() {
return h();
}
function h() {
try {
eval(`
function willThrow() {
return doesNotExist;
}
willThrow();
`);
} catch (e) {
console.log(e.stack);
}
}
f();
- Which is the "parent" stack frame -
evalin index.js orwillThrowin<anonymous>? - Should the parent or child frame have the
isEvalflag?
The logic in the PR so far is a simple delta from master which has willThrow/index.js as the parent.
Description
Expose inner line and column information for stack frames inside eval code.
Motivation and Context
See #32.
How Has This Been Tested?
So far: one unit test on a stack frame from Chrome 58.
Types of changes
- [ ] Bug fix (non-breaking change which fixes an issue)
- [x] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to change)
Checklist:
- [x]
node_modules/.bin/jscs -c .jscsrc error-stack-parser.jspasses without errors - [x]
npm testpasses without errors - [x] I have read the contribution guidelines
- [ ] I have updated the documentation accordingly
- [x] I have added tests to cover my changes
Hi @joews, thanks for taking this on, and sorry for the late follow-up.
The goal is to model this very closely to V8's StackFrame interface which states:
boolean isEval() — Returns whether or not the associated function is compiled via a call to eval().
I take this to mean that the eval stack frame should be marked isEval.
Regarding the "parent" relationship, in my mind the "outer" script is considered the "parent" and the "inner" script (eval'd code) is the "child". The reasoning loosely is that you get closer and closer to the actual source as you go down the depth of the StackFrame tree branch. I'm willing to change the model a bit if you have a better idea, though.
I appreciate you locking down the behavior with tests 👍
Please let me know if you have other questions, and I promise I'll be quicker to respond.
If this is still an issue, can you resolve the conflict and ping me back once done?