Skip to content

Commit b2c19f7

Browse files
John Haleytbranyen
authored andcommitted
Nested objects work for generated structs now
1 parent 961a664 commit b2c19f7

3 files changed

Lines changed: 11 additions & 3 deletions

File tree

generate/partials/field_accessors.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ NAN_SETTER({{ cppClassName }}::Set{{ field.cppFunctionName }}) {
2626
{{ cppClassName }} *wrapper = ObjectWrap::Unwrap<{{ cppClassName }}>(args.This());
2727

2828
{%if field.hasConstructor %}
29-
wrapper->{{ field.name }} = value;
29+
wrapper->{{ field.name }} = Persistent<Object>::New(value->ToObject());
30+
wrapper->raw->{{ field.name }} = *ObjectWrap::Unwrap<{{ field.cppClassName }}>(value->ToObject())->GetValue();
3031
{%elsif field.cppClassName == 'String' %}
3132
if (wrapper->GetValue()->{{ field.name }}) {
3233
//free(wrapper->{{ field.name }});

generate/templates/struct_content.cc

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,19 @@ using namespace std;
3535
// This is going to cause memory leaks. We'll have to solve that later
3636
// TODO: Clean up memory better
3737
free(this->raw);
38+
39+
{%each fields|fieldsInfo as field %}
40+
{%if field.hasConstructor %}
41+
{{ field.name }}.Dispose();
42+
{{ field.name }}.Clear();
43+
{%endif%}
44+
{%endeach%}
3845
}
3946

4047
void {{ cppClassName }}::ConstructFields() {
4148
{%each fields|fieldsInfo as field %}
4249
{%if field.hasConstructor %}
43-
{{ field.name }} = {{ field.cppClassName }}::New(&this->raw->{{ field.name }});
50+
{{ field.name }} = Persistent<Object>::New({{ field.cppClassName }}::New(&this->raw->{{ field.name }})->ToObject());
4451
{%endif%}
4552
{%endeach%}
4653
}

generate/templates/struct_header.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class {{ cppClassName }} : public ObjectWrap {
3636
{%each fields as field%}
3737
{%if not field.ignore%}
3838
{%if field.hasConstructor %}
39-
Handle<Value> {{ field.name }};
39+
Persistent<Object> {{ field.name }};
4040
{%endif%}
4141
static NAN_GETTER(Get{{ field.cppFunctionName }});
4242
static NAN_SETTER(Set{{ field.cppFunctionName }});

0 commit comments

Comments
 (0)