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

Side by Side Diff: src/deoptimizer.cc

Issue 2173403002: Replace SmartArrayPointer<T> with unique_ptr<T[]> (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: updates Created 4 years, 5 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/crankshaft/hydrogen.cc ('k') | src/disassembler.cc » ('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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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/deoptimizer.h" 5 #include "src/deoptimizer.h"
6 6
7 #include <memory>
8
7 #include "src/accessors.h" 9 #include "src/accessors.h"
8 #include "src/ast/prettyprinter.h" 10 #include "src/ast/prettyprinter.h"
9 #include "src/codegen.h" 11 #include "src/codegen.h"
10 #include "src/disasm.h" 12 #include "src/disasm.h"
11 #include "src/frames-inl.h" 13 #include "src/frames-inl.h"
12 #include "src/full-codegen/full-codegen.h" 14 #include "src/full-codegen/full-codegen.h"
13 #include "src/global-handles.h" 15 #include "src/global-handles.h"
14 #include "src/interpreter/interpreter.h" 16 #include "src/interpreter/interpreter.h"
15 #include "src/macro-assembler.h" 17 #include "src/macro-assembler.h"
16 #include "src/tracing/trace-event.h" 18 #include "src/tracing/trace-event.h"
(...skipping 850 matching lines...) Expand 10 before | Expand all | Expand 10 after
867 // We also make space for the exception itself. 869 // We also make space for the exception itself.
868 height_in_bytes = (height + 1) * kPointerSize; 870 height_in_bytes = (height + 1) * kPointerSize;
869 CHECK(is_topmost); 871 CHECK(is_topmost);
870 } 872 }
871 873
872 JSFunction* function = JSFunction::cast(value_iterator->GetRawValue()); 874 JSFunction* function = JSFunction::cast(value_iterator->GetRawValue());
873 value_iterator++; 875 value_iterator++;
874 input_index++; 876 input_index++;
875 if (trace_scope_ != NULL) { 877 if (trace_scope_ != NULL) {
876 PrintF(trace_scope_->file(), " translating frame "); 878 PrintF(trace_scope_->file(), " translating frame ");
877 base::SmartArrayPointer<char> name = shared->DebugName()->ToCString(); 879 std::unique_ptr<char[]> name = shared->DebugName()->ToCString();
878 PrintF(trace_scope_->file(), "%s", name.get()); 880 PrintF(trace_scope_->file(), "%s", name.get());
879 PrintF(trace_scope_->file(), " => node=%d, height=%d%s\n", node_id.ToInt(), 881 PrintF(trace_scope_->file(), " => node=%d, height=%d%s\n", node_id.ToInt(),
880 height_in_bytes, goto_catch_handler ? " (throw)" : ""); 882 height_in_bytes, goto_catch_handler ? " (throw)" : "");
881 } 883 }
882 884
883 // The 'fixed' part of the frame consists of the incoming parameters and 885 // The 'fixed' part of the frame consists of the incoming parameters and
884 // the part described by JavaScriptFrameConstants. 886 // the part described by JavaScriptFrameConstants.
885 unsigned fixed_frame_size = ComputeJavascriptFixedSize(shared); 887 unsigned fixed_frame_size = ComputeJavascriptFixedSize(shared);
886 unsigned output_frame_size = height_in_bytes + fixed_frame_size; 888 unsigned output_frame_size = height_in_bytes + fixed_frame_size;
887 889
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
1086 int input_index = 0; 1088 int input_index = 0;
1087 1089
1088 int bytecode_offset = translated_frame->node_id().ToInt(); 1090 int bytecode_offset = translated_frame->node_id().ToInt();
1089 unsigned height = translated_frame->height(); 1091 unsigned height = translated_frame->height();
1090 unsigned height_in_bytes = height * kPointerSize; 1092 unsigned height_in_bytes = height * kPointerSize;
1091 JSFunction* function = JSFunction::cast(value_iterator->GetRawValue()); 1093 JSFunction* function = JSFunction::cast(value_iterator->GetRawValue());
1092 value_iterator++; 1094 value_iterator++;
1093 input_index++; 1095 input_index++;
1094 if (trace_scope_ != NULL) { 1096 if (trace_scope_ != NULL) {
1095 PrintF(trace_scope_->file(), " translating interpreted frame "); 1097 PrintF(trace_scope_->file(), " translating interpreted frame ");
1096 base::SmartArrayPointer<char> name = shared->DebugName()->ToCString(); 1098 std::unique_ptr<char[]> name = shared->DebugName()->ToCString();
1097 PrintF(trace_scope_->file(), "%s", name.get()); 1099 PrintF(trace_scope_->file(), "%s", name.get());
1098 PrintF(trace_scope_->file(), " => bytecode_offset=%d, height=%d%s\n", 1100 PrintF(trace_scope_->file(), " => bytecode_offset=%d, height=%d%s\n",
1099 bytecode_offset, height_in_bytes, 1101 bytecode_offset, height_in_bytes,
1100 goto_catch_handler ? " (throw)" : ""); 1102 goto_catch_handler ? " (throw)" : "");
1101 } 1103 }
1102 if (goto_catch_handler) { 1104 if (goto_catch_handler) {
1103 bytecode_offset = catch_handler_pc_offset_; 1105 bytecode_offset = catch_handler_pc_offset_;
1104 } 1106 }
1105 1107
1106 // The 'fixed' part of the frame consists of the incoming parameters and 1108 // The 'fixed' part of the frame consists of the incoming parameters and
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
1431 void Deoptimizer::DoComputeTailCallerFrame(TranslatedFrame* translated_frame, 1433 void Deoptimizer::DoComputeTailCallerFrame(TranslatedFrame* translated_frame,
1432 int frame_index) { 1434 int frame_index) {
1433 SharedFunctionInfo* shared = translated_frame->raw_shared_info(); 1435 SharedFunctionInfo* shared = translated_frame->raw_shared_info();
1434 1436
1435 bool is_bottommost = (0 == frame_index); 1437 bool is_bottommost = (0 == frame_index);
1436 // Tail caller frame can't be topmost. 1438 // Tail caller frame can't be topmost.
1437 CHECK_NE(output_count_ - 1, frame_index); 1439 CHECK_NE(output_count_ - 1, frame_index);
1438 1440
1439 if (trace_scope_ != NULL) { 1441 if (trace_scope_ != NULL) {
1440 PrintF(trace_scope_->file(), " translating tail caller frame "); 1442 PrintF(trace_scope_->file(), " translating tail caller frame ");
1441 base::SmartArrayPointer<char> name = shared->DebugName()->ToCString(); 1443 std::unique_ptr<char[]> name = shared->DebugName()->ToCString();
1442 PrintF(trace_scope_->file(), "%s\n", name.get()); 1444 PrintF(trace_scope_->file(), "%s\n", name.get());
1443 } 1445 }
1444 1446
1445 if (!is_bottommost) return; 1447 if (!is_bottommost) return;
1446 1448
1447 // Drop arguments adaptor frame below current frame if it exsits. 1449 // Drop arguments adaptor frame below current frame if it exsits.
1448 Address fp_address = input_->GetFramePointerAddress(); 1450 Address fp_address = input_->GetFramePointerAddress();
1449 Address adaptor_fp_address = 1451 Address adaptor_fp_address =
1450 Memory::Address_at(fp_address + CommonFrameConstants::kCallerFPOffset); 1452 Memory::Address_at(fp_address + CommonFrameConstants::kCallerFPOffset);
1451 1453
(...skipping 1726 matching lines...) Expand 10 before | Expand all | Expand 10 after
3178 FILE* trace_file) { 3180 FILE* trace_file) {
3179 Translation::Opcode opcode = 3181 Translation::Opcode opcode =
3180 static_cast<Translation::Opcode>(iterator->Next()); 3182 static_cast<Translation::Opcode>(iterator->Next());
3181 switch (opcode) { 3183 switch (opcode) {
3182 case Translation::JS_FRAME: { 3184 case Translation::JS_FRAME: {
3183 BailoutId node_id = BailoutId(iterator->Next()); 3185 BailoutId node_id = BailoutId(iterator->Next());
3184 SharedFunctionInfo* shared_info = 3186 SharedFunctionInfo* shared_info =
3185 SharedFunctionInfo::cast(literal_array->get(iterator->Next())); 3187 SharedFunctionInfo::cast(literal_array->get(iterator->Next()));
3186 int height = iterator->Next(); 3188 int height = iterator->Next();
3187 if (trace_file != nullptr) { 3189 if (trace_file != nullptr) {
3188 base::SmartArrayPointer<char> name = 3190 std::unique_ptr<char[]> name = shared_info->DebugName()->ToCString();
3189 shared_info->DebugName()->ToCString();
3190 PrintF(trace_file, " reading input frame %s", name.get()); 3191 PrintF(trace_file, " reading input frame %s", name.get());
3191 int arg_count = shared_info->internal_formal_parameter_count() + 1; 3192 int arg_count = shared_info->internal_formal_parameter_count() + 1;
3192 PrintF(trace_file, " => node=%d, args=%d, height=%d; inputs:\n", 3193 PrintF(trace_file, " => node=%d, args=%d, height=%d; inputs:\n",
3193 node_id.ToInt(), arg_count, height); 3194 node_id.ToInt(), arg_count, height);
3194 } 3195 }
3195 return TranslatedFrame::JSFrame(node_id, shared_info, height); 3196 return TranslatedFrame::JSFrame(node_id, shared_info, height);
3196 } 3197 }
3197 3198
3198 case Translation::INTERPRETED_FRAME: { 3199 case Translation::INTERPRETED_FRAME: {
3199 BailoutId bytecode_offset = BailoutId(iterator->Next()); 3200 BailoutId bytecode_offset = BailoutId(iterator->Next());
3200 SharedFunctionInfo* shared_info = 3201 SharedFunctionInfo* shared_info =
3201 SharedFunctionInfo::cast(literal_array->get(iterator->Next())); 3202 SharedFunctionInfo::cast(literal_array->get(iterator->Next()));
3202 int height = iterator->Next(); 3203 int height = iterator->Next();
3203 if (trace_file != nullptr) { 3204 if (trace_file != nullptr) {
3204 base::SmartArrayPointer<char> name = 3205 std::unique_ptr<char[]> name = shared_info->DebugName()->ToCString();
3205 shared_info->DebugName()->ToCString();
3206 PrintF(trace_file, " reading input frame %s", name.get()); 3206 PrintF(trace_file, " reading input frame %s", name.get());
3207 int arg_count = shared_info->internal_formal_parameter_count() + 1; 3207 int arg_count = shared_info->internal_formal_parameter_count() + 1;
3208 PrintF(trace_file, 3208 PrintF(trace_file,
3209 " => bytecode_offset=%d, args=%d, height=%d; inputs:\n", 3209 " => bytecode_offset=%d, args=%d, height=%d; inputs:\n",
3210 bytecode_offset.ToInt(), arg_count, height); 3210 bytecode_offset.ToInt(), arg_count, height);
3211 } 3211 }
3212 return TranslatedFrame::InterpretedFrame(bytecode_offset, shared_info, 3212 return TranslatedFrame::InterpretedFrame(bytecode_offset, shared_info,
3213 height); 3213 height);
3214 } 3214 }
3215 3215
3216 case Translation::ARGUMENTS_ADAPTOR_FRAME: { 3216 case Translation::ARGUMENTS_ADAPTOR_FRAME: {
3217 SharedFunctionInfo* shared_info = 3217 SharedFunctionInfo* shared_info =
3218 SharedFunctionInfo::cast(literal_array->get(iterator->Next())); 3218 SharedFunctionInfo::cast(literal_array->get(iterator->Next()));
3219 int height = iterator->Next(); 3219 int height = iterator->Next();
3220 if (trace_file != nullptr) { 3220 if (trace_file != nullptr) {
3221 base::SmartArrayPointer<char> name = 3221 std::unique_ptr<char[]> name = shared_info->DebugName()->ToCString();
3222 shared_info->DebugName()->ToCString();
3223 PrintF(trace_file, " reading arguments adaptor frame %s", name.get()); 3222 PrintF(trace_file, " reading arguments adaptor frame %s", name.get());
3224 PrintF(trace_file, " => height=%d; inputs:\n", height); 3223 PrintF(trace_file, " => height=%d; inputs:\n", height);
3225 } 3224 }
3226 return TranslatedFrame::ArgumentsAdaptorFrame(shared_info, height); 3225 return TranslatedFrame::ArgumentsAdaptorFrame(shared_info, height);
3227 } 3226 }
3228 3227
3229 case Translation::TAIL_CALLER_FRAME: { 3228 case Translation::TAIL_CALLER_FRAME: {
3230 SharedFunctionInfo* shared_info = 3229 SharedFunctionInfo* shared_info =
3231 SharedFunctionInfo::cast(literal_array->get(iterator->Next())); 3230 SharedFunctionInfo::cast(literal_array->get(iterator->Next()));
3232 if (trace_file != nullptr) { 3231 if (trace_file != nullptr) {
3233 base::SmartArrayPointer<char> name = 3232 std::unique_ptr<char[]> name = shared_info->DebugName()->ToCString();
3234 shared_info->DebugName()->ToCString();
3235 PrintF(trace_file, " reading tail caller frame marker %s\n", 3233 PrintF(trace_file, " reading tail caller frame marker %s\n",
3236 name.get()); 3234 name.get());
3237 } 3235 }
3238 return TranslatedFrame::TailCallerFrame(shared_info); 3236 return TranslatedFrame::TailCallerFrame(shared_info);
3239 } 3237 }
3240 3238
3241 case Translation::CONSTRUCT_STUB_FRAME: { 3239 case Translation::CONSTRUCT_STUB_FRAME: {
3242 SharedFunctionInfo* shared_info = 3240 SharedFunctionInfo* shared_info =
3243 SharedFunctionInfo::cast(literal_array->get(iterator->Next())); 3241 SharedFunctionInfo::cast(literal_array->get(iterator->Next()));
3244 int height = iterator->Next(); 3242 int height = iterator->Next();
3245 if (trace_file != nullptr) { 3243 if (trace_file != nullptr) {
3246 base::SmartArrayPointer<char> name = 3244 std::unique_ptr<char[]> name = shared_info->DebugName()->ToCString();
3247 shared_info->DebugName()->ToCString();
3248 PrintF(trace_file, " reading construct stub frame %s", name.get()); 3245 PrintF(trace_file, " reading construct stub frame %s", name.get());
3249 PrintF(trace_file, " => height=%d; inputs:\n", height); 3246 PrintF(trace_file, " => height=%d; inputs:\n", height);
3250 } 3247 }
3251 return TranslatedFrame::ConstructStubFrame(shared_info, height); 3248 return TranslatedFrame::ConstructStubFrame(shared_info, height);
3252 } 3249 }
3253 3250
3254 case Translation::GETTER_STUB_FRAME: { 3251 case Translation::GETTER_STUB_FRAME: {
3255 SharedFunctionInfo* shared_info = 3252 SharedFunctionInfo* shared_info =
3256 SharedFunctionInfo::cast(literal_array->get(iterator->Next())); 3253 SharedFunctionInfo::cast(literal_array->get(iterator->Next()));
3257 if (trace_file != nullptr) { 3254 if (trace_file != nullptr) {
3258 base::SmartArrayPointer<char> name = 3255 std::unique_ptr<char[]> name = shared_info->DebugName()->ToCString();
3259 shared_info->DebugName()->ToCString();
3260 PrintF(trace_file, " reading getter frame %s; inputs:\n", name.get()); 3256 PrintF(trace_file, " reading getter frame %s; inputs:\n", name.get());
3261 } 3257 }
3262 return TranslatedFrame::AccessorFrame(TranslatedFrame::kGetter, 3258 return TranslatedFrame::AccessorFrame(TranslatedFrame::kGetter,
3263 shared_info); 3259 shared_info);
3264 } 3260 }
3265 3261
3266 case Translation::SETTER_STUB_FRAME: { 3262 case Translation::SETTER_STUB_FRAME: {
3267 SharedFunctionInfo* shared_info = 3263 SharedFunctionInfo* shared_info =
3268 SharedFunctionInfo::cast(literal_array->get(iterator->Next())); 3264 SharedFunctionInfo::cast(literal_array->get(iterator->Next()));
3269 if (trace_file != nullptr) { 3265 if (trace_file != nullptr) {
3270 base::SmartArrayPointer<char> name = 3266 std::unique_ptr<char[]> name = shared_info->DebugName()->ToCString();
3271 shared_info->DebugName()->ToCString();
3272 PrintF(trace_file, " reading setter frame %s; inputs:\n", name.get()); 3267 PrintF(trace_file, " reading setter frame %s; inputs:\n", name.get());
3273 } 3268 }
3274 return TranslatedFrame::AccessorFrame(TranslatedFrame::kSetter, 3269 return TranslatedFrame::AccessorFrame(TranslatedFrame::kSetter,
3275 shared_info); 3270 shared_info);
3276 } 3271 }
3277 3272
3278 case Translation::COMPILED_STUB_FRAME: { 3273 case Translation::COMPILED_STUB_FRAME: {
3279 int height = iterator->Next(); 3274 int height = iterator->Next();
3280 if (trace_file != nullptr) { 3275 if (trace_file != nullptr) {
3281 PrintF(trace_file, 3276 PrintF(trace_file,
(...skipping 721 matching lines...) Expand 10 before | Expand all | Expand 10 after
4003 CHECK(value_info->IsMaterializedObject()); 3998 CHECK(value_info->IsMaterializedObject());
4004 3999
4005 value_info->value_ = 4000 value_info->value_ =
4006 Handle<Object>(previously_materialized_objects->get(i), isolate_); 4001 Handle<Object>(previously_materialized_objects->get(i), isolate_);
4007 } 4002 }
4008 } 4003 }
4009 } 4004 }
4010 4005
4011 } // namespace internal 4006 } // namespace internal
4012 } // namespace v8 4007 } // namespace v8
OLDNEW
« no previous file with comments | « src/crankshaft/hydrogen.cc ('k') | src/disassembler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698