static enum sym_type AsmType( TYPE type ) { type_flag mod_flags; type = TypeModFlags( type, &mod_flags ); switch( type->id ) { case TYP_POINTER : type = TypeModFlags( type->of, &mod_flags ); if( type->id == TYP_FUNCTION ) { return( CodePtrType( mod_flags ) ); } else { return( PtrType( mod_flags ) ); } break; case TYP_ARRAY : case TYP_BITFIELD : case TYP_ENUM : return( AsmType( type->of ) ); break; case TYP_CLASS : return( SYM_INT1 ); break; case TYP_FUNCTION : return( CodePtrType( mod_flags ) ); break; default: return( AsmDataType[type->id] ); break; } }
enum sym_type AsmQueryType( char *name ) /**************************************/ { SYM_HANDLE sym_handle; SYM_ENTRY sym; sym_handle = SymLook( CalcHash( name, strlen( name ) ), name ); if( sym_handle == 0 ) return( SYM_INT1 ); SymGet( &sym, sym_handle ); return( AsmType( sym.sym_type, sym.attrib ) ); }
enum sym_type AsmQueryType( void *handle ) /****************************************/ { SYM_HANDLE sym_handle = (SYM_HANDLE)handle; SYM_ENTRY sym; if( sym_handle == SYM_NULL ) return( SYM_INT1 ); SymGet( &sym, sym_handle ); return( AsmType( sym.sym_type, sym.mods ) ); }
enum sym_type AsmQueryType( void *handle ) { #if 1 SYMBOL sym = handle; enum sym_type type; if( sym != NULL ) { type = AsmType( sym->sym_type ); } else { type = SYM_INT1; } return( type ); #else handle = handle; return( SYM_INT1 ); #endif }
enum sym_type AsmQueryType( char *name ) { #if 1 SYMBOL sym; enum sym_type type; sym = ScopeASMLookup( name ); if( sym != NULL ) { type = AsmType( sym->sym_type ); } else { type = SYM_INT1; } return( type ); #else name = name; return( SYM_INT1 ); #endif }
local int AsmType( TYPEPTR typ, type_modifiers flags ) /****************************************************/ { SKIP_TYPEDEFS( typ ); switch( typ->decl_type ) { case TYPE_STRUCT: case TYPE_UNION: return( SYM_INT1 ); case TYPE_ARRAY: return( AsmType( typ->object, flags ) ); case TYPE_FIELD: case TYPE_UFIELD: return( AsmDataType[typ->u.f.field_type] ); case TYPE_FUNCTION: return( AsmCodePtrType( flags ) ); case TYPE_POINTER: return( AsmPtrType( typ->object, typ->u.p.decl_flags ) ); case TYPE_ENUM: typ = typ->object; /* fall through */ default: return( AsmDataType[typ->decl_type] ); } }