[cfe-commits] r120628 - in /cfe/trunk: include/clang/AST/TypeLocBuilder.h lib/Sema/TreeTransform.h lib/Sema/TypeLocBuilder.h

Douglas Gregor dgregor at apple.com
Wed Dec 1 16:05:49 PST 2010


Author: dgregor
Date: Wed Dec  1 18:05:49 2010
New Revision: 120628

URL: http://llvm.org/viewvc/llvm-project?rev=120628&view=rev
Log:
Make TypeLocBuilder an implementation detail of Sema. Nobody else should be using it

Added:
    cfe/trunk/lib/Sema/TypeLocBuilder.h
      - copied, changed from r120585, cfe/trunk/include/clang/AST/TypeLocBuilder.h
Removed:
    cfe/trunk/include/clang/AST/TypeLocBuilder.h
Modified:
    cfe/trunk/lib/Sema/TreeTransform.h

Removed: cfe/trunk/include/clang/AST/TypeLocBuilder.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/TypeLocBuilder.h?rev=120627&view=auto
==============================================================================
--- cfe/trunk/include/clang/AST/TypeLocBuilder.h (original)
+++ cfe/trunk/include/clang/AST/TypeLocBuilder.h (removed)
@@ -1,180 +0,0 @@
-//===--- TypeLocBuilder.h - Type Source Info collector ----------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-//  This files defines TypeLocBuilder, a class for building TypeLocs
-//  bottom-up.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_AST_TYPELOCBUILDER_H
-#define LLVM_CLANG_AST_TYPELOCBUILDER_H
-
-#include "clang/AST/TypeLoc.h"
-#include "llvm/ADT/SmallVector.h"
-#include "clang/AST/ASTContext.h"
-
-namespace clang {
-
-class TypeLocBuilder {
-  enum { InlineCapacity = 8 * sizeof(SourceLocation) };
-
-  /// The underlying location-data buffer.  Data grows from the end
-  /// of the buffer backwards.
-  char *Buffer;
-
-  /// The capacity of the current buffer.
-  size_t Capacity;
-
-  /// The index of the first occupied byte in the buffer.
-  size_t Index;
-
-#ifndef NDEBUG
-  /// The last type pushed on this builder.
-  QualType LastTy;
-#endif
-    
-  /// The inline buffer.
-  char InlineBuffer[InlineCapacity];
-
- public:
-  TypeLocBuilder()
-    : Buffer(InlineBuffer), Capacity(InlineCapacity), Index(InlineCapacity)
-  {}
-
-  ~TypeLocBuilder() {
-    if (Buffer != InlineBuffer)
-      delete[] Buffer;
-  }
-
-  /// Ensures that this buffer has at least as much capacity as described.
-  void reserve(size_t Requested) {
-    if (Requested > Capacity)
-      // For now, match the request exactly.
-      grow(Requested);
-  }
-
-  /// Pushes a copy of the given TypeLoc onto this builder.  The builder
-  /// must be empty for this to work.
-  void pushFullCopy(TypeLoc L) {
-    size_t Size = L.getFullDataSize();
-    TypeLoc Copy = pushFullUninitializedImpl(L.getType(), Size);
-    memcpy(Copy.getOpaqueData(), L.getOpaqueData(), Size);
-  }
-
-  /// Pushes uninitialized space for the given type.  The builder must
-  /// be empty.
-  TypeLoc pushFullUninitialized(QualType T) {
-    return pushFullUninitializedImpl(T, TypeLoc::getFullDataSizeForType(T));
-  }
-
-  /// Pushes space for a typespec TypeLoc.  Invalidates any TypeLocs
-  /// previously retrieved from this builder.
-  TypeSpecTypeLoc pushTypeSpec(QualType T) {
-    size_t LocalSize = TypeSpecTypeLoc::LocalDataSize;
-    return cast<TypeSpecTypeLoc>(pushImpl(T, LocalSize));
-  }
-
-  /// Resets this builder to the newly-initialized state.
-  void clear() {
-#ifndef NDEBUG
-    LastTy = QualType();
-#endif
-    Index = Capacity;
-  }  
-
-  /// Pushes space for a new TypeLoc of the given type.  Invalidates
-  /// any TypeLocs previously retrieved from this builder.
-  template <class TyLocType> TyLocType push(QualType T) {
-    size_t LocalSize = cast<TyLocType>(TypeLoc(T, 0)).getLocalDataSize();
-    return cast<TyLocType>(pushImpl(T, LocalSize));
-  }
-
-  /// Creates a TypeSourceInfo for the given type.
-  TypeSourceInfo *getTypeSourceInfo(ASTContext& Context, QualType T) {
-#ifndef NDEBUG
-    assert(T == LastTy && "type doesn't match last type pushed!");
-#endif
-
-    size_t FullDataSize = Capacity - Index;
-    TypeSourceInfo *DI = Context.CreateTypeSourceInfo(T, FullDataSize);
-    memcpy(DI->getTypeLoc().getOpaqueData(), &Buffer[Index], FullDataSize);
-    return DI;
-  }
-
-private:
-  TypeLoc pushImpl(QualType T, size_t LocalSize) {
-#ifndef NDEBUG
-    QualType TLast = TypeLoc(T, 0).getNextTypeLoc().getType();
-    assert(TLast == LastTy &&
-           "mismatch between last type and new type's inner type");
-    LastTy = T;
-#endif
-
-    // If we need to grow, grow by a factor of 2.
-    if (LocalSize > Index) {
-      size_t RequiredCapacity = Capacity + (LocalSize - Index);
-      size_t NewCapacity = Capacity * 2;
-      while (RequiredCapacity > NewCapacity)
-        NewCapacity *= 2;
-      grow(NewCapacity);
-    }
-
-    Index -= LocalSize;
-
-    return getTypeLoc(T);
-  }
-
-  /// Grow to the given capacity.
-  void grow(size_t NewCapacity) {
-    assert(NewCapacity > Capacity);
-
-    // Allocate the new buffer and copy the old data into it.
-    char *NewBuffer = new char[NewCapacity];
-    unsigned NewIndex = Index + NewCapacity - Capacity;
-    memcpy(&NewBuffer[NewIndex],
-           &Buffer[Index],
-           Capacity - Index);
-
-    if (Buffer != InlineBuffer)
-      delete[] Buffer;
-
-    Buffer = NewBuffer;
-    Capacity = NewCapacity;
-    Index = NewIndex;
-  }
-
-  TypeLoc pushFullUninitializedImpl(QualType T, size_t Size) {
-#ifndef NDEBUG
-    assert(LastTy.isNull() && "pushing full on non-empty TypeLocBuilder");
-    LastTy = T;
-#endif
-    assert(Index == Capacity && "pushing full on non-empty TypeLocBuilder");
-
-    reserve(Size);
-    Index -= Size;
-
-    return getTypeLoc(T);
-  }
-
-
-  // This is private because, when we kill off TypeSourceInfo in favor
-  // of TypeLoc, we'll want an interface that creates a TypeLoc given
-  // an ASTContext, and we don't want people to think they can just
-  // use this as an equivalent.
-  TypeLoc getTypeLoc(QualType T) {
-#ifndef NDEBUG
-    assert(LastTy == T && "type doesn't match last type pushed!");
-#endif
-    return TypeLoc(T, &Buffer[Index]);
-  }
-};
-
-}
-
-#endif

Modified: cfe/trunk/lib/Sema/TreeTransform.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/TreeTransform.h?rev=120628&r1=120627&r2=120628&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/TreeTransform.h (original)
+++ cfe/trunk/lib/Sema/TreeTransform.h Wed Dec  1 18:05:49 2010
@@ -25,11 +25,11 @@
 #include "clang/AST/Stmt.h"
 #include "clang/AST/StmtCXX.h"
 #include "clang/AST/StmtObjC.h"
-#include "clang/AST/TypeLocBuilder.h"
 #include "clang/Sema/Ownership.h"
 #include "clang/Sema/Designator.h"
 #include "clang/Lex/Preprocessor.h"
 #include "llvm/Support/ErrorHandling.h"
+#include "TypeLocBuilder.h"
 #include <algorithm>
 
 namespace clang {

Copied: cfe/trunk/lib/Sema/TypeLocBuilder.h (from r120585, cfe/trunk/include/clang/AST/TypeLocBuilder.h)
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/TypeLocBuilder.h?p2=cfe/trunk/lib/Sema/TypeLocBuilder.h&p1=cfe/trunk/include/clang/AST/TypeLocBuilder.h&r1=120585&r2=120628&rev=120628&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/TypeLocBuilder.h (original)
+++ cfe/trunk/lib/Sema/TypeLocBuilder.h Wed Dec  1 18:05:49 2010
@@ -12,8 +12,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_CLANG_AST_TYPELOCBUILDER_H
-#define LLVM_CLANG_AST_TYPELOCBUILDER_H
+#ifndef LLVM_CLANG_SEMA_TYPELOCBUILDER_H
+#define LLVM_CLANG_SEMA_TYPELOCBUILDER_H
 
 #include "clang/AST/TypeLoc.h"
 #include "llvm/ADT/SmallVector.h"





More information about the cfe-commits mailing list