Program: 75904
Project: 75904
Buggy source:
/** 
 * Return a new token whose value is the product of this token and the argument. The type of the specified token must be such that either it can be converted to the type of this token, or the type of this token can be converted to the type of the specified token, without loss of information. The type of the returned token is one of the above two types that allows lossless conversion from the other. If the specified token is a matrix, its number of rows should be the same as this token's number of columns.
 * @param t The token to add to this token.
 * @return A new token containing the result.
 * @exception IllegalActionException If the specified token isnot of a type that can be added to this token in a lossless fashion.
 */
public final Token multiply(final Token t) throws IllegalActionException {
  int compare=TypeLattice.compare(this,t);
  if (compare == CPO.INCOMPARABLE) {
    String msg="String_Node_Str" + this.getClass().getName() + "String_Node_Str"+ t.getClass().getName();
    throw new IllegalActionException(msg);
  }
 else   if (compare == CPO.LOWER) {
    return t.multiplyReverse(this);
  }
 else {
    Complex[][] result=null;
    if (t.getType() == BaseType.COMPLEX) {
      Complex c=((ComplexToken)t).complexValue();
      result=ComplexMatrixMath.multiply(_value,c);
    }
 else     if (t instanceof ScalarToken) {
      double scalar=((ScalarToken)t).doubleValue();
      result=ComplexMatrixMath.multiply(_value,scalar);
    }
 else {
      ComplexMatrixToken tem=(ComplexMatrixToken)this.convert(t);
      if (tem.getRowCount() != _columnCount) {
        throw new IllegalActionException("String_Node_Str" + "String_Node_Str" + _columnCount + "String_Node_Str"+ tem.getRowCount()+ "String_Node_Str");
      }
      result=ComplexMatrixMath.multiply(tem._getInternalComplexMatrix(),_value);
    }
    return new ComplexMatrixToken(result,DO_NOT_COPY);
  }
}

Fixed version (ground truth):
/** 
 * Return a new token whose value is the product of this token and the argument. The type of the specified token must be such that either it can be converted to the type of this token, or the type of this token can be converted to the type of the specified token, without loss of information. The type of the returned token is one of the above two types that allows lossless conversion from the other. If the specified token is a matrix, its number of rows should be the same as this token's number of columns.
 * @param t The token to add to this token.
 * @return A new token containing the result.
 * @exception IllegalActionException If the specified token isnot of a type that can be added to this token in a lossless fashion.
 */
public final Token multiply(final Token t) throws IllegalActionException {
  int compare=TypeLattice.compare(this,t);
  if (compare == CPO.INCOMPARABLE) {
    String msg="String_Node_Str" + this.getClass().getName() + "String_Node_Str"+ t.getClass().getName();
    throw new IllegalActionException(msg);
  }
 else   if (compare == CPO.LOWER) {
    return t.multiplyReverse(this);
  }
 else {
    Complex[][] result=null;
    if (t.getType() == BaseType.COMPLEX) {
      Complex c=((ComplexToken)t).complexValue();
      result=ComplexMatrixMath.multiply(_value,c);
    }
 else     if (t instanceof ScalarToken) {
      double scalar=((ScalarToken)t).doubleValue();
      result=ComplexMatrixMath.multiply(_value,scalar);
    }
 else {
      ComplexMatrixToken tem=(ComplexMatrixToken)this.convert(t);
      if (tem.getRowCount() != _columnCount) {
        throw new IllegalActionException("String_Node_Str" + "String_Node_Str" + _columnCount + "String_Node_Str"+ tem.getRowCount()+ "String_Node_Str");
      }
      result=ComplexMatrixMath.multiply(_value,tem._getInternalComplexMatrix());
    }
    return new ComplexMatrixToken(result,DO_NOT_COPY);
  }
}