// 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; }