From a4f8e4c1c3bbcd36a771313f2516717aa113b771 Mon Sep 17 00:00:00 2001 From: Oliver Buchtala Date: Sat, 8 Sep 2012 01:10:42 +0000 Subject: [PATCH] Fix bug in v8 ctor emitter. This bug leaded to flaky crashes of v8 engine. git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/oliverb-javascript-v8@13807 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- Lib/javascript/v8/javascriptcode.swg | 5 ++++- Lib/javascript/v8/javascriptruntime.swg | 18 +++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Lib/javascript/v8/javascriptcode.swg b/Lib/javascript/v8/javascriptcode.swg index 2adbd1307..070ef2e2d 100644 --- a/Lib/javascript/v8/javascriptcode.swg +++ b/Lib/javascript/v8/javascriptcode.swg @@ -5,7 +5,8 @@ v8::Handle $jswrapper(const v8::Arguments& args) { $jslocals $jscode - return SWIG_V8_NewPointerObj(result, SWIGTYPE_$jsmangledtype, SWIG_POINTER_OWN); + SWIG_V8_SetPrivateData(self, result, SWIGTYPE_$jsmangledtype, SWIG_POINTER_OWN); + return scope.Close(self); goto fail; fail: @@ -54,10 +55,12 @@ fail: return scope.Close(v8::Undefined()); }%} +/* %fragment ("JS_mainctordefn", "templates") %{ // TODO: implement JS_mainctordefn %} +*/ %fragment ("JS_ctor_dispatch_case", "templates") %{ diff --git a/Lib/javascript/v8/javascriptruntime.swg b/Lib/javascript/v8/javascriptruntime.swg index d94587419..ce1367070 100644 --- a/Lib/javascript/v8/javascriptruntime.swg +++ b/Lib/javascript/v8/javascriptruntime.swg @@ -77,6 +77,15 @@ int SWIG_V8_ConvertInstancePtr(v8::Handle objRef, void** ptr, swig_t return SWIG_OK; } +void SWIG_V8_SetPrivateData(v8::Handle obj, void* ptr, swig_type_info *info, int flags) { + SWIG_PRV_DATA* cdata = (SWIG_PRV_DATA*) new SWIG_PRV_DATA; + cdata->swigCObject = ptr; + cdata->swigCMemOwn = (flags & SWIG_POINTER_OWN) ? 1 : 0; + cdata->info = info; + + obj->SetInternalField(0, v8::External::New(cdata)); +} + int SWIG_V8_ConvertPtr(v8::Handle valRef, void** ptr, swig_type_info *info, int flags) { if(!valRef->IsObject()) { return SWIG_TypeError; @@ -103,14 +112,9 @@ v8::Handle SWIG_V8_NewPointerObj(void *ptr, swig_type_info *info, in } v8::Local result = inst_templ->NewInstance(); - - SWIG_PRV_DATA* cdata = (SWIG_PRV_DATA*) new SWIG_PRV_DATA; - cdata->swigCObject = ptr; - cdata->swigCMemOwn = (flags & SWIG_POINTER_OWN) ? 1 : 0; - cdata->info = info; - - result->SetInternalField(0, v8::External::New(cdata)); + SWIG_V8_SetPrivateData(result, ptr, info, flags); + return scope.Close(result); }