def offer_predicate(viper_ast: ViperAST, from_resource, to_resource, from_val, to_val, from_addr, to_addr, pos=None): return viper_ast.PredicateAccess( [from_resource, to_resource, from_val, to_val, from_addr, to_addr], mangled.OFFER, pos)
def check_call_failed(viper_ast: ViperAST, address, pos=None, info=None): none = viper_ast.NoPerm(pos) predicate = viper_ast.PredicateAccess([address], mangled.FAILED, pos) return viper_ast.GtCmp(viper_ast.CurrentPerm(predicate, pos), none, pos, info)
def call_failed(viper_ast: ViperAST, address, pos=None, info=None): write = viper_ast.FullPerm(pos) predicate = viper_ast.PredicateAccess([address], mangled.FAILED, pos) predicate_acc = viper_ast.PredicateAccessPredicate(predicate, write, pos) return viper_ast.Inhale(predicate_acc, pos, info)
def performs_predicate(viper_ast: ViperAST, function: str, args, pos=None): name = mangled.performs_predicate_name(function) return viper_ast.PredicateAccess(args, name, pos)
def trust_predicate(viper_ast: ViperAST, where, address, by_address, pos=None): return viper_ast.PredicateAccess([where, address, by_address], mangled.TRUST, pos)
def allocation_predicate(viper_ast: ViperAST, resource, address, pos=None): return viper_ast.PredicateAccess([resource, address], mangled.ALLOCATION, pos)