[vala] Fix interfaces in GTypeModule-based plugins
- From: Jürg Billeter <juergbi src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [vala] Fix interfaces in GTypeModule-based plugins
- Date: Wed, 6 Jan 2010 22:10:27 +0000 (UTC)
commit 0b2eb293b5f57e455e2ac5ac4ffb303e8ca93682
Author: Rob Powell <rob yorba org>
Date: Wed Jan 6 23:08:36 2010 +0100
Fix interfaces in GTypeModule-based plugins
Fixes bug 601343.
codegen/valaclassregisterfunction.vala | 22 +++++++++++++++-------
codegen/valadbusinterfaceregisterfunction.vala | 4 ++--
codegen/valagtypemodule.vala | 5 +++--
codegen/valainterfaceregisterfunction.vala | 2 +-
codegen/valastructregisterfunction.vala | 2 +-
codegen/valatyperegisterfunction.vala | 6 +++---
6 files changed, 25 insertions(+), 16 deletions(-)
---
diff --git a/codegen/valaclassregisterfunction.vala b/codegen/valaclassregisterfunction.vala
index 1e299e7..f73e960 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 2eec948..9aa2ec3 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 0acde87..a7c69ae 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 a3dd1a2..500e7ee 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 210a995..1f79fdb 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 736883f..4b4ffcb 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;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]