return (address)a > (address)b ? +1 : -1; } static vmSymbols::SID vm_symbol_index[vmSymbols::SID_LIMIT]; extern "C" { static int compare_vmsymbol_sid(const void* void_a, const void* void_b) { Symbol* a = vmSymbols::symbol_at(*((vmSymbols::SID*) void_a)); Symbol* b = vmSymbols::symbol_at(*((vmSymbols::SID*) void_b)); return compare_symbol(a, b); } } #ifndef PRODUCT #define VM_SYMBOL_ENUM_NAME_BODY(name, string) #name "\0" static const char* vm_symbol_enum_names = VM_SYMBOLS_DO(VM_SYMBOL_ENUM_NAME_BODY, VM_ALIAS_IGNORE) "\0"; static const char* vm_symbol_enum_name(vmSymbols::SID sid) { const char* string = &vm_symbol_enum_names[0]; int skip = (int)sid - (int)vmSymbols::FIRST_SID; for (; skip != 0; skip--) { size_t skiplen = strlen(string); if (skiplen == 0) return "<unknown>"; // overflow string += skiplen+1; } return string; } #endif //PRODUCT // Put all the VM symbol strings in one place. // Makes for a more compact libjvm.
# include "incls/_Symbols.cpp.incl" #if !ROMIZED_PRODUCT int system_symbols[Symbols::__number_of_system_symbols]; #define VM_SYMBOL_REGULAR(name, string) {string, false}, #define VM_SYMBOL_SIGNATURE(name, string) {string, true}, struct SymbolDefinition { const char * string; bool is_signature; }; static const SymbolDefinition definitions[] = { VM_SYMBOLS_DO(VM_SYMBOL_REGULAR, VM_SYMBOL_SIGNATURE) }; void Symbols::initialize(JVM_SINGLE_ARG_TRAPS) { UsingFastOops fast_oops; Symbol::Fast sym; for (int i = 0; i < number_of_system_symbols(); i++) { char* string = (char*)definitions[i].string; if (definitions[i].is_signature) { sym = TypeSymbol::parse(string JVM_CHECK); } else { sym = SymbolTable::symbol_for(string JVM_CHECK); } *at(i) = sym; } }