hotspot/src/share/vm/c1/c1_ValueType.hpp
changeset 36604 e9c073b0c19e
parent 24424 2658d7834c6e
equal deleted inserted replaced
36603:0bc3ad031d60 36604:e9c073b0c19e
    43 class     DoubleConstant;
    43 class     DoubleConstant;
    44 class   ObjectType;
    44 class   ObjectType;
    45 class     ObjectConstant;
    45 class     ObjectConstant;
    46 class     ArrayType;
    46 class     ArrayType;
    47 class       ArrayConstant;
    47 class       ArrayConstant;
       
    48 class         StableArrayConstant;
    48 class     InstanceType;
    49 class     InstanceType;
    49 class       InstanceConstant;
    50 class       InstanceConstant;
    50 class   MetadataType;
    51 class   MetadataType;
    51 class     ClassType;
    52 class     ClassType;
    52 class       ClassConstant;
    53 class       ClassConstant;
   166   virtual InstanceConstant* as_InstanceConstant(){ return NULL; }
   167   virtual InstanceConstant* as_InstanceConstant(){ return NULL; }
   167   virtual ClassConstant*    as_ClassConstant()   { return NULL; }
   168   virtual ClassConstant*    as_ClassConstant()   { return NULL; }
   168   virtual MethodConstant*   as_MethodConstant()  { return NULL; }
   169   virtual MethodConstant*   as_MethodConstant()  { return NULL; }
   169   virtual MethodDataConstant* as_MethodDataConstant() { return NULL; }
   170   virtual MethodDataConstant* as_MethodDataConstant() { return NULL; }
   170   virtual ArrayConstant*    as_ArrayConstant()   { return NULL; }
   171   virtual ArrayConstant*    as_ArrayConstant()   { return NULL; }
       
   172   virtual StableArrayConstant* as_StableArrayConstant()   { return NULL; }
   171   virtual AddressConstant*  as_AddressConstant() { return NULL; }
   173   virtual AddressConstant*  as_AddressConstant() { return NULL; }
   172 
   174 
   173   // type operations
   175   // type operations
   174   ValueType* meet(ValueType* y) const;
   176   ValueType* meet(ValueType* y) const;
   175   ValueType* join(ValueType* y) const;
   177   ValueType* join(ValueType* y) const;
   353   virtual ArrayConstant* as_ArrayConstant()      { return this; }
   355   virtual ArrayConstant* as_ArrayConstant()      { return this; }
   354   virtual ciObject* constant_value() const;
   356   virtual ciObject* constant_value() const;
   355   virtual ciType* exact_type() const;
   357   virtual ciType* exact_type() const;
   356 };
   358 };
   357 
   359 
       
   360 class StableArrayConstant: public ArrayConstant {
       
   361  private:
       
   362   jint _dimension;
       
   363 
       
   364  public:
       
   365   StableArrayConstant(ciArray* value, jint dimension) : ArrayConstant(value) {
       
   366     assert(dimension > 0, "not a stable array");
       
   367     _dimension = dimension;
       
   368   }
       
   369 
       
   370   jint dimension() const                              { return _dimension; }
       
   371 
       
   372   virtual StableArrayConstant* as_StableArrayConstant() { return this; }
       
   373 };
   358 
   374 
   359 class InstanceType: public ObjectType {
   375 class InstanceType: public ObjectType {
   360  public:
   376  public:
   361   virtual InstanceType* as_InstanceType()        { return this; }
   377   virtual InstanceType* as_InstanceType()        { return this; }
   362 };
   378 };