static DUMP_INFO* dumpStruct( // DUMP A STRUCTURE TYPE type, // - structure type DUMP_INFO* di, // - dump information char* title, // - title for dump ds_control control ) // - control word { CLASSINFO* info; // - class information NAME *parent; // - where parent ptr is stored control = control; type = StructType( type ); info = type->u.c.info; parent = VstkPush( &di->stack ); *parent = info->name; di = dumpTitle( di, title, NameStr( info->name ) ); if( type != di->original ) { di = bufferInit( di ); di = bufferStr( di, "embedded size: " ); di = bufferNmb( di, info->vsize ); di = bufferWrite( di ); di = dumpOffset( di ); di = dumpParentage( di ); } else { di = bufferInit( di ); di = bufferStr( di, "size: " ); di = bufferNmb( di, info->size ); di = bufferWrite( di ); } if( info->has_vbptr ) { di = dumpDataMemb( di , "[virtual" , "base pointer]" , info->vb_offset + di->offset , CgMemorySize( TypePtrToVoid() ) ); } if( info->has_vfptr ) { di = dumpDataMemb( di , "[virtual" , "functions pointer]" , info->vf_offset + di->offset , CgMemorySize( TypePtrToVoid() ) ); } ScopeWalkDataMembers( type->u.c.scope, dumpMember, di ); if( type == di->original ) { ScopeWalkVirtualBases( type->u.c.scope, dumpVirtual, di ); } ScopeWalkDirectBases( type->u.c.scope, dumpDirect, di ); VstkPop( &di->stack ); return di; }
static void defineOptSym( // DEFINE SYMBOL FOR THREAD_CTL OPT_DEFN *odef ) // - optimization definition { SYMBOL var; // - new variable var = SymCreateFileScope( TypePtrToVoid() , SC_EXTERN , SF_REFERENCED , optName( odef ) ); odef->sym = var; LinkageSet( var, "C" ); }
// make sure to get a predefined type so that the type system is not // exercised in the back end // static SYMBOL rtSymbolCreate( // CREATE NEW RUN-TIME SYMBOL RTS_TYPE runtime_type, // - run-time type definition NAME name ) // - name of run-time function { SYMBOL sym; // - new symbol TYPE sym_type; // - symbol's type symbol_flag flags; // - symbol's flags flags = SF_REFERENCED; if( runtime_type & RTS_FUNCTION ) { if( runtime_type & RTS_POINTER ) { sym_type = TypePtrVoidFunOfVoid(); } else if( runtime_type & RTS_HANDLER ) { sym_type = TypeVoidHandlerFunOfVoid(); } else { sym_type = TypeVoidFunOfVoid(); } if( runtime_type & RTS_INLINE ) { sym_type = AddFunctionFlag( sym_type, TF1_INTRINSIC ); } if( runtime_type & RTS_CAN_THROW ) { flags |= SF_LONGJUMP; } else if( runtime_type & RTS_NO_THROW ) { flags |= SF_NO_LONGJUMP; } else if( runtime_type & RTS_IG_THROW ) { RepoFunAdd( name, RFFLAG_IG_LONGJUMP ); } if( runtime_type & RTS_IS_THROW ) { flags |= SF_IS_THROW; } } else if( runtime_type & RTS_BASE_VOID ) { if( runtime_type & RTS_POINTER ) { sym_type = TypePtrToVoid(); } else { sym_type = GetBasicType( TYP_VOID ); } } else { sym_type = GetBasicType( TYP_SINT ); } sym = SymCreate( sym_type, SC_EXTERN, flags, name, GetInternalScope() ); LinkageSet( sym, "C" ); return sym; }
static void makeCnvVoidStar( // MAKE A CONVERSION TO void*, MODIFIED void* THROW_CNV_CTL *ctl ) // - control area { makeThrowCnvNoAcc( ctl, TypePtrToVoid(), 0 ); }