aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4mm_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/jsruntime/qv4mm_p.h')
-rw-r--r--src/qml/jsruntime/qv4mm_p.h52
1 files changed, 50 insertions, 2 deletions
diff --git a/src/qml/jsruntime/qv4mm_p.h b/src/qml/jsruntime/qv4mm_p.h
index 10579d6774..f0025dc70e 100644
--- a/src/qml/jsruntime/qv4mm_p.h
+++ b/src/qml/jsruntime/qv4mm_p.h
@@ -99,10 +99,58 @@ public:
inline Managed *allocManaged(std::size_t size)
{
size = align(size);
- Managed *o = alloc(size);
+ Managed *o = allocData(size);
return o;
}
+ template <typename ManagedType>
+ ManagedType *alloc()
+ {
+ ManagedType *t = static_cast<ManagedType*>(allocManaged(sizeof(typename ManagedType::Data)));
+ (void)new (t->d()) typename ManagedType::Data();
+ return t;
+ }
+
+ template <typename ManagedType, typename Arg1>
+ ManagedType *alloc(Arg1 arg1)
+ {
+ ManagedType *t = static_cast<ManagedType*>(allocManaged(sizeof(typename ManagedType::Data)));
+ (void)new (t->d()) typename ManagedType::Data(arg1);
+ return t;
+ }
+
+ template <typename ManagedType, typename Arg1, typename Arg2>
+ ManagedType *alloc(Arg1 arg1, Arg2 arg2)
+ {
+ ManagedType *t = static_cast<ManagedType*>(allocManaged(sizeof(typename ManagedType::Data)));
+ (void)new (t->d()) typename ManagedType::Data(arg1, arg2);
+ return t;
+ }
+
+ template <typename ManagedType, typename Arg1, typename Arg2, typename Arg3>
+ ManagedType *alloc(Arg1 arg1, Arg2 arg2, Arg3 arg3)
+ {
+ ManagedType *t = static_cast<ManagedType*>(allocManaged(sizeof(typename ManagedType::Data)));
+ (void)new (t->d()) typename ManagedType::Data(arg1, arg2, arg3);
+ return t;
+ }
+
+ template <typename ManagedType, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
+ ManagedType *alloc(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4)
+ {
+ ManagedType *t = static_cast<ManagedType*>(allocManaged(sizeof(typename ManagedType::Data)));
+ (void)new (t->d()) typename ManagedType::Data(arg1, arg2, arg3, arg4);
+ return t;
+ }
+
+ template <typename ManagedType, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
+ ManagedType *alloc(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5)
+ {
+ ManagedType *t = static_cast<ManagedType*>(allocManaged(sizeof(typename ManagedType::Data)));
+ (void)new (t->d()) typename ManagedType::Data(arg1, arg2, arg3, arg4, arg5);
+ return t;
+ }
+
bool isGCBlocked() const;
void setGCBlocked(bool blockGC);
void runGC();
@@ -120,7 +168,7 @@ public:
protected:
/// expects size to be aligned
// TODO: try to inline
- Managed *alloc(std::size_t size);
+ Managed *allocData(std::size_t size);
#ifdef DETAILED_MM_STATS
void willAllocate(std::size_t size);