21 * have any questions.
22 *
23 */
24
25 class ciMethodBlocks;
26 class MethodLiveness;
27 class BitMap;
28 class Arena;
29 class BCEscapeAnalyzer;
30
31
32 // ciMethod
33 //
34 // This class represents a methodOop in the HotSpot virtual
35 // machine.
36 class ciMethod : public ciObject {
37 friend class CompileBroker;
38 CI_PACKAGE_ACCESS
39 friend class ciEnv;
40 friend class ciExceptionHandlerStream;
41
42 private:
43 // General method information.
44 ciFlags _flags;
45 ciSymbol* _name;
46 ciInstanceKlass* _holder;
47 ciSignature* _signature;
48 ciMethodData* _method_data;
49 BCEscapeAnalyzer* _bcea;
50 ciMethodBlocks* _method_blocks;
51
52 // Code attributes.
53 int _code_size;
54 int _max_stack;
55 int _max_locals;
56 vmIntrinsics::ID _intrinsic_id;
57 int _handler_count;
58 int _interpreter_invocation_count;
59 int _interpreter_throwout_count;
60
234 // Other flags
235 bool is_empty_method() const;
236 bool is_vanilla_constructor() const;
237 bool is_final_method() const { return is_final() || holder()->is_final(); }
238 bool has_loops () const;
239 bool has_jsrs () const;
240 bool is_accessor () const;
241 bool is_initializer () const;
242 bool can_be_statically_bound() const { return _can_be_statically_bound; }
243
244 // Print the bytecodes of this method.
245 void print_codes_on(outputStream* st);
246 void print_codes() {
247 print_codes_on(tty);
248 }
249 void print_codes_on(int from, int to, outputStream* st);
250
251 // Print the name of this method in various incarnations.
252 void print_name(outputStream* st = tty);
253 void print_short_name(outputStream* st = tty);
254 };
|
21 * have any questions.
22 *
23 */
24
25 class ciMethodBlocks;
26 class MethodLiveness;
27 class BitMap;
28 class Arena;
29 class BCEscapeAnalyzer;
30
31
32 // ciMethod
33 //
34 // This class represents a methodOop in the HotSpot virtual
35 // machine.
36 class ciMethod : public ciObject {
37 friend class CompileBroker;
38 CI_PACKAGE_ACCESS
39 friend class ciEnv;
40 friend class ciExceptionHandlerStream;
41 friend class ciBytecodeStream;
42 friend class ciMethodHandle;
43
44 private:
45 // General method information.
46 ciFlags _flags;
47 ciSymbol* _name;
48 ciInstanceKlass* _holder;
49 ciSignature* _signature;
50 ciMethodData* _method_data;
51 BCEscapeAnalyzer* _bcea;
52 ciMethodBlocks* _method_blocks;
53
54 // Code attributes.
55 int _code_size;
56 int _max_stack;
57 int _max_locals;
58 vmIntrinsics::ID _intrinsic_id;
59 int _handler_count;
60 int _interpreter_invocation_count;
61 int _interpreter_throwout_count;
62
236 // Other flags
237 bool is_empty_method() const;
238 bool is_vanilla_constructor() const;
239 bool is_final_method() const { return is_final() || holder()->is_final(); }
240 bool has_loops () const;
241 bool has_jsrs () const;
242 bool is_accessor () const;
243 bool is_initializer () const;
244 bool can_be_statically_bound() const { return _can_be_statically_bound; }
245
246 // Print the bytecodes of this method.
247 void print_codes_on(outputStream* st);
248 void print_codes() {
249 print_codes_on(tty);
250 }
251 void print_codes_on(int from, int to, outputStream* st);
252
253 // Print the name of this method in various incarnations.
254 void print_name(outputStream* st = tty);
255 void print_short_name(outputStream* st = tty);
256
257 methodOop get_method_handle_target() {
258 klassOop receiver_limit_oop = NULL;
259 int flags = 0;
260 return MethodHandles::decode_method(get_oop(), receiver_limit_oop, flags);
261 }
262 };
|