Skip to content

Commit a70dad9

Browse files
John Haleytbranyen
authored andcommitted
Callbacks now build
1 parent 2df8dd6 commit a70dad9

6 files changed

Lines changed: 78 additions & 28 deletions

File tree

generate/descriptor.json

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -282,10 +282,6 @@
282282
"isStruct": true
283283
},
284284

285-
"cred_acquire_cb": {
286-
287-
},
288-
289285
"cred_helpers": {
290286
},
291287

@@ -693,12 +689,43 @@
693689
"remote_callbacks": {
694690
"isStruct": true,
695691
"cType": "git_remote_callbacks",
692+
"dependencies": [
693+
"../include/cred.h"
694+
],
696695
"fields": [{
697696
"name": "version",
698697
"cType": "int"
699698
}, {
700699
"name": "credentials",
701-
"cType": "git_cred_acquire_cb"
700+
"cType": "git_cred_acquire_cb",
701+
"isFunction": true,
702+
"args": [
703+
{
704+
"name": "cred",
705+
"cType": "git_cred **",
706+
"isReturn": true
707+
},
708+
{
709+
"name": "url",
710+
"cType": "const char *"
711+
},
712+
{
713+
"name": "username_from_url",
714+
"cType": "const char *"
715+
},
716+
{
717+
"name": "allowed_types",
718+
"cType": "unsigned int"
719+
},
720+
{
721+
"name": "payload",
722+
"cType": "void *"
723+
}
724+
],
725+
"returnType": "int",
726+
"returnNoResults": 1,
727+
"returnSuccess": 0,
728+
"returnError": -1
702729
}]
703730
},
704731

generate/partials/field_accessors.cc

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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()) {

generate/setup.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ fileNames.forEach(function(fileName, index) {
117117
}
118118

119119
// TODO Obsolete this.
120-
if (file.isStruct) {
120+
if (file.isStruct || !cFile) {
121121
// No functions.
122122
cFile = Object.create(file);
123123
cFile.functions = [];
@@ -203,6 +203,13 @@ fileNames.forEach(function(fileName, index) {
203203
field.cppClassName = typeMap[field.cType].cpp;
204204
field.jsClassName = typeMap[field.cType].js;
205205

206+
if (field.args) {
207+
field.args.forEach(function(arg) {
208+
arg.cppClassName = typeMap[arg.cType].cpp;
209+
arg.jsClassName = typeMap[arg.cType].js;
210+
});
211+
}
212+
206213
var struct = structs[field.cType];
207214

208215
// This should turn 'git_clone_options' into 'git_clone_init_options'

generate/templates/struct_content.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ void {{ cppClassName }}::ConstructFields() {
4848
{%each fields|fieldsInfo as field %}
4949
{%if field.hasConstructor %}
5050
{{ field.name }} = Persistent<Object>::New({{ field.cppClassName }}::New(&this->raw->{{ field.name }})->ToObject());
51-
{%elsif field.cppClassName == "Function" %}
52-
{{ field.name }} = NULL;
53-
this->raw->{{ field.name }} = ({{ field.cType }}){{ field.name }}_cppCallback;
51+
{%elsif field.isFunction %}
52+
{{ field.name }} = Persistent<Value>::New(NanNull());
53+
//this->raw->{{ field.name }} = ({{ field.cType }}){{ field.name }}_cppCallback;
5454
{%endif%}
5555
{%endeach%}
5656
}

generate/templates/struct_header.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@ class {{ cppClassName }} : public ObjectWrap {
3737
{%if not field.ignore%}
3838
{%if field.hasConstructor %}
3939
Persistent<Object> {{ field.name }};
40-
{%elsif field.cppClassName == "Function"%}
41-
Persistent<Function> {{ field.name }};
40+
{%elsif field.isFunction %}
41+
Persistent<Value> {{ field.name }};
4242
{{ field.returnType }} {{ field.name }}_cppCallback (
4343
{%each field.args|argsInfo as arg%}
4444
{{ arg.cType }} {{ arg.name}}{%if not arg.lastArg %},{%endif%}
45-
{%endeach}
45+
{%endeach%}
4646
);
4747
{%endif%}
4848
static NAN_GETTER(Get{{ field.cppFunctionName }});

generate/types.json

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"git_cred_acquire_cb": {
3-
"cpp": "Function",
4-
"js": "Function"
3+
"cpp": "GitCredAcquireCb",
4+
"js": "CredAcquireCb"
55
},
66
"git_attr_get": {
77
"cpp": "Get",
@@ -1637,10 +1637,6 @@
16371637
"js": "setCredAcquireCb",
16381638
"cpp": "SetCredAcquireCb"
16391639
},
1640-
"git_cred_acquire_cb": {
1641-
"js": "CredAcquireCb",
1642-
"cpp": "CredAcquireCb"
1643-
},
16441640
"git_remote_set_transport": {
16451641
"cpp": "SetTransport",
16461642
"js": "setTransport"
@@ -9227,5 +9223,21 @@
92279223
"const git_cred_ssh_key_from_agent *": {
92289224
"cpp": "CredSshKeyFromAgent",
92299225
"js": "credSshKeyFromAgent"
9226+
},
9227+
"git_cred_acquire_cb **": {
9228+
"cpp": "GitCredAcquireCb",
9229+
"js": "CredAcquireCb"
9230+
},
9231+
"git_cred_acquire_cb *": {
9232+
"cpp": "GitCredAcquireCb",
9233+
"js": "CredAcquireCb"
9234+
},
9235+
"const git_cred_acquire_cb **": {
9236+
"cpp": "GitCredAcquireCb",
9237+
"js": "CredAcquireCb"
9238+
},
9239+
"const git_cred_acquire_cb *": {
9240+
"cpp": "GitCredAcquireCb",
9241+
"js": "CredAcquireCb"
92309242
}
9231-
}
9243+
}

0 commit comments

Comments
 (0)