OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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/debug/debug-scopes.h" | 5 #include "src/debug/debug-scopes.h" |
6 | 6 |
7 #include "src/ast/scopes.h" | 7 #include "src/ast/scopes.h" |
8 #include "src/debug/debug.h" | 8 #include "src/debug/debug.h" |
9 #include "src/frames-inl.h" | 9 #include "src/frames-inl.h" |
10 #include "src/globals.h" | 10 #include "src/globals.h" |
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
446 } | 446 } |
447 } | 447 } |
448 | 448 |
449 | 449 |
450 MaybeHandle<JSObject> ScopeIterator::MaterializeScriptScope() { | 450 MaybeHandle<JSObject> ScopeIterator::MaterializeScriptScope() { |
451 Handle<JSGlobalObject> global(CurrentContext()->global_object()); | 451 Handle<JSGlobalObject> global(CurrentContext()->global_object()); |
452 Handle<ScriptContextTable> script_contexts( | 452 Handle<ScriptContextTable> script_contexts( |
453 global->native_context()->script_context_table()); | 453 global->native_context()->script_context_table()); |
454 | 454 |
455 Handle<JSObject> script_scope = | 455 Handle<JSObject> script_scope = |
456 isolate_->factory()->NewJSObject(isolate_->object_function()); | 456 isolate_->factory()->NewJSObjectWithNullProto(); |
457 | 457 |
458 for (int context_index = 0; context_index < script_contexts->used(); | 458 for (int context_index = 0; context_index < script_contexts->used(); |
459 context_index++) { | 459 context_index++) { |
460 Handle<Context> context = | 460 Handle<Context> context = |
461 ScriptContextTable::GetContext(script_contexts, context_index); | 461 ScriptContextTable::GetContext(script_contexts, context_index); |
462 Handle<ScopeInfo> scope_info(context->scope_info()); | 462 Handle<ScopeInfo> scope_info(context->scope_info()); |
463 CopyContextLocalsToScopeObject(scope_info, context, script_scope); | 463 CopyContextLocalsToScopeObject(scope_info, context, script_scope); |
464 } | 464 } |
465 return script_scope; | 465 return script_scope; |
466 } | 466 } |
467 | 467 |
468 | 468 |
469 MaybeHandle<JSObject> ScopeIterator::MaterializeLocalScope() { | 469 MaybeHandle<JSObject> ScopeIterator::MaterializeLocalScope() { |
470 Handle<JSFunction> function = GetFunction(); | 470 Handle<JSFunction> function = GetFunction(); |
471 | 471 |
472 Handle<JSObject> local_scope = | 472 Handle<JSObject> local_scope = |
473 isolate_->factory()->NewJSObject(isolate_->object_function()); | 473 isolate_->factory()->NewJSObjectWithNullProto(); |
474 frame_inspector_->MaterializeStackLocals(local_scope, function); | 474 frame_inspector_->MaterializeStackLocals(local_scope, function); |
475 | 475 |
476 Handle<Context> frame_context = | 476 Handle<Context> frame_context = |
477 Handle<Context>::cast(frame_inspector_->GetContext()); | 477 Handle<Context>::cast(frame_inspector_->GetContext()); |
478 | 478 |
479 HandleScope scope(isolate_); | 479 HandleScope scope(isolate_); |
480 Handle<SharedFunctionInfo> shared(function->shared()); | 480 Handle<SharedFunctionInfo> shared(function->shared()); |
481 Handle<ScopeInfo> scope_info(shared->scope_info()); | 481 Handle<ScopeInfo> scope_info(shared->scope_info()); |
482 | 482 |
483 if (!scope_info->HasContext()) return local_scope; | 483 if (!scope_info->HasContext()) return local_scope; |
(...skipping 22 matching lines...) Expand all Loading... |
506 Handle<JSObject> ScopeIterator::MaterializeClosure() { | 506 Handle<JSObject> ScopeIterator::MaterializeClosure() { |
507 Handle<Context> context = CurrentContext(); | 507 Handle<Context> context = CurrentContext(); |
508 DCHECK(context->IsFunctionContext()); | 508 DCHECK(context->IsFunctionContext()); |
509 | 509 |
510 Handle<SharedFunctionInfo> shared(context->closure()->shared()); | 510 Handle<SharedFunctionInfo> shared(context->closure()->shared()); |
511 Handle<ScopeInfo> scope_info(shared->scope_info()); | 511 Handle<ScopeInfo> scope_info(shared->scope_info()); |
512 | 512 |
513 // Allocate and initialize a JSObject with all the content of this function | 513 // Allocate and initialize a JSObject with all the content of this function |
514 // closure. | 514 // closure. |
515 Handle<JSObject> closure_scope = | 515 Handle<JSObject> closure_scope = |
516 isolate_->factory()->NewJSObject(isolate_->object_function()); | 516 isolate_->factory()->NewJSObjectWithNullProto(); |
517 | 517 |
518 // Fill all context locals to the context extension. | 518 // Fill all context locals to the context extension. |
519 CopyContextLocalsToScopeObject(scope_info, context, closure_scope); | 519 CopyContextLocalsToScopeObject(scope_info, context, closure_scope); |
520 | 520 |
521 // Finally copy any properties from the function context extension. This will | 521 // Finally copy any properties from the function context extension. This will |
522 // be variables introduced by eval. | 522 // be variables introduced by eval. |
523 if (context->has_extension()) { | 523 if (context->has_extension()) { |
524 bool success = CopyContextExtensionToScopeObject( | 524 bool success = CopyContextExtensionToScopeObject( |
525 handle(context->extension_object(), isolate_), closure_scope, OWN_ONLY); | 525 handle(context->extension_object(), isolate_), closure_scope, OWN_ONLY); |
526 DCHECK(success); | 526 DCHECK(success); |
527 USE(success); | 527 USE(success); |
528 } | 528 } |
529 | 529 |
530 return closure_scope; | 530 return closure_scope; |
531 } | 531 } |
532 | 532 |
533 | 533 |
534 // Create a plain JSObject which materializes the scope for the specified | 534 // Create a plain JSObject which materializes the scope for the specified |
535 // catch context. | 535 // catch context. |
536 Handle<JSObject> ScopeIterator::MaterializeCatchScope() { | 536 Handle<JSObject> ScopeIterator::MaterializeCatchScope() { |
537 Handle<Context> context = CurrentContext(); | 537 Handle<Context> context = CurrentContext(); |
538 DCHECK(context->IsCatchContext()); | 538 DCHECK(context->IsCatchContext()); |
539 Handle<String> name(context->catch_name()); | 539 Handle<String> name(context->catch_name()); |
540 Handle<Object> thrown_object(context->get(Context::THROWN_OBJECT_INDEX), | 540 Handle<Object> thrown_object(context->get(Context::THROWN_OBJECT_INDEX), |
541 isolate_); | 541 isolate_); |
542 Handle<JSObject> catch_scope = | 542 Handle<JSObject> catch_scope = |
543 isolate_->factory()->NewJSObject(isolate_->object_function()); | 543 isolate_->factory()->NewJSObjectWithNullProto(); |
544 JSObject::SetOwnPropertyIgnoreAttributes(catch_scope, name, thrown_object, | 544 JSObject::SetOwnPropertyIgnoreAttributes(catch_scope, name, thrown_object, |
545 NONE) | 545 NONE) |
546 .Check(); | 546 .Check(); |
547 return catch_scope; | 547 return catch_scope; |
548 } | 548 } |
549 | 549 |
550 // Retrieve the with-context extension object. If the extension object is | 550 // Retrieve the with-context extension object. If the extension object is |
551 // a proxy, return an empty object. | 551 // a proxy, return an empty object. |
552 Handle<JSObject> ScopeIterator::WithContextExtension() { | 552 Handle<JSObject> ScopeIterator::WithContextExtension() { |
553 Handle<Context> context = CurrentContext(); | 553 Handle<Context> context = CurrentContext(); |
554 DCHECK(context->IsWithContext()); | 554 DCHECK(context->IsWithContext()); |
555 if (context->extension_receiver()->IsJSProxy()) { | 555 if (context->extension_receiver()->IsJSProxy()) { |
556 return isolate_->factory()->NewJSObjectWithNullProto(); | 556 return isolate_->factory()->NewJSObjectWithNullProto(); |
557 } | 557 } |
558 return handle(JSObject::cast(context->extension_receiver())); | 558 return handle(JSObject::cast(context->extension_receiver())); |
559 } | 559 } |
560 | 560 |
561 // Create a plain JSObject which materializes the block scope for the specified | 561 // Create a plain JSObject which materializes the block scope for the specified |
562 // block context. | 562 // block context. |
563 Handle<JSObject> ScopeIterator::MaterializeBlockScope() { | 563 Handle<JSObject> ScopeIterator::MaterializeBlockScope() { |
564 Handle<JSObject> block_scope = | 564 Handle<JSObject> block_scope = |
565 isolate_->factory()->NewJSObject(isolate_->object_function()); | 565 isolate_->factory()->NewJSObjectWithNullProto(); |
566 | 566 |
567 Handle<Context> context = Handle<Context>::null(); | 567 Handle<Context> context = Handle<Context>::null(); |
568 if (!nested_scope_chain_.is_empty()) { | 568 if (!nested_scope_chain_.is_empty()) { |
569 Handle<ScopeInfo> scope_info = nested_scope_chain_.last().scope_info; | 569 Handle<ScopeInfo> scope_info = nested_scope_chain_.last().scope_info; |
570 frame_inspector_->MaterializeStackLocals(block_scope, scope_info); | 570 frame_inspector_->MaterializeStackLocals(block_scope, scope_info); |
571 if (scope_info->HasContext()) context = CurrentContext(); | 571 if (scope_info->HasContext()) context = CurrentContext(); |
572 } else { | 572 } else { |
573 context = CurrentContext(); | 573 context = CurrentContext(); |
574 } | 574 } |
575 | 575 |
(...skipping 16 matching lines...) Expand all Loading... |
592 // Create a plain JSObject which materializes the module scope for the specified | 592 // Create a plain JSObject which materializes the module scope for the specified |
593 // module context. | 593 // module context. |
594 MaybeHandle<JSObject> ScopeIterator::MaterializeModuleScope() { | 594 MaybeHandle<JSObject> ScopeIterator::MaterializeModuleScope() { |
595 Handle<Context> context = CurrentContext(); | 595 Handle<Context> context = CurrentContext(); |
596 DCHECK(context->IsModuleContext()); | 596 DCHECK(context->IsModuleContext()); |
597 Handle<ScopeInfo> scope_info(context->scope_info()); | 597 Handle<ScopeInfo> scope_info(context->scope_info()); |
598 | 598 |
599 // Allocate and initialize a JSObject with all the members of the debugged | 599 // Allocate and initialize a JSObject with all the members of the debugged |
600 // module. | 600 // module. |
601 Handle<JSObject> module_scope = | 601 Handle<JSObject> module_scope = |
602 isolate_->factory()->NewJSObject(isolate_->object_function()); | 602 isolate_->factory()->NewJSObjectWithNullProto(); |
603 | 603 |
604 // Fill all context locals. | 604 // Fill all context locals. |
605 CopyContextLocalsToScopeObject(scope_info, context, module_scope); | 605 CopyContextLocalsToScopeObject(scope_info, context, module_scope); |
606 | 606 |
607 return module_scope; | 607 return module_scope; |
608 } | 608 } |
609 | 609 |
610 | 610 |
611 // Set the context local variable value. | 611 // Set the context local variable value. |
612 bool ScopeIterator::SetContextLocalValue(Handle<ScopeInfo> scope_info, | 612 bool ScopeIterator::SetContextLocalValue(Handle<ScopeInfo> scope_info, |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
851 DCHECK((beg_pos >= 0 && end_pos >= 0) || inner_scope->is_hidden()); | 851 DCHECK((beg_pos >= 0 && end_pos >= 0) || inner_scope->is_hidden()); |
852 if (beg_pos <= position && position < end_pos) { | 852 if (beg_pos <= position && position < end_pos) { |
853 GetNestedScopeChain(isolate, inner_scope, position); | 853 GetNestedScopeChain(isolate, inner_scope, position); |
854 return; | 854 return; |
855 } | 855 } |
856 } | 856 } |
857 } | 857 } |
858 | 858 |
859 } // namespace internal | 859 } // namespace internal |
860 } // namespace v8 | 860 } // namespace v8 |
OLD | NEW |