* 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
#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
{
CSYMBOL_TYPE_INVALID,
+ CSYMBOL_TYPE_ELLIPSIS,
CSYMBOL_TYPE_CONST,
CSYMBOL_TYPE_OBJECT,
CSYMBOL_TYPE_FUNCTION,
CSYMBOL_TYPE_STRUCT,
CSYMBOL_TYPE_UNION,
CSYMBOL_TYPE_ENUM,
- CSYMBOL_TYPE_TYPEDEF
+ CSYMBOL_TYPE_TYPEDEF,
+ CSYMBOL_TYPE_MEMBER
} GISourceSymbolType;
typedef enum
TYPE_QUALIFIER_NONE = 0,
TYPE_QUALIFIER_CONST = 1 << 1,
TYPE_QUALIFIER_RESTRICT = 1 << 2,
- TYPE_QUALIFIER_VOLATILE = 1 << 3
+ TYPE_QUALIFIER_VOLATILE = 1 << 3,
+ TYPE_QUALIFIER_EXTENSION = 1 << 4
} TypeQualifier;
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);
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, 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 */
-GISourceType * gi_source_array_new (void);
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_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__ */