This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
embed.fnc: Add inline function capability
authorKarl Williamson <public@khwilliamson.com>
Sat, 29 Jan 2011 16:53:44 +0000 (09:53 -0700)
committerKarl Williamson <public@khwilliamson.com>
Sat, 29 Jan 2011 17:26:41 +0000 (10:26 -0700)
This patch adds to embed.pl the capability to generate static inline functions.

embed.fnc
regen/embed.pl

index b4fae82..13d8299 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
 :
 :         proto.h: add __attribute__format__ (or ...null_ok__)
 :
+:   i  Static inline: function in source code has a S_ prefix:
+:
+:         proto.h: function is declared as S_foo rather than foo,
+:                PERL_STATIC_INLINE is added to declaration;
+:         embed.h: "#define foo S_foo" entries added
+:
 :   M  May change:
 :
 :         any doc entry is marked that function may change
index b7d7849..b6a2535 100755 (executable)
@@ -231,8 +231,11 @@ sub walk_table (&@) {
            }
        }
 
-       if ($flags =~ /s/) {
-           $retval = "STATIC $splint_flags$retval";
+       if ($flags =~ /([si])/) {
+           my $type = ($1 eq 's') ? "STATIC" : "PERL_STATIC_INLINE";
+           warn "$func: i and s flags are mutually exclusive"
+                                           if $flags =~ /s/ && $flags =~ /i/;
+           $retval = "$type $splint_flags$retval";
            $func = "S_$plain_func";
        }
        else {
@@ -468,7 +471,7 @@ sub embed_h {
                $ret = "#define $func($alist)";
                my $t = int(length($ret) / 8);
                $ret .=  "\t" x ($t < 4 ? 4 - $t : 1);
-               if ($flags =~ /s/) {
+               if ($flags =~ /[si]/) {
                    $ret .= "S_$func(aTHX";
                }
                elsif ($flags =~ /p/) {