X-Git-Url: http://git.draconx.ca/gitweb/gob-dx.git/blobdiff_plain/b3db2950b11fc5f3abd9ecdae855746e2d19c836..573256d3bc21896c54c511d5c0e6927f09b4209e:/src/main.c diff --git a/src/main.c b/src/main.c index c94c805..dfd87d0 100644 --- a/src/main.c +++ b/src/main.c @@ -1,9 +1,9 @@ /* GOB C Preprocessor * Copyright (C) 1999,2000 the Free Software Foundation. * Copyright (C) 2000 Eazel, Inc. - * Copyright (C) 2001-2004 George Lebl + * Copyright (C) 2001-2004 George (Jiri) Lebl * - * Author: George Lebl + * Author: George (Jiri) Lebl * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -193,7 +193,9 @@ print_method (FILE *fp, const Method *m, gboolean one_arg_per_line, gboolean no_funcbase, - gboolean kill_underscore) + gboolean kill_underscore, + gboolean first_unused, + gboolean fake_names) { GList *li; const char *id; @@ -214,16 +216,29 @@ print_method (FILE *fp, if(m->args) { for(li=m->args; li; li=g_list_next(li)) { FuncArg *arg = li->data; + const char *unused = ""; + + if ( ! no_gnu && + ! for_cpp && /* g++ has a cow with this */ + li == m->args && + first_unused) { + unused = " G_GNUC_UNUSED"; + } + print_type(fp, arg->atype, FALSE); + if (fake_names) + out_printf (fp, "___fake___"); if(li->next) - out_printf(fp, "%s%s,%s", arg->name, + out_printf(fp, "%s%s%s,%s", arg->name, arg->atype->postfix ? arg->atype->postfix : "", + unused, one_arg_per_line ? "\n\t\t\t\t\t" : " "); else - out_printf(fp, "%s%s", arg->name, + out_printf(fp, "%s%s%s", arg->name, arg->atype->postfix ? - arg->atype->postfix : ""); + arg->atype->postfix : "", + unused); } if(m->vararg) out_printf(fp, ",%s...", @@ -256,9 +271,8 @@ any_method_to_alias(Class *c) } -/* just the vararg macros, we use the same func pointers for these as in non-gnu */ static void -make_method_gnu_aliases(Class *c) +make_method_aliases (Class *c) { GList *li; @@ -272,53 +286,14 @@ make_method_gnu_aliases(Class *c) m->method == OVERRIDE_METHOD) continue; - if(m->args != NULL) - out_printf(out, "#define self_%s(args...) " - "%s_%s(args)\n", m->id, - funcbase, m->id); - else - out_printf(out, "#define self_%s() " - "%s_%s()\n", m->id, - funcbase, m->id); + out_printf (out, "#define self_%s %s_%s\n", + m->id, + funcbase, + m->id); } } } -static void -make_method_nongnu_aliases(Class *c) -{ - GList *li; - - gboolean local_made_aliases = FALSE; - - for(li=c->nodes; li; li=g_list_next(li)) { - Node *node = li->data; - if(node->type == METHOD_NODE) { - Method *m = (Method *)node; - - if(m->method == INIT_METHOD || - m->method == CLASS_INIT_METHOD || - m->method == OVERRIDE_METHOD) - continue; - - if( ! local_made_aliases) - out_printf(out, "\n/* Short form pointers */\n"); - - print_method(out, "static ", "(* const self_", "", ") ", - "", "", - m, FALSE, TRUE, FALSE); - out_printf(out, " = %s_%s;\n", funcbase, - m->id); - - local_made_aliases = TRUE; - } - } - if(local_made_aliases) { - out_printf(out, "\n"); - made_aliases = TRUE; - } -} - static void add_bad_hack_to_avoid_unused_warnings(const Class *c) { @@ -389,10 +364,10 @@ put_vs_method(const Method *m) /* if a signal mark it as such */ if(m->method != VIRTUAL_METHOD) print_method(outh, "\t/*signal*/", "(* ", "", ") ", "", ";\n", - m, FALSE, TRUE, TRUE); + m, FALSE, TRUE, TRUE, FALSE, FALSE); else print_method(outh, "\t", "(* ", "", ") ", "", ";\n", - m, FALSE, TRUE, TRUE); + m, FALSE, TRUE, TRUE, FALSE, FALSE); } static void @@ -401,7 +376,8 @@ put_pub_method(const Method *m) if(m->scope != PUBLIC_SCOPE) return; - print_method(outh, "", "\t", "", "\t", "", ";\n", m, TRUE, FALSE, TRUE); + print_method(outh, "", "\t", "", "\t", "", ";\n", m, + TRUE, FALSE, TRUE, FALSE, FALSE); } static void @@ -434,35 +410,35 @@ put_signal_macro (const Method *m, gboolean gnu) /* connect */ out_printf (outh, "#define %s_connect__%s(object,func,data)\t" "g_signal_connect(" - "%s(({%s *___object = (object); ___object; }))," + "%s(__extension__ ({%s *___object = (object); ___object; }))," "\"%s\"," - "(GCallback)({", + "(GCallback) __extension__ ({", funcbase, m->id, macrobase, typebase, m->id); print_method (outh, "", "(* ___", "", ") ", ", gpointer ___data ", - " = (func); ", m, FALSE, TRUE, TRUE); + " = (func); ", m, FALSE, TRUE, TRUE, FALSE, TRUE); out_printf (outh, "___%s; }), (data))\n", m->id); /* connect_after */ out_printf (outh, "#define %s_connect_after__%s(object,func,data)\t" "g_signal_connect_after(" - "%s(({%s *___object = (object); ___object; }))," + "%s(__extension__ ({%s *___object = (object); ___object; }))," "\"%s\"," - "(GCallback)({", + "(GCallback) __extension__ ({", funcbase, m->id, macrobase, typebase, m->id); print_method (outh, "", "(* ___", "", ") ", ", gpointer ___data ", - " = (func); ", m, FALSE, TRUE, TRUE); + " = (func); ", m, FALSE, TRUE, TRUE, FALSE, TRUE); out_printf (outh, "___%s; }), (data))\n", m->id); /* connect_data */ out_printf (outh, "#define %s_connect_data__%s" "(object,func,data,destroy_data,flags)\t" "g_signal_connect_data(" - "%s(({%s *___object = (object); ___object; }))," + "%s(__extension__ ({%s *___object = (object); ___object; }))," "\"%s\"," - "(GCallback)({", + "(GCallback) __extension__ ({", funcbase, m->id, macrobase, typebase, m->id); print_method (outh, "", "(* ___", "", ") ", ", gpointer ___data ", - " = (func); ", m, FALSE, TRUE, TRUE); + " = (func); ", m, FALSE, TRUE, TRUE, FALSE, TRUE); out_printf (outh, "___%s; }), (data), (destroy_data), (GConnectFlags)(flags))\n", m->id); } } @@ -529,10 +505,10 @@ put_prot_method(const Method *m) if(outph) print_method(outph, "", "\t", "", "\t", "", ";\n", - m, FALSE, FALSE, TRUE); + m, FALSE, FALSE, TRUE, FALSE, FALSE); else print_method(out, "", "\t", "", "\t", "", ";\n", - m, FALSE, FALSE, TRUE); + m, FALSE, FALSE, TRUE, FALSE, FALSE); } static void @@ -544,7 +520,7 @@ put_priv_method_prot(const Method *m) if(m->cbuf) print_method(out, "static ", "___real_", "", " ", "", ";\n", - m, FALSE, FALSE, TRUE); + m, FALSE, FALSE, TRUE, FALSE, FALSE); } /* no else, here, it might still have a private prototype, it's not * exclusive */ @@ -555,14 +531,14 @@ put_priv_method_prot(const Method *m) char *s = g_strdup_printf("___%x_", (guint)m->unique_id); print_method(out, "static ", s, "", " ", "", no_gnu?";\n":" G_GNUC_UNUSED;\n", - m, FALSE, FALSE, FALSE); + m, FALSE, FALSE, FALSE, FALSE, FALSE); g_free(s); } else if(m->scope == PRIVATE_SCOPE || m->method == INIT_METHOD || m->method == CLASS_INIT_METHOD) { print_method(out, "static ", "", "", " ", "", no_gnu?";\n":" G_GNUC_UNUSED;\n", - m, FALSE, FALSE, TRUE); + m, FALSE, FALSE, TRUE, FALSE, FALSE); } } @@ -783,6 +759,11 @@ add_signal_prots(Method *m) gboolean ret_none = FALSE; gboolean arglist_none = FALSE; const char *retcast; + const char *unused = ""; + + if ( ! no_gnu && ! for_cpp /* g++ has a cow with this */) { + unused = " G_GNUC_UNUSED"; + } if (m->method != SIGNAL_LAST_METHOD && m->method != SIGNAL_FIRST_METHOD) @@ -829,12 +810,15 @@ add_signal_prots(Method *m) out_printf (out, "\nstatic void\n" "___marshal_%s (GClosure *closure,\n" - "\tGValue *return_value,\n" + "\tGValue *return_value%s,\n" "\tguint n_param_values,\n" "\tconst GValue *param_values,\n" - "\tgpointer invocation_hint,\n" + "\tgpointer invocation_hint%s,\n" "\tgpointer marshal_data)\n" - "{\n", s); + "{\n", + s, + unused, + unused); if ( ! ret_none) out_printf (out, "\t%s v_return;\n", retcast); @@ -892,6 +876,12 @@ add_signal_prots(Method *m) g_free (set_func); } + if (no_gnu || for_cpp /* g++ has a cow with G_GNUC_UNUSED */) { + if (ret_none) + out_printf (out, "\n\treturn_value = NULL;\n"); + out_printf (out, "\tinvocation_hint = NULL;\n"); + + } out_printf (out, "}\n\n"); } @@ -1080,6 +1070,7 @@ add_get_type(void) "\t\t\tsizeof (%s),\n" "\t\t\t0 /* n_preallocs */,\n" "\t\t\t(GInstanceInitFunc) %s_init,\n" + "\t\t\tNULL\n" "\t\t};\n\n", funcbase, typebase, funcbase, typebase, funcbase); @@ -1323,18 +1314,15 @@ add_signals(Class *c) if(strcmp(m->gtktypes->data, "NONE") != 0 || ! is_none) { GList *gl, *al; - const char *sep = ""; out_printf(out, "\tif ___GOB_UNLIKELY("); if(strcmp(m->gtktypes->data, "NONE") != 0) { - out_printf(out, "%s sizeof(", sep); + out_printf(out, "sizeof("); print_type(out, m->mtype, FALSE); out_printf(out, "%s", m->mtype->postfix ? m->mtype->postfix : ""); - out_printf(out, ") != sizeof(%s)", + out_printf(out, ") != sizeof(%s) || ", get_cast(m->gtktypes->data, FALSE)); - - sep = " || "; } for(al = m->args->next, gl = m->gtktypes->next; @@ -1343,16 +1331,18 @@ add_signals(Class *c) FuncArg *arg = al->data; char *gtkarg = gl->data; - out_printf(out, "%ssizeof(", sep); + out_printf(out, "sizeof("); print_type(out, arg->atype, FALSE); out_printf(out, "%s", arg->atype->postfix ? arg->atype->postfix : ""); - out_printf(out, ") != sizeof(%s)", + out_printf(out, ") != sizeof(%s) || ", get_cast(gtkarg, FALSE)); - - sep = " || "; } + + out_printf (out, + "parent_class == NULL /* avoid warning */"); + out_printf(out, ") {\n" "\t\tg_error(\"%s line %d: Type mismatch " "of \\\"%s\\\" signal signature\");\n" @@ -2058,8 +2048,10 @@ add_dispose (Class *c) c->otype); if (unreftors > 0) { - out_printf (out, "\t%s *self = %s (obj_self);\n", - typebase, macrobase); + out_printf (out, "\t%s *self%s = %s (obj_self);\n", + typebase, + ! no_gnu ? " G_GNUC_UNUSED" : "", + macrobase); } if (dispose_handler != NULL) { @@ -2090,9 +2082,6 @@ add_dispose (Class *c) } } - out_printf (out, "\treturn;\n"); - if (unreftors > 0) - out_printf(out, "\tself = NULL;\n"); out_printf(out, "}\n" "#undef __GOB_FUNCTION__\n\n"); } @@ -2110,8 +2099,11 @@ add_finalize (Class *c) if (privates > 0 || destructors > 0) { - out_printf(out, "\t%s *self = %s (obj_self);\n", - typebase, macrobase); + const char *unused = ""; + if ( ! no_gnu) + unused = " G_GNUC_UNUSED"; + out_printf(out, "\t%s *self %s = %s (obj_self);\n", + typebase, unused, macrobase); } if (privates > 0) { out_printf(out, "\tgpointer priv = self->_priv;\n"); @@ -2148,10 +2140,6 @@ add_finalize (Class *c) if (privates > 0) { out_printf(out, "\tg_free (priv);\n"); } - out_printf (out, "\treturn;\n"); - if (destructors > 0 || - privates > 0) - out_printf (out, "\tself = NULL;\n"); out_printf(out, "}\n" "#undef __GOB_FUNCTION__\n\n"); @@ -2190,13 +2178,16 @@ make_bonobo_object_epv (Class *c, const char *classname) static void add_inits(Class *c) { + const char *unused = ""; GList *li; + + if ( ! no_gnu) + unused = " G_GNUC_UNUSED"; + for(li=c->nodes;li;li=g_list_next(li)) { Node *n = li->data; Method *m; - gboolean add_unused_class = FALSE; - if(n->type != METHOD_NODE) continue; m = (Method *)n; @@ -2204,7 +2195,7 @@ add_inits(Class *c) if(m->line_no > 0) out_addline_infile(out, m->line_no); print_method(out, "static ", "\n", "", " ", "", "\n", - m, FALSE, FALSE, TRUE); + m, FALSE, FALSE, TRUE, TRUE, FALSE); if(m->line_no > 0) out_addline_outfile(out); out_printf(out, "{\n" @@ -2238,7 +2229,7 @@ add_inits(Class *c) if(m->line_no > 0) out_addline_infile(out, m->line_no); print_method(out, "static ", "\n", "", " ", "", "\n", - m, FALSE, FALSE, TRUE); + m, FALSE, FALSE, TRUE, TRUE, FALSE); if(m->line_no > 0) out_addline_outfile(out); out_printf(out, "{\n" @@ -2251,10 +2242,10 @@ add_inits(Class *c) need_finalize) { out_printf(out, "\tGObjectClass *" - "g_object_class = " + "g_object_class%s = " "(GObjectClass*) %s;\n", + unused, ((FuncArg *)m->args->data)->name); - add_unused_class = TRUE; did_base_obj = TRUE; } @@ -2312,13 +2303,6 @@ add_inits(Class *c) out_addline_outfile(out); out_printf(out, " }\n"); } - out_printf(out, "\treturn;\n"); - out_printf(out, - "\t%s = NULL;\n", - ((FuncArg *)m->args->data)->name); - if(add_unused_class) { - out_printf (out, "\tg_object_class = NULL;\n"); - } out_printf(out, "}\n" "#undef __GOB_FUNCTION__\n"); } @@ -2356,14 +2340,25 @@ add_argument (Argument *a, gboolean is_set) if (is_set) { char *cast; + const char *unused = ""; - if (a->atype != NULL) + if ( ! no_gnu && ! for_cpp /* g++ has a cow with this */) { + unused = " G_GNUC_UNUSED"; + } + + if (a->atype != NULL && + /* gcc -Wbad-function-cast is wanking stupid, moronic + and otherwise evil so we should just use a (gint) + or (guint) cast, not the specific type cast */ + (for_cpp || + (strcmp (a->gtktype, "ENUM") != 0 && + strcmp (a->gtktype, "FLAGS") != 0))) cast = get_type (a->atype, TRUE); else cast = g_strdup (get_cast (a->gtktype, FALSE)); - out_printf (out, "\t%s ARG = (%s) g_value_get_%s (VAL);\n", - cast, cast, the_type_lower); + out_printf (out, "\t%s ARG%s = (%s) g_value_get_%s (VAL);\n", + cast, unused, cast, the_type_lower); g_free (cast); } else if ( ! is_set) { @@ -2398,8 +2393,9 @@ add_argument (Argument *a, gboolean is_set) } g_free (the_type_lower); - if (is_set) { - out_printf (out, "\t\tif (&ARG) ;\n"); + if (is_set && + (no_gnu || for_cpp /* g++ has a cow with G_GNUC_UNUSED */)) { + out_printf (out, "\t\tif (&ARG) break;\n"); } out_printf (out, "\t\tbreak;\n"); @@ -2450,20 +2446,34 @@ static void add_getset_arg(Class *c, gboolean is_set) { GList *li; + const char *unused = ""; + const char *hack_unused = ""; + + if ( ! no_gnu && ! for_cpp /* g++ has a cow with this */) { + unused = " G_GNUC_UNUSED"; + } else { + hack_unused = "if (&VAL || &pspec) break;\n\t\t"; + } + out_printf(out, "\nstatic void\n" "___object_%s_property (GObject *object,\n" "\tguint property_id,\n" - "\t%sGValue *VAL,\n" - "\tGParamSpec *pspec)\n" + "\t%sGValue *VAL%s,\n" + "\tGParamSpec *pspec%s)\n" "#define __GOB_FUNCTION__ \"%s::%s_property\"\n" "{\n" - "\t%s *self;\n\n" + "\t%s *self%s;\n\n" "\tself = %s (object);\n\n" "\tswitch (property_id) {\n", is_set ? "set" : "get", is_set ? "const " : "", - c->otype, is_set ? "set" : "get", - typebase, macrobase); + unused, + unused, + c->otype, + is_set ? "set" : "get", + typebase, + unused, + macrobase); for (li = c->nodes; li != NULL; li = li->next) { Node *n = li->data; @@ -2479,9 +2489,9 @@ add_getset_arg(Class *c, gboolean is_set) "# define G_STRLOC __FILE__ \":\" G_STRINGIFY (__LINE__)\n" "#endif\n" "\t\tG_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);\n" - "\t\tbreak;\n\t}\n" - "\treturn;\n\tself = NULL;\n\tVAL = NULL;\n\tpspec = NULL;\n}\n" - "#undef __GOB_FUNCTION__\n"); + "\t\t%sbreak;\n\t}\n" + "}\n" + "#undef __GOB_FUNCTION__\n", hack_unused); } static void @@ -2563,7 +2573,7 @@ print_preconditions(Method *m) } static void -print_method_body(Method *m, int pre) +print_method_body (Method *m, gboolean pre, gboolean unused_self) { if (m->line_no > 0) out_addline_outfile(out); @@ -2571,9 +2581,18 @@ print_method_body(Method *m, int pre) "#define __GOB_FUNCTION__ \"%s::%s\"\n", ((Class *)class)->otype, m->id); - if(pre) + if (pre) print_preconditions(m); + if ( ! pre && + unused_self && + (no_gnu || for_cpp) && + m->args != NULL && + ((FuncArg *)(m->args->data))->name != NULL && + strcmp (((FuncArg *)(m->args->data))->name, "self") == 0) { + out_printf (out, "\tif (&self) { ; }\n"); + } + /* Note: the trailing }'s are on one line, this is so that we get the no return warning correctly and point to the correct line in the .gob file, yes this is slightly @@ -2701,11 +2720,11 @@ put_method(Method *m) out_addline_infile(out, m->line_no); if(m->scope == PRIVATE_SCOPE) print_method(out, "static ", "\n", "", " ", "", "\n", - m, FALSE, FALSE, TRUE); + m, FALSE, FALSE, TRUE, FALSE, FALSE); else /* PUBLIC, PROTECTED */ print_method(out, "", "\n", "", " ", "", "\n", - m, FALSE, FALSE, TRUE); - print_method_body(m, TRUE); + m, FALSE, FALSE, TRUE, FALSE, FALSE); + print_method_body(m, TRUE, TRUE); /* the outfile line was added above */ break; case SIGNAL_FIRST_METHOD: @@ -2714,17 +2733,21 @@ put_method(Method *m) out_addline_infile(out, m->line_no); if(m->scope == PRIVATE_SCOPE) print_method(out, "static ", "\n", "", " ", "", "\n", - m, FALSE, FALSE, TRUE); + m, FALSE, FALSE, TRUE, FALSE, FALSE); else /* PUBLIC, PROTECTED */ print_method(out, "", "\n", "", " ", "", "\n", - m, FALSE, FALSE, TRUE); + m, FALSE, FALSE, TRUE, FALSE, FALSE); out_addline_outfile (out); out_printf (out, "{\n"); out_printf (out, "\tGValue ___param_values[%d];\n" - "\tGValue ___return_val = {0};\n\n", + "\tGValue ___return_val;\n\n" + "memset (&___return_val, 0, " + "sizeof (___return_val));\n" + "memset (&___param_values, 0, " + "sizeof (___param_values));\n\n", g_list_length (m->args)); print_preconditions (m); @@ -2832,8 +2855,8 @@ put_method(Method *m) if(m->line_no > 0) out_addline_infile(out, m->line_no); print_method(out, "static ", "\n___real_", "", " ", "", "\n", - m, FALSE, FALSE, TRUE); - print_method_body(m, FALSE); + m, FALSE, FALSE, TRUE, TRUE, FALSE); + print_method_body(m, FALSE, TRUE); /* the outfile line was added above */ break; case VIRTUAL_METHOD: @@ -2841,10 +2864,10 @@ put_method(Method *m) out_addline_infile(out, m->line_no); if(m->scope==PRIVATE_SCOPE) print_method(out, "static ", "\n", "", " ", "", "\n", - m, FALSE, FALSE, TRUE); + m, FALSE, FALSE, TRUE, FALSE, FALSE); else /* PUBLIC, PROTECTED */ print_method(out, "", "\n", "", " ", "", "\n", - m, FALSE, FALSE, TRUE); + m, FALSE, FALSE, TRUE, FALSE, FALSE); out_addline_outfile(out); out_printf(out, "{\n" "\t%sClass *klass;\n", typebase); @@ -2890,8 +2913,8 @@ put_method(Method *m) if(m->line_no > 0) out_addline_infile(out, m->line_no); print_method(out, "static ", "\n___real_", "", " ", "", "\n", - m, FALSE, FALSE, TRUE); - print_method_body(m, FALSE); + m, FALSE, FALSE, TRUE, TRUE, FALSE); + print_method_body(m, FALSE, TRUE); /* the outfile line was added above */ break; case OVERRIDE_METHOD: @@ -2901,7 +2924,7 @@ put_method(Method *m) out_addline_infile(out, m->line_no); s = g_strdup_printf("\n___%x_", (guint)m->unique_id); print_method(out, "static ", s, "", " ", "", "\n", - m, FALSE, FALSE, FALSE); + m, FALSE, FALSE, FALSE, TRUE, FALSE); g_free(s); out_addline_outfile(out); s = replace_sep(m->otype, '_'); @@ -2925,7 +2948,7 @@ put_method(Method *m) } g_free(args); g_free(s); - print_method_body(m, TRUE); + print_method_body(m, TRUE, TRUE); /* the outfile line was added above */ out_printf(out, "#undef PARENT_HANDLER\n"); break; @@ -3097,11 +3120,11 @@ put_argument_gnu_wrappers(Class *c) if (cast != NULL) { if (set) out_printf (outh, "#define %s_PROP_%s(arg) \t" - "\"%s\",({%sz = (arg); z;})\n", + "\"%s\", __extension__ ({%sz = (arg); z;})\n", macrobase, aname, name, cast); if (get) out_printf (outh, "#define %s_GET_PROP_%s(arg)\t" - "\"%s\",({%s*z = (arg); z;})\n", + "\"%s\", __extension__ ({%s*z = (arg); z;})\n", macrobase, aname, name, cast); } else { if (set) @@ -3424,13 +3447,8 @@ print_class_block(Class *c) add_enums (c); if(any_method_to_alias(c)) { - if( ! no_gnu) { - out_printf(out, "/* Short form macros */\n"); - out_printf(out, "#if defined(__GNUC__) && !defined(__STRICT_ANSI__)\n"); - make_method_gnu_aliases(c); - out_printf(out, "#endif /* __GNUC__ && !__STRICT_ANSI__ */\n"); - } - make_method_nongnu_aliases(c); + out_printf (out, "/* Short form macros */\n"); + make_method_aliases (c); } add_interface_inits (c); @@ -3690,7 +3708,7 @@ print_enum (EnumDef *enode) else out_printf (outh, "\n"); - out_printf (out, "\t{ %s_%s, \"%s_%s\", \"%s\" },\n", + out_printf (out, "\t{ %s_%s, (char *)\"%s_%s\", (char *)\"%s\" },\n", enode->prefix, value->name, enode->prefix, value->name, sname); @@ -3755,7 +3773,7 @@ print_flags (Flags *fnode) else out_printf (outh, "\n"); - out_printf (out, "\t{ %s_%s, \"%s_%s\", \"%s\" },\n", + out_printf (out, "\t{ %s_%s, (char *)\"%s_%s\", (char *)\"%s\" },\n", fnode->prefix, name, fnode->prefix, name, sname); @@ -3818,7 +3836,7 @@ print_error (Error *enode) else out_printf (outh, "\n"); - out_printf (out, "\t{ %s_%s, \"%s_%s\", \"%s\" },\n", + out_printf (out, "\t{ %s_%s, (char *)\"%s_%s\", (char *)\"%s\" },\n", enode->prefix, name, enode->prefix, name, sname);