003 File Manager
Current Path:
/usr/src/contrib/llvm-project/clang/include/clang/AST
usr
/
src
/
contrib
/
llvm-project
/
clang
/
include
/
clang
/
AST
/
📁
..
📄
APValue.h
(20.92 KB)
📄
AST.h
(907 B)
📄
ASTConcept.h
(7.02 KB)
📄
ASTConsumer.h
(5.99 KB)
📄
ASTContext.h
(122.68 KB)
📄
ASTContextAllocate.h
(1.33 KB)
📄
ASTDiagnostic.h
(1.34 KB)
📄
ASTDumper.h
(1.59 KB)
📄
ASTDumperUtils.h
(3.49 KB)
📄
ASTFwd.h
(1.01 KB)
📄
ASTImporter.h
(22.86 KB)
📄
ASTImporterLookupTable.h
(2.7 KB)
📄
ASTImporterSharedState.h
(2.51 KB)
📄
ASTLambda.h
(3.04 KB)
📄
ASTMutationListener.h
(5.84 KB)
📄
ASTNodeTraverser.h
(21.38 KB)
📄
ASTStructuralEquivalence.h
(5.08 KB)
📄
ASTTypeTraits.h
(19.65 KB)
📄
ASTUnresolvedSet.h
(3.37 KB)
📄
ASTVector.h
(11.75 KB)
📄
AbstractBasicReader.h
(8.82 KB)
📄
AbstractBasicWriter.h
(7.97 KB)
📄
AbstractTypeReader.h
(922 B)
📄
AbstractTypeWriter.h
(944 B)
📄
Attr.h
(11.87 KB)
📄
AttrIterator.h
(4.14 KB)
📄
AttrVisitor.h
(2.56 KB)
📄
Availability.h
(1.97 KB)
📄
BaseSubobject.h
(2.74 KB)
📄
BuiltinTypes.def
(9.91 KB)
📄
CXXInheritance.h
(14.87 KB)
📄
CXXRecordDeclDefinitionBits.def
(9.23 KB)
📄
CanonicalType.h
(24.86 KB)
📄
CharUnits.h
(8.02 KB)
📄
Comment.h
(31.03 KB)
📄
CommentBriefParser.h
(1.39 KB)
📄
CommentCommandTraits.h
(5.86 KB)
📄
CommentCommands.td
(9.27 KB)
📄
CommentDiagnostic.h
(509 B)
📄
CommentHTMLNamedCharacterReferences.td
(4.98 KB)
📄
CommentHTMLTags.td
(2.17 KB)
📄
CommentLexer.h
(9.96 KB)
📄
CommentParser.h
(3.24 KB)
📄
CommentSema.h
(9.87 KB)
📄
CommentVisitor.h
(2.38 KB)
📄
ComparisonCategories.h
(7.41 KB)
📄
ComputeDependence.h
(7.41 KB)
📄
CurrentSourceLocExprScope.h
(2.43 KB)
📄
DataCollection.h
(2.45 KB)
📄
Decl.h
(168.07 KB)
📄
DeclAccessPair.h
(1.77 KB)
📄
DeclBase.h
(93.13 KB)
📄
DeclCXX.h
(151.69 KB)
📄
DeclContextInternals.h
(8.22 KB)
📄
DeclFriend.h
(8.06 KB)
📄
DeclGroup.h
(4.11 KB)
📄
DeclLookups.h
(3.64 KB)
📄
DeclObjC.h
(101.2 KB)
📄
DeclObjCCommon.h
(1.72 KB)
📄
DeclOpenMP.h
(19.33 KB)
📄
DeclTemplate.h
(122.19 KB)
📄
DeclVisitor.h
(2.51 KB)
📄
DeclarationName.h
(33.77 KB)
📄
DependenceFlags.h
(10.99 KB)
📄
DependentDiagnostic.h
(5.4 KB)
📄
EvaluatedExprVisitor.h
(4.45 KB)
📄
Expr.h
(234.85 KB)
📄
ExprCXX.h
(169.78 KB)
📄
ExprConcepts.h
(19.62 KB)
📄
ExprObjC.h
(58.96 KB)
📄
ExprOpenMP.h
(15.48 KB)
📄
ExternalASTMerger.h
(8.11 KB)
📄
ExternalASTSource.h
(20.55 KB)
📄
FormatString.h
(22.81 KB)
📄
GlobalDecl.h
(7.16 KB)
📄
JSONNodeDumper.h
(17.53 KB)
📄
LambdaCapture.h
(4.71 KB)
📄
LexicallyOrderedRecursiveASTVisitor.h
(5.92 KB)
📄
LocInfoType.h
(1.84 KB)
📄
Mangle.h
(10.65 KB)
📄
MangleNumberingContext.h
(2 KB)
📄
NSAPI.h
(9.23 KB)
📄
NestedNameSpecifier.h
(18.53 KB)
📄
NonTrivialTypeVisitor.h
(4 KB)
📄
ODRHash.h
(3.42 KB)
📄
OSLog.h
(5.08 KB)
📄
OpenMPClause.h
(276.08 KB)
📄
OperationKinds.def
(14.91 KB)
📄
OperationKinds.h
(1.5 KB)
📄
OptionalDiagnostic.h
(2.39 KB)
📄
ParentMap.h
(1.89 KB)
📄
ParentMapContext.h
(4.74 KB)
📄
PrettyDeclStackTrace.h
(1.39 KB)
📄
PrettyPrinter.h
(8.47 KB)
📄
PropertiesBase.td
(17.03 KB)
📄
QualTypeNames.h
(3.15 KB)
📄
RawCommentList.h
(6.6 KB)
📄
RecordLayout.h
(11.49 KB)
📄
RecursiveASTVisitor.h
(124.41 KB)
📄
Redeclarable.h
(14.34 KB)
📄
SelectorLocationsKind.h
(3.28 KB)
📄
Stmt.h
(113 KB)
📄
StmtCXX.h
(17.59 KB)
📄
StmtDataCollectors.td
(5.64 KB)
📄
StmtGraphTraits.h
(2.18 KB)
📄
StmtIterator.h
(4.2 KB)
📄
StmtObjC.h
(12.86 KB)
📄
StmtOpenMP.h
(189.5 KB)
📄
StmtVisitor.h
(8.74 KB)
📄
TemplateArgumentVisitor.h
(3.38 KB)
📄
TemplateBase.h
(22.86 KB)
📄
TemplateName.h
(19.34 KB)
📄
TextNodeDumper.h
(15.7 KB)
📄
Type.h
(248.38 KB)
📄
TypeLoc.h
(73.03 KB)
📄
TypeLocNodes.def
(1.45 KB)
📄
TypeLocVisitor.h
(1.76 KB)
📄
TypeOrdering.h
(2.38 KB)
📄
TypeProperties.td
(25.87 KB)
📄
TypeVisitor.h
(3.32 KB)
📄
UnresolvedSet.h
(5.25 KB)
📄
VTTBuilder.h
(5.19 KB)
📄
VTableBuilder.h
(20.31 KB)
Editing: DependenceFlags.h
//===--- DependenceFlags.h ------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_AST_DEPENDENCEFLAGS_H #define LLVM_CLANG_AST_DEPENDENCEFLAGS_H #include "clang/Basic/BitmaskEnum.h" #include "llvm/ADT/BitmaskEnum.h" #include <cstdint> namespace clang { struct ExprDependenceScope { enum ExprDependence : uint8_t { UnexpandedPack = 1, // This expr depends in any way on // - a template parameter, it implies that the resolution of this expr may // cause instantiation to fail // - or an error (often in a non-template context) // // Note that C++ standard doesn't define the instantiation-dependent term, // we follow the formal definition coming from the Itanium C++ ABI, and // extend it to errors. Instantiation = 2, // The type of this expr depends on a template parameter, or an error. Type = 4, // The value of this expr depends on a template parameter, or an error. Value = 8, // clang extension: this expr contains or references an error, and is // considered dependent on how that error is resolved. Error = 16, None = 0, All = 31, TypeValue = Type | Value, TypeInstantiation = Type | Instantiation, ValueInstantiation = Value | Instantiation, TypeValueInstantiation = Type | Value | Instantiation, LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/Error) }; }; using ExprDependence = ExprDependenceScope::ExprDependence; struct TypeDependenceScope { enum TypeDependence : uint8_t { /// Whether this type contains an unexpanded parameter pack /// (for C++11 variadic templates) UnexpandedPack = 1, /// Whether this type somehow involves /// - a template parameter, even if the resolution of the type does not /// depend on a template parameter. /// - or an error. Instantiation = 2, /// Whether this type /// - is a dependent type (C++ [temp.dep.type]) /// - or it somehow involves an error, e.g. decltype(recovery-expr) Dependent = 4, /// Whether this type is a variably-modified type (C99 6.7.5). VariablyModified = 8, /// Whether this type references an error, e.g. decltype(err-expression) /// yields an error type. Error = 16, None = 0, All = 31, DependentInstantiation = Dependent | Instantiation, LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/Error) }; }; using TypeDependence = TypeDependenceScope::TypeDependence; #define LLVM_COMMON_DEPENDENCE(NAME) \ struct NAME##Scope { \ enum NAME : uint8_t { \ UnexpandedPack = 1, \ Instantiation = 2, \ Dependent = 4, \ Error = 8, \ \ None = 0, \ DependentInstantiation = Dependent | Instantiation, \ All = 15, \ \ LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/Error) \ }; \ }; \ using NAME = NAME##Scope::NAME; LLVM_COMMON_DEPENDENCE(NestedNameSpecifierDependence) LLVM_COMMON_DEPENDENCE(TemplateNameDependence) LLVM_COMMON_DEPENDENCE(TemplateArgumentDependence) #undef LLVM_COMMON_DEPENDENCE // A combined space of all dependence concepts for all node types. // Used when aggregating dependence of nodes of different types. class Dependence { public: enum Bits : uint8_t { None = 0, // Contains a template parameter pack that wasn't expanded. UnexpandedPack = 1, // Depends on a template parameter or an error in some way. // Validity depends on how the template is instantiated or the error is // resolved. Instantiation = 2, // Expression type depends on template context, or an error. // Value and Instantiation should also be set. Type = 4, // Expression value depends on template context, or an error. // Instantiation should also be set. Value = 8, // Depends on template context, or an error. // The type/value distinction is only meaningful for expressions. Dependent = Type | Value, // Includes an error, and depends on how it is resolved. Error = 16, // Type depends on a runtime value (variable-length array). VariablyModified = 32, LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/VariablyModified) }; Dependence() : V(None) {} Dependence(TypeDependence D) : V(translate(D, TypeDependence::UnexpandedPack, UnexpandedPack) | translate(D, TypeDependence::Instantiation, Instantiation) | translate(D, TypeDependence::Dependent, Dependent) | translate(D, TypeDependence::Error, Error) | translate(D, TypeDependence::VariablyModified, VariablyModified)) {} Dependence(ExprDependence D) : V(translate(D, ExprDependence::UnexpandedPack, UnexpandedPack) | translate(D, ExprDependence::Instantiation, Instantiation) | translate(D, ExprDependence::Type, Type) | translate(D, ExprDependence::Value, Value) | translate(D, ExprDependence::Error, Error)) {} Dependence(NestedNameSpecifierDependence D) : V ( translate(D, NNSDependence::UnexpandedPack, UnexpandedPack) | translate(D, NNSDependence::Instantiation, Instantiation) | translate(D, NNSDependence::Dependent, Dependent) | translate(D, NNSDependence::Error, Error)) {} Dependence(TemplateArgumentDependence D) : V(translate(D, TADependence::UnexpandedPack, UnexpandedPack) | translate(D, TADependence::Instantiation, Instantiation) | translate(D, TADependence::Dependent, Dependent) | translate(D, TADependence::Error, Error)) {} Dependence(TemplateNameDependence D) : V(translate(D, TNDependence::UnexpandedPack, UnexpandedPack) | translate(D, TNDependence::Instantiation, Instantiation) | translate(D, TNDependence::Dependent, Dependent) | translate(D, TNDependence::Error, Error)) {} TypeDependence type() const { return translate(V, UnexpandedPack, TypeDependence::UnexpandedPack) | translate(V, Instantiation, TypeDependence::Instantiation) | translate(V, Dependent, TypeDependence::Dependent) | translate(V, Error, TypeDependence::Error) | translate(V, VariablyModified, TypeDependence::VariablyModified); } ExprDependence expr() const { return translate(V, UnexpandedPack, ExprDependence::UnexpandedPack) | translate(V, Instantiation, ExprDependence::Instantiation) | translate(V, Type, ExprDependence::Type) | translate(V, Value, ExprDependence::Value) | translate(V, Error, ExprDependence::Error); } NestedNameSpecifierDependence nestedNameSpecifier() const { return translate(V, UnexpandedPack, NNSDependence::UnexpandedPack) | translate(V, Instantiation, NNSDependence::Instantiation) | translate(V, Dependent, NNSDependence::Dependent) | translate(V, Error, NNSDependence::Error); } TemplateArgumentDependence templateArgument() const { return translate(V, UnexpandedPack, TADependence::UnexpandedPack) | translate(V, Instantiation, TADependence::Instantiation) | translate(V, Dependent, TADependence::Dependent) | translate(V, Error, TADependence::Error); } TemplateNameDependence templateName() const { return translate(V, UnexpandedPack, TNDependence::UnexpandedPack) | translate(V, Instantiation, TNDependence::Instantiation) | translate(V, Dependent, TNDependence::Dependent) | translate(V, Error, TNDependence::Error); } private: Bits V; template <typename T, typename U> static U translate(T Bits, T FromBit, U ToBit) { return (Bits & FromBit) ? ToBit : static_cast<U>(0); } // Abbreviations to make conversions more readable. using NNSDependence = NestedNameSpecifierDependence; using TADependence = TemplateArgumentDependence; using TNDependence = TemplateNameDependence; }; /// Computes dependencies of a reference with the name having template arguments /// with \p TA dependencies. inline ExprDependence toExprDependence(TemplateArgumentDependence TA) { return Dependence(TA).expr(); } inline ExprDependence toExprDependence(TypeDependence D) { return Dependence(D).expr(); } // Note: it's often necessary to strip `Dependent` from qualifiers. // If V<T>:: refers to the current instantiation, NNS is considered dependent // but the containing V<T>::foo likely isn't. inline ExprDependence toExprDependence(NestedNameSpecifierDependence D) { return Dependence(D).expr(); } inline ExprDependence turnTypeToValueDependence(ExprDependence D) { // Type-dependent expressions are always be value-dependent, so we simply drop // type dependency. return D & ~ExprDependence::Type; } inline ExprDependence turnValueToTypeDependence(ExprDependence D) { // Type-dependent expressions are always be value-dependent. if (D & ExprDependence::Value) D |= ExprDependence::Type; return D; } // Returned type-dependence will never have VariablyModified set. inline TypeDependence toTypeDependence(ExprDependence D) { return Dependence(D).type(); } inline TypeDependence toTypeDependence(NestedNameSpecifierDependence D) { return Dependence(D).type(); } inline TypeDependence toTypeDependence(TemplateNameDependence D) { return Dependence(D).type(); } inline TypeDependence toTypeDependence(TemplateArgumentDependence D) { return Dependence(D).type(); } inline NestedNameSpecifierDependence toNestedNameSpecifierDependendence(TypeDependence D) { return Dependence(D).nestedNameSpecifier(); } inline TemplateArgumentDependence toTemplateArgumentDependence(TypeDependence D) { return Dependence(D).templateArgument(); } inline TemplateArgumentDependence toTemplateArgumentDependence(TemplateNameDependence D) { return Dependence(D).templateArgument(); } inline TemplateArgumentDependence toTemplateArgumentDependence(ExprDependence D) { return Dependence(D).templateArgument(); } inline TemplateNameDependence toTemplateNameDependence(NestedNameSpecifierDependence D) { return Dependence(D).templateName(); } LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE(); } // namespace clang #endif
Upload File
Create Folder