Skip to content

Commit c897092

Browse files
Implement resolution, parse use<Self>
1 parent fc9e344 commit c897092

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

compiler/rustc_parse/src/parser/ty.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,13 @@ impl<'a> Parser<'a> {
694694
&TokenKind::Gt,
695695
SeqSep::trailing_allowed(token::Comma),
696696
|self_| {
697-
if self_.check_ident() {
697+
if self_.check_keyword(kw::SelfUpper) {
698+
self_.bump();
699+
Ok(PreciseCapturingArg::Arg(
700+
self_.prev_token.ident().unwrap().0,
701+
DUMMY_NODE_ID,
702+
))
703+
} else if self_.check_ident() {
698704
Ok(PreciseCapturingArg::Arg(self_.parse_ident().unwrap(), DUMMY_NODE_ID))
699705
} else if self_.check_lifetime() {
700706
Ok(PreciseCapturingArg::Lifetime(self_.expect_lifetime()))

compiler/rustc_resolve/src/late.rs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1055,8 +1055,28 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast,
10551055
fn visit_precise_capturing_arg(&mut self, arg: &'ast PreciseCapturingArg) {
10561056
match arg {
10571057
PreciseCapturingArg::Lifetime(_) => visit::walk_precise_capturing_arg(self, arg),
1058-
PreciseCapturingArg::Arg(ident, _) => {
1059-
todo!("cannot resolve args yet: {ident}");
1058+
PreciseCapturingArg::Arg(ident, node_id) => {
1059+
let ident = ident.normalize_to_macros_2_0();
1060+
'found: {
1061+
for (rib_t, rib_v) in
1062+
std::iter::zip(&self.ribs.type_ns, &self.ribs.value_ns).rev()
1063+
{
1064+
if let Some(res) = rib_t.bindings.get(&ident).or(rib_v.bindings.get(&ident))
1065+
{
1066+
self.r.record_partial_res(*node_id, PartialRes::new(*res));
1067+
break 'found;
1068+
}
1069+
}
1070+
self.report_error(
1071+
ident.span,
1072+
ResolutionError::FailedToResolve {
1073+
segment: Some(ident.name),
1074+
label: "could not find type or const parameter".to_string(),
1075+
suggestion: None,
1076+
module: None,
1077+
},
1078+
);
1079+
}
10601080
}
10611081
}
10621082
}

0 commit comments

Comments
 (0)