Changeset 120

Show
Ignore:
Timestamp:
12/27/06 17:27:00 (2 years ago)
Author:
Gregor
Message:

bcd.gen/bcd/gen/bcdgen.d: Support for *L style numbers in #define and support for #define strings.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/bcd.gen/bcd/gen/bcdgen.d

    r119 r120  
    275275    // gccxml options 
    276276    char[] gccxmlopts = templates ~  
    277     toString(getenv(outputC ? "CFLAGS" : "CXXFLAGS")); 
     277    toString(getenv(toStringz(outputC ? "CFLAGS" : "CXXFLAGS"))); 
    278278     
    279279    // preprocess it 
     
    358358            if (hasdot) return false; 
    359359            hasdot = true; 
     360        } else if (c == 'L') { 
     361            if (i != str.length - 1) return false; 
    360362        } else { 
    361363            return false; 
     
    21282130            } else if (lns[0] == "#define" && inOurFile) { 
    21292131                // turn the #define into a const int or const double 
    2130                 if (lns.length >= 3 && 
    2131                     isNumeric(lns[2])) { 
    2132                     // int or double? 
    2133                     if (find(lns[2], '.') != -1 || 
    2134                         find(lns[2], 'e') != -1 || 
    2135                         find(lns[2], 'E') != -1) { 
    2136                         dhead ~= "const double " ~ safeName(lns[1]) ~ 
    2137                         " = " ~ lns[2] ~ ";\n"; 
    2138                     } else { 
    2139                         dhead ~= "const int " ~ safeName(lns[1]) ~ 
    2140                         " = " ~ lns[2] ~ ";\n"; 
     2132                if (lns.length >= 3) { 
     2133                    if (isNumeric(lns[2])) { 
     2134                        /* isNumeric can accept ending with 'L', but long is 
     2135                         * (usually) int, so strip it */ 
     2136                        if (lns[2][$-1] == 'L') lns[2] = lns[2][0..$-1]; 
     2137                         
     2138                        // int or double? 
     2139                        if (find(lns[2], '.') != -1 || 
     2140                            find(lns[2], 'e') != -1 || 
     2141                            find(lns[2], 'E') != -1) { 
     2142                            dhead ~= "const double " ~ safeName(lns[1]) ~ 
     2143                                " = " ~ lns[2] ~ ";\n"; 
     2144                        } else { 
     2145                            dhead ~= "const int " ~ safeName(lns[1]) ~ 
     2146                                " = " ~ lns[2] ~ ";\n"; 
     2147                        } 
     2148                    } else if (lns[2].length >= 2 && 
     2149                               lns[2][0] == '"' && lns[2][$-1] == '"') { 
     2150                        // a constant string 
     2151                        dhead ~= "const char[] " ~ safeName(lns[1]) ~ 
     2152                            " = " ~ lns[2] ~ ";\n"; 
    21412153                    } 
    21422154                }