static void fmtSymScope( SCOPE scope, VBUF *pvbuf, boolean include_function ) /***************************************************************************/ { TYPE class_type; NAME name; char *sname; SYMBOL sym; VBUF prefix; while( scope != NULL ) { switch( scope->id ) { case SCOPE_FILE: sname = ScopeNameSpaceFormatName( scope ); if( sname != NULL ) { VbufConcStrRev( pvbuf, scopeSep ); VbufConcStrRev( pvbuf, sname ); } break; case SCOPE_CLASS: class_type = ScopeClass( scope ); name = SimpleTypeName( class_type ); if( name != NULL ) { VbufConcStrRev( pvbuf, scopeSep ); if( class_type->flag & TF1_INSTANTIATION ) { fmtTemplateParms( pvbuf, class_type ); } VbufConcStrRev( pvbuf, NameStr( name ) ); } break; case SCOPE_FUNCTION: if( include_function ) { VbufInit( &prefix ); sym = ScopeFunction( scope ); formatScopedSym( sym, &prefix, FF_NULL ); if( VbufLen( &prefix ) > 0 ) { VbufConcStrRev( &prefix, functionDelim ); VbufPrepVbuf( pvbuf, &prefix ); } VbufFree( &prefix ); } return; // function scope resolved on function name case SCOPE_BLOCK: case SCOPE_TEMPLATE_DECL: case SCOPE_TEMPLATE_INST: case SCOPE_TEMPLATE_PARM: case SCOPE_TEMPLATE_SPEC_PARM: break; case SCOPE_MAX: default: VbufConcStrRev( pvbuf, scopeSep ); VbufConcStrRev( pvbuf, scopeError ); break; } scope = scope->enclosing; } }
static char *doFormatSym( SYMBOL sym, VBUF *pvbuf, FMT_CONTROL control ) { VbufInit( pvbuf ); if( sym == NULL ) { VbufConcStr( pvbuf, nullSymbol ); return( VbufString( pvbuf ) ); } else { return( strrev( formatScopedSym( sym, pvbuf, control ) ) ); } }
static void doFormatSym( SYMBOL sym, VBUF *pvbuf, FMT_CONTROL control ) { VbufInit( pvbuf ); if( sym == NULL ) { VbufConcStr( pvbuf, nullSymbol ); } else { formatScopedSym( sym, pvbuf, control ); strrev( VbufString( pvbuf ) ); } }