Fix symbols being reported in invalid files
[platform/upstream/gobject-introspection.git] / giscanner / sourcescanner.h
index 3e2aacd..df16cf6 100644 (file)
@@ -6,7 +6,7 @@
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
+ * version 2 of the License, or (at your option) any later version.
  *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
 G_BEGIN_DECLS
 
+typedef struct _GISourceComment GISourceComment;
 typedef struct _GISourceScanner GISourceScanner;
 typedef struct _GISourceSymbol GISourceSymbol;
 typedef struct _GISourceType GISourceType;
-typedef struct _GISourceDirective GISourceDirective;
 
 typedef enum
 {
@@ -96,13 +96,22 @@ typedef enum
   UNARY_LOGICAL_NEGATION
 } UnaryOperator;
 
+struct _GISourceComment
+{
+  char *comment;
+  char *filename;
+  int line;
+};
+
 struct _GISourceScanner
 {
   char *current_filename;
   gboolean macro_scan;
+  gboolean private; /* set by gtk-doc comment <private>/<public> */
+  gboolean flags; /* set by gtk-doc comment <flags> */
   GSList *symbols;
   GList *filenames;
-  GHashTable *directives_map;
+  GSList *comments; /* _GIComment */
   GHashTable *typedef_table;
   GHashTable *struct_or_union_or_enum_table;
 };
@@ -115,9 +124,13 @@ struct _GISourceSymbol
   char *ident;
   GISourceType *base_type;
   gboolean const_int_set;
-  int const_int;
+  gboolean private;
+  gint64 const_int; /* 64-bit we can handle signed and unsigned 32-bit values */
   char *const_string;
-  GSList *directives; /* list of GISourceDirective */
+  gboolean const_double_set;
+  double const_double;
+  char *source_filename;
+  int line;
 };
 
 struct _GISourceType
@@ -129,13 +142,7 @@ struct _GISourceType
   char *name;
   GISourceType *base_type;
   GList *child_list; /* list of GISourceSymbol */
-};
-
-struct _GISourceDirective
-{
-  char *name;
-  char *value;
-  GSList *options; /* list of options (key=value) */
+  gboolean is_bitfield;
 };
 
 GISourceScanner *   gi_source_scanner_new              (void);
@@ -143,25 +150,20 @@ gboolean            gi_source_scanner_lex_filename     (GISourceScanner  *igener
                                                        const gchar      *filename);
 gboolean            gi_source_scanner_parse_file       (GISourceScanner  *igenerator,
                                                        FILE             *file);
+void                gi_source_scanner_parse_macros     (GISourceScanner  *scanner,
+                                                       GList            *filenames);
 void                gi_source_scanner_set_macro_scan   (GISourceScanner  *scanner,
                                                        gboolean          macro_scan);
 GSList *            gi_source_scanner_get_symbols      (GISourceScanner  *scanner);
-GSList *            gi_source_scanner_get_directives   (GISourceScanner  *scanner,
-                                                       const gchar      *name);
+GSList *            gi_source_scanner_get_comments     (GISourceScanner  *scanner);
 void                gi_source_scanner_free             (GISourceScanner  *scanner);
 
-GISourceSymbol *    gi_source_symbol_new               (GISourceSymbolType  type);
+GISourceSymbol *    gi_source_symbol_new               (GISourceSymbolType  type, const gchar *filename, int line);
 gboolean            gi_source_symbol_get_const_boolean (GISourceSymbol     *symbol);
 GISourceSymbol *    gi_source_symbol_ref               (GISourceSymbol     *symbol);
 void                gi_source_symbol_unref             (GISourceSymbol     *symbol);
 
-GISourceDirective * gi_source_directive_new            (const gchar       *name,
-                                                       const gchar        *value,
-                                                       GSList             *options);
-void                gi_source_directive_free           (GISourceDirective  *directive);
-
 /* Private */
-GISourceType *      gi_source_array_new                (void);
 void                gi_source_scanner_add_symbol       (GISourceScanner  *scanner,
                                                        GISourceSymbol   *symbol);
 gboolean            gi_source_scanner_is_typedef       (GISourceScanner  *scanner,
@@ -176,9 +178,11 @@ GISourceType *         gi_source_struct_new               (const char       *name);
 GISourceType *             gi_source_union_new                (const char       *name);
 GISourceType *             gi_source_enum_new                 (const char       *name);
 GISourceType *             gi_source_pointer_new              (GISourceType     *base_type);
-GISourceType *             gi_source_array_new                (void);
+GISourceType *             gi_source_array_new                (GISourceSymbol   *size);
 GISourceType *             gi_source_function_new             (void);
 
+void ctype_free (GISourceType * type);
+
 G_END_DECLS
 
 #endif /* __SOURCE_SCANNER_H__ */