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 | a6bef738bf14ad6db393d183b81452ecc7400924 (patch) | |
tree | 8c9f773452aea5dddaae410f10080ce2c96cabe3 /clang/lib/AST/Interp/InterpStack.cpp | |
parent | 9e57b49392976a40346a2396cd2c9b2816bb52dd (diff) | |
download | bcm5719-llvm-a6bef738bf14ad6db393d183b81452ecc7400924.tar.gz bcm5719-llvm-a6bef738bf14ad6db393d183b81452ecc7400924.zip |
Revert [Clang Interpreter] Initial patch for the constexpr interpreter
This reverts r370584 (git commit afcb3de117265a69d21e5673356e925a454d7d02)
llvm-svn: 370588
Diffstat (limited to 'clang/lib/AST/Interp/InterpStack.cpp')
-rw-r--r-- | clang/lib/AST/Interp/InterpStack.cpp | 77 |
1 files changed, 0 insertions, 77 deletions
diff --git a/clang/lib/AST/Interp/InterpStack.cpp b/clang/lib/AST/Interp/InterpStack.cpp deleted file mode 100644 index f159fe1955f..00000000000 --- a/clang/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; -} |