Program Database Toolkit (PDT) ********************************************************************** Program Database (PDB) Format Items ID attribute prefix prefix HEADER FILES so s ROUTINES ro r TYPES (non-classes) ty y CLASSES cl c TEMPLATES te t MACROS ma m NAMESPACES na n Prototype format for each item: * Each line is of the form: attribute value value... * Attributes and values are separated by exactly one space (" ") * Item description blocks are terminated by an empty line * Values which are references to other items are done using IDs * Values are never enclosed in "" * Attributes with boolean value are only listed if true (value == T) i.e. absence means false * String "[...]" after attribute means "0 or more" instances of this attribute line possible ********************************************************************** HEADER Item ********************************************************************** SOURCE FILE Item so#[fileID] sinc [...] # IDs of included files ********************************************************************** ROUTINE Item ro#[routineID] rloc # location [ rclass # parent class racs # access OR rnspace # parent namespace ] rsig # signature rlink # linkage rstore # storage class rstatic # is static function? rkind # special kind rvirt # virtuality rcrvo # is covariant return # virtual override? rinline # is inline? rcgen # is compiler generated? rexpl # is explicit ctor? rtempl # ID if template instance; # boolean if specialized rspecl # is specialized? rcall [...] # callees rpos <"{"> <"}"> ********************************************************************** CLASS Item cl#[classID] cloc # location [ cclass # parent class cacs # access OR cnspace # parent namespace ] ckind # kind ctempl # ID if template instance; # boolean if specialized cspecl # is specialized? cbase [...] # direct base classes cfrclass [...] # friend classes cfrfunc [...] # friend functions cfunc [...] # member functions cmem [...] # other members cmloc # location cmacs # access cmkind # kind: type or class, # static or non-static # variable cmtype # type of member [ if (cmkind == statvar): cmtempl # ID if template static # data member; # boolean if specialized cmspecl # is specialized? cmconst # was initializer # specified at its # declaration within the # class definition? if (cmkind == var): cmisbit # is bit field? cmmut # is mutable? ] cpos <"{"> <"};"> ********************************************************************** TYPE Item ty#[typeID] yloc # location [ yclass # parent class yacs # access OR ynspace # parent namespace ] ykind [ if (ykind == int|enum|wchar|bool): yikind ysigned # is explicitly signed? if (ykind == enum): yenum [...] # name-value pairs if (ykind == float): yfkind # float kind if (ykind == ptr): yptr # type pointed to if (ykind == ref): yref # type referred to if (ykind == func): yrett # return type yargt [...] # argument type; # has default argument? yellip # has ellipsis? yqual # qualifier yexcep [...] # absence of attribute # indicates any exception # may be thrown; NULL # indicates no exceptions # will be thrown if (ykind == array): yelem # type of array element ynelem # -1: variable length array; # 0: [] incomplete-type case; # else number of elements if (ykind == tref): ytref # typedef type yqual * # qualifiers if (ykind == ptrmem): ympclass # type of class to which # member pointed to belongs ymptype # type of member pointed to ] ********************************************************************** TEMPLATE Item te#[templateID] tloc # location [ tclass # parent class tacs # access OR tnspace # parent namespace ] tkind ttext # text of template tpos