summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2020-09-15 17:10:44 +0200
committerRichard Levitte <levitte@openssl.org>2020-09-16 18:07:24 +0200
commitfc661b50dfedfed1b067782665e0452ed964c22c (patch)
treeec64b8bc493853c80cd1da4ad6ba1764197a9b5c
parent4343a4187d28d719006642a610afea6e186832bf (diff)
OpenSSL::ParseC: recognise inline function bodies
Function bodies in headers weren't a thing when OpenSSL::ParseC was created, at least not as clearly as they are nowadays. This module must evolve to recognise them (and promptly ignore them). Reviewed-by: Matt Caswell <matt@openssl.org> Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org> (Merged from https://github.com/openssl/openssl/pull/12882)
-rw-r--r--util/perl/OpenSSL/ParseC.pm9
1 files changed, 6 insertions, 3 deletions
diff --git a/util/perl/OpenSSL/ParseC.pm b/util/perl/OpenSSL/ParseC.pm
index c5be9b8c2a..b2ac909dc1 100644
--- a/util/perl/OpenSSL/ParseC.pm
+++ b/util/perl/OpenSSL/ParseC.pm
@@ -601,6 +601,7 @@ my @chandlers = (
massager => sub { return (); }
},
# Function returning function pointer declaration
+ # This sort of declaration may have a body (inline functions, for example)
{ regexp => qr/(?:(typedef)\s?)? # Possible typedef ($1)
((?:\w|\*|\s)*?) # Return type ($2)
\s? # Possible space
@@ -609,14 +610,15 @@ my @chandlers = (
(\(.*\)) # Parameters ($4)
\)>>>
<<<(\(.*\))>>> # F.p. parameters ($5)
- ;
+ (?:<<<\{.*\}>>>|;) # Body or semicolon
/x,
massager => sub {
- return ("", $3, 'F', "", "$2(*$4)$5", all_conds())
+ return ("", $3, 'T', "", "$2(*$4)$5", all_conds())
if defined $1;
return ("", $3, 'F', "$2(*)$5", "$2(*$4)$5", all_conds()); }
},
# Function pointer declaration, or typedef thereof
+ # This sort of declaration never has a function body
{ regexp => qr/(?:(typedef)\s?)? # Possible typedef ($1)
((?:\w|\*|\s)*?) # Return type ($2)
<<<\(\*([[:alpha:]_]\w*)\)>>> # T.d. or var name ($3)
@@ -630,12 +632,13 @@ my @chandlers = (
},
},
# Function declaration, or typedef thereof
+ # This sort of declaration may have a body (inline functions, for example)
{ regexp => qr/(?:(typedef)\s?)? # Possible typedef ($1)
((?:\w|\*|\s)*?) # Return type ($2)
\s? # Possible space
([[:alpha:]_]\w*) # Function name ($3)
<<<(\(.*\))>>> # Parameters ($4)
- ;
+ (?:<<<\{.*\}>>>|;) # Body or semicolon
/x,
massager => sub {
return ("", $3, 'T', "", "$2$4", all_conds())