39fee12f32
This commit changes the slice implementation used for `USED_AS_EXPRESSION`. Here is the problem as identified and mitigated by this commit: Slices are key-value maps. They are not total over the domain of keys, so "looking up" a key not in the slice is a valid operation, yielding `null`. A binding context is a collection of slices. Binding contexts can be stacked as composite binding contexts to e.g. facilitate scoped analyses. Looking up a key proceeds down the stack, yielding the first non-null value, or `null` if no slice in the stack of binding contexts contain that key. A slice made by `createSimpleSetSlice` models a "set" of keys that can be enlarged by inclusion: adding `(k, true)` to the slice indicates `k` belongs to the set. `(k, false)` indicates non-membership. However, looking up a key _not in_ the slice yields _false_, rather than null. Hence, simple set slices do not compose in composite binding traces. This was encountered porting the expression evaluator to the IR backend. PSI2IR uses `USED_AS_EXPRESSION` to generate expression body functions properly. The frontend analysis of the fragment is layered ontop of the binding context from the editor's analysis of the underlying project being debugged, which contains speficially the analysis results of inline functions called from the fragment.