| OLD | NEW |
| 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 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 args->Add(buffer.ToCString().Detach()); | 261 args->Add(buffer.ToCString().Detach()); |
| 262 JSArguments jsargs = *args_flag->args_variable(); | 262 JSArguments jsargs = *args_flag->args_variable(); |
| 263 for (int j = 0; j < jsargs.argc(); j++) { | 263 for (int j = 0; j < jsargs.argc(); j++) { |
| 264 args->Add(StrDup(jsargs[j])); | 264 args->Add(StrDup(jsargs[j])); |
| 265 } | 265 } |
| 266 } | 266 } |
| 267 return args; | 267 return args; |
| 268 } | 268 } |
| 269 | 269 |
| 270 | 270 |
| 271 inline char NormalizeChar(char ch) { |
| 272 return ch == '_' ? '-' : ch; |
| 273 } |
| 274 |
| 275 |
| 271 // Helper function to parse flags: Takes an argument arg and splits it into | 276 // Helper function to parse flags: Takes an argument arg and splits it into |
| 272 // a flag name and flag value (or NULL if they are missing). is_bool is set | 277 // a flag name and flag value (or NULL if they are missing). is_bool is set |
| 273 // if the arg started with "-no" or "--no". The buffer may be used to NUL- | 278 // if the arg started with "-no" or "--no". The buffer may be used to NUL- |
| 274 // terminate the name, it must be large enough to hold any possible name. | 279 // terminate the name, it must be large enough to hold any possible name. |
| 275 static void SplitArgument(const char* arg, | 280 static void SplitArgument(const char* arg, |
| 276 char* buffer, | 281 char* buffer, |
| 277 int buffer_size, | 282 int buffer_size, |
| 278 const char** name, | 283 const char** name, |
| 279 const char** value, | 284 const char** value, |
| 280 bool* is_bool) { | 285 bool* is_bool) { |
| 281 *name = NULL; | 286 *name = NULL; |
| 282 *value = NULL; | 287 *value = NULL; |
| 283 *is_bool = false; | 288 *is_bool = false; |
| 284 | 289 |
| 285 if (arg != NULL && *arg == '-') { | 290 if (arg != NULL && *arg == '-') { |
| 286 // find the begin of the flag name | 291 // find the begin of the flag name |
| 287 arg++; // remove 1st '-' | 292 arg++; // remove 1st '-' |
| 288 if (*arg == '-') { | 293 if (*arg == '-') { |
| 289 arg++; // remove 2nd '-' | 294 arg++; // remove 2nd '-' |
| 290 if (arg[0] == '\0') { | 295 if (arg[0] == '\0') { |
| 291 const char* kJSArgumentsFlagName = "js_arguments"; | 296 const char* kJSArgumentsFlagName = "js_arguments"; |
| 292 *name = kJSArgumentsFlagName; | 297 *name = kJSArgumentsFlagName; |
| 293 return; | 298 return; |
| 294 } | 299 } |
| 295 } | 300 } |
| 296 if (arg[0] == 'n' && arg[1] == 'o') { | 301 if (arg[0] == 'n' && arg[1] == 'o') { |
| 297 arg += 2; // remove "no" | 302 arg += 2; // remove "no" |
| 303 if (NormalizeChar(arg[0]) == '-') arg++; // remove dash after "no". |
| 298 *is_bool = true; | 304 *is_bool = true; |
| 299 } | 305 } |
| 300 *name = arg; | 306 *name = arg; |
| 301 | 307 |
| 302 // find the end of the flag name | 308 // find the end of the flag name |
| 303 while (*arg != '\0' && *arg != '=') | 309 while (*arg != '\0' && *arg != '=') |
| 304 arg++; | 310 arg++; |
| 305 | 311 |
| 306 // get the value if any | 312 // get the value if any |
| 307 if (*arg == '=') { | 313 if (*arg == '=') { |
| 308 // make a copy so we can NUL-terminate flag name | 314 // make a copy so we can NUL-terminate flag name |
| 309 size_t n = arg - *name; | 315 size_t n = arg - *name; |
| 310 CHECK(n < static_cast<size_t>(buffer_size)); // buffer is too small | 316 CHECK(n < static_cast<size_t>(buffer_size)); // buffer is too small |
| 311 OS::MemCopy(buffer, *name, n); | 317 OS::MemCopy(buffer, *name, n); |
| 312 buffer[n] = '\0'; | 318 buffer[n] = '\0'; |
| 313 *name = buffer; | 319 *name = buffer; |
| 314 // get the value | 320 // get the value |
| 315 *value = arg + 1; | 321 *value = arg + 1; |
| 316 } | 322 } |
| 317 } | 323 } |
| 318 } | 324 } |
| 319 | 325 |
| 320 | 326 |
| 321 inline char NormalizeChar(char ch) { | |
| 322 return ch == '_' ? '-' : ch; | |
| 323 } | |
| 324 | |
| 325 | |
| 326 static bool EqualNames(const char* a, const char* b) { | 327 static bool EqualNames(const char* a, const char* b) { |
| 327 for (int i = 0; NormalizeChar(a[i]) == NormalizeChar(b[i]); i++) { | 328 for (int i = 0; NormalizeChar(a[i]) == NormalizeChar(b[i]); i++) { |
| 328 if (a[i] == '\0') { | 329 if (a[i] == '\0') { |
| 329 return true; | 330 return true; |
| 330 } | 331 } |
| 331 } | 332 } |
| 332 return false; | 333 return false; |
| 333 } | 334 } |
| 334 | 335 |
| 335 | 336 |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 548 } | 549 } |
| 549 | 550 |
| 550 | 551 |
| 551 void FlagList::EnforceFlagImplications() { | 552 void FlagList::EnforceFlagImplications() { |
| 552 #define FLAG_MODE_DEFINE_IMPLICATIONS | 553 #define FLAG_MODE_DEFINE_IMPLICATIONS |
| 553 #include "flag-definitions.h" | 554 #include "flag-definitions.h" |
| 554 #undef FLAG_MODE_DEFINE_IMPLICATIONS | 555 #undef FLAG_MODE_DEFINE_IMPLICATIONS |
| 555 } | 556 } |
| 556 | 557 |
| 557 } } // namespace v8::internal | 558 } } // namespace v8::internal |
| OLD | NEW |