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 / ThrowStatement.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  3.4 KB  |  75 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.java.ClassDeclaration;
  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 ThrowStatement extends Statement {
  14.    Expression expr;
  15.  
  16.    public ThrowStatement(int var1, Expression var2) {
  17.       super(104, var1);
  18.       this.expr = var2;
  19.    }
  20.  
  21.    Vset check(Environment var1, Context var2, Vset var3, Hashtable var4) {
  22.       try {
  23.          var3 = ((Statement)this).reach(var1, var3);
  24.          this.expr.checkValue(var1, var2, var3, var4);
  25.          if (this.expr.type.isType(10)) {
  26.             ClassDeclaration var5 = var1.getClassDeclaration(this.expr.type);
  27.             if (var4.get(var5) == null) {
  28.                var4.put(var5, this);
  29.             }
  30.  
  31.             ClassDefinition var6 = var5.getClassDefinition(var1);
  32.             ClassDeclaration var7 = var1.getClassDeclaration(Constants.idJavaLangThrowable);
  33.             if (!var6.subClassOf(var1, var7)) {
  34.                var1.error(super.where, "throw.not.throwable", var6);
  35.             }
  36.  
  37.             this.expr = ((Node)this).convert(var1, var2, Type.tObject, this.expr);
  38.          } else if (!this.expr.type.isType(13)) {
  39.             var1.error(this.expr.where, "throw.not.throwable", this.expr.type);
  40.          }
  41.       } catch (ClassNotFound var8) {
  42.          var1.error(super.where, "class.not.found", var8.name, Constants.opNames[super.op]);
  43.       }
  44.  
  45.       return Statement.DEAD_END;
  46.    }
  47.  
  48.    public Statement inline(Environment var1, Context var2) {
  49.       this.expr = this.expr.inlineValue(var1, var2);
  50.       return this;
  51.    }
  52.  
  53.    public Statement copyInline(Context var1, boolean var2) {
  54.       ThrowStatement var3 = (ThrowStatement)((Node)this).clone();
  55.       var3.expr = this.expr.copyInline(var1);
  56.       return var3;
  57.    }
  58.  
  59.    public int costInline(int var1, Environment var2, Context var3) {
  60.       return 1 + this.expr.costInline(var1, var2, var3);
  61.    }
  62.  
  63.    public void code(Environment var1, Context var2, Assembler var3) {
  64.       this.expr.codeValue(var1, var2, var3);
  65.       var3.add(super.where, 191);
  66.    }
  67.  
  68.    public void print(PrintStream var1, int var2) {
  69.       super.print(var1, var2);
  70.       var1.print("throw ");
  71.       this.expr.print(var1);
  72.       var1.print(":");
  73.    }
  74. }
  75.