@@ -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.cppClassName == " Function " %}
9+ {%if field.hasConstructor | or field.isFunction %}
1010 NanReturnValue (wrapper->{{ field.name }});
1111 {%elsif field.cppClassName == ' String' %}
1212 if (wrapper->GetValue ()->{{ field.name }}) {
@@ -28,8 +28,10 @@ NAN_SETTER({{ cppClassName }}::Set{{ field.cppFunctionName }}) {
2828 {%if field.hasConstructor %}
2929 wrapper->{{ field.name }} = Persistent<Object>::New (value->ToObject ());
3030 wrapper->raw ->{{ field.name }} = *ObjectWrap::Unwrap<{{ field.cppClassName }}>(value->ToObject ())->GetValue ();
31- {elsif field.cppClassName == " Function" %}
32- wrapper->{{ field.name }} = Persistent<Function>::New (value->ToFunction ());
31+ {%elsif field.isFunction %}
32+ if (value->IsFunction ()) {
33+ wrapper->{{ field.name }} = Persistent<Value>::New (value);
34+ }
3335 {%elsif field.cppClassName == ' String' %}
3436 if (wrapper->GetValue ()->{{ field.name }}) {
3537 // free(wrapper->{{ field.name }});
@@ -48,13 +50,14 @@ NAN_SETTER({{ cppClassName }}::Set{{ field.cppFunctionName }}) {
4850 {%endif%}
4951}
5052
51- {%if field.cppClassName == " Function " %}
52- {{ field.returnType }} {{ field.name }}_cppCallback (
53+ {%if field.isFunction %}
54+ {{ field.returnType }} {{ cppClassName }}::{{ field.name }}_cppCallback (
5355 {%each field.args |argsInfo as arg%}
5456 {{ arg.cType }} {{ arg.name }}{%if not arg.lastArg %},{%endif%}
55- {%endeach}
57+
58+ {%endeach%}
5659 ) {
57- if ({{ field.name }} == NULL ) {
60+ if (! {{ field.name }}-> IsFunction () ) {
5861 {%if field.returnType == " int" %}
5962 return {{ field.returnNoResults }}; // no results acquired
6063 {%else %}
@@ -66,15 +69,16 @@ NAN_SETTER({{ cppClassName }}::Set{{ field.cppFunctionName }}) {
6669 {%each field.args |argsInfo as arg %}
6770 {%if arg.isJsArg %}
6871 Local<Value>::New (NanNew ({{ arg.name }})){%if not arg.lastArg %},{%endif%}
72+
6973 {%endif%}
7074 {%endeach%}
7175 };
7276
73- Local<Value> result = {{ field.name }}->Call (Context::GetCurrent ()->Global (), {{ field.args |jsArgsCount }}, argv);
77+ Local<Value> result = Function::Cast (* {{ field.name }}) ->Call (Context::GetCurrent ()->Global (), {{ field.args |jsArgsCount }}, argv);
7478
7579 {%each field|returnsInfo true false as _return%}
7680 if (result->IsObject ()) {
77- {{ _return.name }} = &ObjectWrap::Unwrap<{{ _return.cppClassname }}>(result->ToObject ())->GetValue ();
81+ // {{ _return.name }} = &ObjectWrap::Unwrap<{{ _return.cppClassName }}>(result->ToObject())->GetValue();
7882 return {{ field.returnSuccess }};
7983 }
8084 else if (result->IsNativeError ()) {
0 commit comments