From: Rob Powell Date: Wed, 6 Jan 2010 22:08:36 +0000 (+0100) Subject: Fix interfaces in GTypeModule-based plugins X-Git-Tag: 0.7.10~128 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0b2eb293b5f57e455e2ac5ac4ffb303e8ca93682;p=thirdparty%2Fvala.git Fix interfaces in GTypeModule-based plugins Fixes bug 601343. --- diff --git a/codegen/valaclassregisterfunction.vala b/codegen/valaclassregisterfunction.vala index 1e299e780..f73e960e8 100644 --- a/codegen/valaclassregisterfunction.vala +++ b/codegen/valaclassregisterfunction.vala @@ -171,7 +171,7 @@ public class Vala.ClassRegisterFunction : TypeRegisterFunction { return frag; } - public override CCodeFragment get_type_interface_init_statements () { + public override CCodeFragment get_type_interface_init_statements (bool plugin) { var frag = new CCodeFragment (); foreach (DataType base_type in class_reference.get_base_types ()) { @@ -182,12 +182,20 @@ public class Vala.ClassRegisterFunction : TypeRegisterFunction { var iface = (Interface) base_type.data_type; var iface_info_name = "%s_info".printf (iface.get_lower_case_cname (null)); - - var reg_call = new CCodeFunctionCall (new CCodeIdentifier ("g_type_add_interface_static")); - reg_call.add_argument (new CCodeIdentifier ("%s_type_id".printf (class_reference.get_lower_case_cname (null)))); - reg_call.add_argument (new CCodeIdentifier (iface.get_type_id ())); - reg_call.add_argument (new CCodeIdentifier ("&%s".printf (iface_info_name))); - frag.append (new CCodeExpressionStatement (reg_call)); + if (!plugin) { + var reg_call = new CCodeFunctionCall (new CCodeIdentifier ("g_type_add_interface_static")); + reg_call.add_argument (new CCodeIdentifier ("%s_type_id".printf (class_reference.get_lower_case_cname (null)))); + reg_call.add_argument (new CCodeIdentifier (iface.get_type_id ())); + reg_call.add_argument (new CCodeIdentifier ("&%s".printf (iface_info_name))); + frag.append (new CCodeExpressionStatement (reg_call)); + } else { + var reg_call = new CCodeFunctionCall (new CCodeIdentifier ("g_type_module_add_interface")); + reg_call.add_argument (new CCodeIdentifier ("module")); + reg_call.add_argument (new CCodeIdentifier ("%s_type_id".printf (class_reference.get_lower_case_cname (null)))); + reg_call.add_argument (new CCodeIdentifier (iface.get_type_id ())); + reg_call.add_argument (new CCodeIdentifier ("&%s".printf (iface_info_name))); + frag.append (new CCodeExpressionStatement (reg_call)); + } } return frag; diff --git a/codegen/valadbusinterfaceregisterfunction.vala b/codegen/valadbusinterfaceregisterfunction.vala index 2eec9488d..9aa2ec329 100644 --- a/codegen/valadbusinterfaceregisterfunction.vala +++ b/codegen/valadbusinterfaceregisterfunction.vala @@ -31,8 +31,8 @@ public class Vala.DBusInterfaceRegisterFunction : InterfaceRegisterFunction { base(iface, context); } - public override CCodeFragment get_type_interface_init_statements () { - var frag = base.get_type_interface_init_statements (); + public override CCodeFragment get_type_interface_init_statements (bool plugin) { + var frag = base.get_type_interface_init_statements (plugin); var quark_dbus_proxy = new CCodeFunctionCall (new CCodeIdentifier ("g_quark_from_string")); quark_dbus_proxy.add_argument (new CCodeConstant ("\"ValaDBusInterfaceProxyType\"")); diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala index 0acde87f3..a7c69ae24 100644 --- a/codegen/valagtypemodule.vala +++ b/codegen/valagtypemodule.vala @@ -1822,7 +1822,7 @@ internal class Vala.GTypeModule : GErrorModule { decl_space.add_type_definition (type_struct); var type_fun = create_interface_register_function (iface); - type_fun.init_from_type (); + type_fun.init_from_type (in_plugin); decl_space.add_type_member_declaration (type_fun.get_declaration ()); } @@ -1849,7 +1849,8 @@ internal class Vala.GTypeModule : GErrorModule { add_interface_base_init_function (iface); var type_fun = create_interface_register_function (iface); - type_fun.init_from_type (); + type_fun.init_from_type (in_plugin); + source_declarations.add_type_member_declaration (type_fun.get_source_declaration ()); source_type_member_definition.append (type_fun.get_definition ()); current_symbol = old_symbol; diff --git a/codegen/valainterfaceregisterfunction.vala b/codegen/valainterfaceregisterfunction.vala index a3dd1a25b..500e7ee3b 100644 --- a/codegen/valainterfaceregisterfunction.vala +++ b/codegen/valainterfaceregisterfunction.vala @@ -77,7 +77,7 @@ public class Vala.InterfaceRegisterFunction : TypeRegisterFunction { return interface_reference.access; } - public override CCodeFragment get_type_interface_init_statements () { + public override CCodeFragment get_type_interface_init_statements (bool plugin) { var frag = new CCodeFragment (); /* register all prerequisites */ diff --git a/codegen/valastructregisterfunction.vala b/codegen/valastructregisterfunction.vala index 210a995e4..1f79fdb47 100644 --- a/codegen/valastructregisterfunction.vala +++ b/codegen/valastructregisterfunction.vala @@ -50,7 +50,7 @@ public class Vala.StructRegisterFunction : TypeRegisterFunction { return struct_reference.access; } - public override CCodeFragment get_type_interface_init_statements () { + public override CCodeFragment get_type_interface_init_statements (bool plugin) { return new CCodeFragment (); } } diff --git a/codegen/valatyperegisterfunction.vala b/codegen/valatyperegisterfunction.vala index 736883fab..4b4ffcb1d 100644 --- a/codegen/valatyperegisterfunction.vala +++ b/codegen/valatyperegisterfunction.vala @@ -35,7 +35,7 @@ public abstract class Vala.TypeRegisterFunction { /** * Constructs the C function from the specified type. */ - public void init_from_type (bool plugin = false) { + public void init_from_type (bool plugin) { bool use_thread_safe = context.require_glib_version (2, 14); bool fundamental = false; @@ -169,7 +169,7 @@ public abstract class Vala.TypeRegisterFunction { type_init.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeIdentifier (type_id_name), reg_call))); } - type_init.add_statement (get_type_interface_init_statements ()); + type_init.add_statement (get_type_interface_init_statements (plugin)); if (!plugin) { CCodeExpression condition; // the condition that guards the type initialisation @@ -364,7 +364,7 @@ public abstract class Vala.TypeRegisterFunction { * * @return C statements */ - public abstract CCodeFragment get_type_interface_init_statements (); + public abstract CCodeFragment get_type_interface_init_statements (bool plugin); public CCodeFragment get_source_declaration () { return source_declaration_fragment;