740
741 case 0:
742 if (parsed_two_word == i) continue;
743
744 default:
745 fatal("Unexpected tag: %d", cp->tag_at(i).value());
746 break;
747 }
748
749 }
750 }
751
752 // Initialize a class and fill in the value for a static field.
753 // This is useful when the compile was dependent on the value of
754 // static fields but it's impossible to properly rerun the static
755 // initiailizer.
756 void process_staticfield(TRAPS) {
757 InstanceKlass* k = (InstanceKlass *)parse_klass(CHECK);
758
759 if (k == NULL || ReplaySuppressInitializers == 0 ||
760 ReplaySuppressInitializers == 2 && k->class_loader() == NULL) {
761 return;
762 }
763
764 assert(k->is_initialized(), "must be");
765
766 const char* field_name = parse_escaped_string();
767 const char* field_signature = parse_string();
768 fieldDescriptor fd;
769 Symbol* name = SymbolTable::lookup(field_name, (int)strlen(field_name), CHECK);
770 Symbol* sig = SymbolTable::lookup(field_signature, (int)strlen(field_signature), CHECK);
771 if (!k->find_local_field(name, sig, &fd) ||
772 !fd.is_static() ||
773 fd.has_initial_value()) {
774 report_error(field_name);
775 return;
776 }
777
778 oop java_mirror = k->java_mirror();
779 if (field_signature[0] == '[') {
780 int length = parse_int("array length");
|
740
741 case 0:
742 if (parsed_two_word == i) continue;
743
744 default:
745 fatal("Unexpected tag: %d", cp->tag_at(i).value());
746 break;
747 }
748
749 }
750 }
751
752 // Initialize a class and fill in the value for a static field.
753 // This is useful when the compile was dependent on the value of
754 // static fields but it's impossible to properly rerun the static
755 // initiailizer.
756 void process_staticfield(TRAPS) {
757 InstanceKlass* k = (InstanceKlass *)parse_klass(CHECK);
758
759 if (k == NULL || ReplaySuppressInitializers == 0 ||
760 (ReplaySuppressInitializers == 2 && k->class_loader() == NULL)) {
761 return;
762 }
763
764 assert(k->is_initialized(), "must be");
765
766 const char* field_name = parse_escaped_string();
767 const char* field_signature = parse_string();
768 fieldDescriptor fd;
769 Symbol* name = SymbolTable::lookup(field_name, (int)strlen(field_name), CHECK);
770 Symbol* sig = SymbolTable::lookup(field_signature, (int)strlen(field_signature), CHECK);
771 if (!k->find_local_field(name, sig, &fd) ||
772 !fd.is_static() ||
773 fd.has_initial_value()) {
774 report_error(field_name);
775 return;
776 }
777
778 oop java_mirror = k->java_mirror();
779 if (field_signature[0] == '[') {
780 int length = parse_int("array length");
|