[gtk-doc] parsing: improve parsing of arguments



commit 4cfc71cd836d73b15254f73f58d8fd5f85fcc1f6
Author: Maarten Bosmans <mkbosmans gmail com>
Date:   Mon Jan 10 14:35:16 2011 +0200

    parsing: improve parsing of arguments
    
    The 'const' in a 'const unsigned char *xxx' parameter was dropped. Add test-case
    as well. Fixes #638330.

 gtkdoc-common.pl.in                 |   28 ++++++++++++++--------------
 tests/bugs/docs/tester-sections.txt |    1 +
 tests/bugs/src/tester.c             |   26 +++++++++++++++++++-------
 tests/bugs/src/tester.h             |   10 +++++++---
 4 files changed, 41 insertions(+), 24 deletions(-)
---
diff --git a/gtkdoc-common.pl.in b/gtkdoc-common.pl.in
index 23d851c..4e5670d 100644
--- a/gtkdoc-common.pl.in
+++ b/gtkdoc-common.pl.in
@@ -128,7 +128,7 @@ sub ParseStructDeclaration {
     if (!scalar($declaration =~ m/(?:struct|union)\s+\w*\s*\{/msg)) {
 	die "Declaration '$declaration' does not begin with struct/union [NAME] {\n";
     }
-    
+
     #print "DEBUG: public fields in struct/union: $declaration\n";
 
     # Treat lines in sequence, allowing singly nested anonymous structs
@@ -140,7 +140,7 @@ sub ParseStructDeclaration {
 
 	# FIXME: Just ignore nested structs and unions for now
 	next if $line =~ /{/;
-        
+
         # ignore preprocessor directives
         while ($line =~ /^#.*?\n\s*(.*)/msg) {
             $line=$1;
@@ -252,7 +252,7 @@ sub ParseEnumDeclaration {
     if ($declaration =~ m/enum\s+\S+\s*;/msg) {
 	return ();
     }
-    
+
     # Remove private symbols
     # Assume end of declaration if line begins with '}'
     $declaration =~ s!\n?[ \t]*/\*\s*<\s*(private|protected)\s*>\s*\*/.*?(?:/\*\s*<\s*public\s*>\s*\*/|(?=^\}))!!msgx;
@@ -274,7 +274,7 @@ sub ParseEnumDeclaration {
     $declaration =~ s/\([^)]+\)//g;
 
     # Remove comma from comma - possible whitespace - closing brace sequence
-    # since it is legal in GNU C and C99 to have a trailing comma but doesn't 
+    # since it is legal in GNU C and C99 to have a trailing comma but doesn't
     # result in an actual enum member
 
     $declaration =~ s/,(\s*})/$1/g;
@@ -293,7 +293,7 @@ sub ParseEnumDeclaration {
         while ($line =~ /^#.*?\n\s*(.*)/msg) {
             $line=$1;
         }
-        
+
 	if ($line =~ m/^(\w+)\s*(=.*)?$/msg) {
 	    push @result, $1;
 
@@ -332,9 +332,9 @@ sub ParseEnumDeclaration {
 
 sub ParseFunctionDeclaration {
     my ($declaration, $typefunc, $namefunc) = @_;
-    
+
     my @result = ();
-    
+
     my ($param_num) = 0;
     while ($declaration ne "") {
         #print "$declaration";
@@ -360,8 +360,8 @@ sub ParseFunctionDeclaration {
 
         # allow alphanumerics, '_', '[' & ']' in param names
         # Try to match a standard parameter
-        #                                $1                                                                                                                                       $2                             $3                                                                                                $4       $5
-        } elsif ($declaration =~ s/^\s*((?:G_CONST_RETURN|G_GNUC_[A-Z_]+\s+|unsigned long|unsigned short|signed long|signed short|unsigned|signed|long|short|volatile|const)\s+)*((?:struct\b|enum\b)?\s*\w+)\s*((?:(?:const\b|restrict\b|G_GNUC_[A-Z_]+\b)?\s*\*?\s*(?:const\b|restrict\b|G_GNUC_[A-Z_]+\b)?\s*)*)(\w+)?\s*((?:\[\S*\])*)\s*[,\n]//) {
+        #                               $1                                                                                                                                            $2                             $3                                                                                                $4       $5
+        } elsif ($declaration =~ s/^\s*((?:(?:G_CONST_RETURN|G_GNUC_[A-Z_]+\s+|unsigned long|unsigned short|signed long|signed short|unsigned|signed|long|short|volatile|const)\s+)*)((?:struct\b|enum\b)?\s*\w+)\s*((?:(?:const\b|restrict\b|G_GNUC_[A-Z_]+\b)?\s*\*?\s*(?:const\b|restrict\b|G_GNUC_[A-Z_]+\b)?\s*)*)(\w+)?\s*((?:\[\S*\])*)\s*[,\n]//) {
 	    my $pre	= defined($1) ? $1 : "";
 	    my $type	= $2;
 	    my $ptr	= defined($3) ? $3 : "";
@@ -407,7 +407,7 @@ sub ParseFunctionDeclaration {
 	    my $func_ptr = $6;
 	    my $name = $7;
 	    my $func_params = defined($8) ? $8 : "";
-            
+
             #if (!defined($type)) { print "## no type\n"; };
             #if (!defined($ptr1)) { print "## no ptr1\n"; };
             #if (!defined($func_ptr)) { print "## no func_ptr\n"; };
@@ -445,12 +445,12 @@ sub ParseFunctionDeclaration {
 
 sub ParseMacroDeclaration {
     my ($declaration, $namefunc) = @_;
-    
+
     my @result = ();
 
     if ($declaration =~ m/^\s*#\s*define\s+\w+\(([^\)]*)\)/) {
 	my $params = $1;
-	
+
 	$params =~ s/\\\n//g;
 	foreach $param (split (/,/, $params)) {
             $param =~ s/^\s+//;
@@ -476,10 +476,10 @@ sub ParseMacroDeclaration {
 
 sub LogWarning {
     my ($file, $line, $message) = @_;
-    
+
     $file="unknown" if !defined($file);
     $line="0" if !defined($line);
-    
+
     print "$file:$line: warning: $message\n"
 }
 
diff --git a/tests/bugs/docs/tester-sections.txt b/tests/bugs/docs/tester-sections.txt
index fcf5a67..2733769 100644
--- a/tests/bugs/docs/tester-sections.txt
+++ b/tests/bugs/docs/tester-sections.txt
@@ -46,6 +46,7 @@ bug_623968b
 bug_623968c
 bug_624200a
 bug_624200b
+bug_638330
 <SUBSECTION Standard>
 <SUBSECTION Private>
 GTKDOC_GNUC_CONST
diff --git a/tests/bugs/src/tester.c b/tests/bugs/src/tester.c
index cde05da..01f3d52 100644
--- a/tests/bugs/src/tester.c
+++ b/tests/bugs/src/tester.c
@@ -253,11 +253,11 @@ bug_610257(const unsigned char *der, int *len)
 
 /**
  * bug_623968a:
- * 
+ *
  * <para>test</para>
  * <refsect3>
  *   <title>subsect</title>
- *   <para>test</para>  
+ *   <para>test</para>
  * </refsect3>
  **/
 void
@@ -267,12 +267,12 @@ bug_623968a(void)
 
 /**
  * bug_623968b:
- * 
+ *
  * test
  *
  * <refsect3>
  *   <title>subsect</title>
- *   <para>test</para>  
+ *   <para>test</para>
  * </refsect3>
  **/
 void
@@ -282,7 +282,7 @@ bug_623968b(void)
 
 /**
  * bug_623968c:
- * 
+ *
  * <para>test</para>
  **/
 void
@@ -295,7 +295,7 @@ bug_623968c(void)
  * bug_624200a:
  *
  * http://bugzilla.gnome.org/show_bug.cgi?id=624200
- * 
+ *
  * Returns: result
  */
 const char * const *
@@ -308,7 +308,7 @@ bug_624200a(void)
  * bug_624200b:
  *
  * http://bugzilla.gnome.org/show_bug.cgi?id=624200
- * 
+ *
  * Returns: result
  */
 const char ** const
@@ -317,6 +317,18 @@ bug_624200b(void)
   return NULL;
 }
 
+/**
+ * bug_638330:
+ * @arg1: arg1
+ * @data: data
+ * @length: length
+ *
+ * http://bugzilla.gnome.org/show_bug.cgi?id=638330
+ */
+void (*bug_638330) (void *arg1,
+     const unsigned char *data,
+     unsigned int length) = NULL;
+
 
 /* internal function */
 gchar *
diff --git a/tests/bugs/src/tester.h b/tests/bugs/src/tester.h
index 92aba94..a61b051 100644
--- a/tests/bugs/src/tester.h
+++ b/tests/bugs/src/tester.h
@@ -21,7 +21,7 @@ typedef enum {
 
 
 
-/** 
+/**
  * bug_481811:
  * @x: argument
  *
@@ -169,7 +169,7 @@ typedef int (*bug_512155c_function_pointer_t) (unsigned int arg1,
  * BUG_530758:
  *
  * <![CDATA[http://bugzilla.gnome.org/show_bug.cgi?id=530758#c1]]>
- * 
+ *
  * <ulink url="http://bugzilla.gnome.org/show_bug.cgi?id=530758#c1";>Test</ulink>
  */
 #define BUG_530758 "dummy"
@@ -262,7 +262,7 @@ unsigned int bug_602518c(void);
  */
 union _Bug165425a {
   int i;
-  float f; 
+  float f;
 };
 typedef union _Bug165425a Bug165425a;
 
@@ -334,5 +334,9 @@ gchar *_bug_000000a (const gchar *name);
 extern int bug_512565(void);
 #endif
 
+void (*bug_638330) (void *arg1,
+     const unsigned char *data,
+     unsigned int length);
+
 #endif // GTKDOC_TESTER_H
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]