a4d1a8f60a
Functor is an imperative representation of function's contract (contrary to ContractDescription, which is a declarative one). ContractDescription is convenient when we deal with sources of contracts declarations (binaries, source), while Functors are convenient for analyzing code with contracts. It means that we have to convert ContractDescription into Functor when we start working with contracts. This computation isn't trivial, and Functor and ContractDescription are in 1-1 correspondence, so we would like to cache Functor for each ContractDescription somewhere. We used to do this in binding trace, in slice FUNCTOR. Now, it turns out that this approach causes "Rewrite at slice" exception, see KT-28847. We won't go into details of why that happens here, you can see the issue comments for details (but be prepared for the very long and nitty-gritty story) This commit removes the problematic slice and introduces another approach, where Functor is attached to the ContractDescription, computed lazily and cached here. ^KT-28847 Fixed