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 / InstanceOfExpression.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  3.6 KB  |  98 lines

  1. package sun.tools.tree;
  2.  
  3. import java.io.PrintStream;
  4. import java.util.Hashtable;
  5. import sun.tools.asm.Assembler;
  6. import sun.tools.asm.Label;
  7. import sun.tools.java.ClassDefinition;
  8. import sun.tools.java.ClassNotFound;
  9. import sun.tools.java.Constants;
  10. import sun.tools.java.Environment;
  11. import sun.tools.java.Type;
  12.  
  13. public class InstanceOfExpression extends BinaryExpression {
  14.    public InstanceOfExpression(int var1, Expression var2, Expression var3) {
  15.       super(25, var1, Type.tBoolean, var2, var3);
  16.    }
  17.  
  18.    public Vset checkValue(Environment var1, Context var2, Vset var3, Hashtable var4) {
  19.       var3 = super.left.checkValue(var1, var2, var3, var4);
  20.       super.right = new TypeExpression(super.right.where, super.right.toType(var1, var2));
  21.       if (!super.right.type.isType(13) && !super.left.type.isType(13)) {
  22.          if (!super.right.type.inMask(1536)) {
  23.             var1.error(super.right.where, "invalid.arg.type", super.right.type, Constants.opNames[super.op]);
  24.             return var3;
  25.          } else {
  26.             try {
  27.                if (!var1.explicitCast(super.left.type, super.right.type)) {
  28.                   var1.error(super.where, "invalid.instanceof", super.left.type, super.right.type);
  29.                }
  30.             } catch (ClassNotFound var6) {
  31.                var1.error(super.where, "class.not.found", var6.name, Constants.opNames[super.op]);
  32.             }
  33.  
  34.             return var3;
  35.          }
  36.       } else {
  37.          return var3;
  38.       }
  39.    }
  40.  
  41.    public Expression inline(Environment var1, Context var2) {
  42.       return super.left.inline(var1, var2);
  43.    }
  44.  
  45.    public Expression inlineValue(Environment var1, Context var2) {
  46.       super.left = super.left.inlineValue(var1, var2);
  47.       return this;
  48.    }
  49.  
  50.    public int costInline(int var1, Environment var2, Context var3) {
  51.       if (var3 == null) {
  52.          return 1 + super.left.costInline(var1, var2, var3);
  53.       } else {
  54.          ClassDefinition var4 = var3.field.getClassDefinition();
  55.  
  56.          try {
  57.             if (super.right.type.isType(9) || var4.canAccess(var2, var2.getClassDeclaration(super.right.type))) {
  58.                return 1 + super.left.costInline(var1, var2, var3);
  59.             }
  60.          } catch (ClassNotFound var5) {
  61.          }
  62.  
  63.          return var1;
  64.       }
  65.    }
  66.  
  67.    public void codeValue(Environment var1, Context var2, Assembler var3) {
  68.       super.left.codeValue(var1, var2, var3);
  69.       if (super.right.type.isType(10)) {
  70.          var3.add(super.where, 193, var1.getClassDeclaration(super.right.type));
  71.       } else {
  72.          var3.add(super.where, 193, super.right.type);
  73.       }
  74.    }
  75.  
  76.    void codeBranch(Environment var1, Context var2, Assembler var3, Label var4, boolean var5) {
  77.       this.codeValue(var1, var2, var3);
  78.       var3.add(super.where, var5 ? 154 : 153, var4, var5);
  79.    }
  80.  
  81.    public void code(Environment var1, Context var2, Assembler var3) {
  82.       super.left.code(var1, var2, var3);
  83.    }
  84.  
  85.    public void print(PrintStream var1) {
  86.       var1.print("(" + Constants.opNames[super.op] + " ");
  87.       super.left.print(var1);
  88.       var1.print(" ");
  89.       if (super.right.op == 147) {
  90.          var1.print(super.right.type.toString());
  91.       } else {
  92.          super.right.print(var1);
  93.       }
  94.  
  95.       var1.print(")");
  96.    }
  97. }
  98.