Changeset 51
- Timestamp:
- 11/24/08 19:56:46 (4 years ago)
- Files:
-
- branches/D1.0/src/compiler/dmd/cover.d (modified) (13 diffs)
- trunk/src/compiler/dmd/cover.d (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/D1.0/src/compiler/dmd/cover.d
r36 r51 46 46 struct Cover 47 47 { 48 char[]filename;48 string filename; 49 49 BitArray valid; 50 50 uint[] data; … … 52 52 53 53 Cover[] gdata; 54 char[]srcpath;55 char[]dstpath;54 string srcpath; 55 string dstpath; 56 56 bool merge; 57 57 } … … 64 64 * pathname = The new path name. 65 65 */ 66 extern (C) void dmd_coverSourcePath( char[]pathname )66 extern (C) void dmd_coverSourcePath( string pathname ) 67 67 { 68 68 srcpath = pathname; … … 76 76 * pathname = The new path name. 77 77 */ 78 extern (C) void dmd_coverDestPath( char[]pathname )78 extern (C) void dmd_coverDestPath( string pathname ) 79 79 { 80 80 dstpath = pathname; … … 103 103 * data = ??? 104 104 */ 105 extern (C) void _d_cover_register( char[]filename, BitArray valid, uint[] data )105 extern (C) void _d_cover_register( string filename, BitArray valid, uint[] data ) 106 106 { 107 107 Cover c; … … 132 132 if( merge ) 133 133 { 134 if( !readFile( c.filename ~ ".lst", lstbuf ) )134 if( !readFile( addExt( baseName( c.filename ), "lst" ), lstbuf ) ) 135 135 break; 136 136 splitLines( lstbuf, lstlines ); … … 161 161 } 162 162 163 FILE* flst = fopen( ( c.filename ~ ".lst").ptr, "wb" );163 FILE* flst = fopen( (addExt( baseName( c.filename ), "lst\0" )).ptr, "wb" ); 164 164 165 165 if( !flst ) … … 206 206 207 207 208 char[] appendFN( char[] path, char[]name )208 string appendFN( string path, string name ) 209 209 { 210 210 version( Windows ) … … 213 213 const char sep = '/'; 214 214 215 char[]dest = path;215 auto dest = path; 216 216 217 217 if( dest && dest[$ - 1] != sep ) … … 222 222 223 223 224 bool readFile( char[] name, inout char[] buf ) 224 string baseName( string name, string ext = null ) 225 { 226 auto i = name.length; 227 for( ; i > 0; --i ) 228 { 229 version( Windows ) 230 { 231 if( name[i - 1] == ':' || name[i - 1] == '\\' ) 232 break; 233 } 234 else version( Posix ) 235 { 236 if( name[i - 1] == '/' ) 237 break; 238 } 239 } 240 return chomp( name[i .. $], ext ? ext : "" ); 241 } 242 243 244 string getExt( string name ) 245 { 246 auto i = name.length; 247 248 while( i > 0 ) 249 { 250 if( name[i - 1] == '.' ) 251 return name[i .. $]; 252 --i; 253 version( Windows ) 254 { 255 if( name[i] == ':' || name[i] == '\\' ) 256 break; 257 } 258 else version( Posix ) 259 { 260 if( name[i] == '/' ) 261 break; 262 } 263 } 264 return null; 265 } 266 267 268 string addExt( string name, string ext ) 269 { 270 auto existing = getExt( name ); 271 272 if( existing.length == 0 ) 273 { 274 if( name.length && name[$ - 1] == '.' ) 275 name ~= ext; 276 else 277 name = name ~ "." ~ ext; 278 } 279 else 280 { 281 name = name[0 .. $ - existing.length] ~ ext; 282 } 283 return name; 284 } 285 286 287 string chomp( string str, string delim = null ) 288 { 289 if( delim is null ) 290 { 291 auto len = str.length; 292 293 if( len ) 294 { 295 auto c = str[len - 1]; 296 297 if( c == '\r' ) 298 --len; 299 else if( c == '\n' && str[--len - 1] == '\r' ) 300 --len; 301 } 302 return str[0 .. len]; 303 } 304 else if( str.length >= delim.length ) 305 { 306 if( str[$ - delim.length .. $] == delim ) 307 return str[0 .. $ - delim.length]; 308 } 309 return str; 310 } 311 312 313 bool readFile( string name, inout char[] buf ) 225 314 { 226 315 version( Windows ) … … 317 406 318 407 319 char[] expandTabs( char[] str ing, int tabsize = 8 )408 char[] expandTabs( char[] str, int tabsize = 8 ) 320 409 { 321 410 const dchar LS = '\u2028'; // UTF line separator … … 323 412 324 413 bool changes = false; 325 char[] result = str ing;414 char[] result = str; 326 415 int column; 327 416 int nspaces; 328 417 329 foreach( size_t i, dchar c; str ing)418 foreach( size_t i, dchar c; str ) 330 419 { 331 420 switch( c ) … … 337 426 changes = true; 338 427 result = null; 339 result.length = str ing.length + nspaces - 1;428 result.length = str.length + nspaces - 1; 340 429 result.length = i + nspaces; 341 result[0 .. i] = str ing[0 .. i];430 result[0 .. i] = str[0 .. i]; 342 431 result[i .. i + nspaces] = ' '; 343 432 } trunk/src/compiler/dmd/cover.d
r50 r51 161 161 } 162 162 163 FILE* flst = fopen( (addExt( baseName( c.filename ), "lst " )).ptr, "wb" );163 FILE* flst = fopen( (addExt( baseName( c.filename ), "lst\0" )).ptr, "wb" ); 164 164 165 165 if( !flst ) … … 229 229 version( Windows ) 230 230 { 231 if( name v[i - 1] == ':' || name[i - 1] == '\\' )231 if( name[i - 1] == ':' || name[i - 1] == '\\' ) 232 232 break; 233 233 } … … 245 245 { 246 246 auto i = name.length; 247 247 248 248 while( i > 0 ) 249 249 { … … 269 269 { 270 270 auto existing = getExt( name ); 271 271 272 272 if( existing.length == 0 ) 273 273 { … … 290 290 { 291 291 auto len = str.length; 292 292 293 293 if( len ) 294 294 { … … 461 461 return result; 462 462 } 463
