@@ -6,7 +6,7 @@ NAN_GETTER({{ cppClassName }}::Get{{ field.cppFunctionName }}) {
66
77 {{ cppClassName }} *wrapper = ObjectWrap::Unwrap<{{ cppClassName }}>(args.This ());
88
9- {%if field.hasConstructor | or field.isFunction %}
9+ {%if field.hasConstructor | or field.isFunction | or field. payloadFor %}
1010 NanReturnValue (wrapper->{{ field.name }});
1111 {%elsif field.cppClassName == ' String' %}
1212 if (wrapper->GetValue ()->{{ field.name }}) {
@@ -25,13 +25,19 @@ NAN_SETTER({{ cppClassName }}::Set{{ field.cppFunctionName }}) {
2525
2626 {{ cppClassName }} *wrapper = ObjectWrap::Unwrap<{{ cppClassName }}>(args.This ());
2727
28- {%if field.hasConstructor %}
28+ {%if field.hasConstructor | or field.payloadFor %}
29+ wrapper->{{ field.name }}.Dispose ();
30+ wrapper->{{ field.name }}.Clear ();
31+
2932 wrapper->{{ field.name }} = Persistent<Object>::New (value->ToObject ());
33+ {%if field.hasConstructor %}
3034 wrapper->raw ->{{ field.name }} = *ObjectWrap::Unwrap<{{ field.cppClassName }}>(value->ToObject ())->GetValue ();
35+ {%endif%}
3136 {%elsif field.isFunction %}
3237 if (value->IsFunction ()) {
38+ wrapper->{{ field.name }}.Dispose ();
39+ wrapper->{{ field.name }}.Clear ();
3340 wrapper->{{ field.name }} = Persistent<Function>::Cast ((Persistent<Value>)value);
34- wrapper->raw ->{{ field.name }} = ({{ field.cType }})&{{ cppClassName }}::{{ field.name }}_cppCallback;
3541 }
3642 {%elsif field.cppClassName == ' String' %}
3743 if (wrapper->GetValue ()->{{ field.name }}) {
@@ -58,7 +64,9 @@ NAN_SETTER({{ cppClassName }}::Set{{ field.cppFunctionName }}) {
5864
5965 {%endeach%}
6066 ) {
61- if (!{{ field.name }}->IsFunction ()) {
67+ {{ cppClassName }} *instance = ({{ cppClassName }}*)payload;
68+
69+ if (!instance->{{ field.name }}->IsFunction ()) {
6270 {%if field.returnType == " int" %}
6371 return {{ field.returnNoResults }}; // no results acquired
6472 {%else %}
@@ -68,14 +76,17 @@ NAN_SETTER({{ cppClassName }}::Set{{ field.cppFunctionName }}) {
6876
6977 Local<Value> argv[{{ field.args |jsArgsCount }}] = {
7078 {%each field.args |argsInfo as arg %}
71- {%if arg.isJsArg %}
72- Local<Value>::New (NanNew ({{ arg.name }})){%if not arg.lastArg %},{%endif%}
79+ {%if arg.name == " payload" %}
80+ {%-- payload is always the last arg --%}
81+ Local<Value>::New (NanNew (instance->{{ fields|payloadFor field.name }}))
82+ {%elsif arg.isJsArg %}
83+ Local<Value>::New (NanNew ({{ arg.name }})),
7384
7485 {%endif%}
7586 {%endeach%}
7687 };
7788
78- Persistent<Value> result = Persistent<Value>::New (this ->{{ field.name }}->Call (Context::GetCurrent ()->Global (), {{ field.args |jsArgsCount }}, argv));
89+ Persistent<Value> result = Persistent<Value>::New (instance ->{{ field.name }}->Call (Context::GetCurrent ()->Global (), {{ field.args |jsArgsCount }}, argv));
7990 {{ field.returnType }} resultStatus;
8091
8192 {%each field|returnsInfo true false as _return%}
0 commit comments