hotspot/src/share/vm/code/dependencies.hpp
changeset 30296 95baefac8485
parent 29201 fee2bbb2ec1d
child 31037 01a5c5fa5681
equal deleted inserted replaced
30226:5f1a3a275862 30296:95baefac8485
   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