diff options
Diffstat (limited to 'deps/v8/tools/arguments.mjs')
-rw-r--r-- | deps/v8/tools/arguments.mjs | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/deps/v8/tools/arguments.mjs b/deps/v8/tools/arguments.mjs new file mode 100644 index 0000000000..232ca6badb --- /dev/null +++ b/deps/v8/tools/arguments.mjs @@ -0,0 +1,78 @@ +// 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. + +export 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; + } +} + +export function parseBool(str) { + if (str == "true" || str == "1") return true; + return false; +} |