summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_ast/src/ast.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:59:24 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:59:24 +0000
commit023939b627b7dc93b01471f7d41fb8553ddb4ffa (patch)
tree60fc59477c605c72b0a1051409062ddecc43f877 /compiler/rustc_ast/src/ast.rs
parentAdding debian version 1.72.1+dfsg1-1. (diff)
downloadrustc-023939b627b7dc93b01471f7d41fb8553ddb4ffa.tar.xz
rustc-023939b627b7dc93b01471f7d41fb8553ddb4ffa.zip
Merging upstream version 1.73.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'compiler/rustc_ast/src/ast.rs')
-rw-r--r--compiler/rustc_ast/src/ast.rs54
1 files changed, 23 insertions, 31 deletions
diff --git a/compiler/rustc_ast/src/ast.rs b/compiler/rustc_ast/src/ast.rs
index a7198fbf8..58725a08c 100644
--- a/compiler/rustc_ast/src/ast.rs
+++ b/compiler/rustc_ast/src/ast.rs
@@ -14,7 +14,7 @@
//! - [`Generics`], [`GenericParam`], [`WhereClause`]: Metadata associated with generic parameters.
//! - [`EnumDef`] and [`Variant`]: Enum declaration.
//! - [`MetaItemLit`] and [`LitKind`]: Literal expressions.
-//! - [`MacroDef`], [`MacStmtStyle`], [`MacCall`], [`MacDelimiter`]: Macro definition and invocation.
+//! - [`MacroDef`], [`MacStmtStyle`], [`MacCall`]: Macro definition and invocation.
//! - [`Attribute`]: Metadata associated with item.
//! - [`UnOp`], [`BinOp`], and [`BinOpKind`]: Unary and binary operators.
@@ -313,6 +313,16 @@ pub enum TraitBoundModifier {
MaybeConstMaybe,
}
+impl TraitBoundModifier {
+ pub fn to_constness(self) -> Const {
+ match self {
+ // FIXME(effects) span
+ Self::MaybeConst => Const::Yes(DUMMY_SP),
+ _ => Const::No,
+ }
+ }
+}
+
/// The AST represents all type param bounds as types.
/// `typeck::collect::compute_bounds` matches these against
/// the "special" built-in traits (see `middle::lang_items`) and
@@ -1462,7 +1472,8 @@ pub enum ExprKind {
/// Access of a named (e.g., `obj.foo`) or unnamed (e.g., `obj.0`) struct field.
Field(P<Expr>, Ident),
/// An indexing operation (e.g., `foo[2]`).
- Index(P<Expr>, P<Expr>),
+ /// The span represents the span of the `[2]`, including brackets.
+ Index(P<Expr>, P<Expr>, Span),
/// A range (e.g., `1..2`, `1..`, `..2`, `1..=2`, `..=2`; and `..` in destructuring assignment).
Range(Option<P<Expr>>, Option<P<Expr>>, RangeLimits),
/// An underscore, used in destructuring assignment to ignore a value.
@@ -1693,7 +1704,7 @@ where
#[derive(Clone, Encodable, Decodable, Debug)]
pub struct DelimArgs {
pub dspan: DelimSpan,
- pub delim: MacDelimiter,
+ pub delim: Delimiter, // Note: `Delimiter::Invisible` never occurs
pub tokens: TokenStream,
}
@@ -1701,7 +1712,7 @@ impl DelimArgs {
/// Whether a macro with these arguments needs a semicolon
/// when used as a standalone item or statement.
pub fn need_semicolon(&self) -> bool {
- !matches!(self, DelimArgs { delim: MacDelimiter::Brace, .. })
+ !matches!(self, DelimArgs { delim: Delimiter::Brace, .. })
}
}
@@ -1717,32 +1728,6 @@ where
}
}
-#[derive(Copy, Clone, PartialEq, Eq, Encodable, Decodable, Debug, HashStable_Generic)]
-pub enum MacDelimiter {
- Parenthesis,
- Bracket,
- Brace,
-}
-
-impl MacDelimiter {
- pub fn to_token(self) -> Delimiter {
- match self {
- MacDelimiter::Parenthesis => Delimiter::Parenthesis,
- MacDelimiter::Bracket => Delimiter::Bracket,
- MacDelimiter::Brace => Delimiter::Brace,
- }
- }
-
- pub fn from_token(delim: Delimiter) -> Option<MacDelimiter> {
- match delim {
- Delimiter::Parenthesis => Some(MacDelimiter::Parenthesis),
- Delimiter::Bracket => Some(MacDelimiter::Bracket),
- Delimiter::Brace => Some(MacDelimiter::Brace),
- Delimiter::Invisible => None,
- }
- }
-}
-
/// Represents a macro definition.
#[derive(Clone, Encodable, Decodable, Debug, HashStable_Generic)]
pub struct MacroDef {
@@ -2353,7 +2338,12 @@ impl Param {
/// Builds a `Param` object from `ExplicitSelf`.
pub fn from_self(attrs: AttrVec, eself: ExplicitSelf, eself_ident: Ident) -> Param {
let span = eself.span.to(eself_ident.span);
- let infer_ty = P(Ty { id: DUMMY_NODE_ID, kind: TyKind::ImplicitSelf, span, tokens: None });
+ let infer_ty = P(Ty {
+ id: DUMMY_NODE_ID,
+ kind: TyKind::ImplicitSelf,
+ span: eself_ident.span,
+ tokens: None,
+ });
let (mutbl, ty) = match eself.node {
SelfKind::Explicit(ty, mutbl) => (mutbl, ty),
SelfKind::Value(mutbl) => (mutbl, infer_ty),
@@ -2942,6 +2932,7 @@ pub struct StaticItem {
#[derive(Clone, Encodable, Decodable, Debug)]
pub struct ConstItem {
pub defaultness: Defaultness,
+ pub generics: Generics,
pub ty: P<Ty>,
pub expr: Option<P<Expr>>,
}
@@ -3053,6 +3044,7 @@ impl ItemKind {
match self {
Self::Fn(box Fn { generics, .. })
| Self::TyAlias(box TyAlias { generics, .. })
+ | Self::Const(box ConstItem { generics, .. })
| Self::Enum(_, generics)
| Self::Struct(_, generics)
| Self::Union(_, generics)