< prev index next >

src/share/vm/ci/ciReplay.cpp

Print this page




 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");


< prev index next >