55 public:
56 OopMapBlock* _nonstatic_oop_maps;
57 unsigned int _nonstatic_oop_map_count;
58 unsigned int _max_nonstatic_oop_maps;
59
60 OopMapBlocksBuilder(unsigned int max_blocks);
61 OopMapBlock* last_oop_map() const;
62 void initialize_inherited_blocks(OopMapBlock* blocks, unsigned int nof_blocks);
63 void add(int offset, int count);
64 void copy(OopMapBlock* dst);
65 void compact();
66 void print_on(outputStream* st) const;
67 void print_value_on(outputStream* st) const;
68 };
69
70 // Values needed for oopmap and InstanceKlass creation
71 class FieldLayoutInfo : public ResourceObj {
72 public:
73 OopMapBlocksBuilder* oop_map_blocks;
74 int _instance_size;
75 int _nonstatic_field_size;
76 int _static_field_size;
77 bool _has_nonstatic_fields;
78 };
79
80 // Parser for for .class files
81 //
82 // The bytes describing the class file structure is read from a Stream object
83
84 class ClassFileParser {
85 friend class FieldLayoutBuilder;
86 friend class FieldLayout;
87
88 class ClassAnnotationCollector;
89 class FieldAnnotationCollector;
90
91 public:
92 // The ClassFileParser has an associated "publicity" level
93 // It is used to control which subsystems (if any)
94 // will observe the parsing (logging, events, tracing).
490
491 public:
492 ClassFileParser(ClassFileStream* stream,
493 Symbol* name,
494 ClassLoaderData* loader_data,
495 const ClassLoadInfo* cl_info,
496 Publicity pub_level,
497 TRAPS);
498
499 ~ClassFileParser();
500
501 InstanceKlass* create_instance_klass(bool cf_changed_in_CFLH, const ClassInstanceInfo& cl_inst_info, TRAPS);
502
503 const ClassFileStream* clone_stream() const;
504
505 void set_klass_to_deallocate(InstanceKlass* klass);
506
507 int static_field_size() const;
508 int total_oop_map_count() const;
509 jint layout_size() const;
510
511 int vtable_size() const { return _vtable_size; }
512 int itable_size() const { return _itable_size; }
513
514 u2 this_class_index() const { return _this_class_index; }
515
516 bool is_hidden() const { return _is_hidden; }
517 bool is_interface() const { return _access_flags.is_interface(); }
518
519 ClassLoaderData* loader_data() const { return _loader_data; }
520 const Symbol* class_name() const { return _class_name; }
521 const InstanceKlass* super_klass() const { return _super_klass; }
522
523 ReferenceType super_reference_type() const;
524 bool is_instance_ref_klass() const;
525 bool is_java_lang_ref_Reference_subclass() const;
526
527 AccessFlags access_flags() const { return _access_flags; }
528
529 bool is_internal() const { return INTERNAL == _pub_level; }
|
55 public:
56 OopMapBlock* _nonstatic_oop_maps;
57 unsigned int _nonstatic_oop_map_count;
58 unsigned int _max_nonstatic_oop_maps;
59
60 OopMapBlocksBuilder(unsigned int max_blocks);
61 OopMapBlock* last_oop_map() const;
62 void initialize_inherited_blocks(OopMapBlock* blocks, unsigned int nof_blocks);
63 void add(int offset, int count);
64 void copy(OopMapBlock* dst);
65 void compact();
66 void print_on(outputStream* st) const;
67 void print_value_on(outputStream* st) const;
68 };
69
70 // Values needed for oopmap and InstanceKlass creation
71 class FieldLayoutInfo : public ResourceObj {
72 public:
73 OopMapBlocksBuilder* oop_map_blocks;
74 int _instance_size;
75 int _hash_offset;
76 int _nonstatic_field_size;
77 int _static_field_size;
78 bool _has_nonstatic_fields;
79 };
80
81 // Parser for for .class files
82 //
83 // The bytes describing the class file structure is read from a Stream object
84
85 class ClassFileParser {
86 friend class FieldLayoutBuilder;
87 friend class FieldLayout;
88
89 class ClassAnnotationCollector;
90 class FieldAnnotationCollector;
91
92 public:
93 // The ClassFileParser has an associated "publicity" level
94 // It is used to control which subsystems (if any)
95 // will observe the parsing (logging, events, tracing).
491
492 public:
493 ClassFileParser(ClassFileStream* stream,
494 Symbol* name,
495 ClassLoaderData* loader_data,
496 const ClassLoadInfo* cl_info,
497 Publicity pub_level,
498 TRAPS);
499
500 ~ClassFileParser();
501
502 InstanceKlass* create_instance_klass(bool cf_changed_in_CFLH, const ClassInstanceInfo& cl_inst_info, TRAPS);
503
504 const ClassFileStream* clone_stream() const;
505
506 void set_klass_to_deallocate(InstanceKlass* klass);
507
508 int static_field_size() const;
509 int total_oop_map_count() const;
510 jint layout_size() const;
511 int hash_offset() const;
512
513 int vtable_size() const { return _vtable_size; }
514 int itable_size() const { return _itable_size; }
515
516 u2 this_class_index() const { return _this_class_index; }
517
518 bool is_hidden() const { return _is_hidden; }
519 bool is_interface() const { return _access_flags.is_interface(); }
520
521 ClassLoaderData* loader_data() const { return _loader_data; }
522 const Symbol* class_name() const { return _class_name; }
523 const InstanceKlass* super_klass() const { return _super_klass; }
524
525 ReferenceType super_reference_type() const;
526 bool is_instance_ref_klass() const;
527 bool is_java_lang_ref_Reference_subclass() const;
528
529 AccessFlags access_flags() const { return _access_flags; }
530
531 bool is_internal() const { return INTERNAL == _pub_level; }
|