Search in sources :

Example 11 with Field

use of com.oracle.truffle.espresso.impl.Field in project graal by oracle.

the class JniEnv method ToReflectedField.

/**
 * <h3>jobject ToReflectedField(JNIEnv *env, jclass cls, jfieldID fieldID, jboolean isStatic);
 * </h3>
 * <p>
 * Converts a field ID derived from cls to a java.lang.reflect.Field object. isStatic must be
 * set to JNI_TRUE if fieldID refers to a static field, and JNI_FALSE otherwise.
 * <p>
 * Throws OutOfMemoryError and returns 0 if fails.
 */
@JniImpl
@JavaType(java.lang.reflect.Field.class)
public StaticObject ToReflectedField(@JavaType(Class.class) StaticObject unused, @Handle(Field.class) long fieldId, @SuppressWarnings("unused") boolean isStatic) {
    Field field = fieldIds.getObject(fieldId);
    assert field.getDeclaringKlass().isAssignableFrom(unused.getMirrorKlass());
    StaticObject fields = getVM().JVM_GetClassDeclaredFields(field.getDeclaringKlass().mirror(), false);
    for (StaticObject declField : fields.<StaticObject[]>unwrap()) {
        assert InterpreterToVM.instanceOf(declField, getMeta().java_lang_reflect_Field);
        Field f = (Field) getMeta().HIDDEN_FIELD_KEY.getHiddenObject(declField);
        if (field == f) {
            return declField;
        }
    }
    throw EspressoError.shouldNotReachHere("Field not found ", field);
}
Also used : Field(com.oracle.truffle.espresso.impl.Field) StaticObject(com.oracle.truffle.espresso.runtime.StaticObject) JavaType(com.oracle.truffle.espresso.substitutions.JavaType)

Example 12 with Field

use of com.oracle.truffle.espresso.impl.Field in project graal by oracle.

the class JniEnv method SetCharField.

@JniImpl
public void SetCharField(@JavaType(Object.class) StaticObject obj, @Handle(Field.class) long fieldId, char val) {
    Field field = fieldIds.getObject(fieldId);
    field.set(obj, val);
}
Also used : Field(com.oracle.truffle.espresso.impl.Field)

Example 13 with Field

use of com.oracle.truffle.espresso.impl.Field in project graal by oracle.

the class JniEnv method SetStaticIntField.

@JniImpl
public void SetStaticIntField(@SuppressWarnings("unused") @JavaType(Class.class) StaticObject unused, @Handle(Field.class) long fieldId, int val) {
    Field field = fieldIds.getObject(fieldId);
    assert field.isStatic();
    field.set(field.getDeclaringKlass().tryInitializeAndGetStatics(), val);
}
Also used : Field(com.oracle.truffle.espresso.impl.Field)

Example 14 with Field

use of com.oracle.truffle.espresso.impl.Field in project graal by oracle.

the class JniEnv method SetBooleanField.

@JniImpl
public void SetBooleanField(@JavaType(Object.class) StaticObject obj, @Handle(Field.class) long fieldId, boolean val) {
    Field field = fieldIds.getObject(fieldId);
    field.set(obj, val);
}
Also used : Field(com.oracle.truffle.espresso.impl.Field)

Example 15 with Field

use of com.oracle.truffle.espresso.impl.Field in project graal by oracle.

the class JniEnv method SetIntField.

@JniImpl
public void SetIntField(@JavaType(Object.class) StaticObject obj, @Handle(Field.class) long fieldId, int val) {
    Field field = fieldIds.getObject(fieldId);
    field.set(obj, val);
}
Also used : Field(com.oracle.truffle.espresso.impl.Field)

Aggregations

Field (com.oracle.truffle.espresso.impl.Field)60 TruffleBoundary (com.oracle.truffle.api.CompilerDirectives.TruffleBoundary)14 ObjectKlass (com.oracle.truffle.espresso.impl.ObjectKlass)8 Klass (com.oracle.truffle.espresso.impl.Klass)7 Method (com.oracle.truffle.espresso.impl.Method)5 StaticObject (com.oracle.truffle.espresso.runtime.StaticObject)5 JavaType (com.oracle.truffle.espresso.substitutions.JavaType)5 ExportMessage (com.oracle.truffle.api.library.ExportMessage)4 ArrayKlass (com.oracle.truffle.espresso.impl.ArrayKlass)4 Meta (com.oracle.truffle.espresso.meta.Meta)4 ArrayList (java.util.ArrayList)4 Name (com.oracle.truffle.espresso.descriptors.Symbol.Name)3 ParserField (com.oracle.truffle.espresso.impl.ParserField)3 REF_getField (com.oracle.truffle.espresso.classfile.Constants.REF_getField)2 REF_putField (com.oracle.truffle.espresso.classfile.Constants.REF_putField)2 Type (com.oracle.truffle.espresso.descriptors.Symbol.Type)2 NativeType (com.oracle.truffle.espresso.ffi.NativeType)2 ParserKlass (com.oracle.truffle.espresso.impl.ParserKlass)2 ParserMethod (com.oracle.truffle.espresso.impl.ParserMethod)2 RedefineAddedField (com.oracle.truffle.espresso.impl.RedefineAddedField)2