regen/embed.pl: Allow inline funcs to be named Perl_foo
authorKarl Williamson <khw@cpan.org>
Fri, 26 Aug 2016 21:25:20 +0000 (15:25 -0600)
committerKarl Williamson <khw@cpan.org>
Thu, 1 Sep 2016 02:32:34 +0000 (20:32 -0600)
When inlining an existing public function whose name begins with Perl_,
it's best to keep that name, in case someone is calling it that way.
Prior to this commit, the name had to be changed to S_foo.

embed.fnc
regen/embed.pl

index 38e8cf9..a8aef46 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
 :
 :   i  Static inline: function in source code has a S_ prefix:
 :
-:         proto.h: function is declared as S_foo rather than foo,
+:         proto.h: function is declared as S_foo rather than foo unless the 'p'
+:                 flag is also given in which case 'Perl_foo' is used,
 :                PERL_STATIC_INLINE is added to declaration;
-:         embed.h: "#define foo S_foo" entries added
+:         embed.h: "#define foo S_foo" or Perl_foo entries added
 :
 :   M  May change:
 :
index 6007d92..342e017 100755 (executable)
@@ -44,8 +44,8 @@ sub full_name ($$) { # Returns the function name with potentially the
                     # prefixes 'S_' or 'Perl_'
     my ($func, $flags) = @_;
 
-    return "S_$func" if $flags =~ /[si]/;
     return "Perl_$func" if $flags =~ /p/;
+    return "S_$func" if $flags =~ /[si]/;
     return $func;
 }
 
@@ -92,12 +92,8 @@ my ($embed, $core, $ext, $api) = setup_embed();
            warn "It is nonsensical to require the return value of a void function ($plain_func) to be checked";
        }
 
-       my $scope_type_flag_count = 0;
-       $scope_type_flag_count++ if $flags =~ /s/;
-       $scope_type_flag_count++ if $flags =~ /i/;
-       $scope_type_flag_count++ if $flags =~ /p/;
-       warn "$plain_func: i, p, and s flags are all mutually exclusive"
-                                                  if $scope_type_flag_count > 1;
+       warn "$plain_func: s flag is mutually exclusive from the i and p plags"
+                                           if $flags =~ /s/ && $flags =~ /[ip]/;
        my $splint_flags = "";
        if ( $SPLINT && !$commented_out ) {
            $splint_flags .= '/*@noreturn@*/ ' if $never_returns;