При вызове методов, которые изменяют поля в классе, я получаю сообщение об ошибке, если класс был создан с фабрикой:
class Counter {
var i: int;
constructor() {
i := 0;
}
method Count()
modifies this
{
i := i + 1;
}
}
method CounterFactory() returns (r: Counter)
{
r := new Counter();
}
method Main() {
var counter := CounterFactory();
counter.Count(); // <~~ Error: call may violate context's modifies clause
}
Когда я заменяю строку непосредственно над ошибкой на var counter := new Counter();
, верификатор не жалуется.