From: Juerg Billeter Date: Sun, 22 Jul 2007 18:06:26 +0000 (+0000) Subject: support libraries with generic types X-Git-Tag: VALA_0_1_2~39 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7d191c8a1642d0b26243f84cd3d3c97897489ce0;p=thirdparty%2Fvala.git support libraries with generic types 2007-07-22 Juerg Billeter * vala/valainterface.vala, vala/valainterfacewriter.vala: support libraries with generic types svn path=/trunk/; revision=368 --- diff --git a/ChangeLog b/ChangeLog index f51370d0d..e5ba85afe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-07-22 Jürg Billeter + + * vala/valainterface.vala, vala/valainterfacewriter.vala: support + libraries with generic types + 2007-07-22 Jürg Billeter * vala/valasemanticanalyzer.vala: allow inner classes to access private diff --git a/vala/valainterface.vala b/vala/valainterface.vala index 4655f364a..2da1cfa48 100644 --- a/vala/valainterface.vala +++ b/vala/valainterface.vala @@ -66,6 +66,15 @@ public class Vala.Interface : DataType { scope.add (p.name, p); } + /** + * Returns a copy of the type parameter list. + * + * @return list of type parameters + */ + public List get_type_parameters () { + return type_parameters.copy (); + } + /** * Adds the specified interface or class to the list of prerequisites of * this interface. diff --git a/vala/valainterfacewriter.vala b/vala/valainterfacewriter.vala index a011a42f1..0ee3e394d 100644 --- a/vala/valainterfacewriter.vala +++ b/vala/valainterfacewriter.vala @@ -110,7 +110,22 @@ public class Vala.InterfaceWriter : CodeVisitor { } write_string ("class "); write_identifier (cl.name); - + + var type_params = cl.get_type_parameters (); + if (type_params != null) { + write_string ("<"); + bool first = true; + foreach (TypeParameter type_param in type_params) { + if (first) { + first = false; + } else { + write_string (","); + } + write_identifier (type_param.name); + } + write_string (">"); + } + var base_types = cl.get_base_types (); if (base_types != null) { write_string (" : "); @@ -202,6 +217,22 @@ public class Vala.InterfaceWriter : CodeVisitor { write_string ("interface "); write_identifier (iface.name); + var type_params = iface.get_type_parameters (); + if (type_params != null) { + write_string ("<"); + bool first = true; + foreach (TypeParameter type_param in type_params) { + if (first) { + first = false; + } else { + write_string (","); + } + write_identifier (type_param.name); + } + write_string (">"); + } + + write_begin_block (); iface.accept_children (this); @@ -323,7 +354,11 @@ public class Vala.InterfaceWriter : CodeVisitor { } else if (param.type_reference.is_out) { write_string ("out "); } - write_string (param.type_reference.data_type.get_full_name ()); + if (param.type_reference.data_type != null) { + write_string (param.type_reference.data_type.get_full_name ()); + } else { + write_string (param.type_reference.type_parameter.name); + } var type_args = param.type_reference.get_type_arguments (); if (!(param.type_reference.data_type is Array) && type_args != null) {