Atomic perform action statements require only a fraction of the box predicate. However, allowing nested perform action statements can lead to box reentry (allowing a thread to acquire the same invariant twice). To prevent box reentry, I imposed the rule that atomic perform action statements are allowed only at the top-level (directly from C or Java code), but not within a pure context. In the future, we might introduce levels (similar to deadlock prevention) to allow nested atomic perform action statements.
Atomic perform action statements require only a fraction of the box predicate. However, allowing nested perform action statements can lead to box reentry (allowing a thread to acquire the same invariant twice). To prevent box reentry, I imposed the rule that atomic perform action statements are allowed only at the top-level (directly from C or Java code), but not within a pure context. In the future, we might introduce levels (similar to deadlock prevention) to allow nested atomic perform action statements.

willempx/verifast,willempx/verifast,willempx/verifast,willempx/verifast,willempx/verifast