[clang] [clang-tools-extra] [llvm] [clang]: reflection operator parsing for global namespace and primitive types (PR #164692)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 28 19:16:01 PDT 2025
================
@@ -5501,6 +5501,60 @@ class BuiltinBitCastExpr final
}
};
+/// Represents a C++26 reflect expression [expr.reflect]. The operand of the
+/// expression is either:
+/// - :: (global namespace),
+/// - a reflection-name,
+/// - a type-id, or
+/// - an id-expression.
+class CXXReflectExpr : public Expr {
+
+ // Source locations.
+ SourceLocation OperatorLoc;
+ SourceRange OperandRange;
+
+ CXXReflectExpr(const ASTContext &C, QualType T, QualType Ty);
+ CXXReflectExpr(const ASTContext &C, QualType T, Decl *Arg);
+ CXXReflectExpr(EmptyShell Empty);
+
+public:
+ static CXXReflectExpr *Create(ASTContext &C, SourceLocation OperatorLoc,
+ SourceLocation ArgLoc, QualType Operand);
+
+ static CXXReflectExpr *Create(ASTContext &C, SourceLocation OperatorLoc,
+ SourceLocation OperandLoc, Decl *Operand);
+
+ static CXXReflectExpr *CreateEmpty(ASTContext &C);
+
+ SourceLocation getBeginLoc() const LLVM_READONLY { return OperatorLoc; }
+ SourceLocation getEndLoc() const LLVM_READONLY {
+ return OperandRange.getEnd();
+ }
+ SourceRange getSourceRange() const {
+ return SourceRange(getBeginLoc(), getEndLoc());
+ }
----------------
Sirraide wrote:
```suggestion
```
No need to add this; that’s already what it does by default.
https://github.com/llvm/llvm-project/pull/164692
More information about the llvm-commits
mailing list