sa-jdi

           return cSegLog;
          }
          
          public DebugVC50SegDesc getSegDesc(int i)
          {
            return ((DebugVC50SegDesc[])(DebugVC50SegDesc[])segDescs.getValue())[i];
          }
        }
        
        class DebugVC50SegDescImpl
          implements DebugVC50SegDesc
        {
          private short flags;
          private short ovl;
          private short group;
          private short frame;
          private short iSegName;
          private short iClassName;
          private int offset;
          private int cbSeg;
          
          DebugVC50SegDescImpl(int offset)
          {
            seek(offset);
            flags = readShort();
            ovl = readShort();
            group = readShort();
            frame = readShort();
            iSegName = readShort();
            iClassName = readShort();
            offset = readInt();
            cbSeg = readInt();
          }
          
          public short getFlags()
          {
            return flags;
          }
          
          public short getOverlayNum()
          {
            return ovl;
          }
          
          public short getGroup()
          {
            return group;
          }
          
          public short getFrame()
          {
            return frame;
          }
          
          public short getName()
          {
            return iSegName;
          }
          
          public short getClassName()
          {
            return iClassName;
          }
          
          public int getOffset()
          {
            return offset;
          }
          
          public int getSize()
          {
            return cbSeg;
          }
        }
        
        class DebugVC50SSSegNameImpl
          extends COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.DebugVC50SubsectionImpl
          implements DebugVC50SSSegName
        {
          private int offset;
          private int size;
          private MemoizedObject names;
          
          DebugVC50SSSegNameImpl(short ssType, short iMod, int ssSize, int offset)
          {
            super(ssType, iMod, ssSize, offset);
            this.offset = offset;
            size = ssSize;
            seek(offset);
            names = new MemoizedObject()
            {
              public Object computeValue()
              {
                int i = 0;
                List data = new ArrayList();
                while (i < size)
                {
                  String s = readCString();
                  data.add(s);
                  i += s.length();
                }
                String[] res = new String[data.size()];
                res = (String[])data.toArray(res);
                return res;
              }
            };
          }
          
          public String getSegName(int i)
          {
            return ((String[])(String[])names.getValue())[i];
          }
        }
        
        class DebugVC50SSPreCompImpl
          extends COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.DebugVC50SubsectionImpl
          implements DebugVC50SSPreComp
        {
          DebugVC50SSPreCompImpl(short ssType, short iMod, int ssSize, int offset)
          {
            super(ssType, iMod, ssSize, offset);
          }
        }
        
        class DebugVC50SSOffsetMap16Impl
          extends COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.DebugVC50SubsectionImpl
          implements DebugVC50SSOffsetMap16
        {
          DebugVC50SSOffsetMap16Impl(short ssType, short iMod, int ssSize, int offset)
          {
            super(ssType, iMod, ssSize, offset);
          }
        }
        
        class DebugVC50SSOffsetMap32Impl
          extends COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.DebugVC50SubsectionImpl
          implements DebugVC50SSOffsetMap32
        {
          DebugVC50SSOffsetMap32Impl(short ssType, short iMod, int ssSize, int offset)
          {
            super(ssType, iMod, ssSize, offset);
          }
        }
        
        class DebugVC50SSFileIndexImpl
          extends COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.DebugVC50SubsectionImpl
          implements DebugVC50SSFileIndex
        {
          private int offset;
          private short cMod;
          private short cRef;
          private MemoizedObject modStart;
          private MemoizedObject cRefCnt;
          private MemoizedObject nameRef;
          private MemoizedObject names;
          
          DebugVC50SSFileIndexImpl(short ssType, short iMod, int ssSize, final int offset)
          {
            super(ssType, iMod, ssSize, offset);
            this.offset = offset;
            seek(offset);
            cMod = readShort();
            cRef = readShort();
            modStart = new MemoizedObject()
            {
              public Object computeValue()
              {
                short[] vals = new short[cMod];
                seek(4 + offset);
                for (int i = 0; i < cMod; i++) {
                  vals[i] = readShort();
                }
                return vals;
              }
            };
            cRefCnt = new MemoizedObject()
            {
              public Object computeValue()
              {
                short[] vals = new short[cMod];
                seek(4 + offset + 2 * cMod);
                for (int i = 0; i < cMod; i++) {
                  vals[i] = readShort();
                }
                return vals;
              }
            };
            nameRef = new MemoizedObject()
            {
              public Object computeValue()
              {
                int[] vals = new int[cRef];
                seek(4 + offset + 4 * cMod);
                for (int i = 0; i < cMod; i++) {
                  vals[i] = readInt();
                }
                return vals;
              }
            };
            names = new MemoizedObject()
            {
              public Object computeValue()
              {
                String[] vals = new String[cRef];
                for (int i = 0; i < cRef; i++) {
                  vals[i] = readCString();
                }
                return vals;
              }
            };
          }
          
          public short getNumModules()
          {
            return cMod;
          }
          
          public short getNumReferences()
          {
            return cRef;
          }
          
          public short[] getModStart()
          {
            return (short[])modStart.getValue();
          }
          
          public short[] getRefCount()
          {
            return (short[])cRefCnt.getValue();
          }
          
          public int[] getNameRef()
          {
            return (int[])nameRef.getValue();
          }
          
          public String[] getNames()
          {
            return (String[])names.getValue();
          }
        }
        
        class DebugVC50SSStaticSymImpl
          extends COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.DebugVC50SSSymbolBaseImpl
          implements DebugVC50SSStaticSym
        {
          DebugVC50SSStaticSymImpl(short ssType, short iMod, int ssSize, int offset)
          {
            super(ssType, iMod, ssSize, offset);
          }
        }
        
        class DebugVC50SymbolIteratorImpl
          implements DebugVC50SymbolIterator
        {
          private int base;
          private int size;
          private int pos;
          private int curSymSize;
          private int curSymType;
          private static final int HEADER_SIZE = 4;
          
          DebugVC50SymbolIteratorImpl(int base, int size)
          {
            this(base, size, base);
          }
          
          private DebugVC50SymbolIteratorImpl(int base, int size, int pos)
          {
            this.base = base;
            this.size = size;
            this.pos = pos;
            seek(pos);
            curSymSize = (readShort() & 0xFFFF);
            curSymType = (readShort() & 0xFFFF);
          }
          
          public boolean done()
          {
            return pos == base + size;
          }
          
          public void next()
            throws NoSuchElementException
          {
            if (done()) {
              throw new NoSuchElementException("No more symbols");
            }
            pos += curSymSize + 2;
            seek(pos);
            curSymSize = (readShort() & 0xFFFF);
            curSymType = (readShort() & 0xFFFF);
          }
          
          public short getLength()
          {
            return (short)curSymSize;
          }
          
          public int getType()
          {
            return curSymType;
          }
          
          public int getOffset()
          {
            return pos + 4;
          }
          
          public byte getCompilerTargetProcessor()
          {
            symSeek(0);
            return readByte();
          }
          
          public int getCompilerFlags()
          {
            symSeek(1);
            int res = 0;
            for (int i = 0; i < 3; i++)
            {
              int b = readByte() & 0xFF;
              res = res << 8 | b;
            }
            return res;
          }
          
          public String getComplierVersion()
          {
            return readLengthPrefixedStringAt(4);
          }
          
          public int getRegisterSymbolType()
          {
            symSeek(0);
            return readInt();
          }
          
          public short getRegisterEnum()
          {
            symSeek(4);
            return readShort();
          }
          
          public String getRegisterSymbolName()
          {
            return readLengthPrefixedStringAt(6);
          }
          
          public int getConstantType()
          {
            symSeek(0);
            return readInt();
          }
          
          public int getConstantValueAsInt()
            throws DebugVC50WrongNumericTypeException
          {
            return readIntNumericLeafAt(4);
          }
          
          public long getConstantValueAsLong()
            throws DebugVC50WrongNumericTypeException
          {
            return readLongNumericLeafAt(4);
          }
          
          public float getConstantValueAsFloat()
            throws DebugVC50WrongNumericTypeException
          {
            return readFloatNumericLeafAt(4);
          }
          
          public double getConstantValueAsDouble()
            throws DebugVC50WrongNumericTypeException
          {
            return readDoubleNumericLeafAt(4);
          }
          
          public String getConstantName()
          {
            return readLengthPrefixedStringAt(4 + numericLeafLengthAt(4));
          }
          
          public int getUDTType()
          {
            symSeek(0);
            return readInt();
          }
          
          public String getUDTName()
          {
            return readLengthPrefixedStringAt(4);
          }
          
          public int getSearchSymbolOffset()
          {
            symSeek(0);
            return readInt();
          }
          
          public short getSearchSegment()
          {
            symSeek(4);
            return readShort();
          }
          
          public int getObjectCodeViewSignature()
          {
            symSeek(0);
            return readInt();
          }
          
          public String getObjectName()
          {
            return readLengthPrefixedStringAt(4);
          }
          
          public int getManyRegType()
          {
            symSeek(0);
            return readInt();
          }
          
          public byte getManyRegCount()
          {
            symSeek(4);
            return readByte();
          }
          
          public byte getManyRegRegister(int i)
          {
            symSeek(5 + i);
            return readByte();
          }
          
          public String getManyRegName()
          {
            return readLengthPrefixedStringAt(5 + getManyRegCount());
          }
          
          public short getReturnFlags()
          {
            symSeek(0);
            return readShort();
          }
          
          public byte getReturnStyle()
          {
            symSeek(2);
            return readByte();
          }
          
          public byte getReturnRegisterCount()
          {
            symSeek(3);
            return readByte();
          }
          
          public byte getReturnRegister(int i)
          {
            symSeek(4 + i);
            return readByte();
          }
          
          public void advanceToEntryThisSymbol()
          {
            seek(pos + 4);
            int tmpSymSize = readShort();
            int tmpSymType = readShort();
            if (Assert.ASSERTS_ENABLED) {
              Assert.that(pos + curSymSize + 2 == pos + 4 + tmpSymSize, "advanceToEntryThisSymbol needs more work");
            }
            pos += 4;
            curSymSize = tmpSymSize;
            curSymType = tmpSymType;
          }
          
          public int getBPRelOffset()
          {
            symSeek(0);
            return readInt();
          }
          
          public int getBPRelType()
          {
            symSeek(4);
            return readInt();
          }
          
          public String getBPRelName()
          {
            return readLengthPrefixedStringAt(8);
          }
          
          public int getLGDataType()
          {
            symSeek(0);
            return readInt();
          }
          
          public int getLGDataOffset()
          {
            symSeek(4);
            return readInt();
          }
          
          public short getLGDataSegment()
          {
            symSeek(8);
            return readShort();
          }
          
          public String getLGDataName()
          {
            return readLengthPrefixedStringAt(10);
          }
          
          public DebugVC50SymbolIterator getLGProcParent()
          {
            int offs = getLGProcParentOffset();
            if (offs == 0) {
              return null;
            }
            return new DebugVC50SymbolIteratorImpl(COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this, base, size, offs);
          }
          
          public int getLGProcParentOffset()
          {
            symSeek(0);
            int offs = readInt();
            if (offs == 0) {
              return 0;
            }
            return base + offs;
          }
          
          public DebugVC50SymbolIterator getLGProcEnd()
          {
            int offs = getLGProcEndOffset();
            return new DebugVC50SymbolIteratorImpl(COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this, base, size, offs);
          }
          
          public int getLGProcEndOffset()
          {
            symSeek(4);
            int offs = readInt();
            if (Assert.ASSERTS_ENABLED) {
              Assert.that(offs != 0, "should not have null end offset for procedure symbols");
            }
            return base + offs;
          }
          
          public DebugVC50SymbolIterator getLGProcNext()
          {
            int offs = getLGProcNextOffset();
            if (offs == 0) {
              return null;
            }
            return new DebugVC50SymbolIteratorImpl(COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this, base, size, offs);
          }
          
          public int getLGProcNextOffset()
          {
            symSeek(8);
            int offs = readInt();
            if (offs == 0) {
              return 0;
            }
            return base + offs;
          }
          
          public int getLGProcLength()
          {
            symSeek(12);
            return readInt();
          }
          
          public int getLGProcDebugStart()
          {
            symSeek(16);
            return readInt();
          }
          
          public int getLGProcDebugEnd()
          {
            symSeek(20);
            return readInt();
          }
          
          public int getLGProcType()
          {
            symSeek(24);
            return readInt();
          }
          
          public int getLGProcOffset()
          {
            symSeek(28);
            return readInt();
          }
          
          public short getLGProcSegment()
          {
            symSeek(32);
            return readShort();
          }
          
          public byte getLGProcFlags()
          {
            symSeek(34);
            return readByte();
          }
          
          public String getLGProcName()
          {
            return readLengthPrefixedStringAt(35);
          }
          
          public DebugVC50SymbolIterator getThunkParent()
          {
            int offs = getThunkParentOffset();
            if (offs == 0) {
              return null;
            }
            return new DebugVC50SymbolIteratorImpl(COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this, base, size, offs);
          }
          
          public int getThunkParentOffset()
          {
            symSeek(0);
            int offs = readInt();
            if (offs == 0) {
              return 0;
            }
            return base + offs;
          }
          
          public DebugVC50SymbolIterator getThunkEnd()
          {
            symSeek(4);
            int offs = readInt();
            return new DebugVC50SymbolIteratorImpl(COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this, base, size, offs);
          }
          
          public int getThunkEndOffset()
          {
            symSeek(4);
            int offs = readInt();
            if (Assert.ASSERTS_ENABLED) {
              Assert.that(offs != 0, "should not have null end offset for thunk symbols");
            }
            return base + offs;
          }
          
          public DebugVC50SymbolIterator getThunkNext()
          {
            int offs = getThunkNextOffset();
            if (offs == 0) {
              return null;
            }
            return new DebugVC50SymbolIteratorImpl(COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this, base, size, base + offs);
          }
          
          public int getThunkNextOffset()
          {
            symSeek(8);
            int offs = readInt();
            if (offs == 0) {
              return 0;
            }
            return base + offs;
          }
          
          public int getThunkOffset()
          {
            symSeek(12);
            return readInt();
          }
          
          public short getThunkSegment()
          {
            symSeek(16);
            return readShort();
          }
          
          public short getThunkLength()
          {
            symSeek(18);
            return readShort();
          }
          
          public byte getThunkType()
          {
            symSeek(20);
            return readByte();
          }
          
          public String getThunkName()
          {
            return readLengthPrefixedStringAt(21);
          }
          
          public short getThunkAdjustorThisDelta()
          {
            symSeek(21 + lengthPrefixedStringLengthAt(21));
            return readShort();
          }
          
          public String getThunkAdjustorTargetName()
          {
            return readLengthPrefixedStringAt(23 + lengthPrefixedStringLengthAt(21));
          }
          
          public short getThunkVCallDisplacement()
          {
            symSeek(21 + lengthPrefixedStringLengthAt(21));
            return readShort();
          }
          
          public int getThunkPCodeOffset()
          {
            symSeek(21 + lengthPrefixedStringLengthAt(21));
            return readInt();
          }
          
          public short getThunkPCodeSegment()
          {
            symSeek(25 + lengthPrefixedStringLengthAt(21));
            return readShort();
          }
          
          public DebugVC50SymbolIterator getBlockParent()
          {
            int offs = getBlockParentOffset();
            if (offs == 0) {
              return null;
            }
            return new DebugVC50SymbolIteratorImpl(COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this, base, size, offs);
          }
          
          public int getBlockParentOffset()
          {
            symSeek(0);
            int offs = readInt();
            if (offs == 0) {
              return 0;
            }
            return base + offs;
          }
          
          public DebugVC50SymbolIterator getBlockEnd()
          {
            symSeek(4);
            int offs = readInt();
            return new DebugVC50SymbolIteratorImpl(COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this, base, size, offs);
          }
          
          public int getBlockEndOffset()
          {
            symSeek(4);
            int offs = readInt();
            if (Assert.ASSERTS_ENABLED) {
              Assert.that(offs != 0, "should not have null end offset for block symbols");
            }
            return base + offs;
          }
          
          public int getBlockLength()
          {
            symSeek(8);
            return readInt();
          }
          
          public int getBlockOffset()
          {
            symSeek(12);
            return readInt();
          }
          
          public short getBlockSegment()
          {
            symSeek(16);
            return readShort();
          }
          
          public String getBlockName()
          {
            return readLengthPrefixedStringAt(18);
          }
          
          public int getLabelOffset()
          {
            symSeek(0);
            return readInt();
          }
          
          public short getLabelSegment()
          {
            symSeek(4);
            return readShort();
          }
          
          public byte getLabelFlags()
          {
            symSeek(6);
            return readByte();
          }
          
          public String getLabelName()
          {
            return readLengthPrefixedStringAt(7);
          }
          
          public int getChangeOffset()
          {
            symSeek(0);
            return readInt();
          }
          
          public short getChangeSegment()
          {
            symSeek(4);
            return readShort();
          }
          
          public short getChangeModel()
          {
            symSeek(6);
            return readShort();
          }
          
          public int getVTableRoot()
          {
            symSeek(0);
            return readInt();
          }
          
          public int getVTablePath()
          {
            symSeek(4);
            return readInt();
          }
          
          public int getVTableOffset()
          {
            symSeek(8);
            return readInt();
          }
          
          public short getVTableSegment()
          {
            symSeek(12);
            return readShort();
          }
          
          public int getRegRelOffset()
          {
            symSeek(0);
            return readInt();
          }
          
          public int getRegRelType()
          {
            symSeek(4);
            return readInt();
          }
          
          public short getRegRelRegister()
          {
            symSeek(8);
            return readShort();
          }
          
          public String getRegRelName()
          {
            return readLengthPrefixedStringAt(10);
          }
          
          public int getLThreadType()
          {
            symSeek(0);
            return readInt();
          }
          
          public int getLThreadOffset()
          {
            symSeek(4);
            return readInt();
          }
          
          public short getLThreadSegment()
          {
            symSeek(8);
            return readShort();
          }
          
          public String getLThreadName()
          {
            return readLengthPrefixedStringAt(10);
          }
          
          private void symSeek(int offsetInSym)
          {
            seek(pos + 4 + offsetInSym);
          }
          
          private int numericLeafLengthAt(int offsetInSym)
          {
            return COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this.numericLeafLengthAt(pos + 4 + offsetInSym);
          }
          
          private int readIntNumericLeafAt(int offsetInSym)
          {
            return COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this.readIntNumericLeafAt(pos + 4 + offsetInSym);
          }
          
          private long readLongNumericLeafAt(int offsetInSym)
          {
            return COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this.readLongNumericLeafAt(pos + 4 + offsetInSym);
          }
          
          private float readFloatNumericLeafAt(int offsetInSym)
          {
            return COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this.readFloatNumericLeafAt(pos + 4 + offsetInSym);
          }
          
          private double readDoubleNumericLeafAt(int offsetInSym)
          {
            return COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this.readDoubleNumericLeafAt(pos + 4 + offsetInSym);
          }
          
          private int lengthPrefixedStringLengthAt(int offsetInSym)
          {
            return COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this.lengthPrefixedStringLengthAt(pos + 4 + offsetInSym);
          }
          
          private String readLengthPrefixedStringAt(int offsetInSym)
          {
            return COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this.readLengthPrefixedStringAt(pos + 4 + offsetInSym);
          }
        }
        
        class DebugVC50TypeIteratorImpl
          implements DebugVC50TypeIterator, DebugVC50TypeLeafIndices, DebugVC50MemberAttributes, DebugVC50TypeEnums
        {
          private DebugVC50SSGlobalTypes parent;
          private int base;
          private int numTypes;
          private int typeIndex;
          private int typeRecordOffset;
          private int typeStringOffset;
          private int typeRecordSize;
          private int typeStringLeaf;
          
          DebugVC50TypeIteratorImpl(DebugVC50SSGlobalTypes parent, int base, int numTypes)
          {
            this(parent, base, numTypes, 0, base);
          }
          
          private DebugVC50TypeIteratorImpl(DebugVC50SSGlobalTypes parent, int base, int numTypes, int curType, int offset)
          {
            this.parent = parent;
            this.base = base;
            this.numTypes = numTypes;
            typeIndex = curType;
            if (!done())
            {
              typeRecordOffset = offset;
              loadTypeRecord();
            }
          }
          
          public boolean done()
          {
            return typeIndex == numTypes;
          }
          
          public void next()
            throws NoSuchElementException
          {
            if (done()) {
              throw new NoSuchElementException();
            }
            typeIndex += 1;
            if (!done())
            {
              typeRecordOffset = parent.getTypeOffset(typeIndex);
              loadTypeRecord();
            }
          }
          
          public short getLength()
          {
            return (short)typeRecordSize;
          }
          
          public int getTypeIndex()
          {
            return COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this.biasTypeIndex(typeIndex);
          }
          
          public int getNumTypes()
          {
            return numTypes;
          }
          
          public boolean typeStringDone()
          {
            return typeStringOffset - typeRecordOffset - 2 >= typeRecordSize;
          }
          
          public void typeStringNext()
            throws NoSuchElementException
          {
            if (typeStringDone()) {
              throw new NoSuchElementException();
            }
            typeStringOffset += typeStringLength();
            loadTypeString();
          }
          
          public int typeStringLeaf()
          {
            return typeStringLeaf;
          }
          
          public int typeStringOffset()
          {
            return typeStringOffset;
          }
          
          public int getModifierIndex()
          {
            typeSeek(2);
            return readInt();
          }
          
          public short getModifierAttribute()
          {
            typeSeek(6);
            return readShort();
          }
          
          public int getPointerType()
          {
            typeSeek(2);
            return readInt();
          }
          
          public int getPointerAttributes()
          {
            typeSeek(6);
            return readInt();
          }
          
          public int getPointerBasedOnTypeIndex()
          {
            typeSeek(10);
            return readInt();
          }
          
          public String getPointerBasedOnTypeName()
          {
            return readLengthPrefixedStringAt(14);
          }
          
          public int getPointerToMemberClass()
          {
            typeSeek(10);
            return readInt();
          }
          
          public short getPointerToMemberFormat()
          {
            typeSeek(14);
            return readShort();
          }
          
          public int getArrayElementType()
          {
            typeSeek(2);
            return readInt();
          }
          
          public int getArrayIndexType()
          {
            typeSeek(6);
            return readInt();
          }
          
          public int getArrayLength()
            throws DebugVC50WrongNumericTypeException
          {
            return readIntNumericLeafAt(10);
          }
          
          public String getArrayName()
          {
            return readLengthPrefixedStringAt(10 + numericLeafLengthAt(10));
          }
          
          public short getClassCount()
          {
            typeSeek(2);
            return readShort();
          }
          
          public short getClassProperty()
          {
            typeSeek(4);
            return readShort();
          }
          
          public int getClassFieldList()
          {
            typeSeek(6);
            return readInt();
          }
          
          public DebugVC50TypeIterator getClassFieldListIterator()
          {
            int index = COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this.unbiasTypeIndex(getClassFieldList());
            int offset = parent.getTypeOffset(index);
            return new DebugVC50TypeIteratorImpl(COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this, parent, base, numTypes, index, offset);
          }
          
          public int getClassDerivationList()
          {
            typeSeek(10);
            return readInt();
          }
          
          public int getClassVShape()
          {
            typeSeek(14);
            return readInt();
          }
          
          public int getClassSize()
            throws DebugVC50WrongNumericTypeException
          {
            return readIntNumericLeafAt(18);
          }
          
          public String getClassName()
          {
            return readLengthPrefixedStringAt(18 + numericLeafLengthAt(18));
          }
          
          public short getUnionCount()
          {
            typeSeek(2);
            return readShort();
          }
          
          public short getUnionProperty()
          {
            typeSeek(4);
            return readShort();
          }
          
          public int getUnionFieldList()
          {
            typeSeek(6);
            return readInt();
          }
          
          public DebugVC50TypeIterator getUnionFieldListIterator()
          {
            int index = COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this.unbiasTypeIndex(getUnionFieldList());
            int offset = parent.getTypeOffset(index);
            return new DebugVC50TypeIteratorImpl(COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this, parent, base, numTypes, index, offset);
          }
          
          public int getUnionSize()
            throws DebugVC50WrongNumericTypeException
          {
            return readIntNumericLeafAt(10);
          }
          
          public String getUnionName()
          {
            return readLengthPrefixedStringAt(10 + numericLeafLengthAt(10));
          }
          
          public short getEnumCount()
          {
            typeSeek(2);
            return readShort();
          }
          
          public short getEnumProperty()
          {
            typeSeek(4);
            return readShort();
          }
          
          public int getEnumType()
          {
            typeSeek(6);
            return readInt();
          }
          
          public int getEnumFieldList()
          {
            typeSeek(10);
            return readInt();
          }
          
          public DebugVC50TypeIterator getEnumFieldListIterator()
          {
            int index = COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this.unbiasTypeIndex(getEnumFieldList());
            int offset = parent.getTypeOffset(index);
            return new DebugVC50TypeIteratorImpl(COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this, parent, base, numTypes, index, offset);
          }
          
          public String getEnumName()
          {
            return readLengthPrefixedStringAt(14);
          }
          
          public int getProcedureReturnType()
          {
            typeSeek(2);
            return readInt();
          }
          
          public byte getProcedureCallingConvention()
          {
            typeSeek(6);
            return readByte();
          }
          
          public short getProcedureNumberOfParameters()
          {
            typeSeek(8);
            return readShort();
          }
          
          public int getProcedureArgumentList()
          {
            typeSeek(10);
            return readInt();
          }
          
          public DebugVC50TypeIterator getProcedureArgumentListIterator()
          {
            int index = COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this.unbiasTypeIndex(getProcedureArgumentList());
            int offset = parent.getTypeOffset(index);
            return new DebugVC50TypeIteratorImpl(COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this, parent, base, numTypes, index, offset);
          }
          
          public int getMFunctionReturnType()
          {
            typeSeek(2);
            return readInt();
          }
          
          public int getMFunctionContainingClass()
          {
            typeSeek(6);
            return readInt();
          }
          
          public int getMFunctionThis()
          {
            typeSeek(10);
            return readInt();
          }
          
          public byte getMFunctionCallingConvention()
          {
            typeSeek(14);
            return readByte();
          }
          
          public short getMFunctionNumberOfParameters()
          {
            typeSeek(16);
            return readShort();
          }
          
          public int getMFunctionArgumentList()
          {
            typeSeek(18);
            return readInt();
          }
          
          public DebugVC50TypeIterator getMFunctionArgumentListIterator()
          {
            int index = COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this.unbiasTypeIndex(getMFunctionArgumentList());
            int offset = parent.getTypeOffset(index);
            return new DebugVC50TypeIteratorImpl(COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.this, parent, base, numTypes, index, offset);
          }
          
          public int getMFunctionThisAdjust()
          {
            typeSeek(22);
            return readInt();
          }
          
          public short getVTShapeCount()
          {
            typeSeek(2);
            return readShort();
          }
          
          public int getVTShapeDescriptor(int i)
          {
            typeSeek(4 + i / 2);
            int val = readByte() & 0xFF;
            if (i % 2 != 0) {
              val >>= 4;
            }
            return val;
          }
          
          public int getBasicArrayType()
          {
            typeSeek(2);
            return readInt();
          }
          
          public short getLabelAddressMode()
          {
            typeSeek(2);
            return readShort();
          }
          
          public int getDimArrayType()
          {
            typeSeek(2);
            return readInt();
          }
          
          public int getDimArrayDimInfo()
          {
            typeSeek(6);
            return readInt();
          }
          
          public String getDimArrayName()
          {
            return readLengthPrefixedStringAt(10);
          }
          
          public int getVFTPathCount()
          {
            typeSeek(2);
            return readInt();
          }
          
          public int getVFTPathBase(int i)
          {
            typeSeek(6 + 4 * i);
            return readInt();
          }
          
          public int getSkipIndex()
          {
            typeSeek(2);
            return readInt();
          }
          
          public int getArgListCount()
          {
            typeSeek(2);
            return readInt();
          }
          
          public int getArgListType(int i)
          {
            typeSeek(6 + 4 * i);
            return readInt();
          }
          
          public int getDefaultArgType()
          {
            typeSeek(2);
            return readInt();
          }
          
          public String getDefaultArgExpression()
          {
            return readLengthPrefixedStringAt(6);
          }
          
          public int getDerivedCount()
          {
            typeSeek(2);
            return readInt();
          }
          
          public int getDerivedType(int i)
          {
            typeSeek(6);
            return readInt();
          }
          
          public int getBitfieldFieldType()
          {
            typeSeek(2);
            return readInt();
          }
          
          public byte getBitfieldLength()
          {
            typeSeek(6);
            return readByte();
          }
          
          public byte getBitfieldPosition()
          {
            typeSeek(7);
            return readByte();
          }
          
          public short getMListAttribute()
          {
            typeSeek(2);
            return readShort();
          }
          
          public int getMListLength()
          {
            return (getLength() - 6 - (isMListIntroducingVirtual() ? 4 : 0)) / 4;
          }
          
          public int getMListType(int i)
          {
            typeSeek(6 + 4 * i);
            return readInt();
          }
          
          public boolean isMListIntroducingVirtual()
          {
            return isIntroducingVirtual(getMListAttribute());
          }
          
          public int getMListVtabOffset()
          {
            typeSeek(6 + 4 * getMListLength());
            return readInt();
          }
          
          public DebugVC50SymbolIterator getRefSym()
          {
            typeSeek(2);
            int len = readShort() & 0xFFFF;
            return new COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.DebugVC50SymbolIteratorImpl(COFFFileParser.COFFFileImpl.COFFHeaderImpl.DebugVC50Impl.thi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114

Further reading...

For more information on Java 1.5 Tiger, you may find Java 1.5 Tiger, A developer's Notebook by D. Flanagan and B. McLaughlin from O'Reilly of interest.

New!JAR listings


Copyright 2006-2019. Infinite Loop Ltd