home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.tree;
-
- import java.io.PrintStream;
- import java.util.Hashtable;
- import sun.tools.asm.Assembler;
- import sun.tools.asm.Label;
- import sun.tools.java.ClassDefinition;
- import sun.tools.java.ClassNotFound;
- import sun.tools.java.Constants;
- import sun.tools.java.Environment;
- import sun.tools.java.Type;
-
- public class InstanceOfExpression extends BinaryExpression {
- public InstanceOfExpression(int var1, Expression var2, Expression var3) {
- super(25, var1, Type.tBoolean, var2, var3);
- }
-
- public Vset checkValue(Environment var1, Context var2, Vset var3, Hashtable var4) {
- var3 = super.left.checkValue(var1, var2, var3, var4);
- super.right = new TypeExpression(super.right.where, super.right.toType(var1, var2));
- if (!super.right.type.isType(13) && !super.left.type.isType(13)) {
- if (!super.right.type.inMask(1536)) {
- var1.error(super.right.where, "invalid.arg.type", super.right.type, Constants.opNames[super.op]);
- return var3;
- } else {
- try {
- if (!var1.explicitCast(super.left.type, super.right.type)) {
- var1.error(super.where, "invalid.instanceof", super.left.type, super.right.type);
- }
- } catch (ClassNotFound var6) {
- var1.error(super.where, "class.not.found", var6.name, Constants.opNames[super.op]);
- }
-
- return var3;
- }
- } else {
- return var3;
- }
- }
-
- public Expression inline(Environment var1, Context var2) {
- return super.left.inline(var1, var2);
- }
-
- public Expression inlineValue(Environment var1, Context var2) {
- super.left = super.left.inlineValue(var1, var2);
- return this;
- }
-
- public int costInline(int var1, Environment var2, Context var3) {
- if (var3 == null) {
- return 1 + super.left.costInline(var1, var2, var3);
- } else {
- ClassDefinition var4 = var3.field.getClassDefinition();
-
- try {
- if (super.right.type.isType(9) || var4.canAccess(var2, var2.getClassDeclaration(super.right.type))) {
- return 1 + super.left.costInline(var1, var2, var3);
- }
- } catch (ClassNotFound var5) {
- }
-
- return var1;
- }
- }
-
- public void codeValue(Environment var1, Context var2, Assembler var3) {
- super.left.codeValue(var1, var2, var3);
- if (super.right.type.isType(10)) {
- var3.add(super.where, 193, var1.getClassDeclaration(super.right.type));
- } else {
- var3.add(super.where, 193, super.right.type);
- }
- }
-
- void codeBranch(Environment var1, Context var2, Assembler var3, Label var4, boolean var5) {
- this.codeValue(var1, var2, var3);
- var3.add(super.where, var5 ? 154 : 153, var4, var5);
- }
-
- public void code(Environment var1, Context var2, Assembler var3) {
- super.left.code(var1, var2, var3);
- }
-
- public void print(PrintStream var1) {
- var1.print("(" + Constants.opNames[super.op] + " ");
- super.left.print(var1);
- var1.print(" ");
- if (super.right.op == 147) {
- var1.print(super.right.type.toString());
- } else {
- super.right.print(var1);
- }
-
- var1.print(")");
- }
- }
-