hotspot/src/share/vm/ci/ciSignature.cpp
changeset 8076 96d498ec7ae1
parent 7397 5b173b4ca846
child 8921 14bfe81f2a9d
equal deleted inserted replaced
8075:582dd25571b2 8076:96d498ec7ae1
    45   Arena* arena = env->arena();
    45   Arena* arena = env->arena();
    46   _types = new (arena) GrowableArray<ciType*>(arena, 8, 0, NULL);
    46   _types = new (arena) GrowableArray<ciType*>(arena, 8, 0, NULL);
    47 
    47 
    48   int size = 0;
    48   int size = 0;
    49   int count = 0;
    49   int count = 0;
    50   symbolHandle sh (THREAD, symbol->get_symbolOop());
    50   ResourceMark rm(THREAD);
       
    51   Symbol* sh = symbol->get_symbol();
    51   SignatureStream ss(sh);
    52   SignatureStream ss(sh);
    52   for (; ; ss.next()) {
    53   for (; ; ss.next()) {
    53     // Process one element of the signature
    54     // Process one element of the signature
    54     ciType* type;
    55     ciType* type;
    55     if (!ss.is_object()) {
    56     if (!ss.is_object()) {
    56       type = ciType::make(ss.type());
    57       type = ciType::make(ss.type());
    57     } else {
    58     } else {
    58       symbolOop name = ss.as_symbol(THREAD);
    59       Symbol* name = ss.as_symbol(THREAD);
    59       if (HAS_PENDING_EXCEPTION) {
    60       if (HAS_PENDING_EXCEPTION) {
    60         type = ss.is_array() ? (ciType*)ciEnv::unloaded_ciobjarrayklass()
    61         type = ss.is_array() ? (ciType*)ciEnv::unloaded_ciobjarrayklass()
    61           : (ciType*)ciEnv::unloaded_ciinstance_klass();
    62           : (ciType*)ciEnv::unloaded_ciinstance_klass();
    62         env->record_out_of_memory_failure();
    63         env->record_out_of_memory_failure();
    63         CLEAR_PENDING_EXCEPTION;
    64         CLEAR_PENDING_EXCEPTION;
    64       } else {
    65       } else {
    65         ciSymbol* klass_name = env->get_object(name)->as_symbol();
    66         ciSymbol* klass_name = env->get_symbol(name);
    66         type = env->get_klass_by_name_impl(_accessing_klass, klass_name, false);
    67         type = env->get_klass_by_name_impl(_accessing_klass, klass_name, false);
    67       }
    68       }
    68     }
    69     }
    69     _types->append(type);
    70     _types->append(type);
    70     if (ss.at_return_type()) {
    71     if (ss.at_return_type()) {