1
0
Fork 0

scripts: kernel-doc: handle nested struct function arguments

Function arguments are different than usual ones. So, an
special logic is needed in order to handle such arguments
on nested structs.

Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
hifive-unleashed-5.1
Mauro Carvalho Chehab 2017-12-18 10:30:16 -02:00 committed by Jonathan Corbet
parent 151c468b44
commit 7c0d7e87a1
1 changed files with 26 additions and 12 deletions

View File

@ -1041,18 +1041,32 @@ sub dump_struct($$) {
$id =~ s/^\*+//;
foreach my $arg (split /;/, $content) {
next if ($arg =~ m/^\s*$/);
my $type = $arg;
my $name = $arg;
$type =~ s/\s\S+$//;
$name =~ s/.*\s//;
$name =~ s/[:\[].*//;
$name =~ s/^\*+//;
next if (($name =~ m/^\s*$/));
if ($id =~ m/^\s*$/) {
# anonymous struct/union
$newmember .= "$type $name;";
if ($arg =~ m/^([^\(]+\(\*?\s*)([\w\.]*)(\s*\).*)/) {
# pointer-to-function
my $type = $1;
my $name = $2;
my $extra = $3;
next if (!$name);
if ($id =~ m/^\s*$/) {
# anonymous struct/union
$newmember .= "$type$name$extra;";
} else {
$newmember .= "$type$id.$name$extra;";
}
} else {
$newmember .= "$type $id.$name;";
my $type = $arg;
my $name = $arg;
$type =~ s/\s\S+$//;
$name =~ s/.*\s+//;
$name =~ s/[:\[].*//;
$name =~ s/^\*+//;
next if (($name =~ m/^\s*$/));
if ($id =~ m/^\s*$/) {
# anonymous struct/union
$newmember .= "$type $name;";
} else {
$newmember .= "$type $id.$name;";
}
}
}
$members =~ s/(struct|union)([^{};]+){([^{}]*)}([^{}\;]*)\;/$newmember/;
@ -1250,7 +1264,7 @@ sub create_parameterlist($$$$) {
} elsif ($arg =~ m/\(.+\)\s*\(/) {
# pointer-to-function
$arg =~ tr/#/,/;
$arg =~ m/[^\(]+\(\*?\s*(\w*)\s*\)/;
$arg =~ m/[^\(]+\(\*?\s*([\w\.]*)\s*\)/;
$param = $1;
$type = $arg;
$type =~ s/([^\(]+\(\*?)\s*$param/$1/;