diff options
Diffstat (limited to 'tools/m4')
-rw-r--r-- | tools/m4/class_interface.m4 | 7 | ||||
-rw-r--r-- | tools/m4/class_shared.m4 | 12 | ||||
-rw-r--r-- | tools/m4/convert_base.m4 | 4 | ||||
-rw-r--r-- | tools/m4/gerror.m4 | 15 | ||||
-rw-r--r-- | tools/m4/method.m4 | 48 | ||||
-rw-r--r-- | tools/m4/property.m4 | 4 | ||||
-rw-r--r-- | tools/m4/signal.m4 | 12 | ||||
-rw-r--r-- | tools/m4/vfunc.m4 | 33 |
8 files changed, 110 insertions, 25 deletions
diff --git a/tools/m4/class_interface.m4 b/tools/m4/class_interface.m4 index d63fd40d..0e93bd98 100644 --- a/tools/m4/class_interface.m4 +++ b/tools/m4/class_interface.m4 @@ -58,7 +58,9 @@ protected: _IMPORT(SECTION_PH_DEFAULT_SIGNAL_HANDLERS) //Callbacks (virtual functions): +#ifdef GLIBMM_VFUNCS_ENABLED _IMPORT(SECTION_PH_VFUNCS) +#endif //GLIBMM_VFUNCS_ENABLED }; ') @@ -90,11 +92,16 @@ void __CPPNAME__`'_Class::iface_init_function(void* g_iface, void*) //This is a temporary fix until I find out why I can not seem to derive a GtkFileChooser interface. murrayc g_assert(klass != 0); +#ifdef GLIBMM_VFUNCS_ENABLED _IMPORT(SECTION_PCC_CLASS_INIT_VFUNCS) +#endif //GLIBMM_VFUNCS_ENABLED + _IMPORT(SECTION_PCC_CLASS_INIT_DEFAULT_SIGNAL_HANDLERS) } +#ifdef GLIBMM_VFUNCS_ENABLED _IMPORT(SECTION_PCC_VFUNCS) +#endif //GLIBMM_VFUNCS_ENABLED _IMPORT(SECTION_PCC_DEFAULT_SIGNAL_HANDLERS) ') diff --git a/tools/m4/class_shared.m4 b/tools/m4/class_shared.m4 index 1cb066a3..ad74ade4 100644 --- a/tools/m4/class_shared.m4 +++ b/tools/m4/class_shared.m4 @@ -11,11 +11,15 @@ define(`_H_VFUNCS_AND_SIGNALS',`dnl public: //C++ methods used to invoke GTK+ virtual functions: +#ifdef GLIBMM_VFUNCS_ENABLED _IMPORT(SECTION_H_VFUNCS_CPPWRAPPER) +#endif //GLIBMM_VFUNCS_ENABLED protected: //GTK+ Virtual Functions (override these to change behaviour): +#ifdef GLIBMM_VFUNCS_ENABLED _IMPORT(SECTION_H_VFUNCS) +#endif //GLIBMM_VFUNCS_ENABLED //Default Signal Handlers:: _IMPORT(SECTION_H_DEFAULT_SIGNAL_HANDLERS) @@ -70,7 +74,9 @@ protected: _IMPORT(SECTION_PH_DEFAULT_SIGNAL_HANDLERS) //Callbacks (virtual functions): +#ifdef GLIBMM_VFUNCS_ENABLED _IMPORT(SECTION_PH_VFUNCS) +#endif //GLIBMM_VFUNCS_ENABLED }; ') @@ -107,12 +113,16 @@ void __CPPNAME__`'_Class::class_init_function(void* g_class, void* class_data) BaseClassType *const klass = static_cast<BaseClassType*>(g_class); CppClassParent::class_init_function(klass, class_data); +#ifdef GLIBMM_VFUNCS_ENABLED _IMPORT(SECTION_PCC_CLASS_INIT_VFUNCS) +#endif //GLIBMM_VFUNCS_ENABLED _IMPORT(SECTION_PCC_CLASS_INIT_DEFAULT_SIGNAL_HANDLERS) } ')dnl +#ifdef GLIBMM_VFUNCS_ENABLED _IMPORT(SECTION_PCC_VFUNCS) +#endif //GLIBMM_VFUNCS_ENABLED _IMPORT(SECTION_PCC_DEFAULT_SIGNAL_HANDLERS) ') @@ -145,8 +155,10 @@ _IMPORT(SECTION_CC_PROPERTYPROXIES) _IMPORT(SECTION_CC_DEFAULT_SIGNAL_HANDLERS) +#ifdef GLIBMM_VFUNCS_ENABLED _IMPORT(SECTION_CC_VFUNCS) _IMPORT(SECTION_CC_VFUNCS_CPPWRAPPER) +#endif //GLIBMM_VFUNCS_ENABLED ') dnl _PARENT_GCLASS_FROM_OBJECT(object_instance_name) diff --git a/tools/m4/convert_base.m4 b/tools/m4/convert_base.m4 index 29fbb26e..51d1f41b 100644 --- a/tools/m4/convert_base.m4 +++ b/tools/m4/convert_base.m4 @@ -14,15 +14,17 @@ popdef(`__E1')popdef(`__E2')`'') define(`CF__EQ',`$3') # -# _CONVERT(ctype, cpptype, name, wrap_line) +# _CONVERT(fromtype, totype, name, wrap_line) # Print the conversion from ctype to cpptype define(`_CONVERT',`dnl +m4_ifelse(`$2',void,,`dnl pushdef(`__COV',`CF`'__HASH2(`$1',`$2')')dnl m4_ifdef(__COV,`m4_indir(__COV,`$1',`$2',`$3')',` m4_errprint(`No conversion from $1 to $2 defined (line: $4, parameter name: $3) ') m4_m4exit(1) ')`'dnl +')`'dnl ') diff --git a/tools/m4/gerror.m4 b/tools/m4/gerror.m4 index bb3eb7d4..9bc27249 100644 --- a/tools/m4/gerror.m4 +++ b/tools/m4/gerror.m4 @@ -27,7 +27,14 @@ $4 #ifndef DOXYGEN_SHOULD_SKIP_THIS private: + +#ifdef GLIBMM_EXCEPTIONS_ENABLED static void throw_func(GError* gobject); +#else + //When not using exceptions, we just pass the Exception object around without throwing it: + static std::auto_ptr<Glib::Error> throw_func(GError* gobject); +#endif //GLIBMM_EXCEPTIONS_ENABLED + friend void wrap_init(); // uses throw_func() #endif }; @@ -69,10 +76,18 @@ __NAMESPACE__::__CPPNAME__::Code __NAMESPACE__::__CPPNAME__::code() const return static_cast<Code>(Glib::Error::code()); } +#ifdef GLIBMM_EXCEPTIONS_ENABLED void __NAMESPACE__::__CPPNAME__::throw_func(GError* gobject) { throw __NAMESPACE__::__CPPNAME__`'(gobject); } +#else +//When not using exceptions, we just pass the Exception object around without throwing it: +std::auto_ptr<Glib::Error> __NAMESPACE__::__CPPNAME__::throw_func(GError* gobject) +{ + return std::auto_ptr<Glib::Error>(new __NAMESPACE__::__CPPNAME__`'(gobject)); +} +#endif //GLIBMM_EXCEPTIONS_ENABLED m4_ifelse($5,`NO_GTYPE',,`dnl else // static diff --git a/tools/m4/method.m4 b/tools/m4/method.m4 index f4bee93e..4193e04b 100644 --- a/tools/m4/method.m4 +++ b/tools/m4/method.m4 @@ -9,26 +9,41 @@ dnl dnl dnl method -dnl $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 +dnl $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 dnl _METHOD(cppname,cname,cpprettype,crettype,arglist,cargs,const,refreturn,errthrow,deprecated,constversion,arglist_without_types) define(`_METHOD',`dnl _PUSH(SECTION_CC) ifelse(`$10',,,`_DEPRECATE_IFDEF_START') +ifelse(`$9',,,`#ifdef GLIBMM_EXCEPTIONS_ENABLED') $3 __CPPNAME__::$1`'($5)ifelse(`$7',1,` const') +ifelse(`$9',,,`#else +$3 __CPPNAME__::$1`'(`'$5`'ifelse(($5),(),`',`, ')std::auto_ptr<Glib::Error>& error)ifelse(`$7',1,` const') +#endif //GLIBMM_EXCEPTIONS_ENABLED +') { ifelse(`$11',,dnl -` ifelse(`$8'`$9',,dnl -` ifelse(`$3',void,,`return ')_CONVERT($4,$3,`$2`'(ifelse(`$7',1,const_cast<__CNAME__*>(gobj()),gobj())`'ifelse(`$6',,,`, ')$6)'); -', dnl -`ifelse(`$9',,,` GError *error = 0;') - ifelse(`$3',void,,``$3' retvalue = ')_CONVERT($4,$3,`$2`'(ifelse(`$7',1,const_cast<__CNAME__*>(gobj()),gobj())`'ifelse(`$6',,,`, ')$6)'); -ifelse(`$9',,,` if(error) ::Glib::Error::throw_exception(error);') +` ifelse(`$8'`$9',,dnl If it is not errthrow or refreturn +`ifelse(`$3',void,dnl If it returns voids: +`$2(ifelse(`$7',1,const_cast<__CNAME__*>(gobj()),gobj())`'ifelse(`$6',,,`, ')$6);' dnl It it returns non-void: +,`return _CONVERT($4,$3,`$2`'(ifelse(`$7',1,const_cast<__CNAME__*>(gobj()),gobj())`'ifelse(`$6',,,`, ')$6)');')' dnl End if it returns voids. +,dnl If is errthrow or refreturn +`ifelse(`$9',,,` GError* gerror = 0;') + ifelse(`$3',void,,``$3' retvalue = _CONVERT($4,$3,`$2`'(ifelse(`$7',1,const_cast<__CNAME__*>(gobj()),gobj())`'ifelse(`$6',,,`, ')$6)');')dnl +ifelse(`$9',,,` +#ifdef GLIBMM_EXCEPTIONS_ENABLED + if(gerror) + ::Glib::Error::throw_exception(gerror); +#else + if(gerror) + error = ::Glib::Error::throw_exception(gerror); +#endif //GLIBMM_EXCEPTIONS_ENABLED +') ifelse(`$8',,,`dnl if(retvalue) retvalue->reference(); //The function does not do a ref for us. ')dnl ifelse(`$3',void,,` return retvalue;') -')dnl +')dnl End errthrow/refreturn ',` return const_cast<__CPPNAME__*>(this)->$1($12);') } ifelse(`$10',,,`_DEPRECATE_IFDEF_END @@ -42,14 +57,27 @@ dnl _STATIC_METHOD(cppname,cname,cpprettype,crettype,arglist,cargs,refreturn,er define(`_STATIC_METHOD',`dnl _PUSH(SECTION_CC) ifelse(`$9',,,`_DEPRECATE_IFDEF_START') dnl +ifelse(`$8',,,`#ifdef GLIBMM_EXCEPTIONS_ENABLED') $3 __CPPNAME__::$1($5) +ifelse(`$8',,,`#else +$3 __CPPNAME__::$1(`'$5`'ifelse(($5),(),`',`, ')std::auto_ptr<Glib::Error>& error) +#endif //GLIBMM_EXCEPTIONS_ENABLED +') { ifelse(`$7'`$8',,dnl ` ifelse(`$3',void,,`return ')_CONVERT($4,$3,`$2`'($6)'); ', dnl -`ifelse(`$8',,,` GError *error = 0;') +`ifelse(`$8',,,` GError* gerror = 0;') ifelse(`$3',void,,``$3' retvalue = ')_CONVERT($4,$3,`$2`'($6)'); -ifelse(`$8',,,` if(error) ::Glib::Error::throw_exception(error);') +ifelse(`$8',,,` +#ifdef GLIBMM_EXCEPTIONS_ENABLED + if(gerror) + ::Glib::Error::throw_exception(gerror); +#else + if(gerror) + error = ::Glib::Error::throw_exception(gerror); +#endif //GLIBMM_EXCEPTIONS_ENABLED +') ifelse(`$7',,,`dnl if(retvalue) retvalue->reference(); //The function does not do a ref for us. diff --git a/tools/m4/property.m4 b/tools/m4/property.m4 index 28c4c1e7..4a9877bd 100644 --- a/tools/m4/property.m4 +++ b/tools/m4/property.m4 @@ -17,6 +17,7 @@ dnl Put spaces around the template parameter if necessary. pushdef(`__PROXY_TYPE__',`dnl Glib::PropertyProxy$4<'ifelse(regexp(_QUOTE($3),`>$'),`-1',_QUOTE($3),` '_QUOTE($3)` ')`>'dnl )dnl +#ifdef GLIBMM_PROPERTIES_ENABLED /** $5 * * You rarely need to use properties because there are get_ and set_ methods for almost all of them. @@ -24,11 +25,14 @@ Glib::PropertyProxy$4<'ifelse(regexp(_QUOTE($3),`>$'),`-1',_QUOTE($3),` '_QUOTE( * the value of the property changes. */ __PROXY_TYPE__ property_$2`'() ifelse($4,_ReadOnly, const,); +#endif //#GLIBMM_PROPERTIES_ENABLED _PUSH(SECTION_CC_PROPERTYPROXIES) +#ifdef GLIBMM_PROPERTIES_ENABLED __PROXY_TYPE__ __CPPNAME__::property_$2`'() ifelse($4,_ReadOnly, const,) { return __PROXY_TYPE__`'(this, "$1"); } +#endif //GLIBMM_PROPERTIES_ENABLED _POP() popdef(`__PROXY_TYPE__')dnl diff --git a/tools/m4/signal.m4 b/tools/m4/signal.m4 index 4e55e168..989e898e 100644 --- a/tools/m4/signal.m4 +++ b/tools/m4/signal.m4 @@ -40,19 +40,23 @@ static $2 __CPPNAME__`'_signal_$4_callback`'(__CNAME__`'* self, _COMMA_SUFFIX($3 // Do not try to call a signal on a disassociated wrapper. if(Glib::ObjectBase::_get_current_wrapper((GObject*) self)) { + #ifdef GLIBMM_EXCEPTIONS_ENABLED try { + #endif //GLIBMM_EXCEPTIONS_ENABLED if(sigc::slot_base *const slot = Glib::SignalProxyNormal::data_to_slot`'(data)) ifelse(`$2',void,`dnl (*static_cast<SlotType*>(slot))($7); ',`dnl else return _CONVERT($5,$2,`(*static_cast<SlotType*>(slot))($7)'); ')dnl endif + #ifdef GLIBMM_EXCEPTIONS_ENABLED } catch(...) { Glib::exception_handlers_invoke(); } + #endif //GLIBMM_EXCEPTIONS_ENABLED } ifelse($2,void,,`dnl else @@ -70,15 +74,19 @@ static $2 __CPPNAME__`'_signal_$4_notify_callback`'(__CNAME__`'* self, _COMMA_SU // Do not try to call a signal on a disassociated wrapper. if(Glib::ObjectBase::_get_current_wrapper((GObject*) self)) { + #ifdef GLIBMM_EXCEPTIONS_ENABLED try { + #endif //GLIBMM_EXCEPTIONS_ENABLED if(sigc::slot_base *const slot = Glib::SignalProxyNormal::data_to_slot`'(data)) (*static_cast<SlotType*>(slot))($7); + #ifdef GLIBMM_EXCEPTIONS_ENABLED } catch(...) { Glib::exception_handlers_invoke(); } + #endif //GLIBMM_EXCEPTIONS_ENABLED } typedef $2 RType; @@ -140,19 +148,23 @@ _IMPORT(SECTION_CHECK) // being overridden: if(obj && obj->is_derived_()) { + #ifdef GLIBMM_EXCEPTIONS_ENABLED try // Trap C++ exceptions which would normally be lost because this is a C callback. { + #endif //GLIBMM_EXCEPTIONS_ENABLED // Call the virtual member method, which derived classes might override. ifelse($4,void,`dnl obj->on_$1`'($7); ',`dnl return _CONVERT($3,$4,`obj->on_$1`'($7)'); ')dnl + #ifdef GLIBMM_EXCEPTIONS_ENABLED } catch(...) { Glib::exception_handlers_invoke`'(); } + #endif //GLIBMM_EXCEPTIONS_ENABLED } else { diff --git a/tools/m4/vfunc.m4 b/tools/m4/vfunc.m4 index 5b26b7d9..a6dad27f 100644 --- a/tools/m4/vfunc.m4 +++ b/tools/m4/vfunc.m4 @@ -33,8 +33,10 @@ _IMPORT(SECTION_CHECK) // being overridden: if(obj && obj->is_derived_()) { + #ifdef GLIBMM_EXCEPTIONS_ENABLED try // Trap C++ exceptions which would normally be lost because this is a C callback. { + #endif //GLIBMM_EXCEPTIONS_ENABLED // Call the virtual member method, which derived classes might override. ifelse($4,void,`dnl obj->$1`'($7); @@ -45,11 +47,13 @@ ifelse($9,refreturn_ctype,`dnl Assume Glib::unwrap_copy() is correct if refretur return _CONVERT($3,$4,`obj->$1`'($7)'); ')dnl ')dnl + #ifdef GLIBMM_EXCEPTIONS_ENABLED } catch(...) { Glib::exception_handlers_invoke`'(); } + #endif //GLIBMM_EXCEPTIONS_ENABLED } else { @@ -74,20 +78,6 @@ ifelse($4,void,,`dnl _POP()') - -# $1 $2 $3 $4 -# _VFUNC_H(vfunc_name, rettype, `<cppargs>', is_const) -# -define(`_VFUNC_H',`dnl -_PUSH(SECTION_H_VFUNCS) -ifelse($4,`1',`dnl -virtual $2 $1`'($3) const; -',`dnl -virtual $2 $1`'($3); -') - -_POP()') - # $1 $2 $3 $4 $5 $6 $7 $8 # _VFUNC_CC(vfunc_name, gtkname, cpp_rettype, c_rettype, `<cppargs>', `<carg_names>', is_const, refreturn) # @@ -121,3 +111,18 @@ ifelse($8,refreturn,`dnl Assume Glib::wrap() is correct if refreturn is requeste _POP()') +# $1 $2 $3 $4 +# _VFUNC_H(vfunc_name, rettype, `<cppargs>', is_const) +# Only used for custom vfuncs. +# +define(`_VFUNC_H',`dnl +_PUSH(SECTION_H_VFUNCS) +ifelse($4,`1',`dnl +virtual $2 $1`'($3) const; +',`dnl +virtual $2 $1`'($3); +') + +_POP()') + + |