172 |
172 |
173 non_klass_types = (1 << call_site_target_value), |
173 non_klass_types = (1 << call_site_target_value), |
174 klass_types = all_types & ~non_klass_types, |
174 klass_types = all_types & ~non_klass_types, |
175 |
175 |
176 non_ctxk_types = (1 << evol_method), |
176 non_ctxk_types = (1 << evol_method), |
177 implicit_ctxk_types = (1 << call_site_target_value), |
177 implicit_ctxk_types = 0, |
178 explicit_ctxk_types = all_types & ~(non_ctxk_types | implicit_ctxk_types), |
178 explicit_ctxk_types = all_types & ~(non_ctxk_types | implicit_ctxk_types), |
179 |
179 |
180 max_arg_count = 3, // current maximum number of arguments (incl. ctxk) |
180 max_arg_count = 3, // current maximum number of arguments (incl. ctxk) |
181 |
181 |
182 // A "context type" is a class or interface that |
182 // A "context type" is a class or interface that |
328 static Klass* check_abstract_with_exclusive_concrete_subtypes(Klass* ctxk, Klass* k1, Klass* k2, |
328 static Klass* check_abstract_with_exclusive_concrete_subtypes(Klass* ctxk, Klass* k1, Klass* k2, |
329 KlassDepChange* changes = NULL); |
329 KlassDepChange* changes = NULL); |
330 static Klass* check_exclusive_concrete_methods(Klass* ctxk, Method* m1, Method* m2, |
330 static Klass* check_exclusive_concrete_methods(Klass* ctxk, Method* m1, Method* m2, |
331 KlassDepChange* changes = NULL); |
331 KlassDepChange* changes = NULL); |
332 static Klass* check_has_no_finalizable_subclasses(Klass* ctxk, KlassDepChange* changes = NULL); |
332 static Klass* check_has_no_finalizable_subclasses(Klass* ctxk, KlassDepChange* changes = NULL); |
333 static Klass* check_call_site_target_value(oop call_site, oop method_handle, CallSiteDepChange* changes = NULL); |
333 static Klass* check_call_site_target_value(Klass* recorded_ctxk, oop call_site, oop method_handle, CallSiteDepChange* changes = NULL); |
334 // A returned Klass* is NULL if the dependency assertion is still |
334 // A returned Klass* is NULL if the dependency assertion is still |
335 // valid. A non-NULL Klass* is a 'witness' to the assertion |
335 // valid. A non-NULL Klass* is a 'witness' to the assertion |
336 // failure, a point in the class hierarchy where the assertion has |
336 // failure, a point in the class hierarchy where the assertion has |
337 // been proven false. For example, if check_leaf_type returns |
337 // been proven false. For example, if check_leaf_type returns |
338 // non-NULL, the value is a subtype of the supposed leaf type. This |
338 // non-NULL, the value is a subtype of the supposed leaf type. This |
494 } |
494 } |
495 |
495 |
496 bool next(); |
496 bool next(); |
497 |
497 |
498 DepType type() { return _type; } |
498 DepType type() { return _type; } |
499 bool has_oop_argument() { return type() == call_site_target_value; } |
499 bool is_oop_argument(int i) { return type() == call_site_target_value && i > 0; } |
500 uintptr_t get_identifier(int i); |
500 uintptr_t get_identifier(int i); |
501 |
501 |
502 int argument_count() { return dep_args(type()); } |
502 int argument_count() { return dep_args(type()); } |
503 int argument_index(int i) { assert(0 <= i && i < argument_count(), "oob"); |
503 int argument_index(int i) { assert(0 <= i && i < argument_count(), "oob"); |
504 return _xi[i]; } |
504 return _xi[i]; } |
680 CallSiteDepChange(Handle call_site, Handle method_handle) |
680 CallSiteDepChange(Handle call_site, Handle method_handle) |
681 : _call_site(call_site), |
681 : _call_site(call_site), |
682 _method_handle(method_handle) |
682 _method_handle(method_handle) |
683 { |
683 { |
684 assert(_call_site() ->is_a(SystemDictionary::CallSite_klass()), "must be"); |
684 assert(_call_site() ->is_a(SystemDictionary::CallSite_klass()), "must be"); |
685 assert(_method_handle()->is_a(SystemDictionary::MethodHandle_klass()), "must be"); |
685 assert(_method_handle.is_null() || _method_handle()->is_a(SystemDictionary::MethodHandle_klass()), "must be"); |
686 } |
686 } |
687 |
687 |
688 // What kind of DepChange is this? |
688 // What kind of DepChange is this? |
689 virtual bool is_call_site_change() const { return true; } |
689 virtual bool is_call_site_change() const { return true; } |
690 |
690 |