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.