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

  1. package espresso;
  2.  
  3. class Scope implements Constants {
  4.    private static ScopeEntry sentinel = new ScopeEntry((Obj)null, (ScopeEntry)null, (ScopeEntry)null, (Scope)null);
  5.    static final int HASH_MASK = 127;
  6.    static final int HASH_SIZE = 128;
  7.    ScopeEntry elems;
  8.    ScopeEntry[] hashtable;
  9.    Obj owner;
  10.    Scope next;
  11.  
  12.    ScopeEntry elements() {
  13.       return this.elems;
  14.    }
  15.  
  16.    ScopeEntry lookup(Name var1) {
  17.       ScopeEntry var2;
  18.       for(var2 = this.hashtable[var1.index & 127]; var2.scope != null && var2.obj.name.index != var1.index; var2 = var2.shadowed) {
  19.       }
  20.  
  21.       return var2;
  22.    }
  23.  
  24.    void baseOn(Scope var1) {
  25.       if (var1 != null) {
  26.          for(int var2 = 0; var2 < 128; ++var2) {
  27.             ScopeEntry var3 = this.hashtable[var2];
  28.             if (var3.scope == null) {
  29.                this.hashtable[var2] = var1.hashtable[var2];
  30.             } else {
  31.                while(var3.shadowed.scope != null) {
  32.                   var3 = var3.shadowed;
  33.                }
  34.  
  35.                var3.shadowed = var1.hashtable[var2];
  36.             }
  37.          }
  38.       }
  39.  
  40.       this.next = var1;
  41.    }
  42.  
  43.    void include(Scope var1) {
  44.       if (var1 != null) {
  45.          if (var1.next != null && var1.next.owner == var1.owner) {
  46.             this.include(var1.next);
  47.          }
  48.  
  49.          for(ScopeEntry var2 = var1.elements(); var2 != null; var2 = var2.sibling) {
  50.             this.enter(var2.obj);
  51.          }
  52.       }
  53.  
  54.    }
  55.  
  56.    void enter(Obj var1) {
  57.       int var2 = var1.name.index & 127;
  58.       ScopeEntry var3 = new ScopeEntry(var1, this.hashtable[var2], this.elems, this);
  59.       this.hashtable[var2] = var3;
  60.       this.elems = var3;
  61.       if (var1.owner == null) {
  62.          var1.owner = this.owner;
  63.       }
  64.  
  65.    }
  66.  
  67.    void restore() {
  68.       for(ScopeEntry var1 = this.elems; var1 != null; var1 = var1.sibling) {
  69.          int var2 = var1.obj.name.index & 127;
  70.          var1.shadowed = this.hashtable[var2];
  71.          this.hashtable[var2] = var1;
  72.       }
  73.  
  74.    }
  75.  
  76.    void leave() {
  77.       for(ScopeEntry var1 = this.elems; var1 != null; var1 = var1.sibling) {
  78.          int var2 = var1.obj.name.index & 127;
  79.          this.hashtable[var2] = this.hashtable[var2].shadowed;
  80.       }
  81.  
  82.    }
  83.  
  84.    Scope duplicate() {
  85.       return new Scope(this, this.owner, this.hashtable);
  86.    }
  87.  
  88.    Scope(Scope var1, Obj var2) {
  89.       this(var1, var2, new ScopeEntry[128]);
  90.       if (var1 == null) {
  91.          for(int var3 = 0; var3 < 128; ++var3) {
  92.             this.hashtable[var3] = sentinel;
  93.          }
  94.       } else {
  95.          for(int var4 = 0; var4 < 128; ++var4) {
  96.             this.hashtable[var4] = var1.hashtable[var4];
  97.          }
  98.       }
  99.  
  100.    }
  101.  
  102.    Scope(Scope var1, Obj var2, ScopeEntry[] var3) {
  103.       this.next = var1;
  104.       this.owner = var2;
  105.       this.hashtable = var3;
  106.       this.elems = null;
  107.    }
  108. }
  109.