Bug 552376: scanner generates wrong names for enum members when there's no
authorLucas Rocha <lucasr@gnome.org>
Sat, 11 Oct 2008 14:42:32 +0000 (14:42 +0000)
committerLucas Almeida Rocha <lucasr@src.gnome.org>
Sat, 11 Oct 2008 14:42:32 +0000 (14:42 +0000)
2008-10-11  Lucas Rocha  <lucasr@gnome.org>

Bug 552376: scanner generates wrong names for enum members when
there's no defined gtype.

* giscanner/utils.py (strip_common_prefix): Always strip common
prefix exactly up to the last "_", and not beyond.
* tests/scanner/foo.h (FooEnumNoType): add FOO_ENUM_NEUF. The point
here is that the first character after the last '_' should should be
the same as the character in the same position on the type name.
* tests/scanner/foo-expected.gir: test that

svn path=/trunk/; revision=664

ChangeLog
giscanner/utils.py
tests/scanner/foo-expected.gir
tests/scanner/foo.h

index 9a0c12d1c903d0a94d9345dbbd0bd665da4ea71f..fbae0bdfe8dc034345d939d6e0611c8f3ea5489e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2008-10-11  Lucas Rocha  <lucasr@gnome.org>
+
+       Bug 552376: scanner generates wrong names for enum members when
+       there's no defined gtype.
+
+       * giscanner/utils.py (strip_common_prefix): Always strip common
+       prefix exactly up to the last "_", and not beyond.
+       * tests/scanner/foo.h (FooEnumNoType): add FOO_ENUM_NEUF. The point
+       here is that the first character after the last '_' should should be
+       the same as the character in the same position on the type name.
+       * tests/scanner/foo-expected.gir: test that
+
 2008-10-10  Lucas Rocha  <lucasr@gnome.org>
 
        Bug 555293: append library_paths to LPATH env variable to work
index 959ed8308c171edbeeb692ec8441d6b68a52d5a9..d03465e390ddea9f089ed77a39197cb724320578 100644 (file)
@@ -56,8 +56,11 @@ def extract_libtool(libname):
 
 
 def strip_common_prefix(first, second):
+    max_index = second.rfind('_')
+    second_len = len(second)
     second = second.replace('_', '')
+    max_index -= second_len - len(second) - 1
     for i, c in enumerate(first.upper()):
-        if i >= len(second) or c != second[i]:
+        if i >= len(second) or c != second[i] or i == max_index:
             return second[i:]
     return second[i + 1:]
index eb27369cfeeff00d2a0690afcae8c74dbc8394fb..2eec8f6f0e1d2f29dd76587698ea268f9c03e54a 100644 (file)
       <member name="un" value="1" c:identifier="FOO_ENUM_UN"/>
       <member name="deux" value="2" c:identifier="FOO_ENUM_DEUX"/>
       <member name="trois" value="3" c:identifier="FOO_ENUM_TROIS"/>
+      <member name="neuf" value="9" c:identifier="FOO_ENUM_NEUF"/>
     </enumeration>
     <enumeration name="EnumFullname" c:type="FooEnumFullname">
       <member name="one" value="1" c:identifier="FOO_ENUM_FULLNAME_ONE"/>
index 128ee4c12ed07dd68bc49291cb7f74df7d30f1cd..bcb899dcb4cd3d6f43d43f82f9ba2c3e9ee1693e 100644 (file)
@@ -104,6 +104,7 @@ typedef enum
   FOO_ENUM_UN = 1,
   FOO_ENUM_DEUX = 2,
   FOO_ENUM_TROIS = 3,
+  FOO_ENUM_NEUF = 9
 } FooEnumNoType;
 
 GType foo_flags_type_get_type (void);