home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.tree;
-
- import sun.tools.asm.Assembler;
- import sun.tools.java.AmbiguousField;
- import sun.tools.java.ClassDeclaration;
- import sun.tools.java.ClassDefinition;
- import sun.tools.java.ClassNotFound;
- import sun.tools.java.CompilerError;
- import sun.tools.java.Constants;
- import sun.tools.java.Environment;
- import sun.tools.java.FieldDefinition;
- import sun.tools.java.Type;
-
- public class AddExpression extends BinaryArithmeticExpression {
- public AddExpression(int var1, Expression var2, Expression var3) {
- super(29, var1, var2, var3);
- }
-
- void selectType(Environment var1, Context var2, int var3) {
- if (super.left.type == Type.tString && !super.right.type.isType(11)) {
- super.type = Type.tString;
- } else if (super.right.type == Type.tString && !super.left.type.isType(11)) {
- super.type = Type.tString;
- } else {
- super.selectType(var1, var2, var3);
- }
- }
-
- public boolean isNonNull() {
- return true;
- }
-
- Expression eval(int var1, int var2) {
- return new IntExpression(super.where, var1 + var2);
- }
-
- Expression eval(long var1, long var3) {
- return new LongExpression(super.where, var1 + var3);
- }
-
- Expression eval(float var1, float var2) {
- return new FloatExpression(super.where, var1 + var2);
- }
-
- Expression eval(double var1, double var3) {
- return new DoubleExpression(super.where, var1 + var3);
- }
-
- Expression eval(String var1, String var2) {
- return new StringExpression(super.where, var1 + var2);
- }
-
- Expression simplify() {
- if (!super.type.isType(10)) {
- if (super.type.inMask(62)) {
- if (super.left.equals(0)) {
- return super.right;
- }
-
- if (super.right.equals(0)) {
- return super.left;
- }
- }
- } else if (super.right.type.isType(8)) {
- super.right = new StringExpression(super.right.where, "null");
- } else if (super.left.type.isType(8)) {
- super.left = new StringExpression(super.right.where, "null");
- }
-
- return this;
- }
-
- public int costInline(int var1, Environment var2, Context var3) {
- return (super.type.isType(10) ? 12 : 1) + super.left.costInline(var1, var2, var3) + super.right.costInline(var1, var2, var3);
- }
-
- void codeOperation(Environment var1, Context var2, Assembler var3) {
- var3.add(super.where, 96 + super.type.getTypeCodeOffset());
- }
-
- void codeAppend(Environment var1, Context var2, Assembler var3, ClassDeclaration var4, boolean var5) throws ClassNotFound, AmbiguousField {
- if (super.type.isType(10)) {
- super.left.codeAppend(var1, var2, var3, var4, var5);
- super.right.codeAppend(var1, var2, var3, var4, false);
- } else {
- super.codeAppend(var1, var2, var3, var4, var5);
- }
- }
-
- public void codeValue(Environment var1, Context var2, Assembler var3) {
- if (super.type.isType(10)) {
- try {
- if (super.left.equals("")) {
- super.right.codeValue(var1, var2, var3);
- super.right.ensureString(var1, var2, var3);
- } else if (super.right.equals("")) {
- super.left.codeValue(var1, var2, var3);
- super.left.ensureString(var1, var2, var3);
- } else {
- ClassDeclaration var4 = var1.getClassDeclaration(Constants.idJavaLangStringBuffer);
- ClassDefinition var5 = var2.field.getClassDefinition();
- this.codeAppend(var1, var2, var3, var4, true);
- FieldDefinition var6 = var4.getClassDefinition(var1).matchMethod(var1, var5, Constants.idToString);
- var3.add(super.where, 182, var6);
- }
- } catch (ClassNotFound var7) {
- throw new CompilerError(var7);
- } catch (AmbiguousField var8) {
- throw new CompilerError(var8);
- }
- } else {
- super.codeValue(var1, var2, var3);
- }
- }
- }
-