@ -147,69 +147,69 @@ public class ExpressionBinaryOp extends Expression
{
{
switch ( op ) {
switch ( op ) {
case IMPLIES :
case IMPLIES :
return new Boolean ( ! operand1 . evaluateBoolean ( ec ) | | operand2 . evaluateBoolean ( ec ) ) ;
return ! operand1 . evaluateBoolean ( ec ) | | operand2 . evaluateBoolean ( ec ) ;
case IFF :
case IFF :
return new Boolean ( operand1 . evaluateBoolean ( ec ) = = operand2 . evaluateBoolean ( ec ) ) ;
return operand1 . evaluateBoolean ( ec ) = = operand2 . evaluateBoolean ( ec ) ;
case OR :
case OR :
return new Boolean ( operand1 . evaluateBoolean ( ec ) | | operand2 . evaluateBoolean ( ec ) ) ;
return operand1 . evaluateBoolean ( ec ) | | operand2 . evaluateBoolean ( ec ) ;
case AND :
case AND :
return new Boolean ( operand1 . evaluateBoolean ( ec ) & & operand2 . evaluateBoolean ( ec ) ) ;
return operand1 . evaluateBoolean ( ec ) & & operand2 . evaluateBoolean ( ec ) ;
case EQ :
case EQ :
if ( operand1 . getType ( ) = = TypeInt . getInstance ( ) & & operand2 . getType ( ) = = TypeInt . getInstance ( ) ) {
if ( operand1 . getType ( ) = = TypeInt . getInstance ( ) & & operand2 . getType ( ) = = TypeInt . getInstance ( ) ) {
return new Boolean ( operand1 . evaluateInt ( ec ) = = operand2 . evaluateInt ( ec ) ) ;
return operand1 . evaluateInt ( ec ) = = operand2 . evaluateInt ( ec ) ;
} else {
} else {
return new Boolean ( operand1 . evaluateDouble ( ec ) = = operand2 . evaluateDouble ( ec ) ) ;
return operand1 . evaluateDouble ( ec ) = = operand2 . evaluateDouble ( ec ) ;
}
}
case NE :
case NE :
if ( operand1 . getType ( ) = = TypeInt . getInstance ( ) & & operand2 . getType ( ) = = TypeInt . getInstance ( ) ) {
if ( operand1 . getType ( ) = = TypeInt . getInstance ( ) & & operand2 . getType ( ) = = TypeInt . getInstance ( ) ) {
return new Boolean ( operand1 . evaluateInt ( ec ) ! = operand2 . evaluateInt ( ec ) ) ;
return operand1 . evaluateInt ( ec ) ! = operand2 . evaluateInt ( ec ) ;
} else {
} else {
return new Boolean ( operand1 . evaluateDouble ( ec ) ! = operand2 . evaluateDouble ( ec ) ) ;
return operand1 . evaluateDouble ( ec ) ! = operand2 . evaluateDouble ( ec ) ;
}
}
case GT :
case GT :
if ( operand1 . getType ( ) = = TypeInt . getInstance ( ) & & operand2 . getType ( ) = = TypeInt . getInstance ( ) ) {
if ( operand1 . getType ( ) = = TypeInt . getInstance ( ) & & operand2 . getType ( ) = = TypeInt . getInstance ( ) ) {
return new Boolean ( operand1 . evaluateInt ( ec ) > operand2 . evaluateInt ( ec ) ) ;
return operand1 . evaluateInt ( ec ) > operand2 . evaluateInt ( ec ) ;
} else {
} else {
return new Boolean ( operand1 . evaluateDouble ( ec ) > operand2 . evaluateDouble ( ec ) ) ;
return operand1 . evaluateDouble ( ec ) > operand2 . evaluateDouble ( ec ) ;
}
}
case GE :
case GE :
if ( operand1 . getType ( ) = = TypeInt . getInstance ( ) & & operand2 . getType ( ) = = TypeInt . getInstance ( ) ) {
if ( operand1 . getType ( ) = = TypeInt . getInstance ( ) & & operand2 . getType ( ) = = TypeInt . getInstance ( ) ) {
return new Boolean ( operand1 . evaluateInt ( ec ) > = operand2 . evaluateInt ( ec ) ) ;
return operand1 . evaluateInt ( ec ) > = operand2 . evaluateInt ( ec ) ;
} else {
} else {
return new Boolean ( operand1 . evaluateDouble ( ec ) > = operand2 . evaluateDouble ( ec ) ) ;
return operand1 . evaluateDouble ( ec ) > = operand2 . evaluateDouble ( ec ) ;
}
}
case LT :
case LT :
if ( operand1 . getType ( ) = = TypeInt . getInstance ( ) & & operand2 . getType ( ) = = TypeInt . getInstance ( ) ) {
if ( operand1 . getType ( ) = = TypeInt . getInstance ( ) & & operand2 . getType ( ) = = TypeInt . getInstance ( ) ) {
return new Boolean ( operand1 . evaluateInt ( ec ) < operand2 . evaluateInt ( ec ) ) ;
return operand1 . evaluateInt ( ec ) < operand2 . evaluateInt ( ec ) ;
} else {
} else {
return new Boolean ( operand1 . evaluateDouble ( ec ) < operand2 . evaluateDouble ( ec ) ) ;
return operand1 . evaluateDouble ( ec ) < operand2 . evaluateDouble ( ec ) ;
}
}
case LE :
case LE :
if ( operand1 . getType ( ) = = TypeInt . getInstance ( ) & & operand2 . getType ( ) = = TypeInt . getInstance ( ) ) {
if ( operand1 . getType ( ) = = TypeInt . getInstance ( ) & & operand2 . getType ( ) = = TypeInt . getInstance ( ) ) {
return new Boolean ( operand1 . evaluateInt ( ec ) < = operand2 . evaluateInt ( ec ) ) ;
return operand1 . evaluateInt ( ec ) < = operand2 . evaluateInt ( ec ) ;
} else {
} else {
return new Boolean ( operand1 . evaluateDouble ( ec ) < = operand2 . evaluateDouble ( ec ) ) ;
return operand1 . evaluateDouble ( ec ) < = operand2 . evaluateDouble ( ec ) ;
}
}
case PLUS :
case PLUS :
if ( operand1 . getType ( ) = = TypeInt . getInstance ( ) & & operand2 . getType ( ) = = TypeInt . getInstance ( ) ) {
if ( operand1 . getType ( ) = = TypeInt . getInstance ( ) & & operand2 . getType ( ) = = TypeInt . getInstance ( ) ) {
return new Integer ( operand1 . evaluateInt ( ec ) + operand2 . evaluateInt ( ec ) ) ;
return operand1 . evaluateInt ( ec ) + operand2 . evaluateInt ( ec ) ;
} else {
} else {
return new Double ( operand1 . evaluateDouble ( ec ) + operand2 . evaluateDouble ( ec ) ) ;
return operand1 . evaluateDouble ( ec ) + operand2 . evaluateDouble ( ec ) ;
}
}
case MINUS :
case MINUS :
if ( operand1 . getType ( ) = = TypeInt . getInstance ( ) & & operand2 . getType ( ) = = TypeInt . getInstance ( ) ) {
if ( operand1 . getType ( ) = = TypeInt . getInstance ( ) & & operand2 . getType ( ) = = TypeInt . getInstance ( ) ) {
return new Integer ( operand1 . evaluateInt ( ec ) - operand2 . evaluateInt ( ec ) ) ;
return operand1 . evaluateInt ( ec ) - operand2 . evaluateInt ( ec ) ;
} else {
} else {
return new Double ( operand1 . evaluateDouble ( ec ) - operand2 . evaluateDouble ( ec ) ) ;
return operand1 . evaluateDouble ( ec ) - operand2 . evaluateDouble ( ec ) ;
}
}
case TIMES :
case TIMES :
if ( operand1 . getType ( ) = = TypeInt . getInstance ( ) & & operand2 . getType ( ) = = TypeInt . getInstance ( ) ) {
if ( operand1 . getType ( ) = = TypeInt . getInstance ( ) & & operand2 . getType ( ) = = TypeInt . getInstance ( ) ) {
return new Integer ( operand1 . evaluateInt ( ec ) * operand2 . evaluateInt ( ec ) ) ;
return operand1 . evaluateInt ( ec ) * operand2 . evaluateInt ( ec ) ;
} else {
} else {
return new Double ( operand1 . evaluateDouble ( ec ) * operand2 . evaluateDouble ( ec ) ) ;
return operand1 . evaluateDouble ( ec ) * operand2 . evaluateDouble ( ec ) ;
}
}
case DIVIDE :
case DIVIDE :
return new Double ( operand1 . evaluateDouble ( ec ) / operand2 . evaluateDouble ( ec ) ) ;
return operand1 . evaluateDouble ( ec ) / operand2 . evaluateDouble ( ec ) ;
}
}
throw new PrismLangException ( "Unknown binary operator" , this ) ;
throw new PrismLangException ( "Unknown binary operator" , this ) ;
}
}