whole_func_string: function ArgumentStatement(args, options, define) {
      options = options || {};
      this.value = args;
      this.flags = {};
      this.args = [];
      this.options = options;
  
      if (typeof options.parse === 'undefined') options.parse = true;
      if (typeof options.separator === 'undefined') options.separator = ',';
      if (typeof options.parseArgs === 'undefined') options.parseArgs = true;
  
      if (options.parse) {
          if (options.flags) {
              var isFlag = true;
  
              // Find all matching flags  until no flag is found
              while(isFlag) {
                  var firstFlagEnd = args.indexOf(' ');
                  if (firstFlagEnd === -1) firstFlagEnd = args.length;
                  var firstFlag = args.substring(0, firstFlagEnd).trim().toUpperCase();
  
                  if (options.flags.indexOf(firstFlag) !== -1) {
                      this.flags[firstFlag] = true;
                      args = args.substring(firstFlagEnd).trim();
                  }
                  else isFlag = false;
              }
          }
  
          this.rawArgs = args;
  
          args = args.trim();
          var argList = [args];
          if (options.separator) {
              if (!args.length) argList = [];
              else {
                  var positions = util.findPositions(args, [
                      {'start': '"', 'end': '"'},
                      {'start': '(', 'end': ')'}
                  ]);
                  argList = util.splitOutside(args, options.separator, positions);
              }
          }
          for (var i = 0; i < argList.length; i++) {
              var arg = argList[i].trim();
              if (options.parseArgs) arg = new statements.ExpressionStatement(arg, define);
              this.args.push(arg);
          }
      }
  }
func_code_string: function ArgumentStatement(args, options, define) {
      options = options || {};
      this.value = args;
      this.flags = {};
      this.args = [];
      this.options = options;
  
      if (typeof options.parse === 'undefined') options.parse = true;
      if (typeof options.separator === 'undefined') options.separator = ',';
      if (typeof options.parseArgs === 'undefined') options.parseArgs = true;
  
      if (options.parse) {
          if (options.flags) {
              var isFlag = true;
  
              // Find all matching flags  until no flag is found
              while(isFlag) {
                  var firstFlagEnd = args.indexOf(' ');
                  if (firstFlagEnd === -1) firstFlagEnd = args.length;
                  var firstFlag = args.substring(0, firstFlagEnd).trim().toUpperCase();
  
                  if (options.flags.indexOf(firstFlag) !== -1) {
                      this.flags[firstFlag] = true;
                      args = args.substring(firstFlagEnd).trim();
                  }
                  else isFlag = false;
              }
          }
  
          this.rawArgs = args;
  
          args = args.trim();
          var argList = [args];
          if (options.separator) {
              if (!args.length) argList = [];
              else {
                  var positions = util.findPositions(args, [
                      {'start': '"', 'end': '"'},
                      {'start': '(', 'end': ')'}
                  ]);
                  argList = util.splitOutside(args, options.separator, positions);
              }
          }
          for (var i = 0; i < argList.length; i++) {
              var arg = argList[i].trim();
              if (options.parseArgs) arg = new statements.ExpressionStatement(arg, define);
              this.args.push(arg);
          }
      }
  }
func_documentation_string: Represents a set of arguments to a command call
  
  @param {String} args The arguments to parse
  @param {Object} options Command options
  @param {Function?} define