diff options
Diffstat (limited to 'giscanner')
-rw-r--r-- | giscanner/giscannermodule.c | 16 | ||||
-rw-r--r-- | giscanner/sourcescanner.c | 6 | ||||
-rw-r--r-- | giscanner/sourcescanner.h | 1 | ||||
-rw-r--r-- | giscanner/sourcescanner.py | 4 | ||||
-rw-r--r-- | giscanner/transformer.py | 4 |
5 files changed, 30 insertions, 1 deletions
diff --git a/giscanner/giscannermodule.c b/giscanner/giscannermodule.c index b7ac316..7d63784 100644 --- a/giscanner/giscannermodule.c +++ b/giscanner/giscannermodule.c @@ -151,6 +151,19 @@ symbol_get_const_string (PyGISourceSymbol *self, return PyString_FromString (self->symbol->const_string); } +static PyObject * +symbol_get_source_filename (PyGISourceSymbol *self, + void *context) +{ + if (!self->symbol->source_filename) + { + Py_INCREF(Py_None); + return Py_None; + } + + return PyString_FromString (self->symbol->source_filename); +} + static const PyGetSetDef _PyGISourceSymbol_getsets[] = { /* int ref_count; */ { "type", (getter)symbol_get_type, NULL, NULL}, @@ -159,7 +172,8 @@ static const PyGetSetDef _PyGISourceSymbol_getsets[] = { { "base_type", (getter)symbol_get_base_type, NULL, NULL}, /* gboolean const_int_set; */ { "const_int", (getter)symbol_get_const_int, NULL, NULL}, - { "const_string", (getter)symbol_get_const_string, NULL, NULL}, + { "const_string", (getter)symbol_get_const_string, NULL, NULL}, + { "source_filename", (getter)symbol_get_source_filename, NULL, NULL}, { 0 } }; diff --git a/giscanner/sourcescanner.c b/giscanner/sourcescanner.c index 1a2508d..79d89cd 100644 --- a/giscanner/sourcescanner.c +++ b/giscanner/sourcescanner.c @@ -60,6 +60,7 @@ gi_source_symbol_unref (GISourceSymbol * symbol) if (symbol->base_type) ctype_free (symbol->base_type); g_free (symbol->const_string); + g_free (symbol->source_filename); g_slice_free (GISourceSymbol, symbol); } } @@ -245,6 +246,11 @@ gi_source_scanner_add_symbol (GISourceScanner *scanner, if (found_filename || scanner->macro_scan) scanner->symbols = g_slist_prepend (scanner->symbols, gi_source_symbol_ref (symbol)); + /* TODO: Refcounted string here or some other optimization */ + if (found_filename && symbol->source_filename == NULL) + { + symbol->source_filename = g_strdup (scanner->current_filename); + } switch (symbol->type) { diff --git a/giscanner/sourcescanner.h b/giscanner/sourcescanner.h index 276b0cb..bbc4977 100644 --- a/giscanner/sourcescanner.h +++ b/giscanner/sourcescanner.h @@ -116,6 +116,7 @@ struct _GISourceSymbol gboolean const_int_set; int const_int; char *const_string; + char *source_filename; }; struct _GISourceType diff --git a/giscanner/sourcescanner.py b/giscanner/sourcescanner.py index 56aac93..30e624b 100644 --- a/giscanner/sourcescanner.py +++ b/giscanner/sourcescanner.py @@ -179,6 +179,10 @@ class SourceSymbol(object): if self._symbol.base_type is not None: return SourceType(self._scanner, self._symbol.base_type) + @property + def source_filename(self): + return self._symbol.source_filename + class SourceScanner(object): diff --git a/giscanner/transformer.py b/giscanner/transformer.py index 10a08a7..58c2fbc 100644 --- a/giscanner/transformer.py +++ b/giscanner/transformer.py @@ -460,6 +460,10 @@ class Transformer(object): return return_ def _create_const(self, symbol): + # Don't create constants for non-public things + # http://bugzilla.gnome.org/show_bug.cgi?id=572790 + if not symbol.source_filename.endswith('.h'): + return None name = self.remove_prefix(symbol.ident) if symbol.const_string is None: type_name = 'int' |