MaskRay created this revision.
MaskRay added reviewers: jfb, gribozavr, nand, RKSimon.
Herald added subscribers: llvm-commits, cfe-commits, dexonsmith, mgorny.
Herald added projects: clang, LLVM.

The Blocks runtime provide a header named Block.h.
It is generally preferable to avoid name collision with system headers
(reducing reliance on -isystem order, friendly when navigating files in
an editor, etc).


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D74934

Files:
  clang/lib/AST/CMakeLists.txt
  clang/lib/AST/Interp/AllocatedBlock.cpp
  clang/lib/AST/Interp/AllocatedBlock.h
  clang/lib/AST/Interp/Block.cpp
  clang/lib/AST/Interp/Block.h
  clang/lib/AST/Interp/Pointer.cpp
  clang/lib/AST/Interp/Pointer.h
  llvm/utils/gn/secondary/clang/lib/AST/BUILD.gn

Index: llvm/utils/gn/secondary/clang/lib/AST/BUILD.gn
===================================================================
--- llvm/utils/gn/secondary/clang/lib/AST/BUILD.gn
+++ llvm/utils/gn/secondary/clang/lib/AST/BUILD.gn
@@ -81,7 +81,7 @@
     "ExternalASTSource.cpp",
     "FormatString.cpp",
     "InheritViz.cpp",
-    "Interp/Block.cpp",
+    "Interp/AllocatedBlock.cpp",
     "Interp/ByteCodeEmitter.cpp",
     "Interp/ByteCodeExprGen.cpp",
     "Interp/ByteCodeGenError.cpp",
Index: clang/lib/AST/Interp/Pointer.h
===================================================================
--- clang/lib/AST/Interp/Pointer.h
+++ clang/lib/AST/Interp/Pointer.h
@@ -13,12 +13,12 @@
 #ifndef LLVM_CLANG_AST_INTERP_POINTER_H
 #define LLVM_CLANG_AST_INTERP_POINTER_H
 
-#include "Block.h"
+#include "AllocatedBlock.h"
 #include "Descriptor.h"
+#include "clang/AST/ComparisonCategories.h"
 #include "clang/AST/Decl.h"
 #include "clang/AST/DeclCXX.h"
 #include "clang/AST/Expr.h"
-#include "clang/AST/ComparisonCategories.h"
 #include "llvm/ADT/PointerUnion.h"
 #include "llvm/Support/raw_ostream.h"
 
Index: clang/lib/AST/Interp/Pointer.cpp
===================================================================
--- clang/lib/AST/Interp/Pointer.cpp
+++ clang/lib/AST/Interp/Pointer.cpp
@@ -7,7 +7,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "Pointer.h"
-#include "Block.h"
+#include "AllocatedBlock.h"
 #include "Function.h"
 #include "PrimType.h"
 
Index: clang/lib/AST/Interp/Block.h
===================================================================
--- /dev/null
+++ clang/lib/AST/Interp/Block.h
@@ -1,140 +0,0 @@
-//===--- Block.h - Allocated blocks for the interpreter ---------*- C++ -*-===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-//
-// Defines the classes describing allocated blocks.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_AST_INTERP_BLOCK_H
-#define LLVM_CLANG_AST_INTERP_BLOCK_H
-
-#include "Descriptor.h"
-#include "clang/AST/Decl.h"
-#include "clang/AST/DeclCXX.h"
-#include "clang/AST/Expr.h"
-#include "clang/AST/ComparisonCategories.h"
-#include "llvm/ADT/PointerUnion.h"
-#include "llvm/Support/raw_ostream.h"
-
-namespace clang {
-namespace interp {
-class Block;
-class DeadBlock;
-class Context;
-class InterpState;
-class Pointer;
-class Function;
-enum PrimType : unsigned;
-
-/// A memory block, either on the stack or in the heap.
-///
-/// The storage described by the block immediately follows it in memory.
-class Block {
-public:
-  // Creates a new block.
-  Block(const llvm::Optional<unsigned> &DeclID, Descriptor *Desc,
-        bool IsStatic = false, bool IsExtern = false)
-      : DeclID(DeclID), IsStatic(IsStatic), IsExtern(IsExtern), Desc(Desc) {}
-
-  Block(Descriptor *Desc, bool IsStatic = false, bool IsExtern = false)
-      : DeclID((unsigned)-1), IsStatic(IsStatic), IsExtern(IsExtern),
-        Desc(Desc) {}
-
-  /// Returns the block's descriptor.
-  Descriptor *getDescriptor() const { return Desc; }
-  /// Checks if the block has any live pointers.
-  bool hasPointers() const { return Pointers; }
-  /// Checks if the block is extern.
-  bool isExtern() const { return IsExtern; }
-  /// Checks if the block has static storage duration.
-  bool isStatic() const { return IsStatic; }
-  /// Checks if the block is temporary.
-  bool isTemporary() const { return Desc->IsTemporary; }
-  /// Returns the size of the block.
-  InterpSize getSize() const { return Desc->getAllocSize(); }
-  /// Returns the declaration ID.
-  llvm::Optional<unsigned> getDeclID() const { return DeclID; }
-
-  /// Returns a pointer to the stored data.
-  char *data() { return reinterpret_cast<char *>(this + 1); }
-
-  /// Returns a view over the data.
-  template <typename T>
-  T &deref() { return *reinterpret_cast<T *>(data()); }
-
-  /// Invokes the constructor.
-  void invokeCtor() {
-    std::memset(data(), 0, getSize());
-    if (Desc->CtorFn)
-      Desc->CtorFn(this, data(), Desc->IsConst, Desc->IsMutable,
-                   /*isActive=*/true, Desc);
-  }
-
-protected:
-  friend class Pointer;
-  friend class DeadBlock;
-  friend class InterpState;
-
-  Block(Descriptor *Desc, bool IsExtern, bool IsStatic, bool IsDead)
-    : IsStatic(IsStatic), IsExtern(IsExtern), IsDead(true), Desc(Desc) {}
-
-  // Deletes a dead block at the end of its lifetime.
-  void cleanup();
-
-  // Pointer chain management.
-  void addPointer(Pointer *P);
-  void removePointer(Pointer *P);
-  void movePointer(Pointer *From, Pointer *To);
-
-  /// Start of the chain of pointers.
-  Pointer *Pointers = nullptr;
-  /// Unique identifier of the declaration.
-  llvm::Optional<unsigned> DeclID;
-  /// Flag indicating if the block has static storage duration.
-  bool IsStatic = false;
-  /// Flag indicating if the block is an extern.
-  bool IsExtern = false;
-  /// Flag indicating if the pointer is dead.
-  bool IsDead = false;
-  /// Pointer to the stack slot descriptor.
-  Descriptor *Desc;
-};
-
-/// Descriptor for a dead block.
-///
-/// Dead blocks are chained in a double-linked list to deallocate them
-/// whenever pointers become dead.
-class DeadBlock {
-public:
-  /// Copies the block.
-  DeadBlock(DeadBlock *&Root, Block *Blk);
-
-  /// Returns a pointer to the stored data.
-  char *data() { return B.data(); }
-
-private:
-  friend class Block;
-  friend class InterpState;
-
-  void free();
-
-  /// Root pointer of the list.
-  DeadBlock *&Root;
-  /// Previous block in the list.
-  DeadBlock *Prev;
-  /// Next block in the list.
-  DeadBlock *Next;
-
-  /// Actual block storing data and tracking pointers.
-  Block B;
-};
-
-} // namespace interp
-} // namespace clang
-
-#endif
Index: clang/lib/AST/Interp/AllocatedBlock.cpp
===================================================================
--- clang/lib/AST/Interp/AllocatedBlock.cpp
+++ clang/lib/AST/Interp/AllocatedBlock.cpp
@@ -10,7 +10,7 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "Block.h"
+#include "AllocatedBlock.h"
 #include "Pointer.h"
 
 using namespace clang;
Index: clang/lib/AST/CMakeLists.txt
===================================================================
--- clang/lib/AST/CMakeLists.txt
+++ clang/lib/AST/CMakeLists.txt
@@ -55,7 +55,7 @@
   ExternalASTSource.cpp
   FormatString.cpp
   InheritViz.cpp
-  Interp/Block.cpp
+  Interp/AllocatedBlock.cpp
   Interp/ByteCodeEmitter.cpp
   Interp/ByteCodeExprGen.cpp
   Interp/ByteCodeGenError.cpp
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to