Mercurial > projects > qtd
comparison generator/dgenerator.cpp @ 183:d3f4f14d43a5
fixes with QObjects
author | eldar |
---|---|
date | Fri, 03 Jul 2009 20:53:07 +0000 |
parents | ae06da58ec25 |
children | 7d9db724ee1d |
comparison
equal
deleted
inserted
replaced
182:973564c7e388 | 183:d3f4f14d43a5 |
---|---|
1669 if (d_class->baseClassName().isEmpty()) { | 1669 if (d_class->baseClassName().isEmpty()) { |
1670 s << INDENT << "~this() { " << endl; | 1670 s << INDENT << "~this() { " << endl; |
1671 { | 1671 { |
1672 Indentation indent(INDENT); | 1672 Indentation indent(INDENT); |
1673 | 1673 |
1674 /* if(d_class->name() == "QObject") | |
1675 s << INDENT << "if(!__no_real_delete) {" << endl | |
1676 << INDENT << " __qobject_is_deleting = true;" << endl | |
1677 << INDENT << " scope(exit) __qobject_is_deleting = false;" << endl | |
1678 << INDENT << " __free_native_resources();" << endl | |
1679 << INDENT << "}" << endl;*/ | |
1680 | |
1674 if(d_class->name() == "QObject") | 1681 if(d_class->name() == "QObject") |
1675 s << INDENT << "if(!__gc_managed)" << endl | 1682 s << INDENT << "if(!__gc_managed)" << endl |
1676 << INDENT << " remove(__gc_ref_list, this);" << endl | 1683 << INDENT << " remove(__gc_ref_list, this);" << endl |
1677 << INDENT << "if(!__no_real_delete && __gc_managed)" << endl | 1684 << INDENT << "if(!__no_real_delete && __gc_managed) {" << endl |
1678 << INDENT << " __free_native_resources();" << endl; | 1685 << INDENT << " __qobject_is_deleting = true;" << endl |
1686 << INDENT << " scope(exit) __qobject_is_deleting = false;" << endl | |
1687 << INDENT << " __free_native_resources();" << endl | |
1688 << INDENT << "}" << endl; | |
1679 else | 1689 else |
1680 s << INDENT << "if(!__no_real_delete)" << endl | 1690 s << INDENT << "if(!__no_real_delete)" << endl |
1681 << INDENT << " __free_native_resources();" << endl; | 1691 << INDENT << " __free_native_resources();" << endl; |
1682 } | 1692 } |
1683 s << INDENT << "}" << endl << endl; | 1693 s << INDENT << "}" << endl << endl; |
2610 | 2620 |
2611 s << INDENT << "if (__qt_return_value is null)" << endl | 2621 s << INDENT << "if (__qt_return_value is null)" << endl |
2612 << INDENT << " return null;" << endl | 2622 << INDENT << " return null;" << endl |
2613 << INDENT << "void* d_obj = qtd_" << class_name << "_d_pointer(__qt_return_value);" << endl | 2623 << INDENT << "void* d_obj = qtd_" << class_name << "_d_pointer(__qt_return_value);" << endl |
2614 << INDENT << "if (d_obj is null) {" << endl | 2624 << INDENT << "if (d_obj is null) {" << endl |
2615 << INDENT << " auto new_obj = new " << type_name << "(__qt_return_value, true);" << endl | 2625 << INDENT << " auto new_obj = new " << type_name << "(__qt_return_value, false);" << endl |
2616 << INDENT << " qtd_" << class_name << "_create_link(new_obj.nativeId, cast(void*) new_obj);" << endl | 2626 << INDENT << " qtd_" << class_name << "_create_link(new_obj.nativeId, cast(void*) new_obj);" << endl |
2617 << INDENT << " new_obj.__no_real_delete = true;" << endl | 2627 << INDENT << " new_obj.__no_real_delete = true;" << endl |
2618 << INDENT << " return new_obj;" << endl | 2628 << INDENT << " return new_obj;" << endl |
2619 << INDENT << "} else" << endl | 2629 << INDENT << "} else" << endl |
2620 << INDENT << " return cast(" << class_name << ") d_obj;" << endl; | 2630 << INDENT << " return cast(" << class_name << ") d_obj;" << endl; |
2650 s << "extern(C) void* qtd_" << d_class->name() << "_d_pointer(void *obj);" << endl | 2660 s << "extern(C) void* qtd_" << d_class->name() << "_d_pointer(void *obj);" << endl |
2651 << "extern(C) void qtd_" << d_class->name() << "_create_link(void *obj, void* d_obj);" << endl << endl; | 2661 << "extern(C) void qtd_" << d_class->name() << "_create_link(void *obj, void* d_obj);" << endl << endl; |
2652 s << "private extern (C) void qtd_D_" << d_class->name() << "_delete(void *d_ptr) {" << endl | 2662 s << "private extern (C) void qtd_D_" << d_class->name() << "_delete(void *d_ptr) {" << endl |
2653 << " auto d_ref = cast(QObject) d_ptr;" << endl | 2663 << " auto d_ref = cast(QObject) d_ptr;" << endl |
2654 << " d_ref.__no_real_delete = true;" << endl | 2664 << " d_ref.__no_real_delete = true;" << endl |
2655 << " delete d_ref;" << endl | 2665 << " if(!d_ref.__qobject_is_deleting)" |
2666 << " delete d_ref;" << endl | |
2656 << "}" << endl << endl; | 2667 << "}" << endl << endl; |
2657 } | 2668 } |
2658 | 2669 |
2659 /* | 2670 /* |
2660 void DGenerator::writeMarshallFunction(QTextStream &s, const AbstractMetaClass *d_class) | 2671 void DGenerator::writeMarshallFunction(QTextStream &s, const AbstractMetaClass *d_class) |
2832 else if (type->isQObject()) { | 2843 else if (type->isQObject()) { |
2833 QString type_name = type->name(); | 2844 QString type_name = type->name(); |
2834 const ComplexTypeEntry *ctype = static_cast<const ComplexTypeEntry *>(type->typeEntry()); | 2845 const ComplexTypeEntry *ctype = static_cast<const ComplexTypeEntry *>(type->typeEntry()); |
2835 if(ctype->isAbstract()) | 2846 if(ctype->isAbstract()) |
2836 type_name = type_name + "_ConcreteWrapper"; | 2847 type_name = type_name + "_ConcreteWrapper"; |
2837 | 2848 /* |
2849 s << INDENT << "scope " << arg_name << "_so = new StackObject!(" << type_name << ");" << endl | |
2850 << INDENT << "auto " << arg_name << "_d_ref = " << arg_name << "_so(" << arg_name <<", true);" << endl | |
2851 << INDENT << arg_name << "_d_ref.__no_real_delete = true;"; | |
2852 */ | |
2838 s << INDENT << "scope " << arg_name << "_d_ref = new " << type_name << "(" << arg_name <<", true);" << endl | 2853 s << INDENT << "scope " << arg_name << "_d_ref = new " << type_name << "(" << arg_name <<", true);" << endl |
2839 << INDENT << arg_name << "_d_ref.__no_real_delete = true;"; | 2854 << INDENT << arg_name << "_d_ref.__no_real_delete = true;"; |
2840 } | 2855 } |
2841 s << endl; | 2856 s << endl; |
2842 } | 2857 } |