Changeset 891 for trunk/mkstructinfo.awk


Ignore:
Timestamp:
2012-04-06T05:54:58+02:00 (3 years ago)
Author:
moo
Message:

fix #275: struct parser for one line struct definition

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/mkstructinfo.awk

    r837 r891  
    1010    printf "define(`COUNTOF_%s', `%s')\n", structname, COUNTOF[structname];
    1111    printf "define(`SIZEOF_%s', `(  %s  )')\n", structname, SIZEOF[structname];
     12}
     13function countBrace(text,  len, i, char, braceCount) {
     14    len = length(text);
     15    braceCount = 0;
     16    for (i = 1; i <= len; ++i) {
     17        char = substr(text, i, 1);
     18        if (char == "{") {
     19            braceCount = braceCount + 1;
     20        }
     21        else if (char == "}") {
     22            braceCount = braceCount - 1;
     23        }
     24    }
     25    return braceCount;
    1226}
    1327
     
    7690}
    7791
    78 /.\{/ {
    79     brace = brace + 1;
    80 }
    81 /.}/ {
    82     brace = brace - 1;
     92/.[{}]/ {
     93    brace += countBrace($0);
    8394}
    8495
     
    170181}
    171182/^typedef struct .*\{[^}]*$/ {
    172     brace = 1;
    173     instruct = 1;
    174     next;
    175 }
    176 
    177 /^struct .*\{/ {
    178     instruct = $2;
    179     brace = 1;
    180     next;
    181 }
     183    brace = countBrace($0);
     184    if (brace > 0) {
     185        instruct = 1;
     186    }
     187    else {
     188        brace = 0;
     189        instruct = 0;
     190    }
     191
     192    for (i in buffer) {
     193        delete buffer[i];
     194    }
     195    next;
     196}
     197
     198/^struct .*\{.*/ {
     199    brace = countBrace($0);
     200    if (brace > 0) {
     201        instruct = $2;
     202    }
     203    else {
     204        brace = 0;
     205        instruct = 0;
     206    }
     207
     208    for (i in buffer) {
     209        delete buffer[i];
     210    }
     211    next;
     212}
Note: See TracChangeset for help on using the changeset viewer.