langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Operators.java
changeset 31114 d4045e8aaf1e
parent 29051 7244db2ab176
child 33018 9790ed482dd0
equal deleted inserted replaced
31113:646511cb5873 31114:d4045e8aaf1e
   473         }
   473         }
   474 
   474 
   475         @Override
   475         @Override
   476         public boolean test(Type arg1, Type arg2) {
   476         public boolean test(Type arg1, Type arg2) {
   477             return unaryPromotion(arg1).isNumeric() && unaryPromotion(arg2).isNumeric();
   477             return unaryPromotion(arg1).isNumeric() && unaryPromotion(arg2).isNumeric();
   478         }
       
   479     }
       
   480 
       
   481     /**
       
   482      * Class representing bitwise operator helpers that operate on all primitive types (either boxed or unboxed).
       
   483      * Operator lookup is performed after applying binary numeric promotion of the input types.
       
   484      */
       
   485     class BinaryBitwiseOperator extends BinaryNumericOperator {
       
   486 
       
   487         BinaryBitwiseOperator(Tag tag) {
       
   488             super(tag);
       
   489         }
       
   490 
       
   491         @Override
       
   492         public boolean test(Type arg1, Type arg2) {
       
   493             return unaryPromotion(arg1).isPrimitive() && unaryPromotion(arg2).isPrimitive();
       
   494         }
   478         }
   495     }
   479     }
   496 
   480 
   497     /**
   481     /**
   498      * Class representing bitwise operator helpers that operate on boolean types (either boxed or unboxed).
   482      * Class representing bitwise operator helpers that operate on boolean types (either boxed or unboxed).
   725             new BinaryNumericOperator(Tag.MOD)
   709             new BinaryNumericOperator(Tag.MOD)
   726                     .addBinaryOperator(DOUBLE, DOUBLE, DOUBLE, dmod)
   710                     .addBinaryOperator(DOUBLE, DOUBLE, DOUBLE, dmod)
   727                     .addBinaryOperator(FLOAT, FLOAT, FLOAT, fmod)
   711                     .addBinaryOperator(FLOAT, FLOAT, FLOAT, fmod)
   728                     .addBinaryOperator(LONG, LONG, LONG, lmod)
   712                     .addBinaryOperator(LONG, LONG, LONG, lmod)
   729                     .addBinaryOperator(INT, INT, INT, imod),
   713                     .addBinaryOperator(INT, INT, INT, imod),
   730             new BinaryBitwiseOperator(Tag.BITAND)
   714             new BinaryBooleanOperator(Tag.BITAND)
   731                     .addBinaryOperator(BOOLEAN, BOOLEAN, BOOLEAN, iand)
   715                     .addBinaryOperator(BOOLEAN, BOOLEAN, BOOLEAN, iand),
       
   716             new BinaryNumericOperator(Tag.BITAND)
   732                     .addBinaryOperator(LONG, LONG, LONG, land)
   717                     .addBinaryOperator(LONG, LONG, LONG, land)
   733                     .addBinaryOperator(INT, INT, INT, iand),
   718                     .addBinaryOperator(INT, INT, INT, iand),
   734             new BinaryBitwiseOperator(Tag.BITOR)
   719             new BinaryBooleanOperator(Tag.BITOR)
   735                     .addBinaryOperator(BOOLEAN, BOOLEAN, BOOLEAN, ior)
   720                     .addBinaryOperator(BOOLEAN, BOOLEAN, BOOLEAN, ior),
       
   721             new BinaryNumericOperator(Tag.BITOR)
   736                     .addBinaryOperator(LONG, LONG, LONG, lor)
   722                     .addBinaryOperator(LONG, LONG, LONG, lor)
   737                     .addBinaryOperator(INT, INT, INT, ior),
   723                     .addBinaryOperator(INT, INT, INT, ior),
   738             new BinaryBitwiseOperator(Tag.BITXOR)
   724             new BinaryBooleanOperator(Tag.BITXOR)
   739                     .addBinaryOperator(BOOLEAN, BOOLEAN, BOOLEAN, ixor)
   725                     .addBinaryOperator(BOOLEAN, BOOLEAN, BOOLEAN, ixor),
       
   726             new BinaryNumericOperator(Tag.BITXOR)
   740                     .addBinaryOperator(LONG, LONG, LONG, lxor)
   727                     .addBinaryOperator(LONG, LONG, LONG, lxor)
   741                     .addBinaryOperator(INT, INT, INT, ixor),
   728                     .addBinaryOperator(INT, INT, INT, ixor),
   742             new BinaryShiftOperator(Tag.SL)
   729             new BinaryShiftOperator(Tag.SL)
   743                     .addBinaryOperator(INT, INT, INT, ishl)
   730                     .addBinaryOperator(INT, INT, INT, ishl)
   744                     .addBinaryOperator(INT, LONG, INT, ishll)
   731                     .addBinaryOperator(INT, LONG, INT, ishll)