hygiene: Do not treat Self
ctor as a local variable
This commit is contained in:
parent
75a369c5b1
commit
805099cf3e
2 changed files with 28 additions and 9 deletions
|
@ -2017,16 +2017,14 @@ impl<'a> Resolver<'a> {
|
|||
if ident.name == keywords::Invalid.name() {
|
||||
return Some(LexicalScopeBinding::Def(Def::Err));
|
||||
}
|
||||
if ns == TypeNS {
|
||||
ident.span = if ident.name == keywords::SelfUpper.name() {
|
||||
// FIXME(jseyfried) improve `Self` hygiene
|
||||
ident.span.with_ctxt(SyntaxContext::empty())
|
||||
} else {
|
||||
ident.span.modern()
|
||||
}
|
||||
ident.span = if ident.name == keywords::SelfUpper.name() {
|
||||
// FIXME(jseyfried) improve `Self` hygiene
|
||||
ident.span.with_ctxt(SyntaxContext::empty())
|
||||
} else if ns == TypeNS {
|
||||
ident.span.modern()
|
||||
} else {
|
||||
ident = ident.modern_and_legacy();
|
||||
}
|
||||
ident.span.modern_and_legacy()
|
||||
};
|
||||
|
||||
// Walk backwards up the ribs in scope.
|
||||
let record_used = record_used_id.is_some();
|
||||
|
|
21
src/test/ui/resolve/issue-57523.rs
Normal file
21
src/test/ui/resolve/issue-57523.rs
Normal file
|
@ -0,0 +1,21 @@
|
|||
// compile-pass
|
||||
|
||||
struct S(u8);
|
||||
|
||||
impl S {
|
||||
fn method1() -> Self {
|
||||
Self(0)
|
||||
}
|
||||
}
|
||||
|
||||
macro_rules! define_method { () => {
|
||||
impl S {
|
||||
fn method2() -> Self {
|
||||
Self(0) // OK
|
||||
}
|
||||
}
|
||||
}}
|
||||
|
||||
define_method!();
|
||||
|
||||
fn main() {}
|
Loading…
Add table
Reference in a new issue