[SYMBOL_LINES] Support for line numbers on Symbols
[gnome.gobject-introspection] / giscanner / sourcescanner.c
index cf41236..14e3a3b 100644 (file)
 #include <string.h>
 
 GISourceSymbol *
-gi_source_symbol_new (GISourceSymbolType type)
+gi_source_symbol_new (GISourceSymbolType type, int line)
 {
   GISourceSymbol *s = g_slice_new0 (GISourceSymbol);
   s->ref_count = 1;
   s->type = type;
+  s->line = line;
   return s;
 }
 
@@ -60,6 +61,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);
     }
 }
@@ -108,6 +110,7 @@ gi_source_type_copy (GISourceType * type)
     result->base_type = gi_source_type_copy (type->base_type);
   for (l = type->child_list; l; l = l->next)
     result->child_list = g_list_append (result->child_list, gi_source_symbol_ref (l->data));
+  result->is_bitfield = type->is_bitfield;
   return result;
 }
 
@@ -244,6 +247,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)
     {