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

Side by Side Diff: runtime/vm/flags.cc

Issue 2974233002: VM: Re-format to use at most one newline between functions (Closed)
Patch Set: Rebase and merge Created 3 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 | « runtime/vm/flags.h ('k') | runtime/vm/flags_test.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 (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/flags.h" 5 #include "vm/flags.h"
6 6
7 #include "platform/assert.h" 7 #include "platform/assert.h"
8 #include "vm/json_stream.h" 8 #include "vm/json_stream.h"
9 #include "vm/os.h" 9 #include "vm/os.h"
10 10
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 #else // !PRODUCT && !PRECOMPILED 53 #else // !PRODUCT && !PRECOMPILED
54 #define RELEASE_FLAG_MARCO(name, product_value, type, default_value, comment) \ 54 #define RELEASE_FLAG_MARCO(name, product_value, type, default_value, comment) \
55 type FLAG_##name = \ 55 type FLAG_##name = \
56 Flags::Register_##type(&FLAG_##name, #name, default_value, comment); 56 Flags::Register_##type(&FLAG_##name, #name, default_value, comment);
57 #define PRECOMPILE_FLAG_MARCO(name, pre_value, product_value, type, \ 57 #define PRECOMPILE_FLAG_MARCO(name, pre_value, product_value, type, \
58 default_value, comment) \ 58 default_value, comment) \
59 type FLAG_##name = \ 59 type FLAG_##name = \
60 Flags::Register_##type(&FLAG_##name, #name, default_value, comment); 60 Flags::Register_##type(&FLAG_##name, #name, default_value, comment);
61 #endif 61 #endif
62 62
63
64 // Define all of the non-product flags here. 63 // Define all of the non-product flags here.
65 FLAG_LIST(PRODUCT_FLAG_MARCO, 64 FLAG_LIST(PRODUCT_FLAG_MARCO,
66 RELEASE_FLAG_MARCO, 65 RELEASE_FLAG_MARCO,
67 DEBUG_FLAG_MARCO, 66 DEBUG_FLAG_MARCO,
68 PRECOMPILE_FLAG_MARCO) 67 PRECOMPILE_FLAG_MARCO)
69 68
70 #undef RELEASE_FLAG_MARCO 69 #undef RELEASE_FLAG_MARCO
71 #undef DEBUG_FLAG_MARCO 70 #undef DEBUG_FLAG_MARCO
72 #undef PRODUCT_FLAG_MARCO 71 #undef PRODUCT_FLAG_MARCO
73 #undef PRECOMPILE_FLAG_MARCO 72 #undef PRECOMPILE_FLAG_MARCO
74 73
75
76 bool Flags::initialized_ = false; 74 bool Flags::initialized_ = false;
77 75
78 // List of registered flags. 76 // List of registered flags.
79 Flag** Flags::flags_ = NULL; 77 Flag** Flags::flags_ = NULL;
80 intptr_t Flags::capacity_ = 0; 78 intptr_t Flags::capacity_ = 0;
81 intptr_t Flags::num_flags_ = 0; 79 intptr_t Flags::num_flags_ = 0;
82 80
83 class Flag { 81 class Flag {
84 public: 82 public:
85 enum FlagType { kBoolean, kInteger, kUint64, kString, kFunc, kNumFlagTypes }; 83 enum FlagType { kBoolean, kInteger, kUint64, kString, kFunc, kNumFlagTypes };
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 bool* bool_ptr_; 135 bool* bool_ptr_;
138 int* int_ptr_; 136 int* int_ptr_;
139 uint64_t* uint64_ptr_; 137 uint64_t* uint64_ptr_;
140 charp* charp_ptr_; 138 charp* charp_ptr_;
141 FlagHandler handler_; 139 FlagHandler handler_;
142 }; 140 };
143 FlagType type_; 141 FlagType type_;
144 bool changed_; 142 bool changed_;
145 }; 143 };
146 144
147
148 Flag* Flags::Lookup(const char* name) { 145 Flag* Flags::Lookup(const char* name) {
149 for (intptr_t i = 0; i < num_flags_; i++) { 146 for (intptr_t i = 0; i < num_flags_; i++) {
150 Flag* flag = flags_[i]; 147 Flag* flag = flags_[i];
151 if (strcmp(flag->name_, name) == 0) { 148 if (strcmp(flag->name_, name) == 0) {
152 return flag; 149 return flag;
153 } 150 }
154 } 151 }
155 return NULL; 152 return NULL;
156 } 153 }
157 154
158
159 bool Flags::IsSet(const char* name) { 155 bool Flags::IsSet(const char* name) {
160 Flag* flag = Lookup(name); 156 Flag* flag = Lookup(name);
161 return (flag != NULL) && (flag->type_ == Flag::kBoolean) && 157 return (flag != NULL) && (flag->type_ == Flag::kBoolean) &&
162 (flag->bool_ptr_ != NULL) && (*flag->bool_ptr_ == true); 158 (flag->bool_ptr_ != NULL) && (*flag->bool_ptr_ == true);
163 } 159 }
164 160
165
166 void Flags::AddFlag(Flag* flag) { 161 void Flags::AddFlag(Flag* flag) {
167 ASSERT(!initialized_); 162 ASSERT(!initialized_);
168 if (num_flags_ == capacity_) { 163 if (num_flags_ == capacity_) {
169 if (flags_ == NULL) { 164 if (flags_ == NULL) {
170 capacity_ = 256; 165 capacity_ = 256;
171 flags_ = new Flag*[capacity_]; 166 flags_ = new Flag*[capacity_];
172 } else { 167 } else {
173 intptr_t new_capacity = capacity_ * 2; 168 intptr_t new_capacity = capacity_ * 2;
174 Flag** new_flags = new Flag*[new_capacity]; 169 Flag** new_flags = new Flag*[new_capacity];
175 for (intptr_t i = 0; i < num_flags_; i++) { 170 for (intptr_t i = 0; i < num_flags_; i++) {
176 new_flags[i] = flags_[i]; 171 new_flags[i] = flags_[i];
177 } 172 }
178 delete[] flags_; 173 delete[] flags_;
179 flags_ = new_flags; 174 flags_ = new_flags;
180 capacity_ = new_capacity; 175 capacity_ = new_capacity;
181 } 176 }
182 } 177 }
183 flags_[num_flags_++] = flag; 178 flags_[num_flags_++] = flag;
184 } 179 }
185 180
186
187 bool Flags::Register_bool(bool* addr, 181 bool Flags::Register_bool(bool* addr,
188 const char* name, 182 const char* name,
189 bool default_value, 183 bool default_value,
190 const char* comment) { 184 const char* comment) {
191 Flag* flag = Lookup(name); 185 Flag* flag = Lookup(name);
192 if (flag != NULL) { 186 if (flag != NULL) {
193 ASSERT(flag->IsUnrecognized()); 187 ASSERT(flag->IsUnrecognized());
194 return default_value; 188 return default_value;
195 } 189 }
196 flag = new Flag(name, comment, addr, Flag::kBoolean); 190 flag = new Flag(name, comment, addr, Flag::kBoolean);
197 AddFlag(flag); 191 AddFlag(flag);
198 return default_value; 192 return default_value;
199 } 193 }
200 194
201
202 int Flags::Register_int(int* addr, 195 int Flags::Register_int(int* addr,
203 const char* name, 196 const char* name,
204 int default_value, 197 int default_value,
205 const char* comment) { 198 const char* comment) {
206 ASSERT(Lookup(name) == NULL); 199 ASSERT(Lookup(name) == NULL);
207 200
208 Flag* flag = new Flag(name, comment, addr, Flag::kInteger); 201 Flag* flag = new Flag(name, comment, addr, Flag::kInteger);
209 AddFlag(flag); 202 AddFlag(flag);
210 203
211 return default_value; 204 return default_value;
212 } 205 }
213 206
214
215 uint64_t Flags::Register_uint64_t(uint64_t* addr, 207 uint64_t Flags::Register_uint64_t(uint64_t* addr,
216 const char* name, 208 const char* name,
217 uint64_t default_value, 209 uint64_t default_value,
218 const char* comment) { 210 const char* comment) {
219 ASSERT(Lookup(name) == NULL); 211 ASSERT(Lookup(name) == NULL);
220 212
221 Flag* flag = new Flag(name, comment, addr, Flag::kUint64); 213 Flag* flag = new Flag(name, comment, addr, Flag::kUint64);
222 AddFlag(flag); 214 AddFlag(flag);
223 215
224 return default_value; 216 return default_value;
225 } 217 }
226 218
227
228 const char* Flags::Register_charp(charp* addr, 219 const char* Flags::Register_charp(charp* addr,
229 const char* name, 220 const char* name,
230 const char* default_value, 221 const char* default_value,
231 const char* comment) { 222 const char* comment) {
232 ASSERT(Lookup(name) == NULL); 223 ASSERT(Lookup(name) == NULL);
233 Flag* flag = new Flag(name, comment, addr, Flag::kString); 224 Flag* flag = new Flag(name, comment, addr, Flag::kString);
234 AddFlag(flag); 225 AddFlag(flag);
235 return default_value; 226 return default_value;
236 } 227 }
237 228
238
239 bool Flags::Register_func(FlagHandler handler, 229 bool Flags::Register_func(FlagHandler handler,
240 const char* name, 230 const char* name,
241 const char* comment) { 231 const char* comment) {
242 ASSERT(Lookup(name) == NULL); 232 ASSERT(Lookup(name) == NULL);
243 Flag* flag = new Flag(name, comment, handler); 233 Flag* flag = new Flag(name, comment, handler);
244 AddFlag(flag); 234 AddFlag(flag);
245 return false; 235 return false;
246 } 236 }
247 237
248
249 static void Normalize(char* s) { 238 static void Normalize(char* s) {
250 intptr_t len = strlen(s); 239 intptr_t len = strlen(s);
251 for (intptr_t i = 0; i < len; i++) { 240 for (intptr_t i = 0; i < len; i++) {
252 if (s[i] == '-') { 241 if (s[i] == '-') {
253 s[i] = '_'; 242 s[i] = '_';
254 } 243 }
255 } 244 }
256 } 245 }
257 246
258
259 bool Flags::SetFlagFromString(Flag* flag, const char* argument) { 247 bool Flags::SetFlagFromString(Flag* flag, const char* argument) {
260 ASSERT(!flag->IsUnrecognized()); 248 ASSERT(!flag->IsUnrecognized());
261 switch (flag->type_) { 249 switch (flag->type_) {
262 case Flag::kBoolean: { 250 case Flag::kBoolean: {
263 if (strcmp(argument, "true") == 0) { 251 if (strcmp(argument, "true") == 0) {
264 *flag->bool_ptr_ = true; 252 *flag->bool_ptr_ = true;
265 } else if (strcmp(argument, "false") == 0) { 253 } else if (strcmp(argument, "false") == 0) {
266 *flag->bool_ptr_ = false; 254 *flag->bool_ptr_ = false;
267 } else { 255 } else {
268 return false; 256 return false;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 } 303 }
316 default: { 304 default: {
317 UNREACHABLE(); 305 UNREACHABLE();
318 return false; 306 return false;
319 } 307 }
320 } 308 }
321 flag->changed_ = true; 309 flag->changed_ = true;
322 return true; 310 return true;
323 } 311 }
324 312
325
326 void Flags::Parse(const char* option) { 313 void Flags::Parse(const char* option) {
327 // Find the beginning of the option argument, if it exists. 314 // Find the beginning of the option argument, if it exists.
328 const char* equals = option; 315 const char* equals = option;
329 while ((*equals != '\0') && (*equals != '=')) { 316 while ((*equals != '\0') && (*equals != '=')) {
330 equals++; 317 equals++;
331 } 318 }
332 319
333 const char* argument = NULL; 320 const char* argument = NULL;
334 321
335 // Determine if this is an option argument. 322 // Determine if this is an option argument.
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 if (!SetFlagFromString(flag, argument)) { 362 if (!SetFlagFromString(flag, argument)) {
376 OS::Print("Ignoring flag: %s is an invalid value for flag %s\n", 363 OS::Print("Ignoring flag: %s is an invalid value for flag %s\n",
377 argument, name); 364 argument, name);
378 } 365 }
379 } 366 }
380 } 367 }
381 368
382 delete[] name; 369 delete[] name;
383 } 370 }
384 371
385
386 static bool IsValidFlag(const char* name, 372 static bool IsValidFlag(const char* name,
387 const char* prefix, 373 const char* prefix,
388 intptr_t prefix_length) { 374 intptr_t prefix_length) {
389 intptr_t name_length = strlen(name); 375 intptr_t name_length = strlen(name);
390 return ((name_length > prefix_length) && 376 return ((name_length > prefix_length) &&
391 (strncmp(name, prefix, prefix_length) == 0)); 377 (strncmp(name, prefix, prefix_length) == 0));
392 } 378 }
393 379
394
395 int Flags::CompareFlagNames(const void* left, const void* right) { 380 int Flags::CompareFlagNames(const void* left, const void* right) {
396 const Flag* left_flag = *reinterpret_cast<const Flag* const*>(left); 381 const Flag* left_flag = *reinterpret_cast<const Flag* const*>(left);
397 const Flag* right_flag = *reinterpret_cast<const Flag* const*>(right); 382 const Flag* right_flag = *reinterpret_cast<const Flag* const*>(right);
398 return strcmp(left_flag->name_, right_flag->name_); 383 return strcmp(left_flag->name_, right_flag->name_);
399 } 384 }
400 385
401
402 bool Flags::ProcessCommandLineFlags(int number_of_vm_flags, 386 bool Flags::ProcessCommandLineFlags(int number_of_vm_flags,
403 const char** vm_flags) { 387 const char** vm_flags) {
404 if (initialized_) { 388 if (initialized_) {
405 return false; 389 return false;
406 } 390 }
407 391
408 qsort(flags_, num_flags_, sizeof flags_[0], CompareFlagNames); 392 qsort(flags_, num_flags_, sizeof flags_[0], CompareFlagNames);
409 393
410 const char* const kPrefix = "--"; 394 const char* const kPrefix = "--";
411 const intptr_t kPrefixLen = strlen(kPrefix); 395 const intptr_t kPrefixLen = strlen(kPrefix);
(...skipping 25 matching lines...) Expand all
437 } 421 }
438 } 422 }
439 if (FLAG_print_flags) { 423 if (FLAG_print_flags) {
440 PrintFlags(); 424 PrintFlags();
441 } 425 }
442 426
443 initialized_ = true; 427 initialized_ = true;
444 return true; 428 return true;
445 } 429 }
446 430
447
448 bool Flags::SetFlag(const char* name, const char* value, const char** error) { 431 bool Flags::SetFlag(const char* name, const char* value, const char** error) {
449 Flag* flag = Lookup(name); 432 Flag* flag = Lookup(name);
450 if (flag == NULL) { 433 if (flag == NULL) {
451 *error = "Cannot set flag: flag not found"; 434 *error = "Cannot set flag: flag not found";
452 return false; 435 return false;
453 } 436 }
454 if (!SetFlagFromString(flag, value)) { 437 if (!SetFlagFromString(flag, value)) {
455 *error = "Cannot set flag: invalid value"; 438 *error = "Cannot set flag: invalid value";
456 return false; 439 return false;
457 } 440 }
458 return true; 441 return true;
459 } 442 }
460 443
461
462 void Flags::PrintFlags() { 444 void Flags::PrintFlags() {
463 OS::Print("Flag settings:\n"); 445 OS::Print("Flag settings:\n");
464 for (intptr_t i = 0; i < num_flags_; ++i) { 446 for (intptr_t i = 0; i < num_flags_; ++i) {
465 flags_[i]->Print(); 447 flags_[i]->Print();
466 } 448 }
467 } 449 }
468 450
469
470 #ifndef PRODUCT 451 #ifndef PRODUCT
471 void Flags::PrintFlagToJSONArray(JSONArray* jsarr, const Flag* flag) { 452 void Flags::PrintFlagToJSONArray(JSONArray* jsarr, const Flag* flag) {
472 if (!FLAG_support_service) { 453 if (!FLAG_support_service) {
473 return; 454 return;
474 } 455 }
475 if (flag->IsUnrecognized() || flag->type_ == Flag::kFunc) { 456 if (flag->IsUnrecognized() || flag->type_ == Flag::kFunc) {
476 return; 457 return;
477 } 458 }
478 JSONObject jsflag(jsarr); 459 JSONObject jsflag(jsarr);
479 jsflag.AddProperty("name", flag->name_); 460 jsflag.AddProperty("name", flag->name_);
(...skipping 24 matching lines...) Expand all
504 // valueAsString missing means NULL. 485 // valueAsString missing means NULL.
505 } 486 }
506 break; 487 break;
507 } 488 }
508 default: 489 default:
509 UNREACHABLE(); 490 UNREACHABLE();
510 break; 491 break;
511 } 492 }
512 } 493 }
513 494
514
515 void Flags::PrintJSON(JSONStream* js) { 495 void Flags::PrintJSON(JSONStream* js) {
516 if (!FLAG_support_service) { 496 if (!FLAG_support_service) {
517 return; 497 return;
518 } 498 }
519 JSONObject jsobj(js); 499 JSONObject jsobj(js);
520 jsobj.AddProperty("type", "FlagList"); 500 jsobj.AddProperty("type", "FlagList");
521 JSONArray jsarr(&jsobj, "flags"); 501 JSONArray jsarr(&jsobj, "flags");
522 for (intptr_t i = 0; i < num_flags_; ++i) { 502 for (intptr_t i = 0; i < num_flags_; ++i) {
523 PrintFlagToJSONArray(&jsarr, flags_[i]); 503 PrintFlagToJSONArray(&jsarr, flags_[i]);
524 } 504 }
525 } 505 }
526 #endif // !PRODUCT 506 #endif // !PRODUCT
527 507
528 } // namespace dart 508 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/flags.h ('k') | runtime/vm/flags_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698