2675 // 4-tuples of shorts of inner classes data and 2 shorts of enclosing
2676 // method data:
2677 // [inner_class_info_index,
2678 // outer_class_info_index,
2679 // inner_name_index,
2680 // inner_class_access_flags,
2681 // ...
2682 // enclosing_method_class_index,
2683 // enclosing_method_method_index]
2684 int size = length * 4 + (parsed_enclosingmethod_attribute ? 2 : 0);
2685 Array<u2>* inner_classes = MetadataFactory::new_array<u2>(_loader_data, size, CHECK_0);
2686 _inner_classes = inner_classes;
2687
2688 int index = 0;
2689 int cp_size = _cp->length();
2690 cfs->guarantee_more(8 * length, CHECK_0); // 4-tuples of u2
2691 for (int n = 0; n < length; n++) {
2692 // Inner class index
2693 u2 inner_class_info_index = cfs->get_u2_fast();
2694 check_property(
2695 inner_class_info_index == 0 ||
2696 valid_klass_reference_at(inner_class_info_index),
2697 "inner_class_info_index %u has bad constant type in class file %s",
2698 inner_class_info_index, CHECK_0);
2699 // Outer class index
2700 u2 outer_class_info_index = cfs->get_u2_fast();
2701 check_property(
2702 outer_class_info_index == 0 ||
2703 valid_klass_reference_at(outer_class_info_index),
2704 "outer_class_info_index %u has bad constant type in class file %s",
2705 outer_class_info_index, CHECK_0);
2706 // Inner class name
2707 u2 inner_name_index = cfs->get_u2_fast();
2708 check_property(
2709 inner_name_index == 0 || valid_symbol_at(inner_name_index),
2710 "inner_name_index %u has bad constant type in class file %s",
2711 inner_name_index, CHECK_0);
2712 if (_need_verify) {
2713 guarantee_property(inner_class_info_index != outer_class_info_index,
2714 "Class is both outer and inner class in class file %s", CHECK_0);
2715 }
|
2675 // 4-tuples of shorts of inner classes data and 2 shorts of enclosing
2676 // method data:
2677 // [inner_class_info_index,
2678 // outer_class_info_index,
2679 // inner_name_index,
2680 // inner_class_access_flags,
2681 // ...
2682 // enclosing_method_class_index,
2683 // enclosing_method_method_index]
2684 int size = length * 4 + (parsed_enclosingmethod_attribute ? 2 : 0);
2685 Array<u2>* inner_classes = MetadataFactory::new_array<u2>(_loader_data, size, CHECK_0);
2686 _inner_classes = inner_classes;
2687
2688 int index = 0;
2689 int cp_size = _cp->length();
2690 cfs->guarantee_more(8 * length, CHECK_0); // 4-tuples of u2
2691 for (int n = 0; n < length; n++) {
2692 // Inner class index
2693 u2 inner_class_info_index = cfs->get_u2_fast();
2694 check_property(
2695 valid_klass_reference_at(inner_class_info_index),
2696 "inner_class_info_index %u has bad constant type in class file %s",
2697 inner_class_info_index, CHECK_0);
2698 // Outer class index
2699 u2 outer_class_info_index = cfs->get_u2_fast();
2700 check_property(
2701 outer_class_info_index == 0 ||
2702 valid_klass_reference_at(outer_class_info_index),
2703 "outer_class_info_index %u has bad constant type in class file %s",
2704 outer_class_info_index, CHECK_0);
2705 // Inner class name
2706 u2 inner_name_index = cfs->get_u2_fast();
2707 check_property(
2708 inner_name_index == 0 || valid_symbol_at(inner_name_index),
2709 "inner_name_index %u has bad constant type in class file %s",
2710 inner_name_index, CHECK_0);
2711 if (_need_verify) {
2712 guarantee_property(inner_class_info_index != outer_class_info_index,
2713 "Class is both outer and inner class in class file %s", CHECK_0);
2714 }
|