Search in sources :

Example 1 with UnknownPrimitiveField

use of com.oracle.svm.core.annotate.UnknownPrimitiveField in project graal by oracle.

the class Inflation method handleUnknownValueField.

private void handleUnknownValueField(AnalysisField field) {
    if (handledUnknownValueFields.contains(field)) {
        return;
    }
    UnknownObjectField unknownObjectField = field.getAnnotation(UnknownObjectField.class);
    UnknownPrimitiveField unknownPrimitiveField = field.getAnnotation(UnknownPrimitiveField.class);
    if (unknownObjectField != null) {
        assert !Modifier.isFinal(field.getModifiers()) : "@UnknownObjectField annotated field " + field.format("%H.%n") + " cannot be final";
        assert field.getJavaKind() == JavaKind.Object;
        field.setCanBeNull(unknownObjectField.canBeNull());
        List<AnalysisType> aAnnotationTypes = extractAnnotationTypes(field, unknownObjectField);
        /*
             * Only if an UnknownValue field is really accessed, we register all the field's
             * sub-types as allocated.
             */
        if (field.isAccessed()) {
            for (AnalysisType type : aAnnotationTypes) {
                type.registerAsAllocated(null);
            }
        }
        /*
             * Use the annotation types, instead of the declared type, in the UnknownObjectField
             * annotated fields initialization.
             */
        handleUnknownObjectField(field, aAnnotationTypes.toArray(new AnalysisType[aAnnotationTypes.size()]));
    } else if (unknownPrimitiveField != null) {
        assert !Modifier.isFinal(field.getModifiers()) : "@UnknownPrimitiveField annotated field " + field.format("%H.%n") + " cannot be final";
        /*
             * Register a primitive field as containing unknown values(s), i.e., is usually written
             * only in hosted code.
             */
        field.registerAsWritten(null);
    }
    handledUnknownValueFields.add(field);
}
Also used : UnknownPrimitiveField(com.oracle.svm.core.annotate.UnknownPrimitiveField) AnalysisType(com.oracle.graal.pointsto.meta.AnalysisType) UnknownObjectField(com.oracle.svm.core.annotate.UnknownObjectField)

Aggregations

AnalysisType (com.oracle.graal.pointsto.meta.AnalysisType)1 UnknownObjectField (com.oracle.svm.core.annotate.UnknownObjectField)1 UnknownPrimitiveField (com.oracle.svm.core.annotate.UnknownPrimitiveField)1