Task #7527

constant casting while type conversion

Added by Sergey Smolov about 5 years ago. Updated about 5 years ago.

Target version:
Start date:
Due date:
% Done:


Estimated time:
Detected in build:
Published in build:


Add an option to NodeOperation object constructor that encodes constants casting mode.
By default an exception should be thrown when a "logic family" NodeOperation object(this family includes Boolean and arithmetical operations) has at least one non-constant operand of type that differ from at least one constant (NodeValue) operand's type.
When the option is set, all the constant operands, which types are different from non-constant operand types, should be casted to corresponding types. This technique should be performed in a recursive way (for NodeOperation object and for all it's NodeOperation operands and sub-...operands).
The option should have different values for signed and unsigned extension of bit vector constants.


Updated by Sergey Smolov about 5 years ago

  • Status changed from New to Resolved
  • % Done changed from 0 to 100

New methods have been implemented at TypeConversion and ConstCastRuleSet.
Here they are:


   * Converts the specified node to the specified data type with some constant casting if needed.
   * <p>If the specified node has the same data type as specified, no constant casting
   * is applied.</p>
   * @param node Node to be converted.
   * @param type Data type of the new node to be produced.
   * @param constCastType Constant operands casting mode.
   * @return A new node that has the specified data type but the rest of it's data are taken
   *         from the specified node. Constant sub-...operands are casted in correspondence
   *         with the specified mode.
   * @throws IllegalArgumentException when either node or data type argument is {@code null}.
  public static Node coerce(final Node node, final DataType type, final Enum<?> constCastType)


   * Returns constant casting transformer for the specified casting type.
   * @param constCastType Constant casting type.
   * @return Transformer that performs constant operands casting.
  public static NodeTransformer getRuleSet(final Enum<?> constCastType)

The enum of const casting types has been added to TypeConversion class:

   * Constant operands casting types.
  public enum ConstCast {

     * Signed casting for constant operands is required.

     * Unsigned casting for constant operands is required (a default value).

Done in r1315.


Updated by Sergey Smolov about 5 years ago

  • Subject changed from constant casting option for NodeOperation constructor to constant casting while type conversion

Updated by Andrei Tatarnikov about 5 years ago

  • Status changed from Resolved to Closed
  • Published in build set to 0.4.21

Also available in: Atom PDF