178 int max_stack() const { check_is_loaded(); return _max_stack; }
179 int max_locals() const { check_is_loaded(); return _max_locals; }
180 vmIntrinsics::ID intrinsic_id() const { check_is_loaded(); return _intrinsic_id; }
181 bool has_exception_handlers() const { check_is_loaded(); return _handler_count > 0; }
182 int exception_table_length() const { check_is_loaded(); return _handler_count; }
183 int interpreter_invocation_count() const { check_is_loaded(); return _interpreter_invocation_count; }
184 int interpreter_throwout_count() const { check_is_loaded(); return _interpreter_throwout_count; }
185 int size_of_parameters() const { check_is_loaded(); return _size_of_parameters; }
186 int nmethod_age() const { check_is_loaded(); return _nmethod_age; }
187
188 // Should the method be compiled with an age counter?
189 bool profile_aging() const;
190
191 // Code size for inlining decisions.
192 int code_size_for_inlining();
193
194 bool caller_sensitive() const { return get_Method()->caller_sensitive(); }
195 bool force_inline() const { return get_Method()->force_inline(); }
196 bool dont_inline() const { return get_Method()->dont_inline(); }
197 bool intrinsic_candidate() const { return get_Method()->intrinsic_candidate(); }
198 bool is_static_initializer() const { return get_Method()->is_static_initializer(); }
199
200 int comp_level();
201 int highest_osr_comp_level();
202
203 Bytecodes::Code java_code_at_bci(int bci) {
204 address bcp = code() + bci;
205 return Bytecodes::java_code_at(NULL, bcp);
206 }
207 Bytecodes::Code raw_code_at_bci(int bci) {
208 address bcp = code() + bci;
209 return Bytecodes::code_at(NULL, bcp);
210 }
211 BCEscapeAnalyzer *get_bcea();
212 ciMethodBlocks *get_method_blocks();
213
214 bool has_linenumber_table() const; // length unknown until decompression
215 u_char* compressed_linenumber_table() const; // not preserved by gc
216
217 int line_number_from_bci(int bci) const;
218
328 bool is_static () const { return flags().is_static(); }
329 bool is_final () const { return flags().is_final(); }
330 bool is_synchronized() const { return flags().is_synchronized(); }
331 bool is_native () const { return flags().is_native(); }
332 bool is_interface () const { return flags().is_interface(); }
333 bool is_abstract () const { return flags().is_abstract(); }
334 bool is_strict () const { return flags().is_strict(); }
335
336 // Other flags
337 bool is_empty_method() const;
338 bool is_vanilla_constructor() const;
339 bool is_final_method() const { return is_final() || holder()->is_final(); }
340 bool is_default_method() const { return !is_abstract() && !is_private() &&
341 holder()->is_interface(); }
342 bool is_overpass () const { check_is_loaded(); return _is_overpass; }
343 bool has_loops () const;
344 bool has_jsrs () const;
345 bool is_getter () const;
346 bool is_setter () const;
347 bool is_accessor () const;
348 bool is_initializer () const;
349 bool can_be_statically_bound() const { return _can_be_statically_bound; }
350 bool has_reserved_stack_access() const { return _has_reserved_stack_access; }
351 bool is_boxing_method() const;
352 bool is_unboxing_method() const;
353 bool is_object_initializer() const;
354
355 // Replay data methods
356 void dump_name_as_ascii(outputStream* st);
357 void dump_replay_data(outputStream* st);
358
359 // Print the bytecodes of this method.
360 void print_codes_on(outputStream* st);
361 void print_codes() {
362 print_codes_on(tty);
363 }
364 void print_codes_on(int from, int to, outputStream* st);
365
366 // Print the name of this method in various incarnations.
367 void print_name(outputStream* st = tty);
368 void print_short_name(outputStream* st = tty);
369
370 static bool is_consistent_info(ciMethod* declared_method, ciMethod* resolved_method);
371
372 // Support for the value type calling convention
373 bool has_scalarized_args() const;
|
178 int max_stack() const { check_is_loaded(); return _max_stack; }
179 int max_locals() const { check_is_loaded(); return _max_locals; }
180 vmIntrinsics::ID intrinsic_id() const { check_is_loaded(); return _intrinsic_id; }
181 bool has_exception_handlers() const { check_is_loaded(); return _handler_count > 0; }
182 int exception_table_length() const { check_is_loaded(); return _handler_count; }
183 int interpreter_invocation_count() const { check_is_loaded(); return _interpreter_invocation_count; }
184 int interpreter_throwout_count() const { check_is_loaded(); return _interpreter_throwout_count; }
185 int size_of_parameters() const { check_is_loaded(); return _size_of_parameters; }
186 int nmethod_age() const { check_is_loaded(); return _nmethod_age; }
187
188 // Should the method be compiled with an age counter?
189 bool profile_aging() const;
190
191 // Code size for inlining decisions.
192 int code_size_for_inlining();
193
194 bool caller_sensitive() const { return get_Method()->caller_sensitive(); }
195 bool force_inline() const { return get_Method()->force_inline(); }
196 bool dont_inline() const { return get_Method()->dont_inline(); }
197 bool intrinsic_candidate() const { return get_Method()->intrinsic_candidate(); }
198 bool is_class_initializer() const { return get_Method()->is_class_initializer(); }
199
200 int comp_level();
201 int highest_osr_comp_level();
202
203 Bytecodes::Code java_code_at_bci(int bci) {
204 address bcp = code() + bci;
205 return Bytecodes::java_code_at(NULL, bcp);
206 }
207 Bytecodes::Code raw_code_at_bci(int bci) {
208 address bcp = code() + bci;
209 return Bytecodes::code_at(NULL, bcp);
210 }
211 BCEscapeAnalyzer *get_bcea();
212 ciMethodBlocks *get_method_blocks();
213
214 bool has_linenumber_table() const; // length unknown until decompression
215 u_char* compressed_linenumber_table() const; // not preserved by gc
216
217 int line_number_from_bci(int bci) const;
218
328 bool is_static () const { return flags().is_static(); }
329 bool is_final () const { return flags().is_final(); }
330 bool is_synchronized() const { return flags().is_synchronized(); }
331 bool is_native () const { return flags().is_native(); }
332 bool is_interface () const { return flags().is_interface(); }
333 bool is_abstract () const { return flags().is_abstract(); }
334 bool is_strict () const { return flags().is_strict(); }
335
336 // Other flags
337 bool is_empty_method() const;
338 bool is_vanilla_constructor() const;
339 bool is_final_method() const { return is_final() || holder()->is_final(); }
340 bool is_default_method() const { return !is_abstract() && !is_private() &&
341 holder()->is_interface(); }
342 bool is_overpass () const { check_is_loaded(); return _is_overpass; }
343 bool has_loops () const;
344 bool has_jsrs () const;
345 bool is_getter () const;
346 bool is_setter () const;
347 bool is_accessor () const;
348 bool can_be_statically_bound() const { return _can_be_statically_bound; }
349 bool has_reserved_stack_access() const { return _has_reserved_stack_access; }
350 bool is_boxing_method() const;
351 bool is_unboxing_method() const;
352 bool is_object_constructor() const;
353 bool is_static_init_factory() const;
354 bool is_object_constructor_or_class_initializer() const;
355
356 // Replay data methods
357 void dump_name_as_ascii(outputStream* st);
358 void dump_replay_data(outputStream* st);
359
360 // Print the bytecodes of this method.
361 void print_codes_on(outputStream* st);
362 void print_codes() {
363 print_codes_on(tty);
364 }
365 void print_codes_on(int from, int to, outputStream* st);
366
367 // Print the name of this method in various incarnations.
368 void print_name(outputStream* st = tty);
369 void print_short_name(outputStream* st = tty);
370
371 static bool is_consistent_info(ciMethod* declared_method, ciMethod* resolved_method);
372
373 // Support for the value type calling convention
374 bool has_scalarized_args() const;
|