Changeset 51

Show
Ignore:
Timestamp:
11/24/08 19:56:46 (4 years ago)
Author:
sean
Message:

* Small fix to a typo in trunk/cover.d
* Merged changes from trunk/cover to branches/D1.0/cover

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/D1.0/src/compiler/dmd/cover.d

    r36 r51  
    4646    struct Cover 
    4747    { 
    48         char[]      filename; 
     48        string      filename; 
    4949        BitArray    valid; 
    5050        uint[]      data; 
     
    5252 
    5353    Cover[] gdata; 
    54     char[]  srcpath; 
    55     char[]  dstpath; 
     54    string  srcpath; 
     55    string  dstpath; 
    5656    bool    merge; 
    5757} 
     
    6464 *  pathname = The new path name. 
    6565 */ 
    66 extern (C) void dmd_coverSourcePath( char[] pathname ) 
     66extern (C) void dmd_coverSourcePath( string pathname ) 
    6767{ 
    6868    srcpath = pathname; 
     
    7676 *  pathname = The new path name. 
    7777 */ 
    78 extern (C) void dmd_coverDestPath( char[] pathname ) 
     78extern (C) void dmd_coverDestPath( string pathname ) 
    7979{ 
    8080    dstpath = pathname; 
     
    103103 *  data     = ??? 
    104104 */ 
    105 extern (C) void _d_cover_register( char[] filename, BitArray valid, uint[] data ) 
     105extern (C) void _d_cover_register( string filename, BitArray valid, uint[] data ) 
    106106{ 
    107107    Cover c; 
     
    132132        if( merge ) 
    133133        { 
    134             if( !readFile( c.filename ~ ".lst", lstbuf ) ) 
     134            if( !readFile( addExt( baseName( c.filename ), "lst" ), lstbuf ) ) 
    135135                break; 
    136136            splitLines( lstbuf, lstlines ); 
     
    161161        } 
    162162 
    163         FILE* flst = fopen( (c.filename ~ ".lst").ptr, "wb" ); 
     163        FILE* flst = fopen( (addExt( baseName( c.filename ), "lst\0" )).ptr, "wb" ); 
    164164 
    165165        if( !flst ) 
     
    206206 
    207207 
    208 char[] appendFN( char[] path, char[] name ) 
     208string appendFN( string path, string name ) 
    209209{ 
    210210    version( Windows ) 
     
    213213        const char sep = '/'; 
    214214 
    215     char[] dest = path; 
     215    auto dest = path; 
    216216 
    217217    if( dest && dest[$ - 1] != sep ) 
     
    222222 
    223223 
    224 bool readFile( char[] name, inout char[] buf ) 
     224string 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 
     244string 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 
     268string 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 
     287string 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 
     313bool readFile( string name, inout char[] buf ) 
    225314{ 
    226315    version( Windows ) 
     
    317406 
    318407 
    319 char[] expandTabs( char[] string, int tabsize = 8 ) 
     408char[] expandTabs( char[] str, int tabsize = 8 ) 
    320409{ 
    321410    const dchar LS = '\u2028'; // UTF line separator 
     
    323412 
    324413    bool changes = false; 
    325     char[] result = string
     414    char[] result = str
    326415    int column; 
    327416    int nspaces; 
    328417 
    329     foreach( size_t i, dchar c; string
     418    foreach( size_t i, dchar c; str
    330419    { 
    331420        switch( c ) 
     
    337426                    changes = true; 
    338427                    result = null; 
    339                     result.length = string.length + nspaces - 1; 
     428                    result.length = str.length + nspaces - 1; 
    340429                    result.length = i + nspaces; 
    341                     result[0 .. i] = string[0 .. i]; 
     430                    result[0 .. i] = str[0 .. i]; 
    342431                    result[i .. i + nspaces] = ' '; 
    343432                } 
  • trunk/src/compiler/dmd/cover.d

    r50 r51  
    161161        } 
    162162 
    163         FILE* flst = fopen( (addExt( baseName( c.filename ), "lst" )).ptr, "wb" ); 
     163        FILE* flst = fopen( (addExt( baseName( c.filename ), "lst\0" )).ptr, "wb" ); 
    164164 
    165165        if( !flst ) 
     
    229229        version( Windows ) 
    230230        { 
    231             if( namev[i - 1] == ':' || name[i - 1] == '\\' ) 
     231            if( name[i - 1] == ':' || name[i - 1] == '\\' ) 
    232232                break; 
    233233        } 
     
    245245{ 
    246246    auto i = name.length; 
    247      
     247 
    248248    while( i > 0 ) 
    249249    { 
     
    269269{ 
    270270    auto  existing = getExt( name ); 
    271      
     271 
    272272    if( existing.length == 0 ) 
    273273    { 
     
    290290    { 
    291291        auto len = str.length; 
    292          
     292 
    293293        if( len ) 
    294294        { 
     
    461461    return result; 
    462462} 
    463