Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(242)

Side by Side Diff: src/runtime/runtime-debug.cc

Issue 1157993002: Correctly hook up materialized receiver into the evaluation context chain. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: blacklist from turbofan Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | test/mjsunit/mjsunit.status » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/arguments.h" 8 #include "src/arguments.h"
9 #include "src/compiler.h" 9 #include "src/compiler.h"
10 #include "src/debug.h" 10 #include "src/debug.h"
(...skipping 2482 matching lines...) Expand 10 before | Expand all | Expand 10 after
2493 : isolate_(isolate), 2493 : isolate_(isolate),
2494 frame_(frame), 2494 frame_(frame),
2495 inlined_jsframe_index_(inlined_jsframe_index) { 2495 inlined_jsframe_index_(inlined_jsframe_index) {
2496 FrameInspector frame_inspector(frame, inlined_jsframe_index, isolate); 2496 FrameInspector frame_inspector(frame, inlined_jsframe_index, isolate);
2497 Handle<JSFunction> function = 2497 Handle<JSFunction> function =
2498 handle(JSFunction::cast(frame_inspector.GetFunction())); 2498 handle(JSFunction::cast(frame_inspector.GetFunction()));
2499 Handle<Context> outer_context = handle(function->context(), isolate); 2499 Handle<Context> outer_context = handle(function->context(), isolate);
2500 outer_info_ = handle(function->shared()); 2500 outer_info_ = handle(function->shared());
2501 Handle<Context> inner_context; 2501 Handle<Context> inner_context;
2502 2502
2503 // The "this" binding, if any, can't be bound via "with". If we need to,
2504 // add another node onto the outer context to bind "this".
2505 if (!MaterializeReceiver(isolate, outer_context, function, frame)
2506 .ToHandle(&outer_context))
2507 return;
2508
2509 bool stop = false; 2503 bool stop = false;
2510 for (ScopeIterator it(isolate, frame, inlined_jsframe_index); 2504 for (ScopeIterator it(isolate, frame, inlined_jsframe_index);
2511 !it.Failed() && !it.Done() && !stop; it.Next()) { 2505 !it.Failed() && !it.Done() && !stop; it.Next()) {
2512 ScopeIterator::ScopeType scope_type = it.Type(); 2506 ScopeIterator::ScopeType scope_type = it.Type();
2513 2507
2514 if (scope_type == ScopeIterator::ScopeTypeLocal) { 2508 if (scope_type == ScopeIterator::ScopeTypeLocal) {
2509 Handle<Context> parent_context =
2510 it.HasContext() ? it.CurrentContext() : outer_context;
2511
2512 // The "this" binding, if any, can't be bound via "with". If we need
2513 // to, add another node onto the outer context to bind "this".
2514 if (!MaterializeReceiver(isolate, parent_context, function, frame)
2515 .ToHandle(&parent_context))
2516 return;
2517
2515 Handle<JSObject> materialized_function = 2518 Handle<JSObject> materialized_function =
2516 NewJSObjectWithNullProto(isolate); 2519 NewJSObjectWithNullProto(isolate);
2517 2520
2518 if (!MaterializeStackLocalsWithFrameInspector( 2521 if (!MaterializeStackLocalsWithFrameInspector(
2519 isolate, materialized_function, function, &frame_inspector) 2522 isolate, materialized_function, function, &frame_inspector)
2520 .ToHandle(&materialized_function)) 2523 .ToHandle(&materialized_function))
2521 return; 2524 return;
2522 2525
2523 if (!MaterializeArgumentsObject(isolate, materialized_function, 2526 if (!MaterializeArgumentsObject(isolate, materialized_function,
2524 function) 2527 function)
2525 .ToHandle(&materialized_function)) 2528 .ToHandle(&materialized_function))
2526 return; 2529 return;
2527 2530
2528 Handle<Context> parent_context =
2529 it.HasContext() ? it.CurrentContext() : outer_context;
2530 Handle<Context> with_context = isolate->factory()->NewWithContext( 2531 Handle<Context> with_context = isolate->factory()->NewWithContext(
2531 function, parent_context, materialized_function); 2532 function, parent_context, materialized_function);
2532 2533
2533 ContextChainElement context_chain_element; 2534 ContextChainElement context_chain_element;
2534 context_chain_element.original_context = it.CurrentContext(); 2535 context_chain_element.original_context = it.CurrentContext();
2535 context_chain_element.materialized_object = materialized_function; 2536 context_chain_element.materialized_object = materialized_function;
2536 context_chain_element.scope_info = it.CurrentScopeInfo(); 2537 context_chain_element.scope_info = it.CurrentScopeInfo();
2537 context_chain_.Add(context_chain_element); 2538 context_chain_.Add(context_chain_element);
2538 2539
2539 stop = true; 2540 stop = true;
(...skipping 670 matching lines...) Expand 10 before | Expand all | Expand 10 after
3210 return Smi::FromInt(isolate->debug()->is_active()); 3211 return Smi::FromInt(isolate->debug()->is_active());
3211 } 3212 }
3212 3213
3213 3214
3214 RUNTIME_FUNCTION(Runtime_DebugBreakInOptimizedCode) { 3215 RUNTIME_FUNCTION(Runtime_DebugBreakInOptimizedCode) {
3215 UNIMPLEMENTED(); 3216 UNIMPLEMENTED();
3216 return NULL; 3217 return NULL;
3217 } 3218 }
3218 } // namespace internal 3219 } // namespace internal
3219 } // namespace v8 3220 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | test/mjsunit/mjsunit.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698