#include <glib.h>
#include <stdio.h>
+#include <gio/gio.h>
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
{
UNARY_LOGICAL_NEGATION
} UnaryOperator;
+struct _GISourceComment
+{
+ char *comment;
+ char *filename;
+ int line;
+};
+
struct _GISourceScanner
{
- char *current_filename;
+ GFile *current_file;
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;
+ GHashTable *files;
+ GSList *comments; /* _GIComment */
GHashTable *typedef_table;
- GHashTable *struct_or_union_or_enum_table;
+ gboolean skipping;
+ GQueue conditionals;
};
struct _GISourceSymbol
{
int ref_count;
GISourceSymbolType type;
- int id;
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 */
+ gboolean const_int_is_unsigned;
char *const_string;
- GSList *directives; /* list of GISourceDirective */
+ gboolean const_double_set;
+ double const_double;
+ gboolean const_boolean_set;
+ int const_boolean;
+ char *source_filename;
+ int line;
};
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);
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, GFile *file, 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);
+GISourceSymbol * gi_source_symbol_copy (GISourceSymbol *symbol);
/* Private */
void gi_source_scanner_add_symbol (GISourceScanner *scanner,
GISourceSymbol *symbol);
+void gi_source_scanner_take_comment (GISourceScanner *scanner,
+ GISourceComment *comment);
gboolean gi_source_scanner_is_typedef (GISourceScanner *scanner,
const char *name);
void gi_source_symbol_merge_type (GISourceSymbol *symbol,
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__ */