[vala/staging: 2/2] codegen: Wider support of [CCode(simple_generics = true)]
- From: Rico Tzschichholz <ricotz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/staging: 2/2] codegen: Wider support of [CCode(simple_generics = true)]
- Date: Sun, 8 Jan 2017 13:19:44 +0000 (UTC)
commit ad2c719015d6f1689e11b2166ca9aea27b98fa24
Author: Rico Tzschichholz <ricotz t-online de>
Date: Wed Oct 5 17:22:00 2016 +0200
codegen: Wider support of [CCode(simple_generics = true)]
https://bugzilla.gnome.org/show_bug.cgi?id=772209
codegen/valaccodemethodcallmodule.vala | 2 +-
codegen/valaccodemethodmodule.vala | 4 ++--
tests/Makefile.am | 1 +
tests/objects/simple_generics.vala | 25 +++++++++++++++++++++++++
4 files changed, 29 insertions(+), 3 deletions(-)
---
diff --git a/codegen/valaccodemethodcallmodule.vala b/codegen/valaccodemethodcallmodule.vala
index dce947f..d96b25b 100644
--- a/codegen/valaccodemethodcallmodule.vala
+++ b/codegen/valaccodemethodcallmodule.vala
@@ -315,7 +315,7 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
ccode.add_assignment (new CCodeMemberAccess.pointer (get_variable_cexpression
("_data%d_".printf (get_block_id (current_method.body))), "self"), ref_call);
}
- if (!current_class.is_compact && current_class.get_type_parameters ().size > 0) {
+ if (!current_class.is_compact && !get_ccode_simple_generics (m) &&
current_class.get_type_parameters ().size > 0) {
/* type, dup func, and destroy func fields for generic types */
var suffices = new string[] {"type", "dup_func", "destroy_func"};
foreach (TypeParameter type_param in current_class.get_type_parameters ()) {
diff --git a/codegen/valaccodemethodmodule.vala b/codegen/valaccodemethodmodule.vala
index a6ce3a1..6f3f61c 100644
--- a/codegen/valaccodemethodmodule.vala
+++ b/codegen/valaccodemethodmodule.vala
@@ -46,7 +46,7 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
bool result = false;
var cl = m.parent_symbol as Class;
- if (m is CreationMethod && cl != null && !cl.is_compact) {
+ if (m is CreationMethod && cl != null && !cl.is_compact && !get_ccode_simple_generics (m)) {
result = true;
}
@@ -1009,7 +1009,7 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
}
type_param_index++;
}
- } else if (!m.closure && (direction & 1) == 1) {
+ } else if (!m.closure && (direction & 1) == 1 && !get_ccode_simple_generics (m)) {
int type_param_index = 0;
foreach (var type_param in m.get_type_parameters ()) {
cparam_map.set (get_param_pos (0.1 * type_param_index + 0.01), new
CCodeParameter ("%s_type".printf (type_param.name.down ()), "GType"));
diff --git a/tests/Makefile.am b/tests/Makefile.am
index f7efca8..c15f245 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -150,6 +150,7 @@ TESTS = \
objects/properties.vala \
objects/regex.vala \
objects/signals.vala \
+ objects/simple_generics.vala \
objects/test-025.vala \
objects/test-026.vala \
objects/test-029.vala \
diff --git a/tests/objects/simple_generics.vala b/tests/objects/simple_generics.vala
new file mode 100644
index 0000000..e7bd5b8
--- /dev/null
+++ b/tests/objects/simple_generics.vala
@@ -0,0 +1,25 @@
+[CCode (cname = "g_hash_table_ref", simple_generics = true)]
+extern GLib.HashTable<K,V> g_hash_table_ref<K,V> (GLib.HashTable<K,V> ht);
+
+class Foo<G> : Object {
+ G g;
+
+ public Foo (G g) {
+ this.g = g;
+ }
+
+ public G get_g () {
+ return g;
+ }
+}
+
+[CCode (simple_generics = true)]
+G foo<G> (Foo<G> f) {
+ return f.get_g ();
+}
+
+void main () {
+ var f = new Foo<string> ("foo");
+ assert (foo<string> (f) == "foo");
+}
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]