src/share/vm/ci/ciField.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/ci/ciField.cpp	Fri Mar 18 14:59:11 2011
--- new/src/share/vm/ci/ciField.cpp	Fri Mar 18 14:59:11 2011

*** 211,221 **** --- 211,221 ---- // field to be not constant. // 2. The field is a *special* static&final field whose value // may change. The three examples are java.lang.System.in, // java.lang.System.out, and java.lang.System.err. ! KlassHandle k = _holder->get_klassOop(); assert( SystemDictionary::System_klass() != NULL, "Check once per vm"); if( k() == SystemDictionary::System_klass() ) { // Check offsets for case 2: System.in, System.out, or System.err if( _offset == java_lang_System::in_offset_in_bytes() || _offset == java_lang_System::out_offset_in_bytes() ||
*** 223,262 **** --- 223,264 ---- _is_constant = false; return; } } + Handle mirror = k->java_mirror(); + _is_constant = true; switch(type()->basic_type()) { case T_BYTE: ! _constant_value = ciConstant(type()->basic_type(), k->byte_field(_offset)); ! _constant_value = ciConstant(type()->basic_type(), mirror->byte_field(_offset)); break; case T_CHAR: ! _constant_value = ciConstant(type()->basic_type(), k->char_field(_offset)); ! _constant_value = ciConstant(type()->basic_type(), mirror->char_field(_offset)); break; case T_SHORT: ! _constant_value = ciConstant(type()->basic_type(), k->short_field(_offset)); ! _constant_value = ciConstant(type()->basic_type(), mirror->short_field(_offset)); break; case T_BOOLEAN: ! _constant_value = ciConstant(type()->basic_type(), k->bool_field(_offset)); ! _constant_value = ciConstant(type()->basic_type(), mirror->bool_field(_offset)); break; case T_INT: ! _constant_value = ciConstant(type()->basic_type(), k->int_field(_offset)); ! _constant_value = ciConstant(type()->basic_type(), mirror->int_field(_offset)); break; case T_FLOAT: ! _constant_value = ciConstant(k->float_field(_offset)); ! _constant_value = ciConstant(mirror->float_field(_offset)); break; case T_DOUBLE: ! _constant_value = ciConstant(k->double_field(_offset)); ! _constant_value = ciConstant(mirror->double_field(_offset)); break; case T_LONG: ! _constant_value = ciConstant(k->long_field(_offset)); ! _constant_value = ciConstant(mirror->long_field(_offset)); break; case T_OBJECT: case T_ARRAY: { ! oop o = k->obj_field(_offset); ! oop o = mirror->obj_field(_offset); // A field will be "constant" if it is known always to be // a non-null reference to an instance of a particular class, // or to a particular array. This can happen even if the instance // or array is not perm. In such a case, an "unloaded" ciArray

src/share/vm/ci/ciField.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File