Hi Mauro,

this 'else' addition seems a bit spooky to me. As I commented in patch 09/13
may it helps when you look at 

  https://github.com/return42/linuxdoc/blob/master/linuxdoc/kernel_doc.py#L2499

which is IMO a bit more clear.

-- Markus --

> Am 27.09.2017 um 23:10 schrieb Mauro Carvalho Chehab 
> <mche...@s-opensource.com>:
> 
> 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 <mche...@s-opensource.com>
> ---
> scripts/kernel-doc | 38 ++++++++++++++++++++++++++------------
> 1 file changed, 26 insertions(+), 12 deletions(-)
> 
> diff --git a/scripts/kernel-doc b/scripts/kernel-doc
> index 713608046d3a..376365d41718 100755
> --- a/scripts/kernel-doc
> +++ b/scripts/kernel-doc
> @@ -1015,18 +1015,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/;
> @@ -1215,7 +1229,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/;
> -- 
> 2.13.5
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-doc" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe linux-doc" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to