< prev index next >

src/share/vm/ci/ciInstance.cpp

Print this page




  45   if (m == NULL || m->klass() != SystemDictionary::Class_klass()) {
  46     return NULL;
  47   }
  48   // Return either a primitive type or a klass.
  49   if (java_lang_Class::is_primitive(m)) {
  50     return ciType::make(java_lang_Class::primitive_type(m));
  51   } else {
  52     Klass* k = java_lang_Class::as_Klass(m);
  53     assert(k != NULL, "");
  54     return CURRENT_THREAD_ENV->get_klass(k);
  55   }
  56 }
  57 
  58 // ------------------------------------------------------------------
  59 // ciInstance::field_value
  60 //
  61 // Constant value of a field.
  62 ciConstant ciInstance::field_value(ciField* field) {
  63   assert(is_loaded(), "invalid access - must be loaded");
  64   assert(field->holder()->is_loaded(), "invalid access - holder must be loaded");
  65   assert(klass()->is_subclass_of(field->holder()), "invalid access - must be subclass");
  66 
  67   VM_ENTRY_MARK;
  68   Handle obj = get_oop();
  69   assert(!obj.is_null(), "bad oop");
  70   BasicType field_btype = field->type()->basic_type();
  71   int offset = field->offset();
  72 
  73   switch(field_btype) {
  74   case T_BYTE:
  75     return ciConstant(field_btype, obj->byte_field(offset));
  76     break;
  77   case T_CHAR:
  78     return ciConstant(field_btype, obj->char_field(offset));
  79     break;
  80   case T_SHORT:
  81     return ciConstant(field_btype, obj->short_field(offset));
  82     break;
  83   case T_BOOLEAN:
  84     return ciConstant(field_btype, obj->bool_field(offset));
  85     break;




  45   if (m == NULL || m->klass() != SystemDictionary::Class_klass()) {
  46     return NULL;
  47   }
  48   // Return either a primitive type or a klass.
  49   if (java_lang_Class::is_primitive(m)) {
  50     return ciType::make(java_lang_Class::primitive_type(m));
  51   } else {
  52     Klass* k = java_lang_Class::as_Klass(m);
  53     assert(k != NULL, "");
  54     return CURRENT_THREAD_ENV->get_klass(k);
  55   }
  56 }
  57 
  58 // ------------------------------------------------------------------
  59 // ciInstance::field_value
  60 //
  61 // Constant value of a field.
  62 ciConstant ciInstance::field_value(ciField* field) {
  63   assert(is_loaded(), "invalid access - must be loaded");
  64   assert(field->holder()->is_loaded(), "invalid access - holder must be loaded");
  65   assert(field->holder()->is_valuetype() || klass()->is_subclass_of(field->holder()), "invalid access - must be subclass");
  66 
  67   VM_ENTRY_MARK;
  68   Handle obj = get_oop();
  69   assert(!obj.is_null(), "bad oop");
  70   BasicType field_btype = field->type()->basic_type();
  71   int offset = field->offset();
  72 
  73   switch(field_btype) {
  74   case T_BYTE:
  75     return ciConstant(field_btype, obj->byte_field(offset));
  76     break;
  77   case T_CHAR:
  78     return ciConstant(field_btype, obj->char_field(offset));
  79     break;
  80   case T_SHORT:
  81     return ciConstant(field_btype, obj->short_field(offset));
  82     break;
  83   case T_BOOLEAN:
  84     return ciConstant(field_btype, obj->bool_field(offset));
  85     break;


< prev index next >