| 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 // 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 <ctype.h> | 5 #include <ctype.h> |
| 6 #include <stdlib.h> | 6 #include <stdlib.h> |
| 7 | 7 |
| 8 #include "src/v8.h" | 8 #include "src/v8.h" |
| 9 | 9 |
| 10 #include "src/assembler.h" | 10 #include "src/assembler.h" |
| 11 #include "src/base/platform/platform.h" | 11 #include "src/base/platform/platform.h" |
| 12 #include "src/smart-pointers.h" | 12 #include "src/ostreams.h" |
| 13 #include "src/string-stream.h" | |
| 14 | 13 |
| 15 namespace v8 { | 14 namespace v8 { |
| 16 namespace internal { | 15 namespace internal { |
| 17 | 16 |
| 18 // Define all of our flags. | 17 // Define all of our flags. |
| 19 #define FLAG_MODE_DEFINE | 18 #define FLAG_MODE_DEFINE |
| 20 #include "src/flag-definitions.h" // NOLINT | 19 #include "src/flag-definitions.h" // NOLINT |
| 21 | 20 |
| 22 // Define all of our flags default values. | 21 // Define all of our flags default values. |
| 23 #define FLAG_MODE_DEFINE_DEFAULTS | 22 #define FLAG_MODE_DEFINE_DEFAULTS |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 case Flag::TYPE_INT: return "int"; | 174 case Flag::TYPE_INT: return "int"; |
| 176 case Flag::TYPE_FLOAT: return "float"; | 175 case Flag::TYPE_FLOAT: return "float"; |
| 177 case Flag::TYPE_STRING: return "string"; | 176 case Flag::TYPE_STRING: return "string"; |
| 178 case Flag::TYPE_ARGS: return "arguments"; | 177 case Flag::TYPE_ARGS: return "arguments"; |
| 179 } | 178 } |
| 180 UNREACHABLE(); | 179 UNREACHABLE(); |
| 181 return NULL; | 180 return NULL; |
| 182 } | 181 } |
| 183 | 182 |
| 184 | 183 |
| 185 static SmartArrayPointer<const char> ToString(Flag* flag) { | 184 OStream& operator<<(OStream& os, const Flag& flag) { // NOLINT |
| 186 HeapStringAllocator string_allocator; | 185 switch (flag.type()) { |
| 187 StringStream buffer(&string_allocator); | |
| 188 switch (flag->type()) { | |
| 189 case Flag::TYPE_BOOL: | 186 case Flag::TYPE_BOOL: |
| 190 buffer.Add("%s", (*flag->bool_variable() ? "true" : "false")); | 187 os << (*flag.bool_variable() ? "true" : "false"); |
| 191 break; | 188 break; |
| 192 case Flag::TYPE_MAYBE_BOOL: | 189 case Flag::TYPE_MAYBE_BOOL: |
| 193 buffer.Add("%s", flag->maybe_bool_variable()->has_value | 190 os << (flag.maybe_bool_variable()->has_value |
| 194 ? (flag->maybe_bool_variable()->value ? "true" : "false") | 191 ? (flag.maybe_bool_variable()->value ? "true" : "false") |
| 195 : "unset"); | 192 : "unset"); |
| 196 break; | 193 break; |
| 197 case Flag::TYPE_INT: | 194 case Flag::TYPE_INT: |
| 198 buffer.Add("%d", *flag->int_variable()); | 195 os << *flag.int_variable(); |
| 199 break; | 196 break; |
| 200 case Flag::TYPE_FLOAT: | 197 case Flag::TYPE_FLOAT: |
| 201 buffer.Add("%f", FmtElm(*flag->float_variable())); | 198 os << *flag.float_variable(); |
| 202 break; | 199 break; |
| 203 case Flag::TYPE_STRING: { | 200 case Flag::TYPE_STRING: { |
| 204 const char* str = flag->string_value(); | 201 const char* str = flag.string_value(); |
| 205 buffer.Add("%s", str ? str : "NULL"); | 202 os << (str ? str : "NULL"); |
| 206 break; | 203 break; |
| 207 } | 204 } |
| 208 case Flag::TYPE_ARGS: { | 205 case Flag::TYPE_ARGS: { |
| 209 JSArguments args = *flag->args_variable(); | 206 JSArguments args = *flag.args_variable(); |
| 210 if (args.argc > 0) { | 207 if (args.argc > 0) { |
| 211 buffer.Add("%s", args[0]); | 208 os << args[0]; |
| 212 for (int i = 1; i < args.argc; i++) { | 209 for (int i = 1; i < args.argc; i++) { |
| 213 buffer.Add(" %s", args[i]); | 210 os << args[i]; |
| 214 } | 211 } |
| 215 } | 212 } |
| 216 break; | 213 break; |
| 217 } | 214 } |
| 218 } | 215 } |
| 219 return buffer.ToCString(); | 216 return os; |
| 220 } | 217 } |
| 221 | 218 |
| 222 | 219 |
| 223 // static | 220 // static |
| 224 List<const char*>* FlagList::argv() { | 221 List<const char*>* FlagList::argv() { |
| 225 List<const char*>* args = new List<const char*>(8); | 222 List<const char*>* args = new List<const char*>(8); |
| 226 Flag* args_flag = NULL; | 223 Flag* args_flag = NULL; |
| 227 for (size_t i = 0; i < num_flags; ++i) { | 224 for (size_t i = 0; i < num_flags; ++i) { |
| 228 Flag* f = &flags[i]; | 225 Flag* f = &flags[i]; |
| 229 if (!f->IsDefault()) { | 226 if (!f->IsDefault()) { |
| 230 if (f->type() == Flag::TYPE_ARGS) { | 227 if (f->type() == Flag::TYPE_ARGS) { |
| 231 ASSERT(args_flag == NULL); | 228 ASSERT(args_flag == NULL); |
| 232 args_flag = f; // Must be last in arguments. | 229 args_flag = f; // Must be last in arguments. |
| 233 continue; | 230 continue; |
| 234 } | 231 } |
| 235 HeapStringAllocator string_allocator; | 232 { |
| 236 StringStream buffer(&string_allocator); | 233 bool disabled = f->type() == Flag::TYPE_BOOL && !*f->bool_variable(); |
| 237 if (f->type() != Flag::TYPE_BOOL || *(f->bool_variable())) { | 234 OStringStream os; |
| 238 buffer.Add("--%s", f->name()); | 235 os << (disabled ? "--no" : "--") << f->name(); |
| 239 } else { | 236 args->Add(StrDup(os.c_str())); |
| 240 buffer.Add("--no%s", f->name()); | |
| 241 } | 237 } |
| 242 args->Add(buffer.ToCString().Detach()); | |
| 243 if (f->type() != Flag::TYPE_BOOL) { | 238 if (f->type() != Flag::TYPE_BOOL) { |
| 244 args->Add(ToString(f).Detach()); | 239 OStringStream os; |
| 240 os << *f; |
| 241 args->Add(StrDup(os.c_str())); |
| 245 } | 242 } |
| 246 } | 243 } |
| 247 } | 244 } |
| 248 if (args_flag != NULL) { | 245 if (args_flag != NULL) { |
| 249 HeapStringAllocator string_allocator; | 246 OStringStream os; |
| 250 StringStream buffer(&string_allocator); | 247 os << "--" << args_flag->name(); |
| 251 buffer.Add("--%s", args_flag->name()); | 248 args->Add(StrDup(os.c_str())); |
| 252 args->Add(buffer.ToCString().Detach()); | |
| 253 JSArguments jsargs = *args_flag->args_variable(); | 249 JSArguments jsargs = *args_flag->args_variable(); |
| 254 for (int j = 0; j < jsargs.argc; j++) { | 250 for (int j = 0; j < jsargs.argc; j++) { |
| 255 args->Add(StrDup(jsargs[j])); | 251 args->Add(StrDup(jsargs[j])); |
| 256 } | 252 } |
| 257 } | 253 } |
| 258 return args; | 254 return args; |
| 259 } | 255 } |
| 260 | 256 |
| 261 | 257 |
| 262 inline char NormalizeChar(char ch) { | 258 inline char NormalizeChar(char ch) { |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 514 } | 510 } |
| 515 } | 511 } |
| 516 | 512 |
| 517 | 513 |
| 518 // static | 514 // static |
| 519 void FlagList::PrintHelp() { | 515 void FlagList::PrintHelp() { |
| 520 CpuFeatures::Probe(false); | 516 CpuFeatures::Probe(false); |
| 521 CpuFeatures::PrintTarget(); | 517 CpuFeatures::PrintTarget(); |
| 522 CpuFeatures::PrintFeatures(); | 518 CpuFeatures::PrintFeatures(); |
| 523 | 519 |
| 524 printf("Usage:\n"); | 520 OFStream os(stdout); |
| 525 printf(" shell [options] -e string\n"); | 521 os << "Usage:\n" |
| 526 printf(" execute string in V8\n"); | 522 << " shell [options] -e string\n" |
| 527 printf(" shell [options] file1 file2 ... filek\n"); | 523 << " execute string in V8\n" |
| 528 printf(" run JavaScript scripts in file1, file2, ..., filek\n"); | 524 << " shell [options] file1 file2 ... filek\n" |
| 529 printf(" shell [options]\n"); | 525 << " run JavaScript scripts in file1, file2, ..., filek\n" |
| 530 printf(" shell [options] --shell [file1 file2 ... filek]\n"); | 526 << " shell [options]\n" |
| 531 printf(" run an interactive JavaScript shell\n"); | 527 << " shell [options] --shell [file1 file2 ... filek]\n" |
| 532 printf(" d8 [options] file1 file2 ... filek\n"); | 528 << " run an interactive JavaScript shell\n" |
| 533 printf(" d8 [options]\n"); | 529 << " d8 [options] file1 file2 ... filek\n" |
| 534 printf(" d8 [options] --shell [file1 file2 ... filek]\n"); | 530 << " d8 [options]\n" |
| 535 printf(" run the new debugging shell\n\n"); | 531 << " d8 [options] --shell [file1 file2 ... filek]\n" |
| 536 printf("Options:\n"); | 532 << " run the new debugging shell\n\n" |
| 533 << "Options:\n"; |
| 537 for (size_t i = 0; i < num_flags; ++i) { | 534 for (size_t i = 0; i < num_flags; ++i) { |
| 538 Flag* f = &flags[i]; | 535 Flag* f = &flags[i]; |
| 539 SmartArrayPointer<const char> value = ToString(f); | 536 os << " --" << f->name() << " (" << f->comment() << ")\n" |
| 540 printf(" --%s (%s)\n type: %s default: %s\n", | 537 << " type: " << Type2String(f->type()) << " default: " << *f |
| 541 f->name(), f->comment(), Type2String(f->type()), value.get()); | 538 << "\n"; |
| 542 } | 539 } |
| 543 } | 540 } |
| 544 | 541 |
| 545 | 542 |
| 546 // static | 543 // static |
| 547 void FlagList::EnforceFlagImplications() { | 544 void FlagList::EnforceFlagImplications() { |
| 548 #define FLAG_MODE_DEFINE_IMPLICATIONS | 545 #define FLAG_MODE_DEFINE_IMPLICATIONS |
| 549 #include "src/flag-definitions.h" | 546 #include "src/flag-definitions.h" |
| 550 #undef FLAG_MODE_DEFINE_IMPLICATIONS | 547 #undef FLAG_MODE_DEFINE_IMPLICATIONS |
| 551 } | 548 } |
| 552 | 549 |
| 553 } } // namespace v8::internal | 550 } } // namespace v8::internal |
| OLD | NEW |