diff options
author | Andrew Tridgell <tridge@samba.org> | 2000-05-15 13:41:05 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2000-05-15 13:41:05 +0000 |
commit | 15646ebd84ee4e63a251c87800677f3dd2ae6971 (patch) | |
tree | 9b51d140c7ba869982c6eb526eccf7677b257398 /source/aparser/dump.awk | |
parent | 839ab0e33255be37d72c113c2e09baaa34d50ce4 (diff) | |
download | samba-15646ebd84ee4e63a251c87800677f3dd2ae6971.tar.gz samba-15646ebd84ee4e63a251c87800677f3dd2ae6971.tar.xz samba-15646ebd84ee4e63a251c87800677f3dd2ae6971.zip |
started update to handle arbitrary arrays
note: this code is currently broken.
Diffstat (limited to 'source/aparser/dump.awk')
-rw-r--r-- | source/aparser/dump.awk | 61 |
1 files changed, 35 insertions, 26 deletions
diff --git a/source/aparser/dump.awk b/source/aparser/dump.awk index 0a72bb84143..65e5675513e 100644 --- a/source/aparser/dump.awk +++ b/source/aparser/dump.awk @@ -1,39 +1,50 @@ # dump the current parse tree -function dump_union(f, struct_num, union, - LOCAL, i) + +function element_string(elnum, + LOCAL, elem) +{ + elem = elements[elnum, "elem"]; + if (elements[elnum, "ptr"]=="1") elem="*"elem; + if (elements[elnum, "array_len"]!="") + elem=elem"["elements[elnum, "array_len"]"]"; + if (elements[elnum, "switch"]!="") + elem=elem"["elements[elnum, "switch"]"]"; + return elem; +} + +function dump_element(f, elnum, + LOCAL, elem, type) { - xprintf(f,"\tunion %s %s {\n", - structs[struct_num, "unions", union, "switch"], - union); - for (i=0;i<structs[struct_num, "unions", union, "num_elems"];i++) { - xprintf(f,"\t\tcase %d %s %s;\n", - structs[struct_num, "unions", union, i, "value"], - structs[struct_num, "unions", union, i, "type"], - structs[struct_num, "unions", union, i, "elem"]); + type = elements[elnum, "type"]; + case = elements[elnum, "case"]; + elem = element_string(elnum); + if (case != "") { + xprintf(f,"\t\tcase %d %s %s;\n", case, type, elem); + } else { + xprintf(f,"\t%s %s;\n", type, elem); } - xprintf(f,"\t}\n"); } -function dump_array(f, struct_num, elem_num, +function dump_union(f, elnum, LOCAL, i) { - xprintf(f,"\t{%s} %s %s;\n", - structs[struct_num, elem_num, "array_len"], - structs[struct_num, elem_num, "type"], - structs[struct_num, elem_num, "elem"]); + xprintf(f,"\tunion %s {\n", element_string(elnum)); + for (i=0;i<unions[elnum, "num_elems"];i++) { + dump_element(f, unions[elnum, i]); + } + xprintf(f,"\t}\n"); } -function dump_elem(f, struct_num, elem_num) +function dump_elem(f, struct_num, elem_num, + LOCAL, enum) { - if (structs[struct_num, elem_num, "type"] == "union") { - dump_union(f, struct_num, structs[struct_num, elem_num, "elem"]); - } else if (structs[struct_num, elem_num, "array_len"]) { - dump_array(f, struct_num, elem_num); + elnum = structs[struct_num, elem_num]; + + if (elements[elnum, "type"] == "union") { + dump_union(f, elnum); } else { - xprintf(f,"\t%s %s;\n", - structs[struct_num, elem_num, "type"], - structs[struct_num, elem_num, "elem"]); + dump_element(f, elnum); } } @@ -51,5 +62,3 @@ function dump_structs(f, NIL, } xprintf(f,"/* end dump */\n\n"); } - - |