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

Side by Side Diff: src/interpreter/bytecode-generator.cc

Issue 1682853004: [interpreter, debugger] implement bytecode break location iterator. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fix build Created 4 years, 10 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 | « src/interpreter/bytecode-array-builder.cc ('k') | src/interpreter/bytecodes.h » ('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 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/interpreter/bytecode-generator.h" 5 #include "src/interpreter/bytecode-generator.h"
6 6
7 #include "src/ast/scopes.h" 7 #include "src/ast/scopes.h"
8 #include "src/compiler.h" 8 #include "src/compiler.h"
9 #include "src/interpreter/bytecode-register-allocator.h" 9 #include "src/interpreter/bytecode-register-allocator.h"
10 #include "src/interpreter/control-flow-builders.h" 10 #include "src/interpreter/control-flow-builders.h"
(...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 if (scope()->NeedsContext()) { 567 if (scope()->NeedsContext()) {
568 // Push a new inner context scope for the function. 568 // Push a new inner context scope for the function.
569 VisitNewLocalFunctionContext(); 569 VisitNewLocalFunctionContext();
570 ContextScope local_function_context(this, scope(), false); 570 ContextScope local_function_context(this, scope(), false);
571 VisitBuildLocalActivationContext(); 571 VisitBuildLocalActivationContext();
572 MakeBytecodeBody(); 572 MakeBytecodeBody();
573 } else { 573 } else {
574 MakeBytecodeBody(); 574 MakeBytecodeBody();
575 } 575 }
576 576
577 builder()->EnsureReturn(info->literal());
577 set_scope(nullptr); 578 set_scope(nullptr);
578 set_info(nullptr); 579 set_info(nullptr);
579 return builder()->ToBytecodeArray(); 580 return builder()->ToBytecodeArray();
580 } 581 }
581 582
582 583
583 void BytecodeGenerator::MakeBytecodeBody() { 584 void BytecodeGenerator::MakeBytecodeBody() {
584 // Build the arguments object if it is used. 585 // Build the arguments object if it is used.
585 VisitArgumentsObject(scope()->arguments()); 586 VisitArgumentsObject(scope()->arguments());
586 587
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
798 // Allocate an outer register allocations scope for the statement. 799 // Allocate an outer register allocations scope for the statement.
799 RegisterAllocationScope allocation_scope(this); 800 RegisterAllocationScope allocation_scope(this);
800 Statement* stmt = statements->at(i); 801 Statement* stmt = statements->at(i);
801 Visit(stmt); 802 Visit(stmt);
802 if (stmt->IsJump()) break; 803 if (stmt->IsJump()) break;
803 } 804 }
804 } 805 }
805 806
806 807
807 void BytecodeGenerator::VisitExpressionStatement(ExpressionStatement* stmt) { 808 void BytecodeGenerator::VisitExpressionStatement(ExpressionStatement* stmt) {
809 builder()->SetStatementPosition(stmt);
808 VisitForEffect(stmt->expression()); 810 VisitForEffect(stmt->expression());
809 } 811 }
810 812
811 813
812 void BytecodeGenerator::VisitEmptyStatement(EmptyStatement* stmt) { 814 void BytecodeGenerator::VisitEmptyStatement(EmptyStatement* stmt) {
813 } 815 }
814 816
815 817
816 void BytecodeGenerator::VisitIfStatement(IfStatement* stmt) { 818 void BytecodeGenerator::VisitIfStatement(IfStatement* stmt) {
817 BytecodeLabel else_label, end_label; 819 BytecodeLabel else_label, end_label;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
853 } 855 }
854 856
855 857
856 void BytecodeGenerator::VisitBreakStatement(BreakStatement* stmt) { 858 void BytecodeGenerator::VisitBreakStatement(BreakStatement* stmt) {
857 execution_control()->Break(stmt->target()); 859 execution_control()->Break(stmt->target());
858 } 860 }
859 861
860 862
861 void BytecodeGenerator::VisitReturnStatement(ReturnStatement* stmt) { 863 void BytecodeGenerator::VisitReturnStatement(ReturnStatement* stmt) {
862 VisitForAccumulatorValue(stmt->expression()); 864 VisitForAccumulatorValue(stmt->expression());
865 builder()->SetReturnPosition(info_->literal());
863 execution_control()->ReturnAccumulator(); 866 execution_control()->ReturnAccumulator();
864 } 867 }
865 868
866 869
867 void BytecodeGenerator::VisitWithStatement(WithStatement* stmt) { 870 void BytecodeGenerator::VisitWithStatement(WithStatement* stmt) {
868 VisitForAccumulatorValue(stmt->expression()); 871 VisitForAccumulatorValue(stmt->expression());
869 builder()->CastAccumulatorToJSObject(); 872 builder()->CastAccumulatorToJSObject();
870 VisitNewLocalWithContext(); 873 VisitNewLocalWithContext();
871 VisitInScope(stmt->statement(), stmt->scope()); 874 VisitInScope(stmt->statement(), stmt->scope());
872 } 875 }
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
1208 1211
1209 // Pending message object is restored on exit. 1212 // Pending message object is restored on exit.
1210 builder()->CallRuntime(Runtime::kInterpreterSetPendingMessage, message, 1); 1213 builder()->CallRuntime(Runtime::kInterpreterSetPendingMessage, message, 1);
1211 1214
1212 // Dynamic dispatch after the finally-block. 1215 // Dynamic dispatch after the finally-block.
1213 commands.ApplyDeferredCommands(); 1216 commands.ApplyDeferredCommands();
1214 } 1217 }
1215 1218
1216 1219
1217 void BytecodeGenerator::VisitDebuggerStatement(DebuggerStatement* stmt) { 1220 void BytecodeGenerator::VisitDebuggerStatement(DebuggerStatement* stmt) {
1221 builder()->SetStatementPosition(stmt);
1218 builder()->Debugger(); 1222 builder()->Debugger();
1219 } 1223 }
1220 1224
1221 1225
1222 void BytecodeGenerator::VisitFunctionLiteral(FunctionLiteral* expr) { 1226 void BytecodeGenerator::VisitFunctionLiteral(FunctionLiteral* expr) {
1223 // Find or build a shared function info. 1227 // Find or build a shared function info.
1224 Handle<SharedFunctionInfo> shared_info = 1228 Handle<SharedFunctionInfo> shared_info =
1225 Compiler::GetSharedFunctionInfo(expr, info()->script(), info()); 1229 Compiler::GetSharedFunctionInfo(expr, info()->script(), info());
1226 CHECK(!shared_info.is_null()); // TODO(rmcilroy): Set stack overflow? 1230 CHECK(!shared_info.is_null()); // TODO(rmcilroy): Set stack overflow?
1227 builder()->CreateClosure(shared_info, 1231 builder()->CreateClosure(shared_info,
(...skipping 1643 matching lines...) Expand 10 before | Expand all | Expand 10 after
2871 } 2875 }
2872 2876
2873 2877
2874 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const { 2878 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const {
2875 return info()->feedback_vector()->GetIndex(slot); 2879 return info()->feedback_vector()->GetIndex(slot);
2876 } 2880 }
2877 2881
2878 } // namespace interpreter 2882 } // namespace interpreter
2879 } // namespace internal 2883 } // namespace internal
2880 } // namespace v8 2884 } // namespace v8
OLDNEW
« no previous file with comments | « src/interpreter/bytecode-array-builder.cc ('k') | src/interpreter/bytecodes.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698