qulogic/gplugin

Update TCC loader for new class hierarchy.
feature/fix-perl-tcc
2019-01-25, Elliott Sales de Andrade
6c3425b02dbc
Update TCC loader for new class hierarchy.
--- a/tcc/gplugin-tcc-loader.c Fri Jan 25 04:38:27 2019 -0500
+++ b/tcc/gplugin-tcc-loader.c Fri Jan 25 05:09:39 2019 -0500
@@ -23,11 +23,7 @@
#include <libtcc.h>
-/******************************************************************************
- * Globals
- *****************************************************************************/
-static GObjectClass *parent_class = NULL;
-static GType type_real = 0;
+G_DEFINE_DYNAMIC_TYPE(GPluginTccLoader, gplugin_tcc_loader, GPLUGIN_TYPE_LOADER);
/******************************************************************************
* GPluginLoaderInterface API
@@ -155,11 +151,17 @@
* GObject Stuff
*****************************************************************************/
static void
+gplugin_tcc_loader_init(G_GNUC_UNUSED GPluginTccLoader *loader) {
+}
+
+static void
+gplugin_tcc_loader_class_finalize(G_GNUC_UNUSED GPluginTccLoaderClass *klass) {
+}
+
+static void
gplugin_tcc_loader_class_init(GPluginTccLoaderClass *klass) {
GPluginLoaderClass *loader_class = GPLUGIN_LOADER_CLASS(klass);
- parent_class = g_type_class_peek_parent(klass);
-
loader_class->supported_extensions =
gplugin_tcc_loader_class_supported_extensions;
loader_class->query = gplugin_tcc_loader_query;
@@ -172,32 +174,5 @@
*****************************************************************************/
void
gplugin_tcc_loader_register(GPluginNativePlugin *plugin) {
- if(g_once_init_enter(&type_real)) {
- GType type = 0;
-
- static const GTypeInfo info = {
- .class_size = sizeof(GPluginTccLoaderClass),
- .class_init = (GClassInitFunc)gplugin_tcc_loader_class_init,
- .instance_size = sizeof(GPluginTccLoader),
- };
-
- type = gplugin_native_plugin_register_type(plugin,
- GPLUGIN_TYPE_LOADER,
- "GPluginTccLoader",
- &info,
- 0);
-
- g_once_init_leave(&type_real, type);
- }
+ gplugin_tcc_loader_register_type(G_TYPE_MODULE(plugin));
}
-
-GType
-gplugin_tcc_loader_get_type(void) {
- if(G_UNLIKELY(type_real == 0)) {
- g_warning("gplugin_tcc_loader_get_type was called before "
- "the type was registered!\n");
- }
-
- return type_real;
-}
-
--- a/tcc/gplugin-tcc-loader.h Fri Jan 25 04:38:27 2019 -0500
+++ b/tcc/gplugin-tcc-loader.h Fri Jan 25 05:09:39 2019 -0500
@@ -31,21 +31,17 @@
#include <gplugin-native.h>
struct _GPluginTccLoader {
+ /*< private >*/
GPluginLoader parent;
- void (*_gplugin_reserved_1)(void);
- void (*_gplugin_reserved_2)(void);
- void (*_gplugin_reserved_3)(void);
- void (*_gplugin_reserved_4)(void);
+ gpointer reserved[4];
};
struct _GPluginTccLoaderClass {
+ /*< private >*/
GPluginLoaderClass parent;
- void (*_gplugin_reserved_1)(void);
- void (*_gplugin_reserved_2)(void);
- void (*_gplugin_reserved_3)(void);
- void (*_gplugin_reserved_4)(void);
+ gpointer reserved[4];
};
G_BEGIN_DECLS
--- a/tcc/gplugin-tcc-plugin.c Fri Jan 25 04:38:27 2019 -0500
+++ b/tcc/gplugin-tcc-plugin.c Fri Jan 25 05:09:39 2019 -0500
@@ -19,15 +19,17 @@
#include <libtcc.h>
-#define GPLUGIN_TCC_PLUGIN_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE((obj), GPLUGIN_TYPE_TCC_PLUGIN, GPluginTccPluginPrivate))
-
/******************************************************************************
* Typedefs
*****************************************************************************/
typedef struct {
TCCState *s;
gpointer mem;
+
+ gchar *filename;
+ GPluginLoader *loader;
+ GPluginPluginInfo *info;
+ GPluginPluginState state;
} GPluginTccPluginPrivate;
/******************************************************************************
@@ -35,30 +37,36 @@
*****************************************************************************/
enum {
PROP_ZERO,
- PROP_STATE,
+ PROP_TCC_STATE,
PROP_MEM,
N_PROPERTIES,
+
+ /* overrides */
+ PROP_FILENAME = N_PROPERTIES,
+ PROP_LOADER,
+ PROP_INFO,
+ PROP_STATE
};
static GParamSpec *properties[N_PROPERTIES] = {NULL,};
-static GObjectClass *parent_class = NULL;
-static GType type_real = 0;
+/* I hate forward declarations... */
+static void gplugin_tcc_plugin_iface_init(GPluginPluginInterface *iface);
+
+G_DEFINE_DYNAMIC_TYPE_EXTENDED(
+ GPluginTccPlugin,
+ gplugin_tcc_plugin,
+ G_TYPE_OBJECT,
+ 0,
+ G_ADD_PRIVATE_DYNAMIC(GPluginTccPlugin)
+ G_IMPLEMENT_INTERFACE(GPLUGIN_TYPE_PLUGIN, gplugin_tcc_plugin_iface_init)
+);
/******************************************************************************
- * Private Stuff
+ * GPluginPlugin Implementation
*****************************************************************************/
static void
-gplugin_tcc_plugin_set_state(GPluginTccPlugin *plugin, TCCState *s) {
- GPluginTccPluginPrivate *priv = GPLUGIN_TCC_PLUGIN_GET_PRIVATE(plugin);
-
- priv->s = s;
-}
-
-static void
-gplugin_tcc_plugin_set_memory(GPluginTccPlugin *plugin, gpointer mem) {
- GPluginTccPluginPrivate *priv = GPLUGIN_TCC_PLUGIN_GET_PRIVATE(plugin);
-
- priv->mem = mem;
+gplugin_tcc_plugin_iface_init(G_GNUC_UNUSED GPluginPluginInterface *iface)
+{
}
/******************************************************************************
@@ -69,12 +77,28 @@
GParamSpec *pspec)
{
GPluginTccPlugin *plugin = GPLUGIN_TCC_PLUGIN(obj);
+ GPluginTccPluginPrivate *priv = gplugin_tcc_plugin_get_instance_private(plugin);
switch(param_id) {
- case PROP_STATE:
+ case PROP_TCC_STATE:
g_value_set_pointer(value,
gplugin_tcc_plugin_get_state(plugin));
break;
+
+ /* overrides */
+ case PROP_FILENAME:
+ g_value_set_string(value, priv->filename);
+ break;
+ case PROP_LOADER:
+ g_value_set_object(value, priv->loader);
+ break;
+ case PROP_INFO:
+ g_value_set_object(value, priv->info);
+ break;
+ case PROP_STATE:
+ g_value_set_enum(value, priv->state);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
break;
@@ -86,16 +110,30 @@
const GValue *value, GParamSpec *pspec)
{
GPluginTccPlugin *plugin = GPLUGIN_TCC_PLUGIN(obj);
+ GPluginTccPluginPrivate *priv = gplugin_tcc_plugin_get_instance_private(plugin);
switch(param_id) {
- case PROP_STATE:
- gplugin_tcc_plugin_set_state(plugin,
- g_value_get_pointer(value));
+ case PROP_TCC_STATE:
+ priv->s = g_value_get_pointer(value);
break;
case PROP_MEM:
- gplugin_tcc_plugin_set_memory(plugin,
- g_value_get_pointer(value));
+ priv->mem = g_value_get_pointer(value);
+ break;
+
+ /* overrides */
+ case PROP_FILENAME:
+ priv->filename = g_value_dup_string(value);
break;
+ case PROP_LOADER:
+ priv->loader = g_value_dup_object(value);
+ break;
+ case PROP_INFO:
+ priv->info = g_value_dup_object(value);
+ break;
+ case PROP_STATE:
+ priv->state = g_value_get_enum(value);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
break;
@@ -104,7 +142,7 @@
static void
gplugin_tcc_plugin_finalize(GObject *obj) {
- GPluginTccPluginPrivate *priv = GPLUGIN_TCC_PLUGIN_GET_PRIVATE(obj);
+ GPluginTccPluginPrivate *priv = gplugin_tcc_plugin_get_instance_private(GPLUGIN_TCC_PLUGIN(obj));
if(priv->s)
tcc_delete(priv->s);
@@ -112,23 +150,31 @@
if(priv->mem)
g_free(priv->mem);
- G_OBJECT_CLASS(parent_class)->finalize(obj);
+ g_clear_pointer(&priv->filename, g_free);
+ g_clear_object(&priv->loader);
+ g_clear_object(&priv->info);
+
+ G_OBJECT_CLASS(gplugin_tcc_plugin_parent_class)->finalize(obj);
+}
+
+static void
+gplugin_tcc_plugin_init(G_GNUC_UNUSED GPluginTccPlugin *plugin) {
+}
+
+static void
+gplugin_tcc_plugin_class_finalize(G_GNUC_UNUSED GPluginTccPluginClass *klass) {
}
static void
gplugin_tcc_plugin_class_init(GPluginTccPluginClass *klass) {
GObjectClass *obj_class = G_OBJECT_CLASS(klass);
- parent_class = g_type_class_peek_parent(klass);
-
- g_type_class_add_private(klass, sizeof(GPluginTccPluginPrivate));
-
obj_class->get_property = gplugin_tcc_plugin_get_property;
obj_class->set_property = gplugin_tcc_plugin_set_property;
obj_class->finalize = gplugin_tcc_plugin_finalize;
- properties[PROP_STATE] = g_param_spec_pointer(
- "state", "state",
+ properties[PROP_TCC_STATE] = g_param_spec_pointer(
+ "tcc-state", "tcc-state",
"The TCC compilation context for the plugin",
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
);
@@ -140,45 +186,29 @@
);
g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
+
+ /* add our overrides */
+ g_object_class_override_property(obj_class, PROP_FILENAME, "filename");
+ g_object_class_override_property(obj_class, PROP_LOADER, "loader");
+ g_object_class_override_property(obj_class, PROP_INFO, "info");
+ g_object_class_override_property(obj_class, PROP_STATE, "state");
}
/******************************************************************************
* API
*****************************************************************************/
void
-gplugin_tcc_plugin_register(GPluginNativePlugin *plugin) {
- if(g_once_init_enter(&type_real)) {
- GType type = 0;
-
- static const GTypeInfo info = {
- .class_size = sizeof(GPluginTccPluginClass),
- .class_init = (GClassInitFunc)gplugin_tcc_plugin_class_init,
- .instance_size = sizeof(GPluginTccPlugin),
- };
-
- type = gplugin_native_plugin_register_type(plugin,
- GPLUGIN_TYPE_PLUGIN,
- "GPluginTccPlugin",
- &info,
- 0);
-
- g_once_init_leave(&type_real, type);
- }
-}
-
-GType
-gplugin_tcc_plugin_get_type(void) {
- if(G_UNLIKELY(type_real == 0)) {
- g_warning("gplugin_tcc_plugin_get_type was called before "
- "the type was registered!\n");
- }
-
- return type_real;
+gplugin_tcc_plugin_register(GPluginNativePlugin *native) {
+ gplugin_tcc_plugin_register_type(G_TYPE_MODULE(native));
}
TCCState *
-gplugin_tcc_plugin_get_state(const GPluginTccPlugin *plugin) {
- GPluginTccPluginPrivate *priv = GPLUGIN_TCC_PLUGIN_GET_PRIVATE(plugin);
+gplugin_tcc_plugin_get_state(GPluginTccPlugin *plugin) {
+ GPluginTccPluginPrivate *priv = NULL;
+
+ g_return_val_if_fail(GPLUGIN_IS_TCC_PLUGIN(plugin), NULL);
+
+ priv = gplugin_tcc_plugin_get_instance_private(plugin);
return priv->s;
}
--- a/tcc/gplugin-tcc-plugin.h Fri Jan 25 04:38:27 2019 -0500
+++ b/tcc/gplugin-tcc-plugin.h Fri Jan 25 05:09:39 2019 -0500
@@ -33,24 +33,25 @@
#include <libtcc.h>
struct _GPluginTccPlugin {
- GPluginPlugin parent;
+ /*< private >*/
+ GObject parent;
+
+ gpointer reserved[4];
};
struct _GPluginTccPluginClass {
- GPluginPluginClass parent;
+ /*< private >*/
+ GObjectClass parent;
- void (*_gplugin_reserved_1)(void);
- void (*_gplugin_reserved_2)(void);
- void (*_gplugin_reserved_3)(void);
- void (*_gplugin_reserved_4)(void);
+ gpointer reserved[4];
};
G_BEGIN_DECLS
-void gplugin_tcc_plugin_register(GPluginNativePlugin *plugin);
+void gplugin_tcc_plugin_register(GPluginNativePlugin *native);
GType gplugin_tcc_plugin_get_type(void);
-TCCState *gplugin_tcc_plugin_get_state(const GPluginTccPlugin *plugin);
+TCCState *gplugin_tcc_plugin_get_state(GPluginTccPlugin *plugin);
typedef GPluginPluginInfo *(*GPluginTccPluginQueryFunc)(GError **error);
typedef gboolean (*GPluginTccPluginLoadFunc)(GPluginNativePlugin *plugin, GError **error);