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

Side by Side Diff: src/objects/debug-objects.cc

Issue 2909893002: [debug] Untangle DebugInfo from break point support (Closed)
Patch Set: Address comments Created 3 years, 6 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/debug-objects.h ('k') | src/objects/debug-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 2017 the V8 project authors. All rights reserved. 1 // Copyright 2017 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/debug-objects.h" 5 #include "src/objects/debug-objects.h"
6 #include "src/objects/debug-objects-inl.h" 6 #include "src/objects/debug-objects-inl.h"
7 7
8 namespace v8 { 8 namespace v8 {
9 namespace internal { 9 namespace internal {
10 10
11 bool DebugInfo::IsEmpty() const { return flags() == kNone; }
12
13 bool DebugInfo::HasBreakInfo() const { return (flags() & kHasBreakInfo) != 0; }
14
15 bool DebugInfo::ClearBreakInfo() {
16 Isolate* isolate = GetIsolate();
17
18 set_debug_bytecode_array(isolate->heap()->undefined_value());
19 set_break_points(isolate->heap()->empty_fixed_array());
20
21 int new_flags = flags() & ~kHasBreakInfo;
22 set_flags(new_flags);
23
24 return new_flags == kNone;
25 }
26
11 // Check if there is a break point at this source position. 27 // Check if there is a break point at this source position.
12 bool DebugInfo::HasBreakPoint(int source_position) { 28 bool DebugInfo::HasBreakPoint(int source_position) {
29 DCHECK(HasBreakInfo());
13 // Get the break point info object for this code offset. 30 // Get the break point info object for this code offset.
14 Object* break_point_info = GetBreakPointInfo(source_position); 31 Object* break_point_info = GetBreakPointInfo(source_position);
15 32
16 // If there is no break point info object or no break points in the break 33 // If there is no break point info object or no break points in the break
17 // point info object there is no break point at this code offset. 34 // point info object there is no break point at this code offset.
18 if (break_point_info->IsUndefined(GetIsolate())) return false; 35 if (break_point_info->IsUndefined(GetIsolate())) return false;
19 return BreakPointInfo::cast(break_point_info)->GetBreakPointCount() > 0; 36 return BreakPointInfo::cast(break_point_info)->GetBreakPointCount() > 0;
20 } 37 }
21 38
22 // Get the break point info object for this source position. 39 // Get the break point info object for this source position.
23 Object* DebugInfo::GetBreakPointInfo(int source_position) { 40 Object* DebugInfo::GetBreakPointInfo(int source_position) {
41 DCHECK(HasBreakInfo());
24 Isolate* isolate = GetIsolate(); 42 Isolate* isolate = GetIsolate();
25 if (!break_points()->IsUndefined(isolate)) { 43 if (!break_points()->IsUndefined(isolate)) {
26 for (int i = 0; i < break_points()->length(); i++) { 44 for (int i = 0; i < break_points()->length(); i++) {
27 if (!break_points()->get(i)->IsUndefined(isolate)) { 45 if (!break_points()->get(i)->IsUndefined(isolate)) {
28 BreakPointInfo* break_point_info = 46 BreakPointInfo* break_point_info =
29 BreakPointInfo::cast(break_points()->get(i)); 47 BreakPointInfo::cast(break_points()->get(i));
30 if (break_point_info->source_position() == source_position) { 48 if (break_point_info->source_position() == source_position) {
31 return break_point_info; 49 return break_point_info;
32 } 50 }
33 } 51 }
34 } 52 }
35 } 53 }
36 return isolate->heap()->undefined_value(); 54 return isolate->heap()->undefined_value();
37 } 55 }
38 56
39 bool DebugInfo::ClearBreakPoint(Handle<DebugInfo> debug_info, 57 bool DebugInfo::ClearBreakPoint(Handle<DebugInfo> debug_info,
40 Handle<Object> break_point_object) { 58 Handle<Object> break_point_object) {
59 DCHECK(debug_info->HasBreakInfo());
41 Isolate* isolate = debug_info->GetIsolate(); 60 Isolate* isolate = debug_info->GetIsolate();
42 if (debug_info->break_points()->IsUndefined(isolate)) return false; 61 if (debug_info->break_points()->IsUndefined(isolate)) return false;
43 62
44 for (int i = 0; i < debug_info->break_points()->length(); i++) { 63 for (int i = 0; i < debug_info->break_points()->length(); i++) {
45 if (debug_info->break_points()->get(i)->IsUndefined(isolate)) continue; 64 if (debug_info->break_points()->get(i)->IsUndefined(isolate)) continue;
46 Handle<BreakPointInfo> break_point_info = Handle<BreakPointInfo>( 65 Handle<BreakPointInfo> break_point_info = Handle<BreakPointInfo>(
47 BreakPointInfo::cast(debug_info->break_points()->get(i)), isolate); 66 BreakPointInfo::cast(debug_info->break_points()->get(i)), isolate);
48 if (BreakPointInfo::HasBreakPointObject(break_point_info, 67 if (BreakPointInfo::HasBreakPointObject(break_point_info,
49 break_point_object)) { 68 break_point_object)) {
50 BreakPointInfo::ClearBreakPoint(break_point_info, break_point_object); 69 BreakPointInfo::ClearBreakPoint(break_point_info, break_point_object);
51 return true; 70 return true;
52 } 71 }
53 } 72 }
54 return false; 73 return false;
55 } 74 }
56 75
57 void DebugInfo::SetBreakPoint(Handle<DebugInfo> debug_info, int source_position, 76 void DebugInfo::SetBreakPoint(Handle<DebugInfo> debug_info, int source_position,
58 Handle<Object> break_point_object) { 77 Handle<Object> break_point_object) {
78 DCHECK(debug_info->HasBreakInfo());
59 Isolate* isolate = debug_info->GetIsolate(); 79 Isolate* isolate = debug_info->GetIsolate();
60 Handle<Object> break_point_info( 80 Handle<Object> break_point_info(
61 debug_info->GetBreakPointInfo(source_position), isolate); 81 debug_info->GetBreakPointInfo(source_position), isolate);
62 if (!break_point_info->IsUndefined(isolate)) { 82 if (!break_point_info->IsUndefined(isolate)) {
63 BreakPointInfo::SetBreakPoint( 83 BreakPointInfo::SetBreakPoint(
64 Handle<BreakPointInfo>::cast(break_point_info), break_point_object); 84 Handle<BreakPointInfo>::cast(break_point_info), break_point_object);
65 return; 85 return;
66 } 86 }
67 87
68 // Adding a new break point for a code offset which did not have any 88 // Adding a new break point for a code offset which did not have any
(...skipping 24 matching lines...) Expand all
93 113
94 // Allocate new BreakPointInfo object and set the break point. 114 // Allocate new BreakPointInfo object and set the break point.
95 Handle<BreakPointInfo> new_break_point_info = 115 Handle<BreakPointInfo> new_break_point_info =
96 isolate->factory()->NewBreakPointInfo(source_position); 116 isolate->factory()->NewBreakPointInfo(source_position);
97 BreakPointInfo::SetBreakPoint(new_break_point_info, break_point_object); 117 BreakPointInfo::SetBreakPoint(new_break_point_info, break_point_object);
98 debug_info->break_points()->set(index, *new_break_point_info); 118 debug_info->break_points()->set(index, *new_break_point_info);
99 } 119 }
100 120
101 // Get the break point objects for a source position. 121 // Get the break point objects for a source position.
102 Handle<Object> DebugInfo::GetBreakPointObjects(int source_position) { 122 Handle<Object> DebugInfo::GetBreakPointObjects(int source_position) {
123 DCHECK(HasBreakInfo());
103 Object* break_point_info = GetBreakPointInfo(source_position); 124 Object* break_point_info = GetBreakPointInfo(source_position);
104 Isolate* isolate = GetIsolate(); 125 Isolate* isolate = GetIsolate();
105 if (break_point_info->IsUndefined(isolate)) { 126 if (break_point_info->IsUndefined(isolate)) {
106 return isolate->factory()->undefined_value(); 127 return isolate->factory()->undefined_value();
107 } 128 }
108 return Handle<Object>( 129 return Handle<Object>(
109 BreakPointInfo::cast(break_point_info)->break_point_objects(), isolate); 130 BreakPointInfo::cast(break_point_info)->break_point_objects(), isolate);
110 } 131 }
111 132
112 // Get the total number of break points. 133 // Get the total number of break points.
113 int DebugInfo::GetBreakPointCount() { 134 int DebugInfo::GetBreakPointCount() {
135 DCHECK(HasBreakInfo());
114 Isolate* isolate = GetIsolate(); 136 Isolate* isolate = GetIsolate();
115 if (break_points()->IsUndefined(isolate)) return 0; 137 if (break_points()->IsUndefined(isolate)) return 0;
116 int count = 0; 138 int count = 0;
117 for (int i = 0; i < break_points()->length(); i++) { 139 for (int i = 0; i < break_points()->length(); i++) {
118 if (!break_points()->get(i)->IsUndefined(isolate)) { 140 if (!break_points()->get(i)->IsUndefined(isolate)) {
119 BreakPointInfo* break_point_info = 141 BreakPointInfo* break_point_info =
120 BreakPointInfo::cast(break_points()->get(i)); 142 BreakPointInfo::cast(break_points()->get(i));
121 count += break_point_info->GetBreakPointCount(); 143 count += break_point_info->GetBreakPointCount();
122 } 144 }
123 } 145 }
124 return count; 146 return count;
125 } 147 }
126 148
127 Handle<Object> DebugInfo::FindBreakPointInfo( 149 Handle<Object> DebugInfo::FindBreakPointInfo(
128 Handle<DebugInfo> debug_info, Handle<Object> break_point_object) { 150 Handle<DebugInfo> debug_info, Handle<Object> break_point_object) {
151 DCHECK(debug_info->HasBreakInfo());
129 Isolate* isolate = debug_info->GetIsolate(); 152 Isolate* isolate = debug_info->GetIsolate();
130 if (!debug_info->break_points()->IsUndefined(isolate)) { 153 if (!debug_info->break_points()->IsUndefined(isolate)) {
131 for (int i = 0; i < debug_info->break_points()->length(); i++) { 154 for (int i = 0; i < debug_info->break_points()->length(); i++) {
132 if (!debug_info->break_points()->get(i)->IsUndefined(isolate)) { 155 if (!debug_info->break_points()->get(i)->IsUndefined(isolate)) {
133 Handle<BreakPointInfo> break_point_info = Handle<BreakPointInfo>( 156 Handle<BreakPointInfo> break_point_info = Handle<BreakPointInfo>(
134 BreakPointInfo::cast(debug_info->break_points()->get(i)), isolate); 157 BreakPointInfo::cast(debug_info->break_points()->get(i)), isolate);
135 if (BreakPointInfo::HasBreakPointObject(break_point_info, 158 if (BreakPointInfo::HasBreakPointObject(break_point_info,
136 break_point_object)) { 159 break_point_object)) {
137 return break_point_info; 160 return break_point_info;
138 } 161 }
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 // No break point. 260 // No break point.
238 if (break_point_objects()->IsUndefined(GetIsolate())) return 0; 261 if (break_point_objects()->IsUndefined(GetIsolate())) return 0;
239 // Single break point. 262 // Single break point.
240 if (!break_point_objects()->IsFixedArray()) return 1; 263 if (!break_point_objects()->IsFixedArray()) return 1;
241 // Multiple break points. 264 // Multiple break points.
242 return FixedArray::cast(break_point_objects())->length(); 265 return FixedArray::cast(break_point_objects())->length();
243 } 266 }
244 267
245 } // namespace internal 268 } // namespace internal
246 } // namespace v8 269 } // namespace v8
OLDNEW
« no previous file with comments | « src/objects/debug-objects.h ('k') | src/objects/debug-objects-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698