Работа с точными / неточными значениями DomainValues ​​в абстрактной интерпретации является OPAL

В моем OPAL-анализе я создаю доменные значения следующим образом:

domain.TypedValue(org.opalj.ai.parameterToValueIndex(
    caller.isStatic, caller.descriptor, index), typeApproximation.upperTypeBound)

В моих объектах typeApproximation у меня есть информация, является ли его тип верхним пределом или точным типом времени выполнения. Однако я не знаю, как передать эту информацию соответствующему DomainValue.

Я передаю эти DomainValues BaseAI.perform Метод для выполнения абстрактной интерпретации Java-метода:

BaseAI.perform(classFile, caller, domain)(Some(parameters))

Значения DomainValues ​​содержатся в значении параметров.

Есть ли возможность сказать абстрактной интерпретации, что некоторые из моих параметров являются точными типами времени выполнения, а некоторые другие параметры являются только верхними границами типов?

1 ответ

Решение

Фабричные методы определены org.opalj.ai.ReferenceValuesFactory (которые всегда доступны) позволяют создавать значения с необходимыми свойствами. Например, используя InitializedObjectValue Будет создано DomainValue, где тип считается точным. Используя фабричный метод: ReferenceValue данный тип обрабатывается как верхняя граница типа. Кроме того, org.opalj.ai.l1.DefaultReferenceValuesBinding определяет общий фабричный метод:

def ObjectValue(
    origin:            ValueOrigin,
    isNull:            Answer,
    isPrecise:         Boolean,
    theUpperTypeBound: ObjectType,
    t:                 Timestamp
): SObjectValue 

который дает вам полный контроль.

Другие вопросы по тегам