--- 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 @@
-/******************************************************************************
- *****************************************************************************/
-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 @@
*****************************************************************************/
+gplugin_tcc_loader_init(G_GNUC_UNUSED GPluginTccLoader *loader) { +gplugin_tcc_loader_class_finalize(G_GNUC_UNUSED GPluginTccLoaderClass *klass) { 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 @@
*****************************************************************************/
gplugin_tcc_loader_register(GPluginNativePlugin *plugin) {
- if(g_once_init_enter(&type_real)) {
- 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,
- g_once_init_leave(&type_real, type);
+ gplugin_tcc_loader_register_type(G_TYPE_MODULE(plugin));
-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");
--- 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 {
- void (*_gplugin_reserved_1)(void);
- void (*_gplugin_reserved_2)(void);
- void (*_gplugin_reserved_3)(void);
- void (*_gplugin_reserved_4)(void);
struct _GPluginTccLoaderClass {
GPluginLoaderClass parent;
- void (*_gplugin_reserved_1)(void);
- void (*_gplugin_reserved_2)(void);
- void (*_gplugin_reserved_3)(void);
- void (*_gplugin_reserved_4)(void);
--- 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 @@
-#define GPLUGIN_TCC_PLUGIN_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE((obj), GPLUGIN_TYPE_TCC_PLUGIN, GPluginTccPluginPrivate))
/******************************************************************************
*****************************************************************************/
+ GPluginPluginInfo *info; + GPluginPluginState state; } GPluginTccPluginPrivate;
/******************************************************************************
@@ -35,30 +37,36 @@
*****************************************************************************/
+ PROP_FILENAME = N_PROPERTIES, 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( + G_ADD_PRIVATE_DYNAMIC(GPluginTccPlugin) + G_IMPLEMENT_INTERFACE(GPLUGIN_TYPE_PLUGIN, gplugin_tcc_plugin_iface_init) /******************************************************************************
+ * GPluginPlugin Implementation *****************************************************************************/
-gplugin_tcc_plugin_set_state(GPluginTccPlugin *plugin, TCCState *s) {
- GPluginTccPluginPrivate *priv = GPLUGIN_TCC_PLUGIN_GET_PRIVATE(plugin);
-gplugin_tcc_plugin_set_memory(GPluginTccPlugin *plugin, gpointer mem) {
- GPluginTccPluginPrivate *priv = GPLUGIN_TCC_PLUGIN_GET_PRIVATE(plugin);
+gplugin_tcc_plugin_iface_init(G_GNUC_UNUSED GPluginPluginInterface *iface) /******************************************************************************
@@ -69,12 +77,28 @@
GPluginTccPlugin *plugin = GPLUGIN_TCC_PLUGIN(obj);
+ GPluginTccPluginPrivate *priv = gplugin_tcc_plugin_get_instance_private(plugin);
g_value_set_pointer(value,
gplugin_tcc_plugin_get_state(plugin));
+ g_value_set_string(value, priv->filename); + g_value_set_object(value, priv->loader); + g_value_set_object(value, priv->info); + g_value_set_enum(value, priv->state); G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
@@ -86,16 +110,30 @@
const GValue *value, GParamSpec *pspec)
GPluginTccPlugin *plugin = GPLUGIN_TCC_PLUGIN(obj);
+ GPluginTccPluginPrivate *priv = gplugin_tcc_plugin_get_instance_private(plugin);
- gplugin_tcc_plugin_set_state(plugin,
- g_value_get_pointer(value));
+ priv->s = g_value_get_pointer(value); - gplugin_tcc_plugin_set_memory(plugin,
- g_value_get_pointer(value));
+ priv->mem = g_value_get_pointer(value); + priv->filename = g_value_dup_string(value); + priv->loader = g_value_dup_object(value); + priv->info = g_value_dup_object(value); + priv->state = g_value_get_enum(value); G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
@@ -104,7 +142,7 @@
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)); @@ -112,23 +150,31 @@
- 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); +gplugin_tcc_plugin_init(G_GNUC_UNUSED GPluginTccPlugin *plugin) { +gplugin_tcc_plugin_class_finalize(G_GNUC_UNUSED GPluginTccPluginClass *klass) { 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(
+ 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"); /******************************************************************************
*****************************************************************************/
-gplugin_tcc_plugin_register(GPluginNativePlugin *plugin) {
- if(g_once_init_enter(&type_real)) {
- 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,
- g_once_init_leave(&type_real, type);
-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");
+gplugin_tcc_plugin_register(GPluginNativePlugin *native) { + gplugin_tcc_plugin_register_type(G_TYPE_MODULE(native)); -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); --- 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 @@
struct _GPluginTccPlugin {
struct _GPluginTccPluginClass {
- GPluginPluginClass parent;
- void (*_gplugin_reserved_1)(void);
- void (*_gplugin_reserved_2)(void);
- void (*_gplugin_reserved_3)(void);
- void (*_gplugin_reserved_4)(void);
-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);