Avoid recursion when scanning girepository.h
authorJohan Dahlin <johan@gnome.org>
Mon, 28 Apr 2008 21:08:21 +0000 (21:08 +0000)
committerJohan Dahlin <johan@src.gnome.org>
Mon, 28 Apr 2008 21:08:21 +0000 (21:08 +0000)
2008-04-28  Johan Dahlin  <johan@gnome.org>

    * giscanner/transformer.py (Transformer._traverse_one): Avoid recursion
    when scanning girepository.h

    * giscanner/sourcescanner.py (SourceScanner._preprocess): Define
    a __GI_SCANNER__ when we run.

svn path=/trunk/; revision=254

ChangeLog
giscanner/sourcescanner.py
giscanner/transformer.py

index e3aa77d..4182660 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-04-28  Johan Dahlin  <johan@gnome.org>
+
+       * giscanner/transformer.py (Transformer._traverse_one): Avoid recursion
+       when scanning girepository.h
+
+       * giscanner/sourcescanner.py (SourceScanner._preprocess): Define
+       a __GI_SCANNER__ when we run.
+
 2008-04-28  Johan Dahlin  <jdahlin@async.com.br>
 
        * giscanner/ast.py:
index bf5613c..583db6b 100644 (file)
@@ -140,6 +140,7 @@ class SourceScanner(object):
             'cpp',
             '-C',
             '-U__GNUC__',
+            '-D__GI_SCANNER__',
             '-I.',
             ]
         cpp_args += self._cpp_options
index 8816e7d..98e6d04 100644 (file)
@@ -56,6 +56,10 @@ class Transformer(object):
                 node = self._create_callback(symbol)
             elif symbol.base_type.type == giscanner.CTYPE_STRUCT:
                 node = self._create_typedef_struct(symbol)
+            # This prevents an infinite recursion when scanning structures with
+            # private types not exposed in headers.
+            elif symbol.base_type.type == giscanner.CSYMBOL_TYPE_TYPEDEF:
+                return
             else:
                 node = self._traverse_one(symbol, symbol.base_type.type)
             return node