mirror of
https://github.com/samba-team/samba.git
synced 2024-12-24 21:34:56 +03:00
7599f51db9
no complaints. ;)
Basically, instead of ignoring single-line C-style comments in IDL source
files this change allows token.awk to ignore both single- and multi-line
C-style comments.
Chris -)-----
(This used to be commit 34f69f09f8
)
181 lines
3.2 KiB
Awk
181 lines
3.2 KiB
Awk
# tokenise the input file
|
|
|
|
function parse_error(msg) {
|
|
printf("PARSE ERROR: %s\nLine "NR" : "$0"\n", msg);
|
|
exit 1;
|
|
}
|
|
|
|
# ignore multi-line C comments.
|
|
{
|
|
if (t = index($0, "/*")) {
|
|
if (t > 1)
|
|
tmp = substr($0, 1, t - 1)
|
|
else
|
|
tmp = ""
|
|
u = index(substr($0, t + 2), "*/")
|
|
while (u == 0) {
|
|
getline
|
|
t = -1
|
|
u = index($0, "*/")
|
|
}
|
|
if (u <= length($0) - 2)
|
|
$0 = tmp substr($0, t + u + 3)
|
|
else
|
|
$0 = tmp
|
|
}
|
|
}
|
|
|
|
# ignore blank lines
|
|
/^[ \t]*$/ {
|
|
next;
|
|
}
|
|
|
|
/^\#define.*/ {
|
|
split($0,a,"[ \t;]*");
|
|
parse_define(a[2], a[3]);
|
|
next;
|
|
}
|
|
|
|
# ignore comments
|
|
/^[ \t]*\#/ {
|
|
next;
|
|
}
|
|
|
|
/^[ \t]*module/ {
|
|
{if (module!="") parse_error("you can only specify one module name");}
|
|
start_module($2);
|
|
next;
|
|
}
|
|
|
|
{if (module=="") parse_error("you must specify the module name first");}
|
|
|
|
/^[ \t]*option/ {
|
|
set_option($2, $3);
|
|
next;
|
|
}
|
|
|
|
/^[ \t]*typedef struct.*\{/ {
|
|
{if (current_struct!="") parse_error("you cannot have nested structures");}
|
|
start_struct($3);
|
|
next;
|
|
}
|
|
|
|
/^[ \t]*struct.*\{/ {
|
|
{if (current_struct!="") parse_error("you cannot have nested structures");}
|
|
start_struct($2);
|
|
next;
|
|
}
|
|
|
|
/^[ \t]*typedef union.*\{/ {
|
|
{if (current_struct!="") parse_error("this cannot appear inside a structure");}
|
|
split($0,a,"[ \t;()]*");
|
|
start_union_encap(a[4], a[6], a[7], a[8]);
|
|
next;
|
|
}
|
|
|
|
/^[ \t]*void.*\(/ {
|
|
{if (current_struct!="") parse_error("you cannot have nested structures");}
|
|
split($0,a,"[ \t;()]*");
|
|
start_function(a[2], a[3]);
|
|
return_result="void";
|
|
next;
|
|
}
|
|
|
|
/^[ \t]*STATUS.*\(|^[ \t]*void.*\(/ {
|
|
{if (current_struct!="") parse_error("you cannot have nested structures");}
|
|
split($0,a,"[ \t;()]*");
|
|
start_function(a[2], a[3]);
|
|
return_result="STATUS";
|
|
next;
|
|
}
|
|
|
|
{if (current_struct=="") parse_error("this must appear inside a structure");}
|
|
|
|
/^[ \t]*union.*\{/ {
|
|
{if (current_union!="") parse_error("you cannot have nested unions");}
|
|
start_union($2);
|
|
next;
|
|
}
|
|
|
|
/^[ \t]*\[switch_is.*union.*\{/ {
|
|
{if (current_union!="") parse_error("you cannot have nested unions");}
|
|
split($0,a,"[ \t;()]*");
|
|
start_union_notencap(a[3]);
|
|
next;
|
|
}
|
|
|
|
/^[ \t]*case.*;/ {
|
|
{if (current_union=="") parse_error("this must appear inide a union");}
|
|
split($0,a,"[ \t;]*");
|
|
parse_case(a[3],a[4],a[5]);
|
|
next;
|
|
}
|
|
|
|
/^[ \t]*\[case(.*)\].*;/ {
|
|
{if (current_union=="") parse_error("this must appear inide a union");}
|
|
split($0,a,"[ \t;()[\]]*");
|
|
parse_case(a[6],a[8],a[9]);
|
|
next;
|
|
}
|
|
|
|
/^[ \t]*\}$/ {
|
|
{if (current_union=="") parse_error("this must appear inside a union");}
|
|
end_union("");
|
|
next;
|
|
}
|
|
|
|
/^[ \t]*\} .*;/ {
|
|
if (current_union!="") {
|
|
split($2,a,"[ \t;]*");
|
|
end_union(a[1]);
|
|
next;
|
|
}
|
|
}
|
|
|
|
{if (current_union!="") parse_error("this cannot appear inside a union");}
|
|
|
|
/^[ \t]*\};/ {
|
|
end_struct("");
|
|
next;
|
|
}
|
|
|
|
/^[ \t]*\} .*;/ {
|
|
split($2,a,"[ \t;]*");
|
|
end_struct(a[1]);
|
|
next;
|
|
}
|
|
|
|
/^[ \t]*\);/ {
|
|
end_function();
|
|
return_result="";
|
|
next;
|
|
}
|
|
|
|
/^.*size_is.*\*.*;/ {
|
|
split($0,a,"[ \t;()]*");
|
|
add_sizeis_array(a[3], a[5], a[6]);
|
|
next;
|
|
}
|
|
|
|
/^.*;/ {
|
|
split($0,a,"[ \t;]*");
|
|
add_struct_elem(a[2], a[3]);
|
|
next;
|
|
}
|
|
|
|
/^[\t ]*void/ {
|
|
next;
|
|
}
|
|
|
|
/^[ \t]*\[.*\].*/ {
|
|
split($0,a,"[ \t;]*");
|
|
split(a[4], b, "[,]");
|
|
add_function_param(a[2], a[3], b[1]);
|
|
next;
|
|
}
|
|
|
|
{
|
|
parse_error("Unknown construct.");
|
|
}
|
|
|