kernel-doc (a4345a7cecfb91ae78cd43d26b0c6a956420761a) | kernel-doc (e86bdb24375a810ea7993d64ed406a803db71225) |
---|---|
1#!/usr/bin/env perl 2# SPDX-License-Identifier: GPL-2.0 3 4use warnings; 5use strict; 6 7## Copyright (c) 1998 Michael Zucchi, All Rights Reserved ## 8## Copyright (C) 2000, 1 Tim Waugh <twaugh@redhat.com> ## --- 392 unchanged lines hidden (view full) --- 401 '\s*(\@[.\w]+|\@\.\.\.|description|context|returns?|notes?|examples?)\s*:([^:].*)?$'; 402my $doc_content = $doc_com_body . '(.*)'; 403my $doc_block = $doc_com . 'DOC:\s*(.*)?'; 404my $doc_inline_start = '^\s*/\*\*\s*$'; 405my $doc_inline_sect = '\s*\*\s*(@\s*[\w][\w\.]*\s*):(.*)'; 406my $doc_inline_end = '^\s*\*/\s*$'; 407my $doc_inline_oneline = '^\s*/\*\*\s*(@[\w\s]+):\s*(.*)\s*\*/\s*$'; 408my $export_symbol = '^\s*EXPORT_SYMBOL(_GPL)?\s*\(\s*(\w+)\s*\)\s*;'; | 1#!/usr/bin/env perl 2# SPDX-License-Identifier: GPL-2.0 3 4use warnings; 5use strict; 6 7## Copyright (c) 1998 Michael Zucchi, All Rights Reserved ## 8## Copyright (C) 2000, 1 Tim Waugh <twaugh@redhat.com> ## --- 392 unchanged lines hidden (view full) --- 401 '\s*(\@[.\w]+|\@\.\.\.|description|context|returns?|notes?|examples?)\s*:([^:].*)?$'; 402my $doc_content = $doc_com_body . '(.*)'; 403my $doc_block = $doc_com . 'DOC:\s*(.*)?'; 404my $doc_inline_start = '^\s*/\*\*\s*$'; 405my $doc_inline_sect = '\s*\*\s*(@\s*[\w][\w\.]*\s*):(.*)'; 406my $doc_inline_end = '^\s*\*/\s*$'; 407my $doc_inline_oneline = '^\s*/\*\*\s*(@[\w\s]+):\s*(.*)\s*\*/\s*$'; 408my $export_symbol = '^\s*EXPORT_SYMBOL(_GPL)?\s*\(\s*(\w+)\s*\)\s*;'; |
409my $function_pointer = qr{([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)}; 410my $attribute = qr{__attribute__\s*\(\([a-z0-9,_\*\s\(\)]*\)\)}i; |
|
409 410my %parameterdescs; 411my %parameterdesc_start_lines; 412my @parameterlist; 413my %sections; 414my @sectionlist; 415my %section_start_lines; 416my $sectcheck; --- 272 unchanged lines hidden (view full) --- 689 $count = 0; 690 my $parenth = "("; 691 my $post = ","; 692 foreach my $parameter (@{$args{'parameterlist'}}) { 693 if ($count == $#{$args{'parameterlist'}}) { 694 $post = ");"; 695 } 696 $type = $args{'parametertypes'}{$parameter}; | 411 412my %parameterdescs; 413my %parameterdesc_start_lines; 414my @parameterlist; 415my %sections; 416my @sectionlist; 417my %section_start_lines; 418my $sectcheck; --- 272 unchanged lines hidden (view full) --- 691 $count = 0; 692 my $parenth = "("; 693 my $post = ","; 694 foreach my $parameter (@{$args{'parameterlist'}}) { 695 if ($count == $#{$args{'parameterlist'}}) { 696 $post = ");"; 697 } 698 $type = $args{'parametertypes'}{$parameter}; |
697 if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) { | 699 if ($type =~ m/$function_pointer/) { |
698 # pointer-to-function 699 print ".BI \"" . $parenth . $1 . "\" " . " \") (" . $2 . ")" . $post . "\"\n"; 700 } else { 701 $type =~ s/([^\*])$/$1 /; 702 print ".BI \"" . $parenth . $type . "\" " . " \"" . $post . "\"\n"; 703 } 704 $count++; 705 $parenth = ""; --- 263 unchanged lines hidden (view full) --- 969 my $count = 0; 970 foreach my $parameter (@{$args{'parameterlist'}}) { 971 if ($count ne 0) { 972 print ", "; 973 } 974 $count++; 975 $type = $args{'parametertypes'}{$parameter}; 976 | 700 # pointer-to-function 701 print ".BI \"" . $parenth . $1 . "\" " . " \") (" . $2 . ")" . $post . "\"\n"; 702 } else { 703 $type =~ s/([^\*])$/$1 /; 704 print ".BI \"" . $parenth . $type . "\" " . " \"" . $post . "\"\n"; 705 } 706 $count++; 707 $parenth = ""; --- 263 unchanged lines hidden (view full) --- 971 my $count = 0; 972 foreach my $parameter (@{$args{'parameterlist'}}) { 973 if ($count ne 0) { 974 print ", "; 975 } 976 $count++; 977 $type = $args{'parametertypes'}{$parameter}; 978 |
977 if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) { | 979 if ($type =~ m/$function_pointer/) { |
978 # pointer-to-function 979 print $1 . $parameter . ") (" . $2 . ")"; 980 } else { 981 print $type; 982 } 983 } 984 if ($is_macro) { 985 print ")``\n\n"; --- 220 unchanged lines hidden (view full) --- 1206 1207sub dump_struct($$) { 1208 my $x = shift; 1209 my $file = shift; 1210 my $decl_type; 1211 my $members; 1212 my $type = qr{struct|union}; 1213 # For capturing struct/union definition body, i.e. "{members*}qualifiers*" | 980 # pointer-to-function 981 print $1 . $parameter . ") (" . $2 . ")"; 982 } else { 983 print $type; 984 } 985 } 986 if ($is_macro) { 987 print ")``\n\n"; --- 220 unchanged lines hidden (view full) --- 1208 1209sub dump_struct($$) { 1210 my $x = shift; 1211 my $file = shift; 1212 my $decl_type; 1213 my $members; 1214 my $type = qr{struct|union}; 1215 # For capturing struct/union definition body, i.e. "{members*}qualifiers*" |
1214 my $definition_body = qr{\{(.*)\}(?:\s*(?:__packed|__aligned|____cacheline_aligned_in_smp|____cacheline_aligned|__attribute__\s*\(\([a-z0-9,_\s\(\)]*\)\)))*}; | 1216 my $qualifiers = qr{$attribute|__packed|__aligned|____cacheline_aligned_in_smp|____cacheline_aligned}; 1217 my $definition_body = qr{\{(.*)\}\s*$qualifiers*}; 1218 my $struct_members = qr{($type)([^\{\};]+)\{([^\{\}]*)\}([^\{\}\;]*)\;}; |
1215 1216 if ($x =~ /($type)\s+(\w+)\s*$definition_body/) { 1217 $decl_type = $1; 1218 $declaration_name = $2; 1219 $members = $3; 1220 } elsif ($x =~ /typedef\s+($type)\s*$definition_body\s*(\w+)\s*;/) { 1221 $decl_type = $1; 1222 $declaration_name = $3; --- 7 unchanged lines hidden (view full) --- 1230 } 1231 1232 # ignore members marked private: 1233 $members =~ s/\/\*\s*private:.*?\/\*\s*public:.*?\*\///gosi; 1234 $members =~ s/\/\*\s*private:.*//gosi; 1235 # strip comments: 1236 $members =~ s/\/\*.*?\*\///gos; 1237 # strip attributes | 1219 1220 if ($x =~ /($type)\s+(\w+)\s*$definition_body/) { 1221 $decl_type = $1; 1222 $declaration_name = $2; 1223 $members = $3; 1224 } elsif ($x =~ /typedef\s+($type)\s*$definition_body\s*(\w+)\s*;/) { 1225 $decl_type = $1; 1226 $declaration_name = $3; --- 7 unchanged lines hidden (view full) --- 1234 } 1235 1236 # ignore members marked private: 1237 $members =~ s/\/\*\s*private:.*?\/\*\s*public:.*?\*\///gosi; 1238 $members =~ s/\/\*\s*private:.*//gosi; 1239 # strip comments: 1240 $members =~ s/\/\*.*?\*\///gos; 1241 # strip attributes |
1238 $members =~ s/\s*__attribute__\s*\(\([a-z0-9,_\*\s\(\)]*\)\)/ /gi; | 1242 $members =~ s/\s*$attribute/ /gi; |
1239 $members =~ s/\s*__aligned\s*\([^;]*\)/ /gos; 1240 $members =~ s/\s*__packed\s*/ /gos; 1241 $members =~ s/\s*CRYPTO_MINALIGN_ATTR/ /gos; 1242 $members =~ s/\s*____cacheline_aligned_in_smp/ /gos; 1243 $members =~ s/\s*____cacheline_aligned/ /gos; 1244 | 1243 $members =~ s/\s*__aligned\s*\([^;]*\)/ /gos; 1244 $members =~ s/\s*__packed\s*/ /gos; 1245 $members =~ s/\s*CRYPTO_MINALIGN_ATTR/ /gos; 1246 $members =~ s/\s*____cacheline_aligned_in_smp/ /gos; 1247 $members =~ s/\s*____cacheline_aligned/ /gos; 1248 |
1249 my $args = qr{([^,)]+)}; |
|
1245 # replace DECLARE_BITMAP 1246 $members =~ s/__ETHTOOL_DECLARE_LINK_MODE_MASK\s*\(([^\)]+)\)/DECLARE_BITMAP($1, __ETHTOOL_LINK_MODE_MASK_NBITS)/gos; | 1250 # replace DECLARE_BITMAP 1251 $members =~ s/__ETHTOOL_DECLARE_LINK_MODE_MASK\s*\(([^\)]+)\)/DECLARE_BITMAP($1, __ETHTOOL_LINK_MODE_MASK_NBITS)/gos; |
1247 $members =~ s/DECLARE_BITMAP\s*\(([^,)]+),\s*([^,)]+)\)/unsigned long $1\[BITS_TO_LONGS($2)\]/gos; | 1252 $members =~ s/DECLARE_BITMAP\s*\($args,\s*$args\)/unsigned long $1\[BITS_TO_LONGS($2)\]/gos; |
1248 # replace DECLARE_HASHTABLE | 1253 # replace DECLARE_HASHTABLE |
1249 $members =~ s/DECLARE_HASHTABLE\s*\(([^,)]+),\s*([^,)]+)\)/unsigned long $1\[1 << (($2) - 1)\]/gos; | 1254 $members =~ s/DECLARE_HASHTABLE\s*\($args,\s*$args\)/unsigned long $1\[1 << (($2) - 1)\]/gos; |
1250 # replace DECLARE_KFIFO | 1255 # replace DECLARE_KFIFO |
1251 $members =~ s/DECLARE_KFIFO\s*\(([^,)]+),\s*([^,)]+),\s*([^,)]+)\)/$2 \*$1/gos; | 1256 $members =~ s/DECLARE_KFIFO\s*\($args,\s*$args,\s*$args\)/$2 \*$1/gos; |
1252 # replace DECLARE_KFIFO_PTR | 1257 # replace DECLARE_KFIFO_PTR |
1253 $members =~ s/DECLARE_KFIFO_PTR\s*\(([^,)]+),\s*([^,)]+)\)/$2 \*$1/gos; 1254 | 1258 $members =~ s/DECLARE_KFIFO_PTR\s*\($args,\s*$args\)/$2 \*$1/gos; |
1255 my $declaration = $members; 1256 1257 # Split nested struct/union elements as newer ones | 1259 my $declaration = $members; 1260 1261 # Split nested struct/union elements as newer ones |
1258 while ($members =~ m/(struct|union)([^\{\};]+)\{([^\{\}]*)\}([^\{\}\;]*)\;/) { | 1262 while ($members =~ m/$struct_members/) { |
1259 my $newmember; 1260 my $maintype = $1; 1261 my $ids = $4; 1262 my $content = $3; 1263 foreach my $id(split /,/, $ids) { 1264 $newmember .= "$maintype $id; "; 1265 1266 $id =~ s/[:\[].*//; --- 43 unchanged lines hidden (view full) --- 1310 $newmember .= "$type $name; "; 1311 } else { 1312 $newmember .= "$type $id.$name; "; 1313 } 1314 } 1315 } 1316 } 1317 } | 1263 my $newmember; 1264 my $maintype = $1; 1265 my $ids = $4; 1266 my $content = $3; 1267 foreach my $id(split /,/, $ids) { 1268 $newmember .= "$maintype $id; "; 1269 1270 $id =~ s/[:\[].*//; --- 43 unchanged lines hidden (view full) --- 1314 $newmember .= "$type $name; "; 1315 } else { 1316 $newmember .= "$type $id.$name; "; 1317 } 1318 } 1319 } 1320 } 1321 } |
1318 $members =~ s/(struct|union)([^\{\};]+)\{([^\{\}]*)\}([^\{\}\;]*)\;/$newmember/; | 1322 $members =~ s/$struct_members/$newmember/; |
1319 } 1320 1321 # Ignore other nested elements, like enums 1322 $members =~ s/(\{[^\{\}]*\})//g; 1323 1324 create_parameterlist($members, ';', $file, $declaration_name); 1325 check_sections($file, $declaration_name, $decl_type, $sectcheck, $struct_actual); 1326 --- 223 unchanged lines hidden (view full) --- 1550 my $args = shift; 1551 my $splitter = shift; 1552 my $file = shift; 1553 my $declaration_name = shift; 1554 my $type; 1555 my $param; 1556 1557 # temporarily replace commas inside function pointer definition | 1323 } 1324 1325 # Ignore other nested elements, like enums 1326 $members =~ s/(\{[^\{\}]*\})//g; 1327 1328 create_parameterlist($members, ';', $file, $declaration_name); 1329 check_sections($file, $declaration_name, $decl_type, $sectcheck, $struct_actual); 1330 --- 223 unchanged lines hidden (view full) --- 1554 my $args = shift; 1555 my $splitter = shift; 1556 my $file = shift; 1557 my $declaration_name = shift; 1558 my $type; 1559 my $param; 1560 1561 # temporarily replace commas inside function pointer definition |
1558 while ($args =~ /(\([^\),]+),/) { 1559 $args =~ s/(\([^\),]+),/$1#/g; | 1562 my $arg_expr = qr{\([^\),]+}; 1563 while ($args =~ /$arg_expr,/) { 1564 $args =~ s/($arg_expr),/$1#/g; |
1560 } 1561 1562 foreach my $arg (split($splitter, $args)) { 1563 # strip comments 1564 $arg =~ s/\/\*.*\*\///; 1565 # strip leading/trailing spaces 1566 $arg =~ s/^\s*//; 1567 $arg =~ s/\s*$//; --- 134 unchanged lines hidden (view full) --- 1702 my ($px, $sx); 1703 my $prm_clean; # strip trailing "[array size]" and/or beginning "*" 1704 1705 foreach $sx (0 .. $#sects) { 1706 $err = 1; 1707 foreach $px (0 .. $#prms) { 1708 $prm_clean = $prms[$px]; 1709 $prm_clean =~ s/\[.*\]//; | 1565 } 1566 1567 foreach my $arg (split($splitter, $args)) { 1568 # strip comments 1569 $arg =~ s/\/\*.*\*\///; 1570 # strip leading/trailing spaces 1571 $arg =~ s/^\s*//; 1572 $arg =~ s/\s*$//; --- 134 unchanged lines hidden (view full) --- 1707 my ($px, $sx); 1708 my $prm_clean; # strip trailing "[array size]" and/or beginning "*" 1709 1710 foreach $sx (0 .. $#sects) { 1711 $err = 1; 1712 foreach $px (0 .. $#prms) { 1713 $prm_clean = $prms[$px]; 1714 $prm_clean =~ s/\[.*\]//; |
1710 $prm_clean =~ s/__attribute__\s*\(\([a-z,_\*\s\(\)]*\)\)//i; | 1715 $prm_clean =~ s/$attribute//i; |
1711 # ignore array size in a parameter string; 1712 # however, the original param string may contain 1713 # spaces, e.g.: addr[6 + 2] 1714 # and this appears in @prms as "addr[6" since the 1715 # parameter list is split at spaces; 1716 # hence just ignore "[..." for the sections check; 1717 $prm_clean =~ s/\[.*//; 1718 --- 85 unchanged lines hidden (view full) --- 1804 # regexps don't even start to express all the possibilities), and 1805 # so on. 1806 # 1807 # If you mess with these regexps, it's a good idea to check that 1808 # the following functions' documentation still comes out right: 1809 # - parport_register_device (function pointer parameters) 1810 # - atomic_set (macro) 1811 # - pci_match_device, __copy_to_user (long return type) | 1716 # ignore array size in a parameter string; 1717 # however, the original param string may contain 1718 # spaces, e.g.: addr[6 + 2] 1719 # and this appears in @prms as "addr[6" since the 1720 # parameter list is split at spaces; 1721 # hence just ignore "[..." for the sections check; 1722 $prm_clean =~ s/\[.*//; 1723 --- 85 unchanged lines hidden (view full) --- 1809 # regexps don't even start to express all the possibilities), and 1810 # so on. 1811 # 1812 # If you mess with these regexps, it's a good idea to check that 1813 # the following functions' documentation still comes out right: 1814 # - parport_register_device (function pointer parameters) 1815 # - atomic_set (macro) 1816 # - pci_match_device, __copy_to_user (long return type) |
1817 my $name = qr{[a-zA-Z0-9_~:]+}; 1818 my $prototype_end1 = qr{[^\(]*}; 1819 my $prototype_end2 = qr{[^\{]*}; 1820 my $prototype_end = qr{\(($prototype_end1|$prototype_end2)\)}; 1821 my $type1 = qr{[\w\s]+}; 1822 my $type2 = qr{$type1\*+}; |
|
1812 | 1823 |
1813 if ($define && $prototype =~ m/^()([a-zA-Z0-9_~:]+)\s+/) { | 1824 if ($define && $prototype =~ m/^()($name)\s+/) { |
1814 # This is an object-like macro, it has no return type and no parameter 1815 # list. 1816 # Function-like macros are not allowed to have spaces between 1817 # declaration_name and opening parenthesis (notice the \s+). 1818 $return_type = $1; 1819 $declaration_name = $2; 1820 $noret = 1; | 1825 # This is an object-like macro, it has no return type and no parameter 1826 # list. 1827 # Function-like macros are not allowed to have spaces between 1828 # declaration_name and opening parenthesis (notice the \s+). 1829 $return_type = $1; 1830 $declaration_name = $2; 1831 $noret = 1; |
1821 } elsif ($prototype =~ m/^()([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ || 1822 $prototype =~ m/^(\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ || 1823 $prototype =~ m/^(\w+\s*\*+)\s*([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ || 1824 $prototype =~ m/^(\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ || 1825 $prototype =~ m/^(\w+\s+\w+\s*\*+)\s*([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ || 1826 $prototype =~ m/^(\w+\s+\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ || 1827 $prototype =~ m/^(\w+\s+\w+\s+\w+\s*\*+)\s*([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ || 1828 $prototype =~ m/^()([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ || 1829 $prototype =~ m/^(\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ || 1830 $prototype =~ m/^(\w+\s*\*+)\s*([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ || 1831 $prototype =~ m/^(\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ || 1832 $prototype =~ m/^(\w+\s+\w+\s*\*+)\s*([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ || 1833 $prototype =~ m/^(\w+\s+\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ || 1834 $prototype =~ m/^(\w+\s+\w+\s+\w+\s*\*+)\s*([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ || 1835 $prototype =~ m/^(\w+\s+\w+\s+\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ || 1836 $prototype =~ m/^(\w+\s+\w+\s+\w+\s+\w+\s*\*+)\s*([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ || 1837 $prototype =~ m/^(\w+\s+\w+\s*\*+\s*\w+\s*\*+\s*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/) { | 1832 } elsif ($prototype =~ m/^()($name)\s*$prototype_end/ || 1833 $prototype =~ m/^($type1)\s+($name)\s*$prototype_end/ || 1834 $prototype =~ m/^($type2+)\s*($name)\s*$prototype_end/) { |
1838 $return_type = $1; 1839 $declaration_name = $2; 1840 my $args = $3; 1841 1842 create_parameterlist($args, ',', $file, $declaration_name); 1843 } else { 1844 print STDERR "${file}:$.: warning: cannot understand function prototype: '$prototype'\n"; 1845 return; --- 260 unchanged lines hidden (view full) --- 2106 if ( $1 eq "" ) { 2107 $section = $section_intro; 2108 } else { 2109 $section = $1; 2110 } 2111 } elsif (/$doc_decl/o) { 2112 $identifier = $1; 2113 my $is_kernel_comment = 0; | 1835 $return_type = $1; 1836 $declaration_name = $2; 1837 my $args = $3; 1838 1839 create_parameterlist($args, ',', $file, $declaration_name); 1840 } else { 1841 print STDERR "${file}:$.: warning: cannot understand function prototype: '$prototype'\n"; 1842 return; --- 260 unchanged lines hidden (view full) --- 2103 if ( $1 eq "" ) { 2104 $section = $section_intro; 2105 } else { 2106 $section = $1; 2107 } 2108 } elsif (/$doc_decl/o) { 2109 $identifier = $1; 2110 my $is_kernel_comment = 0; |
2114 my $decl_start = qr{\s*\*}; | 2111 my $decl_start = qr{$doc_com}; |
2115 # test for pointer declaration type, foo * bar() - desc 2116 my $fn_type = qr{\w+\s*\*\s*}; 2117 my $parenthesis = qr{\(\w*\)}; 2118 my $decl_end = qr{[-:].*}; | 2112 # test for pointer declaration type, foo * bar() - desc 2113 my $fn_type = qr{\w+\s*\*\s*}; 2114 my $parenthesis = qr{\(\w*\)}; 2115 my $decl_end = qr{[-:].*}; |
2119 if (/^$decl_start\s*([\w\s]+?)$parenthesis?\s*$decl_end?$/) { | 2116 if (/^$decl_start([\w\s]+?)$parenthesis?\s*$decl_end?$/) { |
2120 $identifier = $1; 2121 } 2122 if ($identifier =~ m/^(struct|union|enum|typedef)\b\s*(\S*)/) { 2123 $decl_type = $1; 2124 $identifier = $2; 2125 $is_kernel_comment = 1; 2126 } 2127 # Look for foo() or static void foo() - description; or misspelt 2128 # identifier | 2117 $identifier = $1; 2118 } 2119 if ($identifier =~ m/^(struct|union|enum|typedef)\b\s*(\S*)/) { 2120 $decl_type = $1; 2121 $identifier = $2; 2122 $is_kernel_comment = 1; 2123 } 2124 # Look for foo() or static void foo() - description; or misspelt 2125 # identifier |
2129 elsif (/^$decl_start\s*$fn_type?(\w+)\s*$parenthesis?\s*$decl_end?$/ || 2130 /^$decl_start\s*$fn_type?(\w+.*)$parenthesis?\s*$decl_end$/) { | 2126 elsif (/^$decl_start$fn_type?(\w+)\s*$parenthesis?\s*$decl_end?$/ || 2127 /^$decl_start$fn_type?(\w+.*)$parenthesis?\s*$decl_end$/) { |
2131 $identifier = $1; 2132 $decl_type = 'function'; 2133 $identifier =~ s/^define\s+//; 2134 $is_kernel_comment = 1; 2135 } 2136 $identifier =~ s/\s+$//; 2137 2138 $state = STATE_BODY; --- 377 unchanged lines hidden --- | 2128 $identifier = $1; 2129 $decl_type = 'function'; 2130 $identifier =~ s/^define\s+//; 2131 $is_kernel_comment = 1; 2132 } 2133 $identifier =~ s/\s+$//; 2134 2135 $state = STATE_BODY; --- 377 unchanged lines hidden --- |