Changeset 297

Show
Ignore:
Timestamp:
04/21/08 20:03:22 (9 months ago)
Author:
h3r3tic
Message:

fixed WKEXT and COMDEF index types; thanks, Walter!

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/ddl/omf/OMFBinary.d

    r296 r297  
    9292**/ 
    9393struct WKEXT{ 
    94     VByte weakIndex; 
    95     VByte resolutionIndex; 
    96              
    97     bool parse(OMFReader reader){ 
     94    OMFIndex weakIndex; 
     95    OMFIndex resolutionIndex; 
     96             
     97    void parse(OMFReader reader){ 
    9898        reader.get(weakIndex); 
    99          
    100         if (!reader.hasMore) { 
    101             return false; 
    102         } else { 
    103             reader.get(resolutionIndex); 
    104             return true; 
    105         } 
     99        reader.get(resolutionIndex); 
    106100    } 
    107101} 
    108102 
    109103void parse(inout WKEXT[] externs,OMFReader reader){ 
    110     while(reader.hasMore()){ 
    111         ubyte b; 
    112         reader.peek(b); 
    113         debug debugLog("parse() -> {} / {} ; peek = {:X}"\n, reader.getPosition, reader.getData.length, cast(int)b); 
    114         WKEXT ext;       
    115         if (ext.parse(reader)) { 
    116             externs ~= ext; 
    117         } else { 
    118             // it seems that OPTLINK can put two weakIndex values into one WKEXT 
    119             // they both map to the field that resolutionIndex that follows 
    120             // thus, if there's only one byte left in the reader, the one byte is a resolutionIndex, 
    121             // while the previous two are both weakIndex 
    122             // 
    123             // A query to Walter about this stuff is pending an answer 
    124             // 
    125             // - h3r3tic 
    126              
    127             if (externs.length < 1) { 
    128                 throw new Exception("WKEXT record is corrupt"); 
    129             } 
    130              
    131             WKEXT* prev = &externs[$-1]; 
    132             ext.resolutionIndex = ext.weakIndex; 
    133             ext.weakIndex = prev.resolutionIndex; 
    134             prev.resolutionIndex = ext.resolutionIndex; 
    135              
    136             externs ~= ext; 
    137         } 
     104    while (reader.hasMore()){ 
     105        WKEXT ext; 
     106        ext.parse(reader); 
     107        externs ~= ext; 
    138108    } 
    139109} 
     
    649619struct COMDEF{ 
    650620    LString communalName; 
    651     VByte typeIndex; 
     621    OMFIndex typeIndex; 
    652622    ubyte length; 
    653623    ubyte dataType;