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 / SynchronizedStatement.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  4.5 KB  |  108 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.CatchData;
  7. import sun.tools.asm.Label;
  8. import sun.tools.asm.TryData;
  9. import sun.tools.java.ClassDefinition;
  10. import sun.tools.java.CompilerError;
  11. import sun.tools.java.Constants;
  12. import sun.tools.java.Environment;
  13. import sun.tools.java.Identifier;
  14. import sun.tools.java.Type;
  15.  
  16. public class SynchronizedStatement extends Statement {
  17.    Expression expr;
  18.    Statement body;
  19.    boolean needReturnSlot;
  20.  
  21.    public SynchronizedStatement(int var1, Expression var2, Statement var3) {
  22.       super(126, var1);
  23.       this.expr = var2;
  24.       this.body = var3;
  25.    }
  26.  
  27.    Vset check(Environment var1, Context var2, Vset var3, Hashtable var4) {
  28.       CheckContext var5 = new CheckContext(var2, this);
  29.       var3 = ((Statement)this).reach(var1, var3);
  30.       var3 = this.expr.checkValue(var1, var5, var3, var4);
  31.       this.expr = ((Node)this).convert(var1, var5, Type.tClass(Constants.idJavaLangObject), this.expr);
  32.       var3 = this.body.check(var1, var5, var3, var4);
  33.       return var2.removeAdditionalVars(var3.join(var5.vsBreak));
  34.    }
  35.  
  36.    public Statement inline(Environment var1, Context var2) {
  37.       if (this.body != null) {
  38.          this.body = this.body.inline(var1, var2);
  39.       }
  40.  
  41.       this.expr = this.expr.inlineValue(var1, var2);
  42.       return this;
  43.    }
  44.  
  45.    public Statement copyInline(Context var1, boolean var2) {
  46.       throw new CompilerError("copyInline");
  47.    }
  48.  
  49.    public void code(Environment var1, Context var2, Assembler var3) {
  50.       ClassDefinition var4 = var2.field.getClassDefinition();
  51.       this.expr.codeValue(var1, var2, var3);
  52.       var2 = new Context(var2);
  53.       if (this.needReturnSlot) {
  54.          Type var5 = var2.field.getType().getReturnType();
  55.          LocalField var6 = new LocalField(0, var4, 0, var5, Constants.idFinallyReturnValue);
  56.          var2.declare(var1, var6);
  57.          Environment.debugOutput("Assigning return slot to " + var6.number);
  58.       }
  59.  
  60.       LocalField var14 = new LocalField(super.where, var4, 0, Type.tObject, (Identifier)null);
  61.       LocalField var15 = new LocalField(super.where, var4, 0, Type.tInt, (Identifier)null);
  62.       Integer var7 = new Integer(var2.declare(var1, var14));
  63.       Integer var8 = new Integer(var2.declare(var1, var15));
  64.       Label var9 = new Label();
  65.       TryData var10 = new TryData();
  66.       var10.add((Object)null);
  67.       var3.add(super.where, 58, var7);
  68.       var3.add(super.where, 25, var7);
  69.       var3.add(super.where, 194);
  70.       CodeContext var11 = new CodeContext(var2, this);
  71.       var3.add(super.where, -3, var10);
  72.       if (this.body != null) {
  73.          this.body.code(var1, var11, var3);
  74.       } else {
  75.          var3.add(super.where, 0);
  76.       }
  77.  
  78.       var3.add(var11.breakLabel);
  79.       var3.add(var10.getEndLabel());
  80.       var3.add(super.where, 25, var7);
  81.       var3.add(super.where, 195);
  82.       var3.add(super.where, 167, var9);
  83.       CatchData var12 = var10.getCatch(0);
  84.       var3.add(var12.getLabel());
  85.       var3.add(super.where, 25, var7);
  86.       var3.add(super.where, 195);
  87.       var3.add(super.where, 191);
  88.       var3.add(var11.contLabel);
  89.       var3.add(super.where, 58, var8);
  90.       var3.add(super.where, 25, var7);
  91.       var3.add(super.where, 195);
  92.       var3.add(super.where, 169, var8);
  93.       var3.add(var9);
  94.    }
  95.  
  96.    public void print(PrintStream var1, int var2) {
  97.       super.print(var1, var2);
  98.       var1.print("synchronized ");
  99.       this.expr.print(var1);
  100.       var1.print(" ");
  101.       if (this.body != null) {
  102.          this.body.print(var1, var2);
  103.       } else {
  104.          var1.print("{}");
  105.       }
  106.    }
  107. }
  108.