diff options
| author | Nandor Licker <n@ndor.email> | 2019-08-31 15:15:39 +0000 |
|---|---|---|
| committer | Nandor Licker <n@ndor.email> | 2019-08-31 15:15:39 +0000 |
| commit | 0420ce03d1d21b8622ef6a56f431689ac12bc58e (patch) | |
| tree | f357fd64281d4edf8e45983474cfa594ddbe3e0f /lib/AST/Interp/InterpStack.cpp | |
| parent | 970bc350a3db91afc849d151b448a1169d2af536 (diff) | |
| download | clang-0420ce03d1d21b8622ef6a56f431689ac12bc58e.tar.gz | |
Revert [Clang Interpreter] Initial patch for the constexpr interpreter
This reverts r370584 (git commit afcb3de117265a69d21e5673356e925a454d7d02)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@370588 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/Interp/InterpStack.cpp')
| -rw-r--r-- | lib/AST/Interp/InterpStack.cpp | 77 |
1 files changed, 0 insertions, 77 deletions
diff --git a/lib/AST/Interp/InterpStack.cpp b/lib/AST/Interp/InterpStack.cpp deleted file mode 100644 index f159fe1955..0000000000 --- a/lib/AST/Interp/InterpStack.cpp +++ /dev/null @@ -1,77 +0,0 @@ -//===--- InterpStack.cpp - Stack implementation for the VM ------*- 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 -// -//===----------------------------------------------------------------------===// - -#include <cassert> -#include "InterpStack.h" - -using namespace clang; -using namespace clang::interp; - -InterpStack::~InterpStack() { - clear(); -} - -void InterpStack::clear() { - if (Chunk && Chunk->Next) - free(Chunk->Next); - if (Chunk) - free(Chunk); - Chunk = nullptr; - StackSize = 0; -} - -void *InterpStack::grow(size_t Size) { - assert(Size < ChunkSize - sizeof(StackChunk) && "Object too large"); - - if (!Chunk || sizeof(StackChunk) + Chunk->size() + Size > ChunkSize) { - if (Chunk && Chunk->Next) { - Chunk = Chunk->Next; - } else { - StackChunk *Next = new (malloc(ChunkSize)) StackChunk(Chunk); - if (Chunk) - Chunk->Next = Next; - Chunk = Next; - } - } - - auto *Object = reinterpret_cast<void *>(Chunk->End); - Chunk->End += Size; - StackSize += Size; - return Object; -} - -void *InterpStack::peek(size_t Size) { - assert(Chunk && "Stack is empty!"); - - StackChunk *Ptr = Chunk; - while (Size > Ptr->size()) { - Size -= Ptr->size(); - Ptr = Ptr->Prev; - assert(Ptr && "Offset too large"); - } - - return reinterpret_cast<void *>(Ptr->End - Size); -} - -void InterpStack::shrink(size_t Size) { - assert(Chunk && "Chunk is empty!"); - - while (Size > Chunk->size()) { - Size -= Chunk->size(); - if (Chunk->Next) { - free(Chunk->Next); - Chunk->Next = nullptr; - } - Chunk->End = Chunk->start(); - Chunk = Chunk->Prev; - assert(Chunk && "Offset too large"); - } - - Chunk->End -= Size; - StackSize -= Size; -} |
