[beast/devel: 1/4] SFI: handle GConnectFlags operators, SfiGlueGcFreeFunc and GTypeFlags casts



commit 4510bc9846abaf4ca8cd3236449afa4594ea2f9f
Author: Tim Janik <timj gnu org>
Date:   Fri Dec 21 03:23:22 2012 +0100

    SFI: handle GConnectFlags operators, SfiGlueGcFreeFunc and GTypeFlags casts

 sfi/glib-extra.h   |   10 ++++++++--
 sfi/sfidl-cbase.cc |    2 +-
 2 files changed, 9 insertions(+), 3 deletions(-)
---
diff --git a/sfi/glib-extra.h b/sfi/glib-extra.h
index 4ff83c4..40cf00c 100644
--- a/sfi/glib-extra.h
+++ b/sfi/glib-extra.h
@@ -258,8 +258,8 @@ void    g_usignal_notify         (gint8          usignal);
 
 /* --- GType boilerplate --- */
 #ifndef G_DEFINE_DATA_TYPE      	// GTKFIX: add this to glib?
-#define G_DEFINE_DATA_TYPE(TN, t_n, T_P)                         G_DEFINE_DATA_TYPE_EXTENDED (TN, t_n, T_P, 0, {})
-#define G_DEFINE_DATA_TYPE_WITH_CODE(TN, t_n, T_P, _C_)          G_DEFINE_DATA_TYPE_EXTENDED (TN, t_n, T_P, 0, _C_)
+#define G_DEFINE_DATA_TYPE(TN, t_n, T_P)                         G_DEFINE_DATA_TYPE_EXTENDED (TN, t_n, T_P, GTypeFlags (0), {})
+#define G_DEFINE_DATA_TYPE_WITH_CODE(TN, t_n, T_P, _C_)          G_DEFINE_DATA_TYPE_EXTENDED (TN, t_n, T_P, GTypeFlags (0), _C_)
 #define G_DEFINE_ABSTRACT_DATA_TYPE(TN, t_n, T_P)                G_DEFINE_DATA_TYPE_EXTENDED (TN, t_n, T_P, G_TYPE_FLAG_ABSTRACT, {})
 #define G_DEFINE_ABSTRACT_DATA_TYPE_WITH_CODE(TN, t_n, T_P, _C_) G_DEFINE_DATA_TYPE_EXTENDED (TN, t_n, T_P, G_TYPE_FLAG_ABSTRACT, _C_)
 #endif /* !G_DEFINE_DATA_TYPE */
@@ -341,6 +341,12 @@ inline GSignalFlags& operator&= (GSignalFlags &s1, GSignalFlags s2) { s1 = s1 &
 inline GSignalFlags  operator|  (GSignalFlags  s1, GSignalFlags s2) { return GSignalFlags (s1 | (long long unsigned) s2); }
 inline GSignalFlags& operator|= (GSignalFlags &s1, GSignalFlags s2) { s1 = s1 | s2; return s1; }
 inline GSignalFlags  operator~  (GSignalFlags  s1)                 { return GSignalFlags (~(long long unsigned) s1); }
+
+inline GConnectFlags  operator&  (GConnectFlags  s1, GConnectFlags s2) { return GConnectFlags (s1 & (long long unsigned) s2); }
+inline GConnectFlags& operator&= (GConnectFlags &s1, GConnectFlags s2) { s1 = s1 & s2; return s1; }
+inline GConnectFlags  operator|  (GConnectFlags  s1, GConnectFlags s2) { return GConnectFlags (s1 | (long long unsigned) s2); }
+inline GConnectFlags& operator|= (GConnectFlags &s1, GConnectFlags s2) { s1 = s1 | s2; return s1; }
+inline GConnectFlags  operator~  (GConnectFlags  s1)                 { return GConnectFlags (~(long long unsigned) s1); }
 #endif // __cplusplus
 
 #endif /* __SFI_GLIB_EXTRA_H__ */
diff --git a/sfi/sfidl-cbase.cc b/sfi/sfidl-cbase.cc
index a471fce..e0ea7bb 100644
--- a/sfi/sfidl-cbase.cc
+++ b/sfi/sfidl-cbase.cc
@@ -301,7 +301,7 @@ String CodeGeneratorCBase::createTypeCode (const String& type, const String &nam
       case SEQUENCE:
 	{
 	  if (model == MODEL_VCALL_RFREE)
-	    return "if ("+name+" != NULL) sfi_glue_gc_add ("+name+", "+makeLowerName (type)+"_free)";
+	    return "if ("+name+" != NULL) sfi_glue_gc_add ("+name+", (SfiGlueGcFreeFunc) "+makeLowerName (type)+"_free)";
 
 	  if (parser.isSequence (type))
 	  {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]