Add Expr::Underscore

This commit is contained in:
Ryo Yoshida 2022-05-27 02:14:06 +09:00
parent e10799536a
commit c1c867506b
No known key found for this signature in database
GPG Key ID: E25698A930586171
3 changed files with 9 additions and 1 deletions

View File

@ -536,7 +536,7 @@ impl ExprCollector<'_> {
self.alloc_expr(Expr::MacroStmts { tail }, syntax_ptr)
}
ast::Expr::UnderscoreExpr(_) => return None,
ast::Expr::UnderscoreExpr(_) => self.alloc_expr(Expr::Underscore, syntax_ptr),
})
}

View File

@ -203,6 +203,7 @@ pub enum Expr {
},
Array(Array),
Literal(Literal),
Underscore,
}
#[derive(Debug, Clone, Eq, PartialEq)]
@ -345,6 +346,7 @@ impl Expr {
},
Expr::MacroStmts { tail } => f(*tail),
Expr::Literal(_) => {}
Expr::Underscore => {}
}
}
}

View File

@ -775,6 +775,12 @@ impl<'a> InferenceContext<'a> {
},
},
Expr::MacroStmts { tail } => self.infer_expr_inner(*tail, expected),
Expr::Underscore => {
// Underscore expressions may only appear in assignee expressions,
// which are handled by `infer_assignee_expr()`, so any underscore
// expression reaching this branch is an error.
self.err_ty()
}
};
// use a new type variable if we got unknown here
let ty = self.insert_type_vars_shallow(ty);