home *** CD-ROM | disk | FTP | other *** search
/ Tutto per Internet / Internet.iso / soft95 / Java / espints / espinst.exe / classes / espresso / Block.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-02-28  |  2.8 KB  |  105 lines

  1. package espresso;
  2.  
  3. class Block extends AST {
  4.    Env localEnv;
  5.    AST[] stats;
  6.    int mods = 0;
  7.  
  8.    void print(int var1) {
  9.       if ((this.mods & 8) != 0) {
  10.          System.out.print("static ");
  11.       }
  12.  
  13.       System.out.print("{\n");
  14.       Pretty.indent();
  15.       AST.printStats(this.stats);
  16.       Pretty.undent();
  17.       Pretty.align();
  18.       System.out.print("}");
  19.    }
  20.  
  21.    Item gen() {
  22.       if ((this.mods & 8) != 0) {
  23.          Gen.useCode(this.localEnv.enclClass.clinitcode);
  24.          Gen.entryPoint(0);
  25.       }
  26.  
  27.       int var1 = Gen.nextLocal();
  28.  
  29.       for(int var2 = 0; var2 < this.stats.length; ++var2) {
  30.          this.stats[var2].genDrop();
  31.       }
  32.  
  33.       Gen.endScopes(var1);
  34.       return Item.voidItem;
  35.    }
  36.  
  37.    AST simplify() {
  38.       for(int var1 = 0; var1 < this.stats.length; ++var1) {
  39.          this.stats[var1] = this.stats[var1].simplify();
  40.       }
  41.  
  42.       return this;
  43.    }
  44.  
  45.    void markCaptured(Bits var1) {
  46.       for(int var2 = 0; var2 < this.stats.length; ++var2) {
  47.          this.stats[var2].markCaptured(var1);
  48.       }
  49.  
  50.    }
  51.  
  52.    Typ attr(Env var1, int var2, Typ var3) {
  53.       if (Attr.checkKind(super.pos, 12, var2)) {
  54.          if ((this.mods & 8) != 0) {
  55.             var1 = var1.enclClass.clinitEnv;
  56.          }
  57.  
  58.          this.localEnv = new Env(var1, this, var1.scope.duplicate());
  59.          super.typ = var3;
  60.  
  61.          for(int var4 = 0; var4 < this.stats.length; ++var4) {
  62.             super.typ = Attr.join(this.stats[var4].pos, super.typ, this.stats[var4].attr(this.localEnv, 12, var3));
  63.          }
  64.  
  65.          this.localEnv.scope.leave();
  66.       } else {
  67.          super.typ = Typ.errTyp;
  68.       }
  69.  
  70.       return super.typ;
  71.    }
  72.  
  73.    void pushStat(AST var1) {
  74.       AST[] var2 = new AST[this.stats.length + 1];
  75.       var2[0] = var1;
  76.  
  77.       for(int var3 = 1; var3 < var2.length; ++var3) {
  78.          var2[var3] = this.stats[var3 - 1];
  79.       }
  80.  
  81.       this.stats = var2;
  82.    }
  83.  
  84.    boolean hasConstructors() {
  85.       int var1;
  86.       for(var1 = 0; var1 < this.stats.length && !this.isConstructor(this.stats[var1]); ++var1) {
  87.       }
  88.  
  89.       return var1 < this.stats.length;
  90.    }
  91.  
  92.    private boolean isConstructor(AST var1) {
  93.       return var1 != null && var1.tag == 65 && ((FunDef)var1).name.equals(Predef.initS);
  94.    }
  95.  
  96.    boolean isExpr() {
  97.       return true;
  98.    }
  99.  
  100.    Block(int var1, ASTS var2) {
  101.       super(var1, 17);
  102.       this.stats = var2.shrink();
  103.    }
  104. }
  105.