Changeset 237 in svn for branches/1.0/mkstructinfo.awk


Ignore:
Timestamp:
2006-10-11T05:49:59+02:00 (9 years ago)
Author:
Xuefer
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.