Index: src/zone-allocator.h |
diff --git a/test/cctest/trace-extension.h b/src/zone-allocator.h |
similarity index 55% |
copy from test/cctest/trace-extension.h |
copy to src/zone-allocator.h |
index b80b3d45dc81579629ddccb6761cfa709b17e4e9..5245c6b1bfd45d3d23e5e5efb82a5b4fa4707fba 100644 |
--- a/test/cctest/trace-extension.h |
+++ b/src/zone-allocator.h |
@@ -25,32 +25,56 @@ |
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-#ifndef V8_TEST_CCTEST_TRACE_EXTENSION_H_ |
-#define V8_TEST_CCTEST_TRACE_EXTENSION_H_ |
+#ifndef V8_ZONE_ALLOCATOR_H_ |
+#define V8_ZONE_ALLOCATOR_H_ |
-#include "v8.h" |
+#include "zone.h" |
namespace v8 { |
namespace internal { |
-class TraceExtension : public v8::Extension { |
+template<typename T> |
+class zone_allocator { |
public: |
- TraceExtension() : v8::Extension("v8/trace", kSource) { } |
- virtual v8::Handle<v8::FunctionTemplate> GetNativeFunctionTemplate( |
- v8::Isolate* isolate, |
- v8::Handle<v8::String> name); |
- static void Trace(const v8::FunctionCallbackInfo<v8::Value>& args); |
- static void JSTrace(const v8::FunctionCallbackInfo<v8::Value>& args); |
- static void JSEntrySP(const v8::FunctionCallbackInfo<v8::Value>& args); |
- static void JSEntrySPLevel2(const v8::FunctionCallbackInfo<v8::Value>& args); |
- static Address GetJsEntrySp(); |
- static void InitTraceEnv(TickSample* sample); |
- static void DoTrace(Address fp); |
+ typedef T* pointer; |
+ typedef const T* const_pointer; |
+ typedef T& reference; |
+ typedef const T& const_reference; |
+ typedef T value_type; |
+ typedef size_t size_type; |
+ typedef ptrdiff_t difference_type; |
+ template<class O> struct rebind { |
+ typedef zone_allocator<O> other; |
+ }; |
+ |
+ explicit zone_allocator(Zone* zone) throw() : zone_(zone) {} |
+ explicit zone_allocator(const zone_allocator& other) throw() |
+ : zone_(other.zone_) {} |
+ template<typename U> zone_allocator(const zone_allocator<U>&) throw() {} |
+ |
+ pointer address(reference x) const {return &x;} |
+ const_pointer address(const_reference x) const {return &x;} |
+ |
+ pointer allocate(size_type count, const void* hint = 0) { |
+ size_t size = count * sizeof(value_type); |
+ size = RoundUp(size, kPointerSize); |
+ return static_cast<pointer>(zone_->New(size)); |
+ } |
+ void deallocate(pointer p, size_type) { /* noop for Zones */ } |
+ |
+ size_type max_size() const throw() { |
+ size_type max = static_cast<size_type>(-1) / sizeof(T); |
+ return (max > 0 ? max : 1); |
+ } |
+ void construct(pointer p, const T& val) { |
+ new(static_cast<void*>(p)) T(val); |
+ } |
+ void destroy(pointer p) { (static_cast<T*>(p))->~T(); } |
+ |
private: |
- static Address GetFP(const v8::FunctionCallbackInfo<v8::Value>& args); |
- static const char* kSource; |
+ Zone* zone_; |
}; |
} } // namespace v8::internal |
-#endif |
+#endif // V8_ZONE_ALLOCATOR_H_ |