zcov: / lib/Sema/CXXFieldCollector.h


Files: 1 Branches Taken: 0.0% 0 / 0
Generated: 2010-02-10 01:31 Branches Executed: 0.0% 0 / 0
Line Coverage: 100.0% 12 / 12


Programs: 6 Runs 9054


       1                 : //===- CXXFieldCollector.h - Utility class for C++ class semantic analysis ===//
       2                 : //
       3                 : //                     The LLVM Compiler Infrastructure
       4                 : //
       5                 : // This file is distributed under the University of Illinois Open Source
       6                 : // License. See LICENSE.TXT for details.
       7                 : //
       8                 : //===----------------------------------------------------------------------===//
       9                 : //
      10                 : //  This file provides CXXFieldCollector that is used during parsing & semantic
      11                 : //  analysis of C++ classes.
      12                 : //
      13                 : //===----------------------------------------------------------------------===//
      14                 : 
      15                 : #ifndef LLVM_CLANG_SEMA_CXXFIELDCOLLECTOR_H
      16                 : #define LLVM_CLANG_SEMA_CXXFIELDCOLLECTOR_H
      17                 : 
      18                 : #include "llvm/ADT/SmallVector.h"
      19                 : 
      20                 : namespace clang {
      21                 :   class FieldDecl;
      22                 : 
      23                 : /// CXXFieldCollector - Used to keep track of CXXFieldDecls during parsing of
      24                 : /// C++ classes.
      25             1696: class CXXFieldCollector {
      26                 :   /// Fields - Contains all FieldDecls collected during parsing of a C++
      27                 :   /// class. When a nested class is entered, its fields are appended to the
      28                 :   /// fields of its parent class, when it is exited its fields are removed.
      29                 :   llvm::SmallVector<FieldDecl*, 32> Fields;
      30                 : 
      31                 :   /// FieldCount - Each entry represents the number of fields collected during
      32                 :   /// the parsing of a C++ class. When a nested class is entered, a new field
      33                 :   /// count is pushed, when it is exited, the field count is popped.
      34                 :   llvm::SmallVector<size_t, 4> FieldCount;
      35                 : 
      36                 :   // Example:
      37                 :   //
      38                 :   // class C {
      39                 :   //   int x,y;
      40                 :   //   class NC {
      41                 :   //     int q;
      42                 :   //     // At this point, Fields contains [x,y,q] decls and FieldCount contains
      43                 :   //     // [2,1].
      44                 :   //   };
      45                 :   //   int z;
      46                 :   //   // At this point, Fields contains [x,y,z] decls and FieldCount contains
      47                 :   //   // [3].
      48                 :   // };
      49                 : 
      50                 : public:
      51                 :   /// StartClass - Called by Sema::ActOnStartCXXClassDef.
      52             3394:   void StartClass() { FieldCount.push_back(0); }
      53                 : 
      54                 :   /// Add - Called by Sema::ActOnCXXMemberDeclarator.
      55             1591:   void Add(FieldDecl *D) {
      56             1591:     Fields.push_back(D);
      57             1591:     ++FieldCount.back();
      58             1591:   }
      59                 : 
      60                 :   /// getCurNumField - The number of fields added to the currently parsed class.
      61            10182:   size_t getCurNumFields() const { return FieldCount.back(); }
      62                 : 
      63                 :   /// getCurFields - Pointer to array of fields added to the currently parsed
      64                 :   /// class.
      65             3394:   FieldDecl **getCurFields() { return &*(Fields.end() - getCurNumFields()); }
      66                 : 
      67                 :   /// FinishClass - Called by Sema::ActOnFinishCXXClassDef.
      68             3394:   void FinishClass() {
      69             3394:     Fields.resize(Fields.size() - getCurNumFields());
      70             3394:     FieldCount.pop_back();
      71             3394:   }
      72                 : };
      73                 : 
      74                 : } // end namespace clang
      75                 : 
      76                 : #endif

Generated: 2010-02-10 01:31 by zcov