2222 this_thread::sleep_for (chrono::milliseconds (1 ));
2323 }
2424
25- {% each cbFunction|returnsInfo true false as _return %}
25+ {% each cbFunction|returnsInfo false true as _return %}
26+ {% if _return.isOutParam %}
2627 *{{ _return.name }} = *baton->{{ _return.name }};
28+ {% endif %}
2729 {% endeach %}
2830
2931 return baton->result ;
@@ -42,7 +44,11 @@ void {{ cppClassName }}::{{ cppFunctionName }}_{{ cbFunction.name }}_asyncAfter(
4244
4345 {% each cbFunction.args |argsInfo as arg %}
4446 {% if arg | isPayload %}
47+ {% if cbFunction.payload .globalPayload %}
48+ NanCallback* callback = (({{ cppFunctionName }}_globalPayload*)baton->{{ arg.name }})->{{ cbFunction.name }};
49+ {% else %}
4550 NanCallback* callback = (NanCallback *)baton->{{ arg.name }};
51+ {% endif %}
4652 {% endif %}
4753 {% endeach %}
4854
@@ -84,18 +90,25 @@ void {{ cppClassName }}::{{ cppFunctionName }}_{{ cbFunction.name }}_asyncAfter(
8490 }
8591 }
8692
87- {{ cbFunction.return .type }} resultStatus;
88-
89- {% each cbFunction|returnsInfo true false as _return %}
93+ {% each cbFunction|returnsInfo false true as _return %}
9094 if (result.IsEmpty () || result->IsNativeError ()) {
9195 baton->result = {{ cbFunction.return .error }};
9296 }
9397 else if (!result->IsNull () && !result->IsUndefined ()) {
98+ {% if _return.isOutParam %}
9499 {{ _return.cppClassName }}* wrapper = ObjectWrap::Unwrap<{{ _return.cppClassName }}>(result->ToObject ());
95100 wrapper->selfFreeing = false ;
96101
97102 baton->{{ _return.name }} = wrapper->GetRefValue ();
98103 baton->result = {{ cbFunction.return .success }};
104+ {% else %}
105+ if (result->IsNumber ()) {
106+ baton->result = (int )result->ToNumber ()->Value ();
107+ }
108+ else {
109+ baton->result = {{ cbFunction.return .noResults }};
110+ }
111+ {% endif %}
99112 }
100113 else {
101114 baton->result = {{ cbFunction.return .noResults }};
@@ -124,18 +137,26 @@ void {{ cppClassName }}::{{ cppFunctionName }}_{{ cbFunction.name }}_asyncPromis
124137 if (isFulfilled->Value ()) {
125138 NanCallback* resultFn = new NanCallback (promise->Get (NanNew (" value" )).As <Function>());
126139 Handle<v8::Value> result = resultFn->Call (0 , argv);
127- {{ cbFunction.return .type }} resultStatus;
128140
129- {% each cbFunction|returnsInfo true false as _return %}
141+ {% each cbFunction|returnsInfo false true as _return %}
130142 if (result.IsEmpty () || result->IsNativeError ()) {
131143 baton->result = {{ cbFunction.return .error }};
132144 }
133145 else if (!result->IsNull () && !result->IsUndefined ()) {
146+ {% if _return.isOutParam %}
134147 {{ _return.cppClassName }}* wrapper = ObjectWrap::Unwrap<{{ _return.cppClassName }}>(result->ToObject ());
135148 wrapper->selfFreeing = false ;
136149
137150 baton->{{ _return.name }} = wrapper->GetRefValue ();
138151 baton->result = {{ cbFunction.return .success }};
152+ {% else %}
153+ if (result->IsNumber ()) {
154+ baton->result = (int )result->ToNumber ()->Value ();
155+ }
156+ else {
157+ baton->result = {{ cbFunction.return .noResults }};
158+ }
159+ {% endif %}
139160 }
140161 else {
141162 baton->result = {{ cbFunction.return .noResults }};
0 commit comments