@@ -7,6 +7,7 @@ extern "C" {
77}
88
99#include " ../include/functions/copy.h"
10+ #include " ../include/macros.h"
1011#include " ../include/{{ filename }}"
1112
1213{%each dependencies as dependency%}
@@ -17,9 +18,9 @@ using namespace v8;
1718using namespace node ;
1819
1920{%if cType%}
20- {{ cppClassName }}::{{ cppClassName }}({{ cType }} *raw) {
21+ {{ cppClassName }}::{{ cppClassName }}({{ cType }} *raw, bool selfFreeing ) {
2122 this ->raw = raw;
22- this ->selfFreeing = true ;
23+ this ->selfFreeing = selfFreeing ;
2324}
2425
2526{{ cppClassName }}::~{{ cppClassName }}() {
@@ -63,18 +64,23 @@ NAN_METHOD({{ cppClassName }}::New) {
6364 NanScope ();
6465
6566 if (args.Length () == 0 || !args[0 ]->IsExternal ()) {
66- return NanThrowError (" {{ cType }} is required." );
67+ {%if createFunctionName%}
68+ return NanThrowError (" A new {{ cppClassName }} cannot be instantiated. Use {{ jsCreateFunctionName }} instead." );
69+ {%else %}
70+ return NanThrowError (" A new {{ cppClassName }} cannot be instantiated." );
71+ {%endif%}
6772 }
68- {{ cppClassName }}* object = new {{ cppClassName }}(static_cast <{{ cType }} *>(Handle<External>::Cast (args[0 ])->Value ()));
73+
74+ {{ cppClassName }}* object = new {{ cppClassName }}(static_cast <{{ cType }} *>(Handle<External>::Cast (args[0 ])->Value ()), args[1 ]->BooleanValue ());
6975 object->Wrap (args.This ());
7076
7177 NanReturnValue (args.This ());
7278}
7379
74- Handle<Value> {{ cppClassName }}::New(void *raw) {
80+ Handle<Value> {{ cppClassName }}::New(void *raw, bool selfFreeing ) {
7581 NanEscapableScope ();
76- Handle<Value> argv[1 ] = { NanNew<External>((void *)raw) };
77- return NanEscapeScope (NanNew<Function>({{ cppClassName }}::constructor_template)->NewInstance (1 , argv));
82+ Handle<Value> argv[2 ] = { NanNew<External>((void *)raw), NanNew<Boolean>(selfFreeing ) };
83+ return NanEscapeScope (NanNew<Function>({{ cppClassName }}::constructor_template)->NewInstance (2 , argv));
7884}
7985
8086{{ cType }} *{{ cppClassName }}::GetValue() {
0 commit comments