< prev index next >

src/hotspot/share/classfile/stackMapFrame.cpp

Print this page

 64     }
 65   }
 66   for (i = 0; i < _stack_size; i++) {
 67     if (_stack[i].equals(old_object)) {
 68       _stack[i] = new_object;
 69     }
 70   }
 71   if (old_object == VerificationType::uninitialized_this_type()) {
 72     // "this" has been initialized - reset flags
 73     _flags = 0;
 74   }
 75 }
 76 
 77 VerificationType StackMapFrame::set_locals_from_arg(
 78     const methodHandle& m, VerificationType thisKlass) {
 79   SignatureStream ss(m->signature());
 80   int init_local_num = 0;
 81   if (!m->is_static()) {
 82     init_local_num++;
 83     // add one extra argument for instance method
 84     if (m->name() == vmSymbols::object_initializer_name() &&
 85        thisKlass.name() != vmSymbols::java_lang_Object()) {
 86       _locals[0] = VerificationType::uninitialized_this_type();
 87       _flags |= FLAG_THIS_UNINIT;
 88     } else {
 89       _locals[0] = thisKlass;
 90     }
 91   }
 92 
 93   // local num may be greater than size of parameters because long/double occupies two slots
 94   while(!ss.at_return_type()) {
 95     init_local_num += _verifier->change_sig_to_verificationType(
 96       &ss, &_locals[init_local_num]);
 97     ss.next();
 98   }
 99   _locals_size = init_local_num;
100 
101   switch (ss.type()) {
102     case T_OBJECT:
103     case T_ARRAY:
104     {

 64     }
 65   }
 66   for (i = 0; i < _stack_size; i++) {
 67     if (_stack[i].equals(old_object)) {
 68       _stack[i] = new_object;
 69     }
 70   }
 71   if (old_object == VerificationType::uninitialized_this_type()) {
 72     // "this" has been initialized - reset flags
 73     _flags = 0;
 74   }
 75 }
 76 
 77 VerificationType StackMapFrame::set_locals_from_arg(
 78     const methodHandle& m, VerificationType thisKlass) {
 79   SignatureStream ss(m->signature());
 80   int init_local_num = 0;
 81   if (!m->is_static()) {
 82     init_local_num++;
 83     // add one extra argument for instance method
 84     if (m->is_object_constructor() &&
 85        thisKlass.name() != vmSymbols::java_lang_Object()) {
 86       _locals[0] = VerificationType::uninitialized_this_type();
 87       _flags |= FLAG_THIS_UNINIT;
 88     } else {
 89       _locals[0] = thisKlass;
 90     }
 91   }
 92 
 93   // local num may be greater than size of parameters because long/double occupies two slots
 94   while(!ss.at_return_type()) {
 95     init_local_num += _verifier->change_sig_to_verificationType(
 96       &ss, &_locals[init_local_num]);
 97     ss.next();
 98   }
 99   _locals_size = init_local_num;
100 
101   switch (ss.type()) {
102     case T_OBJECT:
103     case T_ARRAY:
104     {
< prev index next >