summaryrefslogtreecommitdiff
path: root/gobject-introspection
diff options
context:
space:
mode:
authorJuerg Billeter <j@bitron.ch>2007-11-22 13:49:01 +0000
committerJürg Billeter <juergbi@src.gnome.org>2007-11-22 13:49:01 +0000
commit1889d0d8a6346aa49f3199809d09f0c1e32f4d2f (patch)
tree772f3582173a77f5977f98b2a1ba2fd64a7537eb /gobject-introspection
parent4f224ceda5bf2c4eb5a215a6c5486af39d31b166 (diff)
downloadvala-1889d0d8a6346aa49f3199809d09f0c1e32f4d2f.tar.gz
improve error reporting and ignore get_type functions with parameters
2007-11-22 Juerg Billeter <j@bitron.ch> * gobject-introspection/clexer.l, gobject-introspection/cparser.y, gobject-introspection/gen-introspect.c: improve error reporting and ignore get_type functions with parameters svn path=/trunk/; revision=695
Diffstat (limited to 'gobject-introspection')
-rw-r--r--gobject-introspection/clexer.l12
-rw-r--r--gobject-introspection/cparser.y2
-rw-r--r--gobject-introspection/gen-introspect.c25
3 files changed, 30 insertions, 9 deletions
diff --git a/gobject-introspection/clexer.l b/gobject-introspection/clexer.l
index 9218ae7fc..b7f5c9011 100644
--- a/gobject-introspection/clexer.l
+++ b/gobject-introspection/clexer.l
@@ -164,7 +164,7 @@ stringtext ([^"])|(\\.)
"\""{stringtext}*"\"" { return STRING; }
"L\""{stringtext}*"\"" { return STRING; }
-. { fprintf(stderr, "%d: unexpected character `%c'\n", lineno, yytext[0]); }
+. { fprintf(stderr, "%s:%d: unexpected character `%c'\n", the_igenerator->current_filename, lineno, yytext[0]); }
%%
@@ -208,8 +208,10 @@ static void process_directive (void)
{
/* extract current filename from #line directives */
GString *filename_builder;
- gboolean in_string;
+ gboolean in_string, found_filename;
+ lineno = 0;
+ found_filename = FALSE;
in_string = FALSE;
filename_builder = g_string_new ("");
@@ -218,6 +220,11 @@ static void process_directive (void)
if (!in_string) {
if (c == '\"') {
in_string = TRUE;
+ found_filename = TRUE;
+ } else if (c >= '0' && c <= '9') {
+ if (!found_filename) {
+ lineno = lineno * 10 + (c - '0');
+ }
}
} else {
if (c == '\"') {
@@ -232,7 +239,6 @@ static void process_directive (void)
}
c = input ();
}
- ++lineno;
if (filename_builder->len > 0) {
char *filename = g_strcompress (filename_builder->str);
diff --git a/gobject-introspection/cparser.y b/gobject-introspection/cparser.y
index a1f87be36..d432fd3ee 100644
--- a/gobject-introspection/cparser.y
+++ b/gobject-introspection/cparser.y
@@ -1190,7 +1190,7 @@ yyerror(const char *s)
/* ignore errors while doing a macro scan as not all object macros
* have valid expressions */
if (!the_igenerator->macro_scan) {
- fprintf(stderr, "%d: %s\n", lineno, s);
+ fprintf(stderr, "%s:%d: %s\n", the_igenerator->current_filename, lineno, s);
}
}
diff --git a/gobject-introspection/gen-introspect.c b/gobject-introspection/gen-introspect.c
index 34fb0e8c7..48d41a2a8 100644
--- a/gobject-introspection/gen-introspect.c
+++ b/gobject-introspection/gen-introspect.c
@@ -1036,7 +1036,10 @@ void g_igenerator_generate (GIGenerator *igenerator)
for (l = igenerator->symbol_list; l != NULL; l = l->next) {
CSymbol *sym = l->data;
if (sym->type == CSYMBOL_TYPE_FUNCTION && g_str_has_suffix (sym->ident, "_get_type")) {
- igenerator->get_type_symbols = g_list_prepend (igenerator->get_type_symbols, sym->ident);
+ if (sym->base_type->child_list == NULL) {
+ // ignore get_type functions with parameters
+ igenerator->get_type_symbols = g_list_prepend (igenerator->get_type_symbols, sym->ident);
+ }
}
}
g_igenerator_process_types (igenerator);
@@ -1227,6 +1230,7 @@ static void g_igenerator_parse_macros (GIGenerator *igenerator) {
GList *l;
for (l = igenerator->filenames; l != NULL; l = l->next) {
FILE *f = fopen (l->data, "r");
+ int line = 1;
GString *define_line;
char *str;
@@ -1236,14 +1240,22 @@ static void g_igenerator_parse_macros (GIGenerator *igenerator) {
if (c != '#') {
/* ignore line */
c = eat_line (f, c);
+ line++;
continue;
}
+
+ /* print current location */
+ str = g_strescape (l->data, "");
+ fprintf (fmacros, "# %d \"%s\"\n", line, str);
+ g_free (str);
+
c = eat_hspace (f);
c = read_identifier (f, c, &str);
if (strcmp (str, "define") != 0 || (c != ' ' && c != '\t')) {
g_free (str);
/* ignore line */
c = eat_line (f, c);
+ line++;
continue;
}
g_free (str);
@@ -1253,6 +1265,7 @@ static void g_igenerator_parse_macros (GIGenerator *igenerator) {
g_free (str);
/* ignore line */
c = eat_line (f, c);
+ line++;
continue;
}
define_line = g_string_new ("#define ");
@@ -1271,6 +1284,7 @@ static void g_igenerator_parse_macros (GIGenerator *igenerator) {
g_string_free (define_line, TRUE);
/* ignore line */
c = eat_line (f, c);
+ line++;
continue;
}
@@ -1279,18 +1293,19 @@ static void g_igenerator_parse_macros (GIGenerator *igenerator) {
c = fgetc (f);
/* found function-like macro */
- fprintf (fmacros, define_line->str);
- fprintf (fmacros, "\n");
+ fprintf (fmacros, "%s\n", define_line->str);
g_string_free (define_line, TRUE);
/* ignore rest of line */
c = eat_line (f, c);
+ line++;
continue;
}
if (c != ' ' && c != '\t') {
g_string_free (define_line, TRUE);
/* ignore line */
c = eat_line (f, c);
+ line++;
continue;
}
while (c != EOF && c != '\n') {
@@ -1308,10 +1323,10 @@ static void g_igenerator_parse_macros (GIGenerator *igenerator) {
}
/* found object-like macro */
- fprintf (fmacros, define_line->str);
- fprintf (fmacros, "\n");
+ fprintf (fmacros, "%s\n", define_line->str);
c = eat_line (f, c);
+ line++;
}
fclose (f);