| // Copyright 2017 the V8 project authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| class BaseArgumentsProcessor { | |
| constructor(args) { | |
| this.args_ = args; | |
| this.result_ = this.getDefaultResults(); | |
| console.assert(this.result_ !== undefined) | |
| console.assert(this.result_.logFileName !== undefined); | |
| this.argsDispatch_ = this.getArgsDispatch(); | |
| console.assert(this.argsDispatch_ !== undefined); | |
| } | |
| getDefaultResults() { | |
| throw "Implement in getDefaultResults in subclass"; | |
| } | |
| getArgsDispatch() { | |
| throw "Implement getArgsDispatch in subclass"; | |
| } | |
| result() { return this.result_ } | |
| printUsageAndExit() { | |
| print('Cmdline args: [options] [log-file-name]\n' + | |
| 'Default log file name is "' + | |
| this.result_.logFileName + '".\n'); | |
| print('Options:'); | |
| for (var arg in this.argsDispatch_) { | |
| var synonyms = [arg]; | |
| var dispatch = this.argsDispatch_[arg]; | |
| for (var synArg in this.argsDispatch_) { | |
| if (arg !== synArg && dispatch === this.argsDispatch_[synArg]) { | |
| synonyms.push(synArg); | |
| delete this.argsDispatch_[synArg]; | |
| } | |
| } | |
| print(' ' + synonyms.join(', ').padEnd(20) + " " + dispatch[2]); | |
| } | |
| quit(2); | |
| } | |
| parse() { | |
| while (this.args_.length) { | |
| var arg = this.args_.shift(); | |
| if (arg.charAt(0) != '-') { | |
| this.result_.logFileName = arg; | |
| continue; | |
| } | |
| var userValue = null; | |
| var eqPos = arg.indexOf('='); | |
| if (eqPos != -1) { | |
| userValue = arg.substr(eqPos + 1); | |
| arg = arg.substr(0, eqPos); | |
| } | |
| if (arg in this.argsDispatch_) { | |
| var dispatch = this.argsDispatch_[arg]; | |
| var property = dispatch[0]; | |
| var defaultValue = dispatch[1]; | |
| if (typeof defaultValue == "function") { | |
| userValue = defaultValue(userValue); | |
| } else if (userValue == null) { | |
| userValue = defaultValue; | |
| } | |
| this.result_[property] = userValue; | |
| } else { | |
| return false; | |
| } | |
| } | |
| return true; | |
| } | |
| } | |
| function parseBool(str) { | |
| if (str == "true" || str == "1") return true; | |
| return false; | |
| } |