84 int _size_of_parameters; 85 86 bool _uses_monitors; 87 bool _balanced_monitors; 88 bool _is_c1_compilable; 89 bool _is_c2_compilable; 90 bool _can_be_statically_bound; 91 bool _has_reserved_stack_access; 92 93 // Lazy fields, filled in on demand 94 address _code; 95 ciExceptionHandler** _exception_handlers; 96 97 // Optional liveness analyzer. 98 MethodLiveness* _liveness; 99 #if defined(COMPILER2) || defined(SHARK) 100 ciTypeFlow* _flow; 101 BCEscapeAnalyzer* _bcea; 102 #endif 103 104 ciMethod(methodHandle h_m, ciInstanceKlass* holder); 105 ciMethod(ciInstanceKlass* holder, ciSymbol* name, ciSymbol* signature, ciInstanceKlass* accessor); 106 107 oop loader() const { return _holder->loader(); } 108 109 const char* type_string() { return "ciMethod"; } 110 111 void print_impl(outputStream* st); 112 113 void load_code(); 114 115 bool ensure_method_data(methodHandle h_m); 116 117 void code_at_put(int bci, Bytecodes::Code code) { 118 Bytecodes::check(code); 119 assert(0 <= bci && bci < code_size(), "valid bci"); 120 address bcp = _code + bci; 121 *bcp = code; 122 } 123 124 // Check bytecode and profile data collected are compatible 125 void assert_virtual_call_type_ok(int bci); 126 void assert_call_type_ok(int bci); 127 128 public: 129 void check_is_loaded() const { assert(is_loaded(), "not loaded"); } 130 131 // Basic method information. 132 ciFlags flags() const { check_is_loaded(); return _flags; } 133 ciSymbol* name() const { return _name; } 134 ciInstanceKlass* holder() const { return _holder; } 135 ciMethodData* method_data(); | 84 int _size_of_parameters; 85 86 bool _uses_monitors; 87 bool _balanced_monitors; 88 bool _is_c1_compilable; 89 bool _is_c2_compilable; 90 bool _can_be_statically_bound; 91 bool _has_reserved_stack_access; 92 93 // Lazy fields, filled in on demand 94 address _code; 95 ciExceptionHandler** _exception_handlers; 96 97 // Optional liveness analyzer. 98 MethodLiveness* _liveness; 99 #if defined(COMPILER2) || defined(SHARK) 100 ciTypeFlow* _flow; 101 BCEscapeAnalyzer* _bcea; 102 #endif 103 104 ciMethod(const methodHandle& h_m, ciInstanceKlass* holder); 105 ciMethod(ciInstanceKlass* holder, ciSymbol* name, ciSymbol* signature, ciInstanceKlass* accessor); 106 107 oop loader() const { return _holder->loader(); } 108 109 const char* type_string() { return "ciMethod"; } 110 111 void print_impl(outputStream* st); 112 113 void load_code(); 114 115 bool ensure_method_data(const methodHandle& h_m); 116 117 void code_at_put(int bci, Bytecodes::Code code) { 118 Bytecodes::check(code); 119 assert(0 <= bci && bci < code_size(), "valid bci"); 120 address bcp = _code + bci; 121 *bcp = code; 122 } 123 124 // Check bytecode and profile data collected are compatible 125 void assert_virtual_call_type_ok(int bci); 126 void assert_call_type_ok(int bci); 127 128 public: 129 void check_is_loaded() const { assert(is_loaded(), "not loaded"); } 130 131 // Basic method information. 132 ciFlags flags() const { check_is_loaded(); return _flags; } 133 ciSymbol* name() const { return _name; } 134 ciInstanceKlass* holder() const { return _holder; } 135 ciMethodData* method_data(); |