Fix errors concerning object wrapping and cleanup in v8 emitter.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/oliverb-javascript-v8@13819 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
8db76ddee1
commit
f814a8e702
5 changed files with 122 additions and 49 deletions
|
|
@ -5,7 +5,7 @@ v8::Handle<v8::Value> $jswrapper(const v8::Arguments& args) {
|
|||
$jslocals
|
||||
$jscode
|
||||
|
||||
SWIG_V8_SetPrivateData(self, result, SWIGTYPE_$jsmangledtype, SWIG_POINTER_OWN);
|
||||
SWIGV8_SetPrivateData(self, result, SWIGTYPE_$jsmangledtype, SWIG_POINTER_OWN);
|
||||
return scope.Close(self);
|
||||
|
||||
goto fail;
|
||||
|
|
@ -48,7 +48,14 @@ fail:
|
|||
|
||||
%fragment ("JS_destructordefn", "templates")
|
||||
%{
|
||||
// TODO: implement JS_destructordefn
|
||||
void $jswrapper(v8::Persistent< v8::Value > object, void *parameter) {
|
||||
SWIGV8_Proxy* proxy = (SWIGV8_Proxy*) parameter;
|
||||
if(proxy->swigCMemOwn && proxy->swigCObject) {
|
||||
std::cout << "Deleting wrapped instance: " << proxy->info->name << std::endl;
|
||||
delete ($jstype*) proxy->swigCObject;
|
||||
}
|
||||
delete proxy;
|
||||
}
|
||||
%}
|
||||
|
||||
|
||||
|
|
@ -136,18 +143,25 @@ fail:
|
|||
%}
|
||||
|
||||
%fragment("jsv8_declare_class_template", "templates")
|
||||
%{v8::Persistent<v8::FunctionTemplate> $jsmangledname_class;%}
|
||||
%{SWIGV8_ClientData $jsmangledname_clientData;
|
||||
%}
|
||||
|
||||
%fragment("jsv8_define_class_template", "templates")
|
||||
%{$jsmangledname_class = SWIGV8_CreateClassTemplate("$jsname" , $jsctor);
|
||||
SWIGTYPE_$jsmangledtype->clientdata = &$jsmangledname_class;%}
|
||||
|
||||
%fragment("jsv8_create_class_instance", "templates")
|
||||
%{v8::Handle<v8::Object> $jsmangledname_obj = $jsmangledname_class->GetFunction();%}
|
||||
%{v8::Handle<v8::FunctionTemplate> $jsmangledname_class = SWIGV8_CreateClassTemplate("$jsmangledname");
|
||||
$jsmangledname_clientData.class_templ = $jsmangledname_class;
|
||||
$jsmangledname_clientData.dtor = $jsdtor;
|
||||
SWIGTYPE_p$jsmangledtype->clientdata = &$jsmangledname_clientData;%}
|
||||
|
||||
%fragment("jsv8_inherit", "templates")
|
||||
%{$jsmangledname_class->Inherit($jsbaseclass_class);%}
|
||||
|
||||
%fragment("jsv8_create_class_instance", "templates")
|
||||
%{v8::Handle<v8::FunctionTemplate> $jsmangledname_class_0 = SWIGV8_CreateClassTemplate("$jsname");
|
||||
$jsmangledname_class_0->SetCallHandler($jsctor);
|
||||
$jsmangledname_class_0->Inherit($jsmangledname_class);
|
||||
$jsmangledname_class_0->SetHiddenPrototype(true);
|
||||
v8::Handle<v8::Object> $jsmangledname_obj = $jsmangledname_class_0->GetFunction();%}
|
||||
|
||||
%fragment("jsv8_register_class", "templates")
|
||||
%{$jsparent_obj->Set(v8::String::NewSymbol("$jsname"), $jsmangledname_obj);%}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue