Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for setEvalOrigin #37

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

joews
Copy link

@joews joews commented May 25, 2017

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 - eval in index.js or willThrow in <anonymous>?
  • Should the parent or child frame have the isEval flag?

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)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Checklist:

  • node_modules/.bin/jscs -c .jscsrc error-stack-parser.js passes without errors
  • npm test passes without errors
  • I have read the contribution guidelines
  • I have updated the documentation accordingly
  • I have added tests to cover my changes

@joews joews force-pushed the feature-eval-errors branch 2 times, most recently from 4df4911 to 62da376 Compare May 25, 2017 22:31
@eriwen
Copy link
Member

eriwen commented Aug 12, 2017

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.

@niftylettuce
Copy link
Contributor

If this is still an issue, can you resolve the conflict and ping me back once done?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

3 participants