call_handle InitInlineCall( int rtn_id ) { //============================================ // Initialize a call to a runtime routine. #if _CPU == 386 || _CPU == 8086 sym_id sym; inline_rtn __FAR *in_entry; uint name_len; if( !CreatedPragmas ) { InitInlinePragmas(); } in_entry = &InlineTab[ rtn_id ]; sym = in_entry->sym_ptr; if( sym == NULL ) { name_len = strlen( in_entry->name ); strcpy( SymBuff, in_entry->name ); sym = STAdd( SymBuff, name_len ); sym->u.ns.flags = SY_USAGE | SY_TYPE | SY_SUBPROGRAM | SY_FUNCTION; sym->u.ns.u1.s.typ = FT_INTEGER_TARG; sym->u.ns.xt.size = TypeSize( sym->u.ns.u1.s.typ ); sym->u.ns.u3.address = NULL; in_entry->sym_ptr = sym; in_entry->aux = AuxLookupName( in_entry->name, name_len ); } return( CGInitCall( CGFEName( sym, in_entry->typ ), in_entry->typ, in_entry->sym_ptr ) ); #else rtn_id = rtn_id; return( 0 ); #endif }
sym_id STCommon( char *name, int length ) { //========================================== // Lookup the specified name in the common list. sym_id sym_ptr; if( length > MAX_SYMLEN ) { length = MAX_SYMLEN; } sym_ptr = STSearch( name, length, BList ); if( sym_ptr == NULL ) { sym_ptr = STAdd( name, length ); sym_ptr->ns.link = BList; sym_ptr->ns.si.cb.first = NULL; // indicate an empty common block sym_ptr->ns.u3.address = NULL; BList = sym_ptr; } return( sym_ptr ); }
static sym_id IFSymLookup( char *name, uint len ) { //=================================================== sym_id sym; sym = STNameSearch( name, len ); if( sym != NULL ) { if( ((sym->ns.flags & SY_CLASS) == SY_SUBPROGRAM) && (sym->ns.flags & SY_INTRINSIC) ) { return( sym ); } } sym = STSearch( name, len, IFList ); if( sym == NULL ) { sym = STAdd( name, len ); sym->ns.u3.address = NULL; sym->ns.link = IFList; IFList = sym; } return( sym ); }
sym_id STName( char *name, int length ) { //======================================== // Lookup the specified name in the symbol table. sym_id sym; if( length > MAX_SYMLEN ) { length = MAX_SYMLEN; } sym = STNameSearch( name, length ); if( sym == NULL ) { sym = STAdd( name, length ); sym->ns.si.va.vi.ec_ext = NULL; sym->ns.u3.address = NULL; HashInsert( HashTable, HashValue, &NList, sym ); } else if( ( ( sym->ns.flags & SY_CLASS ) == SY_VARIABLE ) && ( sym->ns.flags & SY_SPECIAL_PARM ) ) { sym = FindShadow( sym ); // Shadowed variable } return( sym ); }
call_handle InitCall( RTCODE rtn_id ) { //====================================== // Initialize a call to a runtime routine. sym_id sym; rt_rtn __FAR *rt_entry; byte typ; int name_len; char __FAR *ptr; rt_entry = &RtnTab[ rtn_id ]; sym = rt_entry->sym_ptr; if( sym == NULL ) { name_len = 0; ptr = rt_entry->name; while( *ptr != NULLCHAR ) { SymBuff[ name_len ] = *ptr; ++name_len; ++ptr; } sym = STAdd( SymBuff, name_len ); sym->u.ns.flags = SY_USAGE | SY_TYPE | SY_SUBPROGRAM | SY_FUNCTION | SY_RT_ROUTINE; if( rt_entry->typ == FT_NO_TYPE ) { sym->u.ns.u1.s.typ = FT_INTEGER_TARG; } else { sym->u.ns.u1.s.typ = rt_entry->typ; } sym->u.ns.xt.size = TypeSize( sym->u.ns.u1.s.typ ); sym->u.ns.u3.address = NULL; sym->u.ns.si.sp.u.imp_segid = AllocImpSegId(); rt_entry->sym_ptr = sym; } typ = F772CGType( sym ); return( CGInitCall( CGFEName( sym, typ ), typ, rt_entry->sym_ptr ) ); }