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

Side by Side Diff: src/flags.cc

Issue 9420: Adds a --help option and usage message listing all flags to V8. (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 12 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « src/flag-definitions.h ('k') | src/mksnapshot.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 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 // lookup the flag 310 // lookup the flag
311 Flag* flag = FindFlag(name); 311 Flag* flag = FindFlag(name);
312 if (flag == NULL) { 312 if (flag == NULL) {
313 if (remove_flags) { 313 if (remove_flags) {
314 // We don't recognize this flag but since we're removing 314 // We don't recognize this flag but since we're removing
315 // the flags we recognize we assume that the remaining flags 315 // the flags we recognize we assume that the remaining flags
316 // will be processed somewhere else so this flag might make 316 // will be processed somewhere else so this flag might make
317 // sense there. 317 // sense there.
318 continue; 318 continue;
319 } else { 319 } else {
320 fprintf(stderr, "Error: unrecognized flag %s\n", arg); 320 fprintf(stderr, "Error: unrecognized flag %s\n"
321 "Try --help for options\n", arg);
321 return j; 322 return j;
322 } 323 }
323 } 324 }
324 325
325 // if we still need a flag value, use the next argument if available 326 // if we still need a flag value, use the next argument if available
326 if (flag->type() != Flag::TYPE_BOOL && value == NULL) { 327 if (flag->type() != Flag::TYPE_BOOL && value == NULL) {
327 if (i < *argc) { 328 if (i < *argc) {
328 value = argv[i++]; 329 value = argv[i++];
329 } else { 330 } else {
330 fprintf(stderr, "Error: missing value for flag %s of type %s\n", 331 fprintf(stderr, "Error: missing value for flag %s of type %s\n"
332 "Try --help for options\n",
331 arg, Type2String(flag->type())); 333 arg, Type2String(flag->type()));
332 return j; 334 return j;
333 } 335 }
334 } 336 }
335 337
336 // set the flag 338 // set the flag
337 char* endp = const_cast<char*>(""); // *endp is only read 339 char* endp = const_cast<char*>(""); // *endp is only read
338 switch (flag->type()) { 340 switch (flag->type()) {
339 case Flag::TYPE_BOOL: 341 case Flag::TYPE_BOOL:
340 *flag->bool_variable() = !is_bool; 342 *flag->bool_variable() = !is_bool;
341 break; 343 break;
342 case Flag::TYPE_INT: 344 case Flag::TYPE_INT:
343 *flag->int_variable() = strtol(value, &endp, 10); // NOLINT 345 *flag->int_variable() = strtol(value, &endp, 10); // NOLINT
344 break; 346 break;
345 case Flag::TYPE_FLOAT: 347 case Flag::TYPE_FLOAT:
346 *flag->float_variable() = strtod(value, &endp); 348 *flag->float_variable() = strtod(value, &endp);
347 break; 349 break;
348 case Flag::TYPE_STRING: 350 case Flag::TYPE_STRING:
349 *flag->string_variable() = value; 351 *flag->string_variable() = value;
350 break; 352 break;
351 } 353 }
352 354
353 // handle errors 355 // handle errors
354 if ((flag->type() == Flag::TYPE_BOOL && value != NULL) || 356 if ((flag->type() == Flag::TYPE_BOOL && value != NULL) ||
355 (flag->type() != Flag::TYPE_BOOL && is_bool) || 357 (flag->type() != Flag::TYPE_BOOL && is_bool) ||
356 *endp != '\0') { 358 *endp != '\0') {
357 fprintf(stderr, "Error: illegal value for flag %s of type %s\n", 359 fprintf(stderr, "Error: illegal value for flag %s of type %s\n"
360 "Try --help for options\n",
358 arg, Type2String(flag->type())); 361 arg, Type2String(flag->type()));
359 return j; 362 return j;
360 } 363 }
361 364
362 // remove the flag & value from the command 365 // remove the flag & value from the command
363 if (remove_flags) 366 if (remove_flags)
364 while (j < i) 367 while (j < i)
365 argv[j++] = NULL; 368 argv[j++] = NULL;
366 } 369 }
367 } 370 }
368 371
369 // shrink the argument list 372 // shrink the argument list
370 if (remove_flags) { 373 if (remove_flags) {
371 int j = 1; 374 int j = 1;
372 for (int i = 1; i < *argc; i++) { 375 for (int i = 1; i < *argc; i++) {
373 if (argv[i] != NULL) 376 if (argv[i] != NULL)
374 argv[j++] = argv[i]; 377 argv[j++] = argv[i];
375 } 378 }
376 *argc = j; 379 *argc = j;
377 } 380 }
378 381
382 if (FLAG_help) {
383 PrintHelp();
384 }
379 // parsed all flags successfully 385 // parsed all flags successfully
380 return 0; 386 return 0;
381 } 387 }
382 388
383 389
384 static char* SkipWhiteSpace(char* p) { 390 static char* SkipWhiteSpace(char* p) {
385 while (*p != '\0' && isspace(*p) != 0) p++; 391 while (*p != '\0' && isspace(*p) != 0) p++;
386 return p; 392 return p;
387 } 393 }
388 394
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 // static 446 // static
441 void FlagList::ResetAllFlags() { 447 void FlagList::ResetAllFlags() {
442 for (size_t i = 0; i < num_flags; ++i) { 448 for (size_t i = 0; i < num_flags; ++i) {
443 flags[i].Reset(); 449 flags[i].Reset();
444 } 450 }
445 } 451 }
446 452
447 453
448 // static 454 // static
449 void FlagList::PrintHelp() { 455 void FlagList::PrintHelp() {
456 printf("Usage:\n");
457 printf(" shell [options] -e string\n");
458 printf(" execute string in V8\n");
459 printf(" shell [options] file1 file2 ... filek\n");
460 printf(" run JavaScript scripts in file1, file2, ..., filek\n");
461 printf(" shell [options]\n");
462 printf(" shell [options] --shell\n");
463 printf(" run an interactive JavaScript shell");
464 printf(" d8 [options] file\n");
465 printf(" d8 [options]\n");
466 printf(" run the new debugging shell\n\n");
467 printf("Options:\n");
450 for (size_t i = 0; i < num_flags; ++i) { 468 for (size_t i = 0; i < num_flags; ++i) {
451 Flag* f = &flags[i]; 469 Flag* f = &flags[i];
452 char* value = ToString(f); 470 char* value = ToString(f);
453 printf(" --%s (%s) type: %s default: %s\n", 471 printf(" --%s (%s)\n type: %s default: %s\n",
454 f->name(), f->comment(), Type2String(f->type()), value); 472 f->name(), f->comment(), Type2String(f->type()), value);
455 DeleteArray(value); 473 DeleteArray(value);
456 } 474 }
457 } 475 }
458 476
459 } } // namespace v8::internal 477 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/flag-definitions.h ('k') | src/mksnapshot.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698