summaryrefslogtreecommitdiffstats
path: root/source/aparser/dump.awk
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2000-05-15 13:41:05 +0000
committerAndrew Tridgell <tridge@samba.org>2000-05-15 13:41:05 +0000
commit15646ebd84ee4e63a251c87800677f3dd2ae6971 (patch)
tree9b51d140c7ba869982c6eb526eccf7677b257398 /source/aparser/dump.awk
parent839ab0e33255be37d72c113c2e09baaa34d50ce4 (diff)
downloadsamba-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.awk61
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");
}
-
-