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 / debug / FlowTracer.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  3.6 KB  |  228 lines

  1. package sun.tools.debug;
  2.  
  3. import sun.tools.java.RuntimeConstants;
  4. import sun.tools.util.UnboundedArrayOfInt;
  5.  
  6. class FlowTracer implements RuntimeConstants {
  7.    private final Agent agent;
  8.    private final Class clazz;
  9.    private final int lineNumber;
  10.    private final int IN_LINE = 1;
  11.    private final int FLOW_OUT = 2;
  12.    private final int RETURN = 3;
  13.    private final boolean debug = true;
  14.    private UnboundedArrayOfInt map = new UnboundedArrayOfInt();
  15.  
  16.    FlowTracer(int var1, Agent var2, Class var3, int var4) {
  17.       this.agent = var2;
  18.       this.clazz = var3;
  19.       this.lineNumber = var4;
  20.       this.trace(var1);
  21.    }
  22.  
  23.    FlowTracer(int var1, Agent var2) {
  24.       this.agent = var2;
  25.       this.clazz = null;
  26.       this.lineNumber = 0;
  27.       this.trace(var1);
  28.    }
  29.  
  30.    // $FF: renamed from: at (int) int
  31.    private final int method_0(int var1) {
  32.       return this.agent.peekSafely(var1);
  33.    }
  34.  
  35.    private final int shortAt(int var1) {
  36.       return this.method_0(var1) << 8 | this.method_0(var1 + 1);
  37.    }
  38.  
  39.    private final int intAt(int var1) {
  40.       return this.method_0(var1) << 24 | this.method_0(var1 + 1) << 16 | this.method_0(var1 + 2) << 8 | this.method_0(var1 + 3);
  41.    }
  42.  
  43.    private final int entryAt(int var1, int var2) {
  44.       int var3 = var1 + (var2 << 2);
  45.       return this.intAt(var3);
  46.    }
  47.  
  48.    int[] exitPoints() {
  49.       return this.points(2);
  50.    }
  51.  
  52.    int[] returnPoints() {
  53.       return this.points(3);
  54.    }
  55.  
  56.    private int[] points(int var1) {
  57.       int var2 = 0;
  58.  
  59.       for(int var3 = this.map.getFirstIndex(); var3 <= this.map.getLastIndex(); ++var3) {
  60.          int var4 = this.map.at(var3);
  61.          if (var4 == var1) {
  62.             ++var2;
  63.          }
  64.       }
  65.  
  66.       int[] var8 = new int[var2];
  67.       int var5 = 0;
  68.  
  69.       for(int var6 = this.map.getFirstIndex(); var6 <= this.map.getLastIndex(); ++var6) {
  70.          int var7 = this.map.at(var6);
  71.          if (var7 == var1) {
  72.             var8[var5++] = var6;
  73.          }
  74.       }
  75.  
  76.       return var8;
  77.    }
  78.  
  79.    private void setMapping(int var1, int var2) {
  80.       this.map.setAt(var1, var2);
  81.       int var3 = this.method_0(var1);
  82.       Agent.message((var2 == 2 ? " out: " : (var2 == 1 ? " in: " : " ret: ")) + var1 + ": " + (var3 <= 202 ? RuntimeConstants.opcNames[var3] : "[" + var3 + "]"));
  83.    }
  84.  
  85.    private void trace(int var1) {
  86.       int var2 = var1;
  87.  
  88.       while(this.map.at(var2) == 0) {
  89.          label69: {
  90.             boolean var10000;
  91.             if (this.clazz == null) {
  92.                if (var2 != var1) {
  93.                   break label69;
  94.                }
  95.  
  96.                var10000 = false;
  97.             } else {
  98.                if (this.agent.pc2lineno(this.clazz, var2) != this.lineNumber) {
  99.                   break label69;
  100.                }
  101.  
  102.                var10000 = false;
  103.             }
  104.  
  105.             if (!var10000) {
  106.                this.setMapping(var2, 1);
  107.                int var3 = this.method_0(var2);
  108.                switch (var3) {
  109.                   case 153:
  110.                   case 154:
  111.                   case 155:
  112.                   case 156:
  113.                   case 157:
  114.                   case 158:
  115.                   case 159:
  116.                   case 160:
  117.                   case 161:
  118.                   case 162:
  119.                   case 163:
  120.                   case 164:
  121.                   case 165:
  122.                   case 166:
  123.                   case 198:
  124.                   case 199:
  125.                      int var13 = var2 + (short)this.shortAt(var2 + 1);
  126.                      this.trace(var13);
  127.                      var2 += 3;
  128.                      continue;
  129.                   case 167:
  130.                      var2 += (short)this.shortAt(var2 + 1);
  131.                      continue;
  132.                   case 169:
  133.                      this.setMapping(var2, 3);
  134.                      return;
  135.                   case 170:
  136.                      int var11 = var2 + 1 + 3 & -4;
  137.                      int var14 = this.entryAt(var11, 0);
  138.                      int var15 = this.entryAt(var11, 1);
  139.                      int var16 = this.entryAt(var11, 2);
  140.                      var11 += 12;
  141.  
  142.                      for(int var8 = var15; var8 <= var16; ++var8) {
  143.                         this.trace(var2 + this.entryAt(var11, var8 - var15));
  144.                      }
  145.  
  146.                      var2 += var14;
  147.                      continue;
  148.                   case 171:
  149.                      int var4 = var2 + 1 + 3 & -4;
  150.                      int var5 = this.entryAt(var4, 0);
  151.                      int var6 = this.entryAt(var4, 1) * 2;
  152.                      var4 += 8;
  153.  
  154.                      for(int var7 = 0; var7 < var6; var7 += 2) {
  155.                         this.trace(var2 + this.entryAt(var4, var7 + 1));
  156.                      }
  157.  
  158.                      var2 += var5;
  159.                      continue;
  160.                   case 172:
  161.                   case 173:
  162.                   case 174:
  163.                   case 175:
  164.                   case 176:
  165.                   case 177:
  166.                      this.setMapping(var2, 3);
  167.                      return;
  168.                   case 196:
  169.                      var3 = this.method_0(var2 + 1);
  170.                      switch (var3) {
  171.                         case 21:
  172.                         case 22:
  173.                         case 23:
  174.                         case 24:
  175.                         case 25:
  176.                         case 54:
  177.                         case 55:
  178.                         case 56:
  179.                         case 57:
  180.                         case 58:
  181.                            var2 += 4;
  182.                            continue;
  183.                         case 132:
  184.                            var2 += 6;
  185.                            continue;
  186.                         case 169:
  187.                            this.setMapping(var2, 3);
  188.                            return;
  189.                         default:
  190.                            throw new IllegalArgumentException("PANIC: Invalid opcode");
  191.                      }
  192.                   case 200:
  193.                      var2 += this.intAt(var2 + 1);
  194.                      continue;
  195.                   default:
  196.                      if (var3 >= 203) {
  197.                         if (var3 > 228) {
  198.                            throw new IllegalArgumentException("PANIC: Invalid opcode");
  199.                         }
  200.  
  201.                         switch (var3) {
  202.                            case 203:
  203.                               var2 += 2;
  204.                               continue;
  205.                            case 218:
  206.                               var2 += 5;
  207.                               continue;
  208.                            case 223:
  209.                               var2 += 4;
  210.                               continue;
  211.                            default:
  212.                               var2 += 3;
  213.                         }
  214.                      } else {
  215.                         var2 += RuntimeConstants.opcLengths[var3];
  216.                      }
  217.                      continue;
  218.                }
  219.             }
  220.          }
  221.  
  222.          this.setMapping(var2, 2);
  223.          return;
  224.       }
  225.  
  226.    }
  227. }
  228.