hotspot/agent/src/share/classes/sun/jvm/hotspot/code/DebugInfoReadStream.java
changeset 3171 aa289b22b577
parent 1 489c9b5090e2
child 3600 27aa4477d039
child 3261 c7d5aae8d3f7
equal deleted inserted replaced
2880:c2974244a496 3171:aa289b22b577
    22  *
    22  *
    23  */
    23  */
    24 
    24 
    25 package sun.jvm.hotspot.code;
    25 package sun.jvm.hotspot.code;
    26 
    26 
       
    27 import java.util.*;
       
    28 
    27 import sun.jvm.hotspot.debugger.*;
    29 import sun.jvm.hotspot.debugger.*;
    28 import sun.jvm.hotspot.runtime.VM;
    30 import sun.jvm.hotspot.runtime.VM;
       
    31 import sun.jvm.hotspot.utilities.*;
    29 
    32 
    30 public class DebugInfoReadStream extends CompressedReadStream {
    33 public class DebugInfoReadStream extends CompressedReadStream {
    31   private NMethod code;
    34   private NMethod code;
    32   private int InvocationEntryBCI;
    35   private int InvocationEntryBCI;
       
    36   private List objectPool; // ArrayList<ObjectValue>
    33 
    37 
    34   public DebugInfoReadStream(NMethod code, int offset) {
    38   public DebugInfoReadStream(NMethod code, int offset) {
    35     super(code.scopesDataBegin(), offset);
    39     super(code.scopesDataBegin(), offset);
    36     InvocationEntryBCI = VM.getVM().getInvocationEntryBCI();
    40     InvocationEntryBCI = VM.getVM().getInvocationEntryBCI();
    37     this.code = code;
    41     this.code = code;
       
    42     this.objectPool = null;
       
    43   }
       
    44 
       
    45   public DebugInfoReadStream(NMethod code, int offset, List objectPool) {
       
    46     super(code.scopesDataBegin(), offset);
       
    47     InvocationEntryBCI = VM.getVM().getInvocationEntryBCI();
       
    48     this.code = code;
       
    49     this.objectPool = objectPool;
    38   }
    50   }
    39 
    51 
    40   public OopHandle readOopHandle() {
    52   public OopHandle readOopHandle() {
    41     return code.getOopAt(readInt());
    53     return code.getOopAt(readInt());
    42   }
    54   }
    43 
    55 
       
    56   ScopeValue readObjectValue() {
       
    57     int id = readInt();
       
    58     if (Assert.ASSERTS_ENABLED) {
       
    59       Assert.that(objectPool != null, "object pool does not exist");
       
    60       for (Iterator itr = objectPool.iterator(); itr.hasNext();) {
       
    61         ObjectValue ov = (ObjectValue) itr.next();
       
    62         Assert.that(ov.id() != id, "should not be read twice");
       
    63       }
       
    64     }
       
    65     ObjectValue result = new ObjectValue(id);
       
    66     // Cache the object since an object field could reference it.
       
    67     objectPool.add(result);
       
    68     result.readObject(this);
       
    69     return result;
       
    70   }
       
    71 
       
    72   ScopeValue getCachedObject() {
       
    73     int id = readInt();
       
    74     Assert.that(objectPool != null, "object pool does not exist");
       
    75     for (Iterator itr = objectPool.iterator(); itr.hasNext();) {
       
    76       ObjectValue ov = (ObjectValue) itr.next();
       
    77       if (ov.id() == id) {
       
    78         return ov;
       
    79       }
       
    80     }
       
    81     Assert.that(false, "should not reach here");
       
    82     return null;
       
    83   }
       
    84 
    44   public int readBCI() {
    85   public int readBCI() {
    45     return readInt() + InvocationEntryBCI;
    86     return readInt() + InvocationEntryBCI;
    46   }
    87   }
    47 }
    88 }