Skip to content

Commit deeb885

Browse files
author
John Haley
committed
Normalize returns for callbacks
1 parent 2aff3c0 commit deeb885

File tree

4 files changed

+30
-14
lines changed

4 files changed

+30
-14
lines changed

generate/input/callbacks.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,7 @@
495495
],
496496
"return": {
497497
"type": "int",
498-
"noResults": 1,
498+
"noResults": 0,
499499
"success": 0,
500500
"error": -1
501501
}

generate/templates/partials/callback_helpers.cc

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@
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;
@@ -84,8 +86,6 @@ void {{ cppClassName }}::{{ cppFunctionName }}_{{ cbFunction.name }}_asyncAfter(
8486
}
8587
}
8688

87-
{{ cbFunction.return.type }} resultStatus;
88-
8989
{% each cbFunction|returnsInfo false true as _return %}
9090
if (result.IsEmpty() || result->IsNativeError()) {
9191
baton->result = {{ cbFunction.return.error }};
@@ -99,7 +99,7 @@ void {{ cppClassName }}::{{ cppFunctionName }}_{{ cbFunction.name }}_asyncAfter(
9999
baton->result = {{ cbFunction.return.success }};
100100
{% else %}
101101
if (result->IsNumber()) {
102-
baton->result = (int) result->ToNumber()->Value();
102+
baton->result = (int)result->ToNumber()->Value();
103103
}
104104
else {
105105
baton->result = {{ cbFunction.return.noResults }};
@@ -133,7 +133,6 @@ void {{ cppClassName }}::{{ cppFunctionName }}_{{ cbFunction.name }}_asyncPromis
133133
if (isFulfilled->Value()) {
134134
NanCallback* resultFn = new NanCallback(promise->Get(NanNew("value")).As<Function>());
135135
Handle<v8::Value> result = resultFn->Call(0, argv);
136-
{{ cbFunction.return.type }} resultStatus;
137136

138137
{% each cbFunction|returnsInfo false true as _return %}
139138
if (result.IsEmpty() || result->IsNativeError()) {
@@ -148,7 +147,7 @@ void {{ cppClassName }}::{{ cppFunctionName }}_{{ cbFunction.name }}_asyncPromis
148147
baton->result = {{ cbFunction.return.success }};
149148
{% else %}
150149
if (result->IsNumber()) {
151-
baton->result = (int) result->ToNumber()->Value();
150+
baton->result = (int)result->ToNumber()->Value();
152151
}
153152
else {
154153
baton->result = {{ cbFunction.return.noResults }};

generate/templates/partials/field_accessors.cc

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,10 @@
9494
this_thread::sleep_for(chrono::milliseconds(1));
9595
}
9696

97-
{% each field|returnsInfo true false as _return %}
97+
{% each field|returnsInfo false true as _return %}
98+
{% if _return.isOutParam %}
9899
*{{ _return.name }} = *baton->{{ _return.name }};
100+
{% endif %}
99101
{% endeach %}
100102

101103
return baton->result;
@@ -173,18 +175,25 @@
173175
}
174176
}
175177

176-
{{ field.return.type }} resultStatus;
177-
178-
{% each field|returnsInfo true false as _return %}
178+
{% each field|returnsInfo false true as _return %}
179179
if (result.IsEmpty() || result->IsNativeError()) {
180180
baton->result = {{ field.return.error }};
181181
}
182182
else if (!result->IsNull() && !result->IsUndefined()) {
183+
{% if _return.isOutParam %}
183184
{{ _return.cppClassName }}* wrapper = ObjectWrap::Unwrap<{{ _return.cppClassName }}>(result->ToObject());
184185
wrapper->selfFreeing = false;
185186

186187
baton->{{ _return.name }} = wrapper->GetRefValue();
187188
baton->result = {{ field.return.success }};
189+
{% else %}
190+
if (result->IsNumber()) {
191+
baton->result = (int)result->ToNumber()->Value();
192+
}
193+
else {
194+
baton->result = {{ field.return.noResults }};
195+
}
196+
{% endif %}
188197
}
189198
else {
190199
baton->result = {{ field.return.noResults }};
@@ -213,18 +222,26 @@
213222
if (isFulfilled->Value()) {
214223
NanCallback* resultFn = new NanCallback(promise->Get(NanNew("value")).As<Function>());
215224
Handle<v8::Value> result = resultFn->Call(0, argv);
216-
{{ field.return.type }} resultStatus;
217225

218-
{% each field|returnsInfo true false as _return %}
226+
{% each field|returnsInfo false true as _return %}
219227
if (result.IsEmpty() || result->IsNativeError()) {
220228
baton->result = {{ field.return.error }};
221229
}
222230
else if (!result->IsNull() && !result->IsUndefined()) {
231+
{% if _return.isOutParam %}
223232
{{ _return.cppClassName }}* wrapper = ObjectWrap::Unwrap<{{ _return.cppClassName }}>(result->ToObject());
224233
wrapper->selfFreeing = false;
225234

226235
baton->{{ _return.name }} = wrapper->GetRefValue();
227236
baton->result = {{ field.return.success }};
237+
{% else %}
238+
if (result->IsNumber()) {
239+
baton->result = (int)result->ToNumber()->Value();
240+
}
241+
else{
242+
baton->result = {{ field.return.noResults }};
243+
}
244+
{% endif %}
228245
}
229246
else {
230247
baton->result = {{ field.return.noResults }};

test/tests/clone.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ describe("Clone", function() {
1919
var sshPrivateKey = local("../id_rsa");
2020

2121
// Set a reasonable timeout here now that our repository has grown.
22-
this.timeout(15000);
22+
this.timeout(30000);
2323

2424
beforeEach(function() {
2525
return NodeGit.Promise.all([

0 commit comments

Comments
 (0)