summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--retrace/retrace.hpp14
-rw-r--r--retrace/retrace.py4
2 files changed, 6 insertions, 12 deletions
diff --git a/retrace/retrace.hpp b/retrace/retrace.hpp
index ab1ba5c2..cc77029e 100644
--- a/retrace/retrace.hpp
+++ b/retrace/retrace.hpp
@@ -60,6 +60,7 @@ private:
uintptr_t next;
public:
+ inline
ScopedAllocator() :
next(0) {
}
@@ -81,21 +82,14 @@ public:
return static_cast<void *>(&buf[1]);
}
- template< class T >
- inline T *
- alloc(size_t n = 1) {
- return static_cast<T *>(alloc(sizeof(T) * n));
- }
-
/**
* Allocate an array with the same dimensions as the specified value.
*/
- template< class T >
- inline T *
- alloc(const trace::Value *value) {
+ inline void *
+ alloc(const trace::Value *value, size_t size) {
const trace::Array *array = dynamic_cast<const trace::Array *>(value);
if (array) {
- return alloc<T>(array->size());
+ return alloc(array->size() * size);
}
const trace::Null *null = dynamic_cast<const trace::Null *>(value);
if (null) {
diff --git a/retrace/retrace.py b/retrace/retrace.py
index 1e39d42a..cd5ef1d2 100644
--- a/retrace/retrace.py
+++ b/retrace/retrace.py
@@ -66,10 +66,10 @@ class ValueAllocator(stdapi.Visitor):
pass
def visitArray(self, array, lvalue, rvalue):
- print ' %s = _allocator.alloc<%s>(&%s);' % (lvalue, array.type, rvalue)
+ print ' %s = static_cast<%s *>(_allocator.alloc(&%s, sizeof *%s));' % (lvalue, array.type, rvalue, lvalue)
def visitPointer(self, pointer, lvalue, rvalue):
- print ' %s = _allocator.alloc<%s>(&%s);' % (lvalue, pointer.type, rvalue)
+ print ' %s = static_cast<%s *>(_allocator.alloc(&%s, sizeof *%s));' % (lvalue, pointer.type, rvalue, lvalue)
def visitIntPointer(self, pointer, lvalue, rvalue):
pass