Changeset 296
- Timestamp:
- 04/21/08 16:01:35 (7 months ago)
- Files:
-
- trunk/ddl/omf/OMFBinary.d (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/ddl/omf/OMFBinary.d
r292 r296 95 95 VByte resolutionIndex; 96 96 97 voidparse(OMFReader reader){97 bool parse(OMFReader reader){ 98 98 reader.get(weakIndex); 99 reader.get(resolutionIndex); 99 100 if (!reader.hasMore) { 101 return false; 102 } else { 103 reader.get(resolutionIndex); 104 return true; 105 } 100 106 } 101 107 } … … 103 109 void parse(inout WKEXT[] externs,OMFReader reader){ 104 110 while(reader.hasMore()){ 105 // HACK: otherwise the parser borks on tango-base-dmd.lib, as of rev 3447 of Tango 106 try { 107 WKEXT ext; 108 ext.parse(reader); 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)) { 109 116 externs ~= ext; 110 } catch (Exception) {} 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 } 111 138 } 112 139 } … … 946 973 OMFReader reader = thisRecord.getOMFReader(); 947 974 948 debug debugLog("record: {0:X} ({1:X}) {2}",thisRecord.recordType,thisRecord.type,recordNameLookup[thisRecord.recordType]);975 debug debugLog("record: {0:X} ({1:X}) data: {2} {3} length: {4}",thisRecord.recordType,thisRecord.type,thisRecord.data,recordNameLookup[thisRecord.recordType], thisRecord.length); 949 976 debug thisRecord.doRecordChecksum(); 950 977 … … 1035 1062 reader.get(commentClass); 1036 1063 1064 debug debugLog("COMENT class: {0:X}", commentClass); 1065 1037 1066 switch(commentClass){ 1038 1067 case 0x9F: // external library name (dependency) … … 1055 1084 } 1056 1085 default: 1057 debug debugLog("unhandled extensionType: %0.2X",extensionType);1086 debug debugLog("unhandled extensionType: {0:X}",extensionType); 1058 1087 } 1059 1088 break; … … 1065 1094 1066 1095 default: 1067 debug debugLog("unhandled commentClass: %0.2X",commentClass);1096 debug debugLog("unhandled commentClass: {0:X}",commentClass); 1068 1097 } 1069 1098 }
