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

Side by Side Diff: src/objects.cc

Issue 2197183002: [debugger] use handler table on unoptimized code for exception prediction. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: address comments and rebase Created 4 years, 4 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/objects.h ('k') | src/objects-inl.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/objects.h" 5 #include "src/objects.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <iomanip> 8 #include <iomanip>
9 #include <memory> 9 #include <memory>
10 #include <sstream> 10 #include <sstream>
(...skipping 10211 matching lines...) Expand 10 before | Expand all | Expand 10 after
10222 #endif 10222 #endif
10223 if (data_out) *data_out = handler_data; 10223 if (data_out) *data_out = handler_data;
10224 if (prediction_out) *prediction_out = prediction; 10224 if (prediction_out) *prediction_out = prediction;
10225 } 10225 }
10226 } 10226 }
10227 return innermost_handler; 10227 return innermost_handler;
10228 } 10228 }
10229 10229
10230 10230
10231 // TODO(turbofan): Make sure table is sorted and use binary search. 10231 // TODO(turbofan): Make sure table is sorted and use binary search.
10232 int HandlerTable::LookupReturn(int pc_offset, CatchPrediction* prediction_out) { 10232 int HandlerTable::LookupReturn(int pc_offset) {
10233 for (int i = 0; i < length(); i += kReturnEntrySize) { 10233 for (int i = 0; i < length(); i += kReturnEntrySize) {
10234 int return_offset = Smi::cast(get(i + kReturnOffsetIndex))->value(); 10234 int return_offset = Smi::cast(get(i + kReturnOffsetIndex))->value();
10235 int handler_field = Smi::cast(get(i + kReturnHandlerIndex))->value(); 10235 int handler_field = Smi::cast(get(i + kReturnHandlerIndex))->value();
10236 if (pc_offset == return_offset) { 10236 if (pc_offset == return_offset) {
10237 if (prediction_out) {
10238 *prediction_out = HandlerPredictionField::decode(handler_field);
10239 }
10240 return HandlerOffsetField::decode(handler_field); 10237 return HandlerOffsetField::decode(handler_field);
10241 } 10238 }
10242 } 10239 }
10243 return -1; 10240 return -1;
10244 } 10241 }
10245 10242
10246 10243
10247 #ifdef DEBUG 10244 #ifdef DEBUG
10248 bool DescriptorArray::IsEqualTo(DescriptorArray* other) { 10245 bool DescriptorArray::IsEqualTo(DescriptorArray* other) {
10249 if (IsEmpty()) return other->IsEmpty(); 10246 if (IsEmpty()) return other->IsEmpty();
(...skipping 3466 matching lines...) Expand 10 before | Expand all | Expand 10 after
13716 DisallowHeapAllocation no_gc; 13713 DisallowHeapAllocation no_gc;
13717 DCHECK(kind() == FUNCTION); 13714 DCHECK(kind() == FUNCTION);
13718 BackEdgeTable back_edges(this, &no_gc); 13715 BackEdgeTable back_edges(this, &no_gc);
13719 for (uint32_t i = 0; i < back_edges.length(); i++) { 13716 for (uint32_t i = 0; i < back_edges.length(); i++) {
13720 if (back_edges.ast_id(i) == ast_id) return back_edges.pc_offset(i); 13717 if (back_edges.ast_id(i) == ast_id) return back_edges.pc_offset(i);
13721 } 13718 }
13722 UNREACHABLE(); // We expect to find the back edge. 13719 UNREACHABLE(); // We expect to find the back edge.
13723 return 0; 13720 return 0;
13724 } 13721 }
13725 13722
13723 int Code::LookupRangeInHandlerTable(int code_offset, int* data,
13724 HandlerTable::CatchPrediction* prediction) {
13725 DCHECK(!is_optimized_code());
13726 HandlerTable* table = HandlerTable::cast(handler_table());
13727 return table->LookupRange(code_offset, data, prediction);
13728 }
13726 13729
13727 void Code::MakeCodeAgeSequenceYoung(byte* sequence, Isolate* isolate) { 13730 void Code::MakeCodeAgeSequenceYoung(byte* sequence, Isolate* isolate) {
13728 PatchPlatformCodeAge(isolate, sequence, kNoAgeCodeAge, NO_MARKING_PARITY); 13731 PatchPlatformCodeAge(isolate, sequence, kNoAgeCodeAge, NO_MARKING_PARITY);
13729 } 13732 }
13730 13733
13731 13734
13732 void Code::MarkCodeAsExecuted(byte* sequence, Isolate* isolate) { 13735 void Code::MarkCodeAsExecuted(byte* sequence, Isolate* isolate) {
13733 PatchPlatformCodeAge(isolate, sequence, kExecutedOnceCodeAge, 13736 PatchPlatformCodeAge(isolate, sequence, kExecutedOnceCodeAge,
13734 NO_MARKING_PARITY); 13737 NO_MARKING_PARITY);
13735 } 13738 }
(...skipping 734 matching lines...) Expand 10 before | Expand all | Expand 10 after
14470 #endif 14473 #endif
14471 } 14474 }
14472 14475
14473 void BytecodeArray::CopyBytecodesTo(BytecodeArray* to) { 14476 void BytecodeArray::CopyBytecodesTo(BytecodeArray* to) {
14474 BytecodeArray* from = this; 14477 BytecodeArray* from = this;
14475 DCHECK_EQ(from->length(), to->length()); 14478 DCHECK_EQ(from->length(), to->length());
14476 CopyBytes(to->GetFirstBytecodeAddress(), from->GetFirstBytecodeAddress(), 14479 CopyBytes(to->GetFirstBytecodeAddress(), from->GetFirstBytecodeAddress(),
14477 from->length()); 14480 from->length());
14478 } 14481 }
14479 14482
14483 int BytecodeArray::LookupRangeInHandlerTable(
14484 int code_offset, int* data, HandlerTable::CatchPrediction* prediction) {
14485 HandlerTable* table = HandlerTable::cast(handler_table());
14486 code_offset++; // Point after current bytecode.
14487 return table->LookupRange(code_offset, data, prediction);
14488 }
14489
14480 // static 14490 // static
14481 void JSArray::Initialize(Handle<JSArray> array, int capacity, int length) { 14491 void JSArray::Initialize(Handle<JSArray> array, int capacity, int length) {
14482 DCHECK(capacity >= 0); 14492 DCHECK(capacity >= 0);
14483 array->GetIsolate()->factory()->NewJSArrayStorage( 14493 array->GetIsolate()->factory()->NewJSArrayStorage(
14484 array, length, capacity, INITIALIZE_ARRAY_ELEMENTS_WITH_HOLE); 14494 array, length, capacity, INITIALIZE_ARRAY_ELEMENTS_WITH_HOLE);
14485 } 14495 }
14486 14496
14487 void JSArray::SetLength(Handle<JSArray> array, uint32_t new_length) { 14497 void JSArray::SetLength(Handle<JSArray> array, uint32_t new_length) {
14488 // We should never end in here with a pixel or external array. 14498 // We should never end in here with a pixel or external array.
14489 DCHECK(array->AllowsSetLength()); 14499 DCHECK(array->AllowsSetLength());
(...skipping 4537 matching lines...) Expand 10 before | Expand all | Expand 10 after
19027 for (PrototypeIterator iter(isolate, this, kStartAtReceiver, 19037 for (PrototypeIterator iter(isolate, this, kStartAtReceiver,
19028 PrototypeIterator::END_AT_NULL); 19038 PrototypeIterator::END_AT_NULL);
19029 !iter.IsAtEnd(); iter.AdvanceIgnoringProxies()) { 19039 !iter.IsAtEnd(); iter.AdvanceIgnoringProxies()) {
19030 if (iter.GetCurrent<Object>()->IsJSProxy()) return true; 19040 if (iter.GetCurrent<Object>()->IsJSProxy()) return true;
19031 } 19041 }
19032 return false; 19042 return false;
19033 } 19043 }
19034 19044
19035 } // namespace internal 19045 } // namespace internal
19036 } // namespace v8 19046 } // namespace v8
OLDNEW
« no previous file with comments | « src/objects.h ('k') | src/objects-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698