// Copyright (C) 2020-2023 Free Software Foundation, Inc. // This file is part of GCC. // GCC is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free // Software Foundation; either version 3, or (at your option) any later // version. // GCC is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License // for more details. // You should have received a copy of the GNU General Public License // along with GCC; see the file COPYING3. If not see // . #ifndef RUST_AST_FULL_DECLS_H #define RUST_AST_FULL_DECLS_H // Forward declarations for all AST classes. Useful for not having to include // all definitions. namespace Rust { namespace AST { // rust-ast.h class AttrInput; class TokenTree; class MacroMatch; class Token; struct Literal; class DelimTokenTree; class PathSegment; class SimplePathSegment; class SimplePath; struct Attribute; class MetaItemInner; class AttrInputMetaItemContainer; class MetaItem; class Stmt; class Item; class Expr; class ExprWithoutBlock; class IdentifierExpr; class Pattern; class Type; class TypeNoBounds; class TypeParamBound; class Lifetime; class GenericParam; class LifetimeParam; class ConstGenericParam; class TraitItem; class InherentImplItem; class TraitImplItem; struct Crate; class PathExpr; // rust-path.h class PathIdentSegment; struct GenericArgsBinding; struct GenericArgs; class PathExprSegment; class PathPattern; class PathInExpression; class TypePathSegment; class TypePathSegmentGeneric; struct TypePathFunction; class TypePathSegmentFunction; class TypePath; struct QualifiedPathType; class QualifiedPathInExpression; class QualifiedPathInType; // rust-expr.h class ExprWithBlock; class LiteralExpr; class AttrInputLiteral; class MetaItemLitExpr; class MetaItemPathLit; class OperatorExpr; class BorrowExpr; class DereferenceExpr; class ErrorPropagationExpr; class NegationExpr; class ArithmeticOrLogicalExpr; class ComparisonExpr; class LazyBooleanExpr; class TypeCastExpr; class AssignmentExpr; class CompoundAssignmentExpr; class GroupedExpr; class ArrayElems; class ArrayElemsValues; class ArrayElemsCopied; class ArrayExpr; class ArrayIndexExpr; class TupleExpr; class TupleIndexExpr; class StructExpr; class StructExprStruct; struct StructBase; class StructExprField; class StructExprFieldIdentifier; class StructExprFieldWithVal; class StructExprFieldIdentifierValue; class StructExprFieldIndexValue; class StructExprStructFields; class StructExprStructBase; class CallExpr; class MethodCallExpr; class FieldAccessExpr; struct ClosureParam; class ClosureExpr; class ClosureExprInner; class BlockExpr; class ClosureExprInnerTyped; class ContinueExpr; class BreakExpr; class RangeExpr; class RangeFromToExpr; class RangeFromExpr; class RangeToExpr; class RangeFullExpr; class RangeFromToInclExpr; class RangeToInclExpr; class ReturnExpr; class UnsafeBlockExpr; class LoopLabel; class BaseLoopExpr; class LoopExpr; class WhileLoopExpr; class WhileLetLoopExpr; class ForLoopExpr; class IfExpr; class IfExprConseqElse; class IfExprConseqIf; class IfLetExpr; class IfExprConseqIfLet; class IfLetExprConseqElse; class IfLetExprConseqIf; class IfLetExprConseqIfLet; struct MatchArm; // class MatchCase; // class MatchCaseBlockExpr; // class MatchCaseExpr; struct MatchCase; class MatchExpr; class AwaitExpr; class AsyncBlockExpr; class InlineAsm; // rust-stmt.h class EmptyStmt; class LetStmt; class ExprStmt; class ExprStmtWithoutBlock; class ExprStmtWithBlock; // rust-item.h class TypeParam; class WhereClauseItem; class LifetimeWhereClauseItem; class TypeBoundWhereClauseItem; struct WhereClause; struct SelfParam; struct FunctionQualifiers; struct FunctionParam; struct Visibility; class Method; class VisItem; class Module; class ExternCrate; class UseTree; class UseTreeGlob; class UseTreeList; class UseTreeRebind; class UseDeclaration; class Function; class TypeAlias; class Struct; struct StructField; class StructStruct; struct TupleField; class TupleStruct; class EnumItem; class EnumItemTuple; class EnumItemStruct; class EnumItemDiscriminant; class Enum; class Union; class ConstantItem; class StaticItem; struct TraitFunctionDecl; class TraitItemFunc; struct TraitMethodDecl; class TraitItemMethod; class TraitItemConst; class TraitItemType; class Trait; class Impl; class InherentImpl; class TraitImpl; class ExternalItem; class ExternalStaticItem; struct NamedFunctionParam; class ExternalFunctionItem; class ExternBlock; // rust-macro.h class MacroMatchFragment; class MacroMatchRepetition; class MacroMatcher; struct MacroTranscriber; struct MacroRule; class MacroRulesDefinition; class MacroInvocation; class MetaItemPath; class MetaItemSeq; class MetaWord; class MetaNameValueStr; class MetaListPaths; class MetaListNameValueStr; // rust-pattern.h class LiteralPattern; class IdentifierPattern; class WildcardPattern; class RangePatternBound; class RangePatternBoundLiteral; class RangePatternBoundPath; class RangePatternBoundQualPath; class RangePattern; class ReferencePattern; struct StructPatternEtc; class StructPatternField; class StructPatternFieldTuplePat; class StructPatternFieldIdentPat; class StructPatternFieldIdent; struct StructPatternElements; class StructPattern; class TupleStructItems; class TupleStructItemsNoRange; class TupleStructItemsRange; class TupleStructPattern; class TuplePatternItems; class TuplePatternItemsMultiple; class TuplePatternItemsRanged; class TuplePattern; class GroupedPattern; class SlicePattern; class AltPattern; // rust-type.h class TraitBound; class ImplTraitType; class TraitObjectType; class ParenthesisedType; class ImplTraitTypeOneBound; class TraitObjectTypeOneBound; class TupleType; class NeverType; class RawPointerType; class ReferenceType; class ArrayType; class SliceType; class InferredType; struct MaybeNamedParam; class BareFunctionType; } // namespace AST } // namespace Rust #endif