X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=type.c;h=0abf634665254081aa4ae79b89513f447b7581cd;hb=233b4629181c4a07fbabe8566c10ce2bae9224de;hp=2f1c244b8d514533875519720146a785c0916c52;hpb=c04cde588f09e0ec62693477b885834c5aa7a88a;p=cparser diff --git a/type.c b/type.c index 2f1c244..0abf634 100644 --- a/type.c +++ b/type.c @@ -1,6 +1,6 @@ /* * This file is part of cparser. - * Copyright (C) 2007-2008 Matthias Braun + * Copyright (C) 2007-2009 Matthias Braun * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -333,12 +333,20 @@ static void print_function_type_pre(const function_type_t *type) intern_print_type_pre(type->return_type); - switch (type->calling_convention) { + cc_kind_t cc = type->calling_convention; +restart: + switch (cc) { case CC_CDECL: fputs(" __cdecl", out); break; case CC_STDCALL: fputs(" __stdcall", out); break; case CC_FASTCALL: fputs(" __fastcall", out); break; case CC_THISCALL: fputs(" __thiscall", out); break; - case CC_DEFAULT: break; + case CC_DEFAULT: + if (default_calling_convention != CC_CDECL) { + /* show the default calling convention if its not cdecl */ + cc = default_calling_convention; + goto restart; + } + break; } } @@ -1109,13 +1117,14 @@ static bool function_types_compatible(const function_type_t *func1, if (cc1 != cc2) return false; - /* can parameters be compared? */ - if (func1->unspecified_parameters || func2->unspecified_parameters) - return true; - if (func1->variadic != func2->variadic) return false; + /* can parameters be compared? */ + if ((func1->unspecified_parameters && !func1->kr_style_parameters) + || (func2->unspecified_parameters && !func2->kr_style_parameters)) + return true; + /* TODO: handling of unspecified parameters not correct yet */ /* all argument types must be compatible */