if (VM.VerifyAssertions) VM.assert(cnt != -1);
if (VM.VerifyAssertions) VM._assert(cnt != -1);
  static void fetchCommandLineArguments() {    if (args != null) return;    byte[]   buf  = new byte[10*1024];    int numArgs = sysArg(-1, buf);    args = new String[numArgs];    arg_types = new int[numArgs];    boolean app_name_found = false;    for (int i = 0; i < numArgs; ++i) {      int cnt = sysArg(i, buf);      // !!TODO: if i-th arg too long, enlarge buf[] and try again      if (VM.VerifyAssertions) VM.assert(cnt != -1);       String arg = new String(buf, 0, 0, cnt);      if (app_prefix.count > 0) {        args[i] = arg;        arg_types[i] = APPLICATION_ARG;        app_prefix.count++;      } else {        // Note: should never run out of bounds        for (int j = 0; j < prefixes.length; j++) {          Prefix p = prefixes[j];          String v = p.value;          if (!matches(arg, v)) continue;          args[i] = arg.substring(length(v));          arg_types[i] = p.type;          p = findPrefix(p.type);          p.count++;          if (v.endsWith(" ")) {            if (++i >= numArgs) {               VM.sysWrite("vm: "+v+"needs an argument\n");               VM.sysExit(1);             }            cnt = sysArg(i, buf);            // !!TODO: if i-th arg too long, enlarge buf[] and try again            if (VM.VerifyAssertions) VM.assert(cnt != -1);            String val = new String(buf, 0, 0, cnt);            args[i-1] += val;            args[i] = null;          }          if (p == app_prefix) app_name_pos = i;          break;        } // end for      } // end else    } // end for     /*     * if no application is specified, set app_name_pos to numArgs to ensure     * all command line arguments are processed.     */    if (app_name_pos == -1)       app_name_pos = numArgs;  }