STATIC void cpp_return_type(symbol *s) { if (s->Sfunc->Fflags & (Fctor | Fdtor)) // if ctor or dtor CHAR('@'); // no type else cpp_data_type(s->Stype->Tnext); }
STATIC void cpp_function_type(type *t) { tym_t ty; type *tn; //printf("cpp_function_type()\n"); //type_debug(t); assert(tyfunc(t->Tty)); cpp_calling_convention(t); //cpp_return_type(s); tn = t->Tnext; ty = tn->Tty; if (LARGEDATA && (tybasic(ty) == TYstruct || tybasic(ty) == TYenum) && !(ty & mTYLINK)) tn->Tty |= mTYfar; cpp_data_type(tn); tn->Tty = ty; cpp_argument_types(t); cpp_throw_types(t); }
char *cpp_typetostring(type *t,char *prefix) { int i; if (prefix) { strcpy(mangle.buf,prefix); i = strlen(prefix); } else i = 0; //dbg_printf("cpp_typetostring:\n"); //type_print(t); MangleInuse m; mangle.znamei = 0; mangle.argi = 0; mangle.np = mangle.buf + i; mangle.buf[BUFIDMAX + 1] = 0x55; cpp_data_type(t); *mangle.np = 0; // 0-terminate mangle.buf[] //dbg_printf("cpp_typetostring: '%s'\n", mangle.buf); assert(strlen(mangle.buf) <= BUFIDMAX); assert(mangle.buf[BUFIDMAX + 1] == 0x55); return mangle.buf; }