瀏覽代碼

[AST][NFC] Pack CXXScalarValueInitExpr

Use the newly available space in the bit-fields of Stmt.
This saves one pointer per CXXScalarValueInitExpr. NFC.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@350635 91177308-0d34-0410-b5e6-96231b3b80d8
Bruno Ricci 6 年之前
父節點
當前提交
e5791bbff6
共有 4 個文件被更改,包括 22 次插入9 次删除
  1. 10 7
      include/clang/AST/ExprCXX.h
  2. 10 0
      include/clang/AST/Stmt.h
  3. 1 1
      lib/AST/ExprCXX.cpp
  4. 1 1
      lib/Serialization/ASTReaderStmt.cpp

+ 10 - 7
include/clang/AST/ExprCXX.h

@@ -1896,18 +1896,19 @@ public:
 class CXXScalarValueInitExpr : public Expr {
 class CXXScalarValueInitExpr : public Expr {
   friend class ASTStmtReader;
   friend class ASTStmtReader;
 
 
-  SourceLocation RParenLoc;
   TypeSourceInfo *TypeInfo;
   TypeSourceInfo *TypeInfo;
 
 
 public:
 public:
   /// Create an explicitly-written scalar-value initialization
   /// Create an explicitly-written scalar-value initialization
   /// expression.
   /// expression.
   CXXScalarValueInitExpr(QualType Type, TypeSourceInfo *TypeInfo,
   CXXScalarValueInitExpr(QualType Type, TypeSourceInfo *TypeInfo,
-                         SourceLocation rParenLoc)
-      : Expr(CXXScalarValueInitExprClass, Type, VK_RValue, OK_Ordinary,
-             false, false, Type->isInstantiationDependentType(),
+                         SourceLocation RParenLoc)
+      : Expr(CXXScalarValueInitExprClass, Type, VK_RValue, OK_Ordinary, false,
+             false, Type->isInstantiationDependentType(),
              Type->containsUnexpandedParameterPack()),
              Type->containsUnexpandedParameterPack()),
-        RParenLoc(rParenLoc), TypeInfo(TypeInfo) {}
+        TypeInfo(TypeInfo) {
+    CXXScalarValueInitExprBits.RParenLoc = RParenLoc;
+  }
 
 
   explicit CXXScalarValueInitExpr(EmptyShell Shell)
   explicit CXXScalarValueInitExpr(EmptyShell Shell)
       : Expr(CXXScalarValueInitExprClass, Shell) {}
       : Expr(CXXScalarValueInitExprClass, Shell) {}
@@ -1916,10 +1917,12 @@ public:
     return TypeInfo;
     return TypeInfo;
   }
   }
 
 
-  SourceLocation getRParenLoc() const { return RParenLoc; }
+  SourceLocation getRParenLoc() const {
+    return CXXScalarValueInitExprBits.RParenLoc;
+  }
 
 
   SourceLocation getBeginLoc() const LLVM_READONLY;
   SourceLocation getBeginLoc() const LLVM_READONLY;
-  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
+  SourceLocation getEndLoc() const { return getRParenLoc(); }
 
 
   static bool classof(const Stmt *T) {
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == CXXScalarValueInitExprClass;
     return T->getStmtClass() == CXXScalarValueInitExprClass;

+ 10 - 0
include/clang/AST/Stmt.h

@@ -612,6 +612,15 @@ protected:
     SourceLocation Loc;
     SourceLocation Loc;
   };
   };
 
 
+  class CXXScalarValueInitExprBitfields {
+    friend class ASTStmtReader;
+    friend class CXXScalarValueInitExpr;
+
+    unsigned : NumExprBits;
+
+    SourceLocation RParenLoc;
+  };
+
   class CXXNewExprBitfields {
   class CXXNewExprBitfields {
     friend class ASTStmtReader;
     friend class ASTStmtReader;
     friend class ASTStmtWriter;
     friend class ASTStmtWriter;
@@ -859,6 +868,7 @@ protected:
     CXXThrowExprBitfields CXXThrowExprBits;
     CXXThrowExprBitfields CXXThrowExprBits;
     CXXDefaultArgExprBitfields CXXDefaultArgExprBits;
     CXXDefaultArgExprBitfields CXXDefaultArgExprBits;
     CXXDefaultInitExprBitfields CXXDefaultInitExprBits;
     CXXDefaultInitExprBitfields CXXDefaultInitExprBits;
+    CXXScalarValueInitExprBitfields CXXScalarValueInitExprBits;
     CXXNewExprBitfields CXXNewExprBits;
     CXXNewExprBitfields CXXNewExprBits;
     CXXDeleteExprBitfields CXXDeleteExprBits;
     CXXDeleteExprBitfields CXXDeleteExprBits;
     TypeTraitExprBitfields TypeTraitExprBits;
     TypeTraitExprBitfields TypeTraitExprBits;

+ 1 - 1
lib/AST/ExprCXX.cpp

@@ -90,7 +90,7 @@ QualType CXXUuidofExpr::getTypeOperand(ASTContext &Context) const {
 
 
 // CXXScalarValueInitExpr
 // CXXScalarValueInitExpr
 SourceLocation CXXScalarValueInitExpr::getBeginLoc() const {
 SourceLocation CXXScalarValueInitExpr::getBeginLoc() const {
-  return TypeInfo ? TypeInfo->getTypeLoc().getBeginLoc() : RParenLoc;
+  return TypeInfo ? TypeInfo->getTypeLoc().getBeginLoc() : getRParenLoc();
 }
 }
 
 
 // CXXNewExpr
 // CXXNewExpr

+ 1 - 1
lib/Serialization/ASTReaderStmt.cpp

@@ -1502,7 +1502,7 @@ void ASTStmtReader::VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E) {
 void ASTStmtReader::VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E) {
 void ASTStmtReader::VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E) {
   VisitExpr(E);
   VisitExpr(E);
   E->TypeInfo = GetTypeSourceInfo();
   E->TypeInfo = GetTypeSourceInfo();
-  E->RParenLoc = ReadSourceLocation();
+  E->CXXScalarValueInitExprBits.RParenLoc = ReadSourceLocation();
 }
 }
 
 
 void ASTStmtReader::VisitCXXNewExpr(CXXNewExpr *E) {
 void ASTStmtReader::VisitCXXNewExpr(CXXNewExpr *E) {