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 / CatchStatement.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  4.5 KB  |  122 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.LocalVariable;
  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.Identifier;
  12. import sun.tools.java.IdentifierToken;
  13. import sun.tools.java.Type;
  14.  
  15. public class CatchStatement extends Statement {
  16.    int mod;
  17.    Expression texpr;
  18.    // $FF: renamed from: id sun.tools.java.Identifier
  19.    Identifier field_0;
  20.    Statement body;
  21.    LocalField field;
  22.  
  23.    public CatchStatement(int var1, Expression var2, IdentifierToken var3, Statement var4) {
  24.       super(102, var1);
  25.       this.mod = var3.getModifiers();
  26.       this.texpr = var2;
  27.       this.field_0 = var3.getName();
  28.       this.body = var4;
  29.    }
  30.  
  31.    public CatchStatement(int var1, Expression var2, Identifier var3, Statement var4) {
  32.       super(102, var1);
  33.       this.texpr = var2;
  34.       this.field_0 = var3;
  35.       this.body = var4;
  36.    }
  37.  
  38.    Vset check(Environment var1, Context var2, Vset var3, Hashtable var4) {
  39.       var3 = ((Statement)this).reach(var1, var3);
  40.       var2 = new Context(var2, this);
  41.       Type var5 = this.texpr.toType(var1, var2);
  42.  
  43.       try {
  44.          if (var2.getLocalField(this.field_0) != null) {
  45.             var1.error(super.where, "local.redefined", this.field_0);
  46.          }
  47.  
  48.          if (!var5.isType(13)) {
  49.             if (!var5.isType(10)) {
  50.                var1.error(super.where, "catch.not.throwable", var5);
  51.             } else {
  52.                ClassDefinition var6 = var1.getClassDefinition(var5);
  53.                if (!var6.subClassOf(var1, var1.getClassDeclaration(Constants.idJavaLangThrowable))) {
  54.                   var1.error(super.where, "catch.not.throwable", var6);
  55.                }
  56.             }
  57.          }
  58.  
  59.          this.field = new LocalField(super.where, var2.field.getClassDefinition(), this.mod, var5, this.field_0);
  60.          var2.declare(var1, this.field);
  61.          var3.addVar(this.field.number);
  62.          return this.body.check(var1, var2, var3, var4);
  63.       } catch (ClassNotFound var7) {
  64.          var1.error(super.where, "class.not.found", var7.name, Constants.opNames[super.op]);
  65.          return var3;
  66.       }
  67.    }
  68.  
  69.    public Statement inline(Environment var1, Context var2) {
  70.       var2 = new Context(var2, this);
  71.       if (this.field.isUsed()) {
  72.          var2.declare(var1, this.field);
  73.       }
  74.  
  75.       if (this.body != null) {
  76.          this.body = this.body.inline(var1, var2);
  77.       }
  78.  
  79.       return this;
  80.    }
  81.  
  82.    public Statement copyInline(Context var1, boolean var2) {
  83.       CatchStatement var3 = (CatchStatement)((Node)this).clone();
  84.       if (this.body != null) {
  85.          var3.body = this.body.copyInline(var1, var2);
  86.       }
  87.  
  88.       if (this.field != null) {
  89.          var3.field = this.field.copyInline(var1);
  90.       }
  91.  
  92.       return var3;
  93.    }
  94.  
  95.    public void code(Environment var1, Context var2, Assembler var3) {
  96.       CodeContext var4 = new CodeContext(var2, this);
  97.       if (this.field.isUsed()) {
  98.          ((Context)var4).declare(var1, this.field);
  99.          var3.add(super.where, 58, new LocalVariable(this.field, this.field.number));
  100.       } else {
  101.          var3.add(super.where, 87);
  102.       }
  103.  
  104.       if (this.body != null) {
  105.          this.body.code(var1, var4, var3);
  106.       }
  107.  
  108.    }
  109.  
  110.    public void print(PrintStream var1, int var2) {
  111.       super.print(var1, var2);
  112.       var1.print("catch (");
  113.       this.texpr.print(var1);
  114.       var1.print(" " + this.field_0 + ") ");
  115.       if (this.body != null) {
  116.          this.body.print(var1, var2);
  117.       } else {
  118.          var1.print("<empty>");
  119.       }
  120.    }
  121. }
  122.