]> git.draconx.ca Git - gob-dx.git/blobdiff - src/main.c
Release 2.0.9
[gob-dx.git] / src / main.c
index c94c805121d6c0852b2ca475ad66d9a1dbf15733..dfd87d0a60b7e3d365e382860171af3a56996e66 100644 (file)
@@ -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);