Changeset 237


Ignore:
Timestamp:
2006-10-11T05:49:59+02:00 (8 years ago)
Author:
moo
Message:

trunk->1.0: merged [169] [187], fix the parsing of c headers to build on some rare header

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/1.0/mkstructinfo.awk

    r52 r237  
    33BEGIN { 
    44    brace = 0; 
     5    incomment = 0; 
    56    buffer_len = 0; 
    67} 
     8 
     9# multiline comment handling 
     10{ 
     11    # removes one line comment 
     12    gsub(/\/\*(.+?)\*\//, " "); 
     13} 
     14/\*\// { 
     15    if (incomment) { 
     16        sub(/.*\*\//, ""); 
     17        incomment = 0; 
     18    } 
     19} 
     20incomment { 
     21    next; 
     22} 
     23/\/\*/ { 
     24    sub(/\/\*.*/, ""); 
     25    incomment = 1; 
     26    # fall through 
     27} 
     28 
     29# skip file/line mark here to be faster 
     30/^#/ { 
     31    next; 
     32} 
     33 
    734/^}.*;/ { 
    835    if (instruct) { 
     
    5178{ 
    5279    if (brace == 1 && instruct) { 
     80        gsub(/(^[\t ]+|[\t ]+$)/, ""); # trim whitespaces 
    5381        sub(/.*[{}]/, ""); 
    5482        gsub(/\[[^\]]+\]/, ""); # ignore [...] 
     
    6391        } 
    6492        else { 
     93            # process normal variables 
     94 
    6595            # ignore any ()s 
    6696            while (gsub(/(\([^)]*\))/, "")) { 
     
    6999                next; 
    70100            } 
     101            # unsigned int *a,  b; int c; 
    71102            gsub(/[*]/, " "); 
     103            # unsigned int a,  b; int c; 
    72104            gsub(/ +/, " "); 
     105            # unsigned int a, b; int c; 
    73106            gsub(/ *[,;]/, ";"); 
     107            # unsigned int a; b; int c; 
    74108            if (!match($0, /;/)) { 
    75109                next; 
    76110            } 
     111            # print "=DEBUG=" $0 "=="; 
    77112            split($0, chunks, ";"); 
    78             # get var of "int *var, var;" etc 
    79             for (i in chunks) { 
     113            # [unsigned int a, b, c] 
     114 
     115            for (i = 1; i in chunks; i ++) { 
    80116                if (chunks[i] == "") { 
    81117                    delete chunks[i]; 
     
    83119                } 
    84120                split(chunks[i], pieces, " "); 
     121                # [unsigned, int, a] 
     122                # [b] 
     123                # [c] 
    85124 
    86                 for (j in pieces) { 
     125                last_piece = ""; 
     126                for (j = 1; j in pieces; j ++) { 
    87127                    last_piece = pieces[j]; 
    88                     delete pieces[i]; 
     128                    delete pieces[j]; 
    89129                } 
    90130                if (last_piece == "") { 
    91                     print "=====" chunks[i]; 
     131                    # print "=ERROR=" chunks[i] "=="; 
     132                    delete chunks[i]; 
     133                    continue; 
    92134                } 
     135                # a 
     136                # b 
     137                # c 
     138 
    93139                buffer[buffer_len] = last_piece; 
    94140                buffer_len ++; 
    95                 delete chunks[i]; 
     141                delete chunks[i] 
    96142            } 
     143            last_piece = ""; 
    97144        } 
    98145        next; 
     
    105152    next; 
    106153} 
    107 /^typedef struct .*\{/ { 
     154/^typedef struct .*\{[^}]*$/ { 
    108155    brace = 1; 
    109156    instruct = 1; 
Note: See TracChangeset for help on using the changeset viewer.