summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohan Dahlin <johan@gnome.org>2008-04-28 21:08:21 +0000
committerJohan Dahlin <johan@src.gnome.org>2008-04-28 21:08:21 +0000
commitb01ed146b04d718eb352d6321c374be1dcdb045f (patch)
tree90032b80bd51c90e797a453edb34d2583530d12f
parent248e8388f060b8f5e579a1047b87c6a0025c5bf3 (diff)
downloadgobject-introspection-b01ed146b04d718eb352d6321c374be1dcdb045f.tar.gz
Avoid recursion when scanning girepository.h
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
-rw-r--r--ChangeLog8
-rw-r--r--giscanner/sourcescanner.py1
-rw-r--r--giscanner/transformer.py4
3 files changed, 13 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index e3aa77d7..4182660e 100644
--- 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:
diff --git a/giscanner/sourcescanner.py b/giscanner/sourcescanner.py
index bf5613c0..583db6b7 100644
--- a/giscanner/sourcescanner.py
+++ b/giscanner/sourcescanner.py
@@ -140,6 +140,7 @@ class SourceScanner(object):
'cpp',
'-C',
'-U__GNUC__',
+ '-D__GI_SCANNER__',
'-I.',
]
cpp_args += self._cpp_options
diff --git a/giscanner/transformer.py b/giscanner/transformer.py
index 8816e7d0..98e6d04c 100644
--- a/giscanner/transformer.py
+++ b/giscanner/transformer.py
@@ -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