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

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

Issue 1802903002: [interpreter, debugger] fix remaining cctest failures. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 9 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
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 950 matching lines...) Expand 10 before | Expand all | Expand 10 after
961 } 961 }
962 962
963 void BytecodeGenerator::VisitIterationBody(IterationStatement* stmt, 963 void BytecodeGenerator::VisitIterationBody(IterationStatement* stmt,
964 LoopBuilder* loop_builder) { 964 LoopBuilder* loop_builder) {
965 ControlScopeForIteration execution_control(this, stmt, loop_builder); 965 ControlScopeForIteration execution_control(this, stmt, loop_builder);
966 builder()->StackCheck(); 966 builder()->StackCheck();
967 Visit(stmt->body()); 967 Visit(stmt->body());
968 } 968 }
969 969
970 void BytecodeGenerator::VisitDoWhileStatement(DoWhileStatement* stmt) { 970 void BytecodeGenerator::VisitDoWhileStatement(DoWhileStatement* stmt) {
971 builder()->SetStatementPosition(stmt);
Yang 2016/03/15 09:32:12 In FCG, we set a statement position, but no debug
972 LoopBuilder loop_builder(builder()); 971 LoopBuilder loop_builder(builder());
973 loop_builder.LoopHeader(); 972 loop_builder.LoopHeader();
974 if (stmt->cond()->ToBooleanIsFalse()) { 973 if (stmt->cond()->ToBooleanIsFalse()) {
975 VisitIterationBody(stmt, &loop_builder); 974 VisitIterationBody(stmt, &loop_builder);
976 loop_builder.Condition(); 975 loop_builder.Condition();
977 } else if (stmt->cond()->ToBooleanIsTrue()) { 976 } else if (stmt->cond()->ToBooleanIsTrue()) {
978 loop_builder.Condition(); 977 loop_builder.Condition();
979 VisitIterationBody(stmt, &loop_builder); 978 VisitIterationBody(stmt, &loop_builder);
980 loop_builder.JumpToHeader(); 979 loop_builder.JumpToHeader();
981 } else { 980 } else {
(...skipping 21 matching lines...) Expand all
1003 loop_builder.BreakIfFalse(); 1002 loop_builder.BreakIfFalse();
1004 } 1003 }
1005 VisitIterationBody(stmt, &loop_builder); 1004 VisitIterationBody(stmt, &loop_builder);
1006 loop_builder.JumpToHeader(); 1005 loop_builder.JumpToHeader();
1007 loop_builder.EndLoop(); 1006 loop_builder.EndLoop();
1008 } 1007 }
1009 1008
1010 1009
1011 void BytecodeGenerator::VisitForStatement(ForStatement* stmt) { 1010 void BytecodeGenerator::VisitForStatement(ForStatement* stmt) {
1012 if (stmt->init() != nullptr) { 1011 if (stmt->init() != nullptr) {
1013 builder()->SetStatementPosition(stmt->init());
1014 Visit(stmt->init()); 1012 Visit(stmt->init());
1015 } 1013 }
1016 if (stmt->cond() && stmt->cond()->ToBooleanIsFalse()) { 1014 if (stmt->cond() && stmt->cond()->ToBooleanIsFalse()) {
1017 // If the condition is known to be false there is no need to generate 1015 // If the condition is known to be false there is no need to generate
1018 // body, next or condition blocks. Init block should be generated. 1016 // body, next or condition blocks. Init block should be generated.
1019 return; 1017 return;
1020 } 1018 }
1021 1019
1022 LoopBuilder loop_builder(builder()); 1020 LoopBuilder loop_builder(builder());
1023 loop_builder.LoopHeader(); 1021 loop_builder.LoopHeader();
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
1139 USE(cache_array); 1137 USE(cache_array);
1140 builder()->ForInPrepare(cache_type); 1138 builder()->ForInPrepare(cache_type);
1141 1139
1142 // Set up loop counter 1140 // Set up loop counter
1143 Register index = register_allocator()->NewRegister(); 1141 Register index = register_allocator()->NewRegister();
1144 builder()->LoadLiteral(Smi::FromInt(0)); 1142 builder()->LoadLiteral(Smi::FromInt(0));
1145 builder()->StoreAccumulatorInRegister(index); 1143 builder()->StoreAccumulatorInRegister(index);
1146 1144
1147 // The loop 1145 // The loop
1148 loop_builder.LoopHeader(); 1146 loop_builder.LoopHeader();
1147 builder()->SetExpressionAsStatementPosition(stmt->each());
1149 loop_builder.Condition(); 1148 loop_builder.Condition();
1150 builder()->ForInDone(index, cache_length); 1149 builder()->ForInDone(index, cache_length);
1151 loop_builder.BreakIfTrue(); 1150 loop_builder.BreakIfTrue();
1152 DCHECK(Register::AreContiguous(cache_type, cache_array)); 1151 DCHECK(Register::AreContiguous(cache_type, cache_array));
1153 FeedbackVectorSlot slot = stmt->ForInFeedbackSlot(); 1152 FeedbackVectorSlot slot = stmt->ForInFeedbackSlot();
1154 builder()->ForInNext(receiver, index, cache_type, feedback_index(slot)); 1153 builder()->ForInNext(receiver, index, cache_type, feedback_index(slot));
1155 loop_builder.ContinueIfUndefined(); 1154 loop_builder.ContinueIfUndefined();
1156 builder()->SetExpressionAsStatementPosition(stmt->each());
1157 VisitForInAssignment(stmt->each(), stmt->EachFeedbackSlot()); 1155 VisitForInAssignment(stmt->each(), stmt->EachFeedbackSlot());
1158 VisitIterationBody(stmt, &loop_builder); 1156 VisitIterationBody(stmt, &loop_builder);
1159 loop_builder.Next(); 1157 loop_builder.Next();
1160 builder()->ForInStep(index); 1158 builder()->ForInStep(index);
1161 builder()->StoreAccumulatorInRegister(index); 1159 builder()->StoreAccumulatorInRegister(index);
1162 loop_builder.JumpToHeader(); 1160 loop_builder.JumpToHeader();
1163 loop_builder.EndLoop(); 1161 loop_builder.EndLoop();
1164 builder()->Bind(&subject_null_label); 1162 builder()->Bind(&subject_null_label);
1165 builder()->Bind(&subject_undefined_label); 1163 builder()->Bind(&subject_undefined_label);
1166 } 1164 }
(...skipping 1990 matching lines...) Expand 10 before | Expand all | Expand 10 after
3157 } 3155 }
3158 3156
3159 3157
3160 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const { 3158 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const {
3161 return info()->feedback_vector()->GetIndex(slot); 3159 return info()->feedback_vector()->GetIndex(slot);
3162 } 3160 }
3163 3161
3164 } // namespace interpreter 3162 } // namespace interpreter
3165 } // namespace internal 3163 } // namespace internal
3166 } // namespace v8 3164 } // namespace v8
OLDNEW
« no previous file with comments | « src/debug/debug.cc ('k') | test/cctest/cctest.status » ('j') | test/cctest/cctest.status » ('J')

Powered by Google App Engine
This is Rietveld 408576698