at.dms.kjc
Class JBitwiseExpression

java.lang.Object
  |
  +--at.dms.util.Utils
        |
        +--at.dms.compiler.Phylum
              |
              +--at.dms.kjc.JPhylum
                    |
                    +--at.dms.kjc.JExpression
                          |
                          +--at.dms.kjc.JBinaryExpression
                                |
                                +--at.dms.kjc.JBinaryArithmeticExpression
                                      |
                                      +--at.dms.kjc.JBitwiseExpression
All Implemented Interfaces:
Constants, Constants

public class JBitwiseExpression
extends JBinaryArithmeticExpression

Representation of bitwise and logical operations: binary and, binary or and binary exclusive-or, as well as logical and, logical or and logical exclusive-or. However, this does not include the shortcut logical and and or operations. See JLS2 15.22.

See Also:
JConditionalAndExpression, JConditionalOrExpression

Field Summary
protected  int oper
           
 
Fields inherited from class at.dms.kjc.JBinaryExpression
left, right, type
 
Fields inherited from class at.dms.kjc.JExpression
EMPTY
 
Fields inherited from class at.dms.util.Utils
DBG_LEVEL_HIGH, DBG_LEVEL_LOW, DBG_LEVEL_NO
 
Fields inherited from interface at.dms.kjc.Constants
CMP_VERSION, JAV_CLASS, JAV_CLONE, JAV_CLONEABLE, JAV_CONSTRUCTOR, JAV_ERROR, JAV_EXCEPTION, JAV_INIT, JAV_LENGTH, JAV_NAME_SEPARATOR, JAV_OBJECT, JAV_OUTER_THIS, JAV_RUNTIME, JAV_RUNTIME_EXCEPTION, JAV_STATIC_INIT, JAV_STRING, JAV_STRINGBUFFER, JAV_THIS, JAV_THROWABLE, OPE_BAND, OPE_BNOT, OPE_BOR, OPE_BSR, OPE_BXOR, OPE_EQ, OPE_GE, OPE_GT, OPE_LE, OPE_LNOT, OPE_LT, OPE_MINUS, OPE_NE, OPE_PERCENT, OPE_PLUS, OPE_POSTDEC, OPE_POSTINC, OPE_PREDEC, OPE_PREINC, OPE_SIMPLE, OPE_SL, OPE_SLASH, OPE_SR, OPE_STAR, TID_ARRAY, TID_BOOLEAN, TID_BYTE, TID_CHAR, TID_CLASS, TID_DOUBLE, TID_FLOAT, TID_INT, TID_LONG, TID_SHORT, TID_VOID
 
Fields inherited from interface at.dms.classfile.Constants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_NBR_FLAGS, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, ATT_CODE, ATT_CONSTANTVALUE, ATT_DEPRECATED, ATT_EXCEPTIONS, ATT_GENERIC, ATT_INNERCLASSES, ATT_LINENUMBERTABLE, ATT_LOCALVARIABLETABLE, ATT_SOURCEFILE, ATT_SYNTHETIC, CST_CLASS, CST_DOUBLE, CST_FIELD, CST_FLOAT, CST_INTEGER, CST_INTERFACEMETHOD, CST_LONG, CST_METHOD, CST_NAMEANDTYPE, CST_STRING, CST_UTF8, ENV_DEBUG_MODE, ENV_USE_CACHE, JAVA_MAGIC, JAVA_MAJOR, JAVA_MINOR, MAX_CODE_PER_METHOD, opc_aaload, opc_aastore, opc_aconst_null, opc_aload, opc_aload_0, opc_aload_1, opc_aload_2, opc_aload_3, opc_anewarray, opc_areturn, opc_arraylength, opc_astore, opc_astore_0, opc_astore_1, opc_astore_2, opc_astore_3, opc_athrow, opc_baload, opc_bastore, opc_bipush, opc_caload, opc_castore, opc_checkcast, opc_d2f, opc_d2i, opc_d2l, opc_dadd, opc_daload, opc_dastore, opc_dcmpg, opc_dcmpl, opc_dconst_0, opc_dconst_1, opc_ddiv, opc_dload, opc_dload_0, opc_dload_1, opc_dload_2, opc_dload_3, opc_dmul, opc_dneg, opc_drem, opc_dreturn, opc_dstore, opc_dstore_0, opc_dstore_1, opc_dstore_2, opc_dstore_3, opc_dsub, opc_dup, opc_dup_x1, opc_dup_x2, opc_dup2, opc_dup2_x1, opc_dup2_x2, opc_f2d, opc_f2i, opc_f2l, opc_fadd, opc_faload, opc_fastore, opc_fcmpg, opc_fcmpl, opc_fconst_0, opc_fconst_1, opc_fconst_2, opc_fdiv, opc_fload, opc_fload_0, opc_fload_1, opc_fload_2, opc_fload_3, opc_fmul, opc_fneg, opc_frem, opc_freturn, opc_fstore, opc_fstore_0, opc_fstore_1, opc_fstore_2, opc_fstore_3, opc_fsub, opc_getfield, opc_getstatic, opc_goto, opc_goto_w, opc_i2b, opc_i2c, opc_i2d, opc_i2f, opc_i2l, opc_i2s, opc_iadd, opc_iaload, opc_iand, opc_iastore, opc_iconst_0, opc_iconst_1, opc_iconst_2, opc_iconst_3, opc_iconst_4, opc_iconst_5, opc_iconst_m1, opc_idiv, opc_if_acmpeq, opc_if_acmpne, opc_if_icmpeq, opc_if_icmpge, opc_if_icmpgt, opc_if_icmple, opc_if_icmplt, opc_if_icmpne, opc_ifeq, opc_ifge, opc_ifgt, opc_ifle, opc_iflt, opc_ifne, opc_ifnonnull, opc_ifnull, opc_iinc, opc_iload, opc_iload_0, opc_iload_1, opc_iload_2, opc_iload_3, opc_imul, opc_ineg, opc_instanceof, opc_invokeinterface, opc_invokespecial, opc_invokestatic, opc_invokevirtual, opc_ior, opc_irem, opc_ireturn, opc_ishl, opc_ishr, opc_istore, opc_istore_0, opc_istore_1, opc_istore_2, opc_istore_3, opc_isub, opc_iushr, opc_ixor, opc_jsr, opc_jsr_w, opc_l2d, opc_l2f, opc_l2i, opc_ladd, opc_laload, opc_land, opc_lastore, opc_lcmp, opc_lconst_0, opc_lconst_1, opc_ldc, opc_ldc_w, opc_ldc2_w, opc_ldiv, opc_lload, opc_lload_0, opc_lload_1, opc_lload_2, opc_lload_3, opc_lmul, opc_lneg, opc_lookupswitch, opc_lor, opc_lrem, opc_lreturn, opc_lshl, opc_lshr, opc_lstore, opc_lstore_0, opc_lstore_1, opc_lstore_2, opc_lstore_3, opc_lsub, opc_lushr, opc_lxor, opc_monitorenter, opc_monitorexit, opc_multianewarray, opc_new, opc_newarray, opc_nop, opc_pop, opc_pop2, opc_putfield, opc_putstatic, opc_ret, opc_return, opc_saload, opc_sastore, opc_sipush, opc_swap, opc_tableswitch, opc_wide, opc_xxxunusedxxx, POO_ASCII_CONSTANT, POO_CLASS_CONSTANT, POO_DOUBLE_CONSTANT, POO_FLOAT_CONSTANT, POO_INTEGER_CONSTANT, POO_LONG_CONSTANT, POO_NAT_CONSTANT, POO_REF_CONSTANT, POO_STRING_CONSTANT, TYP_ADDRESS, TYP_DOUBLE, TYP_FLOAT, TYP_INT, TYP_LONG, TYP_REFERENCE, TYP_VOID
 
Constructor Summary
JBitwiseExpression(TokenReference where, int oper, JExpression left, JExpression right)
          Construct a node in the parsing tree.
 
Method Summary
 void accept(KjcVisitor p)
          Accepts the specified visitor
 JExpression checkBinaryBody(CExpressionContext context)
          Check expression and evaluate and alter context.
 boolean compute(boolean left, boolean right)
          Computes the result of the operation at compile-time (JLS 15.27).
 double compute(double left, double right)
          Cannot perform bitwise operation on doubles.
 float compute(float left, float right)
          Cannot perform bitwise operation on floats.
 int compute(int left, int right)
          Computes the result of the operation at compile-time (JLS 15.27).
 long compute(long left, long right)
          Computes the result of the operation at compile-time (JLS 15.27).
static CType computeType(CType left, CType right, MessageDescription badTypeMessage)
          See superclass javadoc.
 JExpression constantFolding()
          Computes the result of the operation at compile-time (JLS 15.27).
 void genCode(CodeSequence code)
          Generates a sequence of bytecodes.
static int getOpcode(int oper, CType type)
          Returns the JVM opcode for this operation.
 
Methods inherited from class at.dms.kjc.JBinaryArithmeticExpression
checkExpression
 
Methods inherited from class at.dms.kjc.JBinaryExpression
genBooleanResultCode, genBranch, genBranch, getLeft, getRight, getType, promote, setLeft, setRight, setType
 
Methods inherited from class at.dms.kjc.JExpression
checkExpression, convertType, fail, getBooleanLiteral, getLiteral, getNumberLiteral, getOrdinalLiteral, getRealLiteral, getStringLiteral, isAssignableTo, isConstant, isLiteral, isStatementExpression, isSubTypePossible, setConstant, unParenthesize
 
Methods inherited from class at.dms.kjc.JPhylum
check, check, check, check
 
Methods inherited from class at.dms.compiler.Phylum
getTokenReference, setTokenReference
 
Methods inherited from class at.dms.util.Utils
assert, assert, fail, fail, hasFlag, hasMoreThanOneFlag, hasOtherFlags, splitQualifiedName, splitQualifiedName, vectorToArray, vectorToIntArray
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

oper

protected int oper
Constructor Detail

JBitwiseExpression

public JBitwiseExpression(TokenReference where,
                          int oper,
                          JExpression left,
                          JExpression right)
Construct a node in the parsing tree.
Parameters:
where - the line of this node in the source code
oper - the operator
left - the left operand
right - the right operand
Method Detail

checkBinaryBody

public JExpression checkBinaryBody(CExpressionContext context)
                            throws PositionedError
Check expression and evaluate and alter context.
Overrides:
checkBinaryBody in class JBinaryArithmeticExpression
Parameters:
context - the context for the check.
Returns:
a pure java expression including promote node.
Throws:
PositionedError - Any error in checking or compiling, with position information.

computeType

public static CType computeType(CType left,
                                CType right,
                                MessageDescription badTypeMessage)
                         throws UnpositionedError
See superclass javadoc.
Following copied from class: at.dms.kjc.JBinaryArithmeticExpression
Parameters:
leftType - the type of left operand
rightType - the type of right operand
badTypeMessage - The message to be shown to the user when the types of the operands are bad.
Returns:
The possibly promoted type of the binary arithmetic expression.
Throws:
UnpositionedError - This error will be positioned soon

constantFolding

public JExpression constantFolding()
                            throws UnpositionedError
Computes the result of the operation at compile-time (JLS 15.27).
Overrides:
constantFolding in class JBinaryArithmeticExpression
Parameters:
left - the left value
right - the right value
Returns:
a literal resulting of an operation over two literals

compute

public int compute(int left,
                   int right)
Computes the result of the operation at compile-time (JLS 15.27).
Overrides:
compute in class JBinaryArithmeticExpression
Parameters:
left - the first operand
right - the seconds operand
Returns:
the result of the operation

compute

public long compute(long left,
                    long right)
Computes the result of the operation at compile-time (JLS 15.27).
Overrides:
compute in class JBinaryArithmeticExpression
Parameters:
left - the first operand
right - the seconds operand
Returns:
the result of the operation

compute

public boolean compute(boolean left,
                       boolean right)
Computes the result of the operation at compile-time (JLS 15.27).
Parameters:
left - the first operand
right - the seconds operand
Returns:
the result of the operation

compute

public float compute(float left,
                     float right)
Cannot perform bitwise operation on floats.
Overrides:
compute in class JBinaryArithmeticExpression
Following copied from class: at.dms.kjc.JBinaryArithmeticExpression
Parameters:
left - the left operand
right - the right operand
Returns:
the result of the operation

compute

public double compute(double left,
                      double right)
Cannot perform bitwise operation on doubles.
Overrides:
compute in class JBinaryArithmeticExpression
Following copied from class: at.dms.kjc.JBinaryArithmeticExpression
Parameters:
left - the left operand
right - the right operand
Returns:
the result of the operation

accept

public void accept(KjcVisitor p)
Accepts the specified visitor
Overrides:
accept in class JExpression
Parameters:
p - the visitor

getOpcode

public static int getOpcode(int oper,
                            CType type)
Returns the JVM opcode for this operation.
Parameters:
type - the type of result.
Returns:
the opcode for this operation.

genCode

public void genCode(CodeSequence code)
Generates a sequence of bytecodes.
Overrides:
genCode in class JExpression
Parameters:
code - the code list