/*ident "@(#)cls4:tools/demangler/dem.h 1.5" */ /******************************************************************************* C++ source for the C++ Language System, Release 3.0. This product is a new release of the original cfront developed in the computer science research center of AT&T Bell Laboratories. Copyright (c) 1993 UNIX System Laboratories, Inc. Copyright (c) 1991, 1992 AT&T and UNIX System Laboratories, Inc. Copyright (c) 1984, 1989, 1990 AT&T. All Rights Reserved. THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE of AT&T and UNIX System Laboratories, Inc. The copyright notice above does not evidence any actual or intended publication of such source code. *******************************************************************************/ typedef struct DEMARG DEMARG; typedef struct DEMCL DEMCL; typedef struct DEM DEM; enum DEM_TYPE { DEM_NONE, /* placeholder */ DEM_STI, /* static construction function */ DEM_STD, /* static destruction function */ DEM_VTBL, /* virtual table */ DEM_PTBL, /* ptbl vector */ DEM_FUNC, /* function */ DEM_MFUNC, /* member function */ DEM_SMFUNC, /* static member function */ DEM_CMFUNC, /* const member function */ DEM_OMFUNC, /* conversion operator member function */ DEM_CTOR, /* constructor */ DEM_DTOR, /* destructor */ DEM_DATA, /* data */ DEM_MDATA, /* member data */ DEM_LOCAL, /* local variable */ DEM_CTYPE, /* class type */ DEM_TTYPE /* template class type */ }; struct DEMARG { char* mods; /* modifiers and declarators (page 123 in */ /* ARM), e.g. "CP" */ long* arr; /* dimension if mod[i] == 'A' else NULL */ DEMARG* func; /* list of arguments if base == 'F' */ /* else NULL */ DEMARG* ret; /* return type if base == 'F' else NULL */ DEMCL* clname; /* class/enum name if base == "C" */ DEMCL** mname; /* class name if mod[i] == "M" */ /* in argument list (pointers to members) */ DEMARG* next; /* next argument or NULL */ char* lit; /* literal value for PT arguments */ /* e.g. "59" in A<59> */ char base; /* base type of argument, */ /* 'C' for class/enum types */ }; struct DEMCL { char* name; /* name of class or enum without PT args */ /* e.g. "Vector" */ DEMARG* clargs; /* arguments to class, NULL if not PT */ char* rname; /* raw class name with __pt__ if PT */ /* e.g. "A__pt__2_i" */ DEMCL* next; /* next class name, NULL if not nested */ }; struct DEM { char* f; /* function or data name; NULL if type name */ /* see page 125 of ARM for predefined list */ char* vtname; /* if != NULL name of source file for vtbl */ DEMARG* fargs; /* arguments of function name if __opargs__ */ /* else NULL */ DEMCL* cl; /* name of relevant class or enum or NULL */ /* used also for type-name-only input */ DEMARG* args; /* args to function, NULL if data or type */ enum DEM_TYPE type; /* type of name that was demangled */ short slev; /* scope level for local variables or -1 */ char sc; /* storage class type 'S' or 'C' or: */ /* i -> __sti d --> __std */ /* b -> __ptbl_vec */ }; #define MAXDBUF 4096 int demangle(); void dem_printarg(); void dem_printarglist(); int dem_print(); void dem_printfunc(); int dem(); void dem_printcl(); char* dem_explain();