Program: 75772
Project: 75772
Buggy source:
private Token _convertMxArrayToToken(long ma) throws IllegalActionException {
  String maClassStr=ptmatlabGetClassName(ma);
  int[] dims=ptmatlabGetDimensions(ma);
  int nRows=dims[0];
  int nCols=dims[1];
  boolean scalar=nCols == 1 && nRows == 1;
  Token retval=null;
  if (maClassStr.equals("String_Node_Str")) {
    if (ptmatlabIsComplex(ma)) {
      Complex[][] a=ptmatlabGetComplexMatrix(ma,nRows,nCols);
      if (a == null) {
        throw new IllegalActionException("String_Node_Str" + "String_Node_Str" + "String_Node_Str");
      }
      if (scalar) {
        retval=new ComplexToken(a[0][0]);
      }
 else {
        retval=new ComplexMatrixToken(a);
      }
    }
 else {
      double[][] a=ptmatlabGetDoubleMatrix(ma,nRows,nCols);
      if (a == null) {
        throw new IllegalActionException("String_Node_Str" + "String_Node_Str" + "String_Node_Str");
      }
      if (scalar) {
        double tmp=a[0][0];
        if (tmp == Math.floor(tmp) && Math.abs(tmp) <= Integer.MAX_VALUE)         retval=new IntToken((int)tmp);
 else         retval=new DoubleToken(tmp);
      }
 else {
        retval=new DoubleMatrixToken(a);
      }
    }
  }
 else   if (maClassStr.equals("String_Node_Str")) {
    int nfields=ptmatlabGetNumberOfFields(ma);
    Token[] ta=new Token[nCols];
    Token[] tr=new Token[nRows];
    String[] fieldNames=new String[nfields];
    for (int k=0; k < nfields; k++) {
      fieldNames[k]=ptmatlabGetFieldNameByNumber(ma,k);
    }
    Token[] fieldValues=new Token[nfields];
    for (int n=0; n < nRows; n++) {
      for (int m=0; m < nCols; m++) {
        for (int k=0; k < nfields; k++) {
          long fma=ptmatlabGetFieldByNumber(ma,k,n,m);
          if (fma != 0) {
            fieldValues[k]=_convertMxArrayToToken(fma);
          }
 else {
            throw new IllegalActionException("String_Node_Str" + fieldNames[k] + +"String_Node_Str"+ "String_Node_Str"+ nRows+ "String_Node_Str"+ nCols);
          }
        }
        ta[m]=new RecordToken(fieldNames,fieldValues);
      }
      tr[n]=new ArrayToken(ta);
    }
    if (scalar) {
      retval=((ArrayToken)tr[0]).getElement(0);
    }
 else {
      retval=new ArrayToken(tr);
    }
  }
 else   if (maClassStr.equals("String_Node_Str")) {
    Token[] ta=new Token[nCols];
    Token[] tr=new Token[nRows];
    for (int n=0; n < nRows; n++) {
      for (int m=0; m < nCols; m++) {
        long cma=ptmatlabGetCell(ma,n,m);
        if (cma != 0) {
          ta[m]=_convertMxArrayToToken(cma);
        }
      }
      tr[n]=new ArrayToken(ta);
    }
    if (scalar) {
      retval=((ArrayToken)tr[0]).getElement(0);
    }
 else     if (nRows == 1) {
      retval=tr[0];
    }
 else {
      retval=new ArrayToken(tr);
    }
  }
 else   if (maClassStr.equals("String_Node_Str")) {
    if (nRows == 1)     retval=new StringToken(ptmatlabGetString(ma,0));
 else {
      Token[] ta=new Token[nRows];
      for (int n=0; n < nRows; n++) {
        ta[n]=new StringToken(ptmatlabGetString(ma,n));
      }
      retval=new ArrayToken(ta);
    }
  }
 else {
    throw new IllegalActionException("String_Node_Str" + maClassStr + "String_Node_Str"+ dims[0]+ "String_Node_Str"+ dims[1]);
  }
  return retval;
}

Fixed version (ground truth):
private Token _convertMxArrayToToken(long ma) throws IllegalActionException {
  String maClassStr=ptmatlabGetClassName(ma);
  int[] dims=ptmatlabGetDimensions(ma);
  int nRows=dims[0];
  int nCols=dims[1];
  boolean scalar=nCols == 1 && nRows == 1;
  Token retval=null;
  if (maClassStr.equals("String_Node_Str")) {
    if (ptmatlabIsComplex(ma)) {
      Complex[][] a=ptmatlabGetComplexMatrix(ma,nRows,nCols);
      if (a == null) {
        throw new IllegalActionException("String_Node_Str" + "String_Node_Str" + "String_Node_Str");
      }
      if (scalar) {
        retval=new ComplexToken(a[0][0]);
      }
 else {
        retval=new ComplexMatrixToken(a);
      }
    }
 else {
      double[][] a=ptmatlabGetDoubleMatrix(ma,nRows,nCols);
      if (a == null) {
        throw new IllegalActionException("String_Node_Str" + "String_Node_Str" + "String_Node_Str");
      }
      if (scalar) {
        double tmp=a[0][0];
        if (tmp == Math.floor(tmp) && Math.abs(tmp) <= Integer.MAX_VALUE)         retval=new IntToken((int)tmp);
 else         retval=new DoubleToken(tmp);
      }
 else {
        retval=new DoubleMatrixToken(a);
      }
    }
  }
 else   if (maClassStr.equals("String_Node_Str")) {
    int nfields=ptmatlabGetNumberOfFields(ma);
    Token[] ta=new Token[nCols];
    Token[] tr=new Token[nRows];
    String[] fieldNames=new String[nfields];
    for (int k=0; k < nfields; k++) {
      fieldNames[k]=ptmatlabGetFieldNameByNumber(ma,k);
    }
    Token[] fieldValues=new Token[nfields];
    for (int n=0; n < nRows; n++) {
      for (int m=0; m < nCols; m++) {
        for (int k=0; k < nfields; k++) {
          long fma=ptmatlabGetFieldByNumber(ma,k,n,m);
          if (fma != 0) {
            fieldValues[k]=_convertMxArrayToToken(fma);
          }
 else {
            throw new IllegalActionException("String_Node_Str" + fieldNames[k] + "String_Node_Str"+ "String_Node_Str"+ nRows+ "String_Node_Str"+ nCols);
          }
        }
        ta[m]=new RecordToken(fieldNames,fieldValues);
      }
      tr[n]=new ArrayToken(ta);
    }
    if (scalar) {
      retval=((ArrayToken)tr[0]).getElement(0);
    }
 else {
      retval=new ArrayToken(tr);
    }
  }
 else   if (maClassStr.equals("String_Node_Str")) {
    Token[] ta=new Token[nCols];
    Token[] tr=new Token[nRows];
    for (int n=0; n < nRows; n++) {
      for (int m=0; m < nCols; m++) {
        long cma=ptmatlabGetCell(ma,n,m);
        if (cma != 0) {
          ta[m]=_convertMxArrayToToken(cma);
        }
      }
      tr[n]=new ArrayToken(ta);
    }
    if (scalar) {
      retval=((ArrayToken)tr[0]).getElement(0);
    }
 else     if (nRows == 1) {
      retval=tr[0];
    }
 else {
      retval=new ArrayToken(tr);
    }
  }
 else   if (maClassStr.equals("String_Node_Str")) {
    if (nRows == 1)     retval=new StringToken(ptmatlabGetString(ma,0));
 else {
      Token[] ta=new Token[nRows];
      for (int n=0; n < nRows; n++) {
        ta[n]=new StringToken(ptmatlabGetString(ma,n));
      }
      retval=new ArrayToken(ta);
    }
  }
 else {
    throw new IllegalActionException("String_Node_Str" + maClassStr + "String_Node_Str"+ dims[0]+ "String_Node_Str"+ dims[1]);
  }
  return retval;
}