From 7ac91e56720c70726d81875a94c5b88d7afd3cac Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Sat, 9 Mar 2013 23:18:25 +0100 Subject: [PATCH] Fix v8::Persistent Implement it in a similar way as PersistentValue Change-Id: If4adba61a8bfedce657f07ee24662c3b13384fd9 Reviewed-by: Simon Hausmann --- src/v4/qv4v8.cpp | 23 +++++++++++++++++++---- src/v4/qv4v8.h | 56 ++++++++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 61 insertions(+), 18 deletions(-) diff --git a/src/v4/qv4v8.cpp b/src/v4/qv4v8.cpp index bed2bf1..0bf4f13 100644 --- a/src/v4/qv4v8.cpp +++ b/src/v4/qv4v8.cpp @@ -69,18 +69,29 @@ namespace v8 { #define ValuePtr(obj) reinterpret_cast(obj) #define ConstValuePtr(obj) reinterpret_cast(obj) -void gcProtect(void *handle) +void *gcProtect(void *handle) { Q_D(handle); - if (VM::Managed *m = d->asManaged()) + if (VM::Managed *m = d->asManaged()) { currentEngine()->memoryManager->protect(m); + return currentEngine()->memoryManager; + } +} + +void gcProtect(void *memoryManager, void *handle) +{ + Q_D(handle); + if (VM::Managed *m = d->asManaged()) + if (memoryManager) + static_cast(memoryManager)->protect(m); } -void gcUnprotect(void *handle) +void gcUnprotect(void *memoryManager, void *handle) { Q_D(handle); if (VM::Managed *m = d->asManaged()) - currentEngine()->memoryManager->unprotect(m); + if (memoryManager) + static_cast(memoryManager)->unprotect(m); } struct V8AccessorGetter: FunctionObject { @@ -177,6 +188,7 @@ Local