| Index: src/runtime.cc
|
| diff --git a/src/runtime.cc b/src/runtime.cc
|
| index c0d357ae2caf1243fced08f8f33c884e671a26df..c5416ace81ef0f876c948ee582da51e15462993e 100644
|
| --- a/src/runtime.cc
|
| +++ b/src/runtime.cc
|
| @@ -2116,7 +2116,6 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SetCode) {
|
| // Since we don't store the source for this we should never
|
| // optimize this.
|
| shared->code()->set_optimizable(false);
|
| -
|
| // Set the code, scope info, formal parameter count,
|
| // and the length of the target function.
|
| target->shared()->set_code(shared->code());
|
| @@ -12924,34 +12923,32 @@ static bool ShowFrameInStackTrace(StackFrame* raw_frame,
|
| Object* caller,
|
| bool* seen_caller) {
|
| // Only display JS frames.
|
| - if (!raw_frame->is_java_script())
|
| + if (!raw_frame->is_java_script()) {
|
| return false;
|
| + }
|
| JavaScriptFrame* frame = JavaScriptFrame::cast(raw_frame);
|
| Object* raw_fun = frame->function();
|
| // Not sure when this can happen but skip it just in case.
|
| - if (!raw_fun->IsJSFunction())
|
| + if (!raw_fun->IsJSFunction()) {
|
| return false;
|
| + }
|
| if ((raw_fun == caller) && !(*seen_caller)) {
|
| *seen_caller = true;
|
| return false;
|
| }
|
| // Skip all frames until we've seen the caller.
|
| if (!(*seen_caller)) return false;
|
| - // Also, skip the most obvious builtin calls. We recognize builtins
|
| - // as (1) functions called with the builtins object as the receiver and
|
| - // as (2) functions from native scripts called with undefined as the
|
| - // receiver (direct calls to helper functions in the builtins
|
| - // code). Some builtin calls (such as Number.ADD which is invoked
|
| - // using 'call') are very difficult to recognize so we're leaving
|
| - // them in for now.
|
| - if (frame->receiver()->IsJSBuiltinsObject()) {
|
| - return false;
|
| - }
|
| - JSFunction* fun = JSFunction::cast(raw_fun);
|
| - Object* raw_script = fun->shared()->script();
|
| - if (frame->receiver()->IsUndefined() && raw_script->IsScript()) {
|
| - int script_type = Script::cast(raw_script)->type()->value();
|
| - return script_type != Script::TYPE_NATIVE;
|
| + // Also, skip non-visible built-in functions and any call with the builtins
|
| + // object as receiver, so as to not reveal either the builtins object or
|
| + // an internal function.
|
| + // The --builtins-in-stack-traces command line flag allows including
|
| + // internal call sites in the stack trace for debugging purposes.
|
| + if (!FLAG_builtins_in_stack_traces) {
|
| + JSFunction* fun = JSFunction::cast(raw_fun);
|
| + if (frame->receiver()->IsJSBuiltinsObject() ||
|
| + (fun->IsBuiltin() && !fun->shared()->native())) {
|
| + return false;
|
| + }
|
| }
|
| return true;
|
| }
|
|
|