diff options
author | 2016-08-05 11:44:32 +0100 | |
---|---|---|
committer | 2016-08-09 13:47:49 +0100 | |
commit | 14832efeb92334c562ebedef34e920d30e3cee69 (patch) | |
tree | 57d10c24966a46ae1c01861ee579ac6000326c45 /runtime/lambda/leaking_allocator.h | |
parent | c984725d0035e1925371757c38fed339b409e525 (diff) |
Revert experimental lambda feature.
This is a revert of the following changes :
30c475a2046951a81769c2db0b2dad66cd71e189.
lambda: Minor capture-variable/liberate-variable clean-up after post-merge reviews.
6918bf13eb855b3aa8ccdddda2d27ae8c60cec56.
lambda: Experimental support for capture-variable and liberate-variable
fc1ccd740b7c8e96dfac675cfc580122cd1b40a6.
lambda: Infrastructure to support capture/liberate-variable dex opcodes
e2facc5b18cd756a8b5500fb3d90da69c9ee0fb7.
runtime: Add lambda box/unbox object equality
2ee54e249ad21c74f29a161e248bebe7d22fddf1.
runtime: Partially implement box-lambda and unbox-lambda experimental opcodes
158f35c98e2ec0d40d2c032b8cdce5fb60944a7f.
interpreter: Add experimental lambda opcodes for invoke/create-lambda
a3bb72036f5454e410467f7151dc89f725ae1151.
Added format 25x to dexdump(2).
Plus surrounding cleanups.
Test: make test-art
Change-Id: Ic6f999ad17385ef933f763641049cf721510b202
Diffstat (limited to 'runtime/lambda/leaking_allocator.h')
-rw-r--r-- | runtime/lambda/leaking_allocator.h | 72 |
1 files changed, 0 insertions, 72 deletions
diff --git a/runtime/lambda/leaking_allocator.h b/runtime/lambda/leaking_allocator.h deleted file mode 100644 index cb5a1bf4c3..0000000000 --- a/runtime/lambda/leaking_allocator.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2015 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef ART_RUNTIME_LAMBDA_LEAKING_ALLOCATOR_H_ -#define ART_RUNTIME_LAMBDA_LEAKING_ALLOCATOR_H_ - -#include <utility> // std::forward -#include <type_traits> // std::aligned_storage - -namespace art { -class Thread; // forward declaration - -namespace lambda { - -// Temporary class to centralize all the leaking allocations. -// Allocations made through this class are never freed, but it is a placeholder -// that means that the calling code needs to be rewritten to properly: -// -// (a) Have a lifetime scoped to some other entity. -// (b) Not be allocated over and over again if it was already allocated once (immutable data). -// -// TODO: do all of the above a/b for each callsite, and delete this class. -class LeakingAllocator { - public: - // An opaque type which is guaranteed for: - // * a) be large enough to hold T (e.g. for in-place new) - // * b) be well-aligned (so that reads/writes are well-defined) to T - // * c) strict-aliasing compatible with T* - // - // Nominally used to allocate memory for yet unconstructed instances of T. - template <typename T> - using AlignedMemoryStorage = typename std::aligned_storage<sizeof(T), alignof(T)>::type; - - // Allocate byte_size bytes worth of memory. Never freed. - template <typename T> - static AlignedMemoryStorage<T>* AllocateMemory(Thread* self, size_t byte_size = sizeof(T)) { - return reinterpret_cast<AlignedMemoryStorage<T>*>( - AllocateMemoryImpl(self, byte_size, alignof(T))); - } - - // Make a new instance of T, flexibly sized, in-place at newly allocated memory. Never freed. - template <typename T, typename... Args> - static T* MakeFlexibleInstance(Thread* self, size_t byte_size, Args&&... args) { - return new (AllocateMemory<T>(self, byte_size)) T(std::forward<Args>(args)...); - } - - // Make a new instance of T in-place at newly allocated memory. Never freed. - template <typename T, typename... Args> - static T* MakeInstance(Thread* self, Args&&... args) { - return new (AllocateMemory<T>(self, sizeof(T))) T(std::forward<Args>(args)...); - } - - private: - static void* AllocateMemoryImpl(Thread* self, size_t byte_size, size_t align_size); -}; - -} // namespace lambda -} // namespace art - -#endif // ART_RUNTIME_LAMBDA_LEAKING_ALLOCATOR_H_ |