home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VPage / Java.bin / CLASSES.ZIP / sun / tools / tree / AddExpression.class (.txt) next >
Encoding:
Java Class File  |  1997-07-08  |  4.3 KB  |  116 lines

  1. package sun.tools.tree;
  2.  
  3. import sun.tools.asm.Assembler;
  4. import sun.tools.java.AmbiguousField;
  5. import sun.tools.java.ClassDeclaration;
  6. import sun.tools.java.ClassDefinition;
  7. import sun.tools.java.ClassNotFound;
  8. import sun.tools.java.CompilerError;
  9. import sun.tools.java.Constants;
  10. import sun.tools.java.Environment;
  11. import sun.tools.java.FieldDefinition;
  12. import sun.tools.java.Type;
  13.  
  14. public class AddExpression extends BinaryArithmeticExpression {
  15.    public AddExpression(int var1, Expression var2, Expression var3) {
  16.       super(29, var1, var2, var3);
  17.    }
  18.  
  19.    void selectType(Environment var1, Context var2, int var3) {
  20.       if (super.left.type == Type.tString && !super.right.type.isType(11)) {
  21.          super.type = Type.tString;
  22.       } else if (super.right.type == Type.tString && !super.left.type.isType(11)) {
  23.          super.type = Type.tString;
  24.       } else {
  25.          super.selectType(var1, var2, var3);
  26.       }
  27.    }
  28.  
  29.    public boolean isNonNull() {
  30.       return true;
  31.    }
  32.  
  33.    Expression eval(int var1, int var2) {
  34.       return new IntExpression(super.where, var1 + var2);
  35.    }
  36.  
  37.    Expression eval(long var1, long var3) {
  38.       return new LongExpression(super.where, var1 + var3);
  39.    }
  40.  
  41.    Expression eval(float var1, float var2) {
  42.       return new FloatExpression(super.where, var1 + var2);
  43.    }
  44.  
  45.    Expression eval(double var1, double var3) {
  46.       return new DoubleExpression(super.where, var1 + var3);
  47.    }
  48.  
  49.    Expression eval(String var1, String var2) {
  50.       return new StringExpression(super.where, var1 + var2);
  51.    }
  52.  
  53.    Expression simplify() {
  54.       if (!super.type.isType(10)) {
  55.          if (super.type.inMask(62)) {
  56.             if (super.left.equals(0)) {
  57.                return super.right;
  58.             }
  59.  
  60.             if (super.right.equals(0)) {
  61.                return super.left;
  62.             }
  63.          }
  64.       } else if (super.right.type.isType(8)) {
  65.          super.right = new StringExpression(super.right.where, "null");
  66.       } else if (super.left.type.isType(8)) {
  67.          super.left = new StringExpression(super.right.where, "null");
  68.       }
  69.  
  70.       return this;
  71.    }
  72.  
  73.    public int costInline(int var1, Environment var2, Context var3) {
  74.       return (super.type.isType(10) ? 12 : 1) + super.left.costInline(var1, var2, var3) + super.right.costInline(var1, var2, var3);
  75.    }
  76.  
  77.    void codeOperation(Environment var1, Context var2, Assembler var3) {
  78.       var3.add(super.where, 96 + super.type.getTypeCodeOffset());
  79.    }
  80.  
  81.    void codeAppend(Environment var1, Context var2, Assembler var3, ClassDeclaration var4, boolean var5) throws ClassNotFound, AmbiguousField {
  82.       if (super.type.isType(10)) {
  83.          super.left.codeAppend(var1, var2, var3, var4, var5);
  84.          super.right.codeAppend(var1, var2, var3, var4, false);
  85.       } else {
  86.          super.codeAppend(var1, var2, var3, var4, var5);
  87.       }
  88.    }
  89.  
  90.    public void codeValue(Environment var1, Context var2, Assembler var3) {
  91.       if (super.type.isType(10)) {
  92.          try {
  93.             if (super.left.equals("")) {
  94.                super.right.codeValue(var1, var2, var3);
  95.                super.right.ensureString(var1, var2, var3);
  96.             } else if (super.right.equals("")) {
  97.                super.left.codeValue(var1, var2, var3);
  98.                super.left.ensureString(var1, var2, var3);
  99.             } else {
  100.                ClassDeclaration var4 = var1.getClassDeclaration(Constants.idJavaLangStringBuffer);
  101.                ClassDefinition var5 = var2.field.getClassDefinition();
  102.                this.codeAppend(var1, var2, var3, var4, true);
  103.                FieldDefinition var6 = var4.getClassDefinition(var1).matchMethod(var1, var5, Constants.idToString);
  104.                var3.add(super.where, 182, var6);
  105.             }
  106.          } catch (ClassNotFound var7) {
  107.             throw new CompilerError(var7);
  108.          } catch (AmbiguousField var8) {
  109.             throw new CompilerError(var8);
  110.          }
  111.       } else {
  112.          super.codeValue(var1, var2, var3);
  113.       }
  114.    }
  115. }
  116.