Various frontend features
Another huge MR of assorted features:
- start refactoring the lifetime annotation generation to make it more understandable and debuggable. This isn't fully done yet and will be further improved in subsequent MRs.
- add the
#linktime
specifier forrr::requires
clauses for requirements that have to be fulfilled at linking time, not by the caller of the function. - refactor the
TypeTranslator
to work without the local function environment. Type translation for the local environment is factored into aLocalTypeTranslator
. This also fixes a few bugs where we accidentally used the local environment when the type we were translating was outside the function scope. - normalize types before translating them, so that we can handle type aliases properly
- export specifications for
impl Trait for ...
blocks in interface files. Since it's hard to uniquely identify implementations in the presence of specialization etc, this is a bit limited currently (see the documentation in spec_format.md) - translate
&str
to()
to handle cases where it's in the code but unreachable. - fix some warnings