From: Jürg Billeter Date: Mon, 13 Oct 2008 18:01:28 +0000 (+0000) Subject: Add partial support for writing .gir files, replaces .gidl writer X-Git-Tag: VALA_0_4_0~27 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=077bd35a110cc99b402b3bc2b177d2baab8df096;p=platform%2Fupstream%2Fvala.git Add partial support for writing .gir files, replaces .gidl writer 2008-10-13 Jürg Billeter * gobject/Makefile.am: * gobject/valagirwriter.vala: * compiler/valacompiler.vala: Add partial support for writing .gir files, replaces .gidl writer svn path=/trunk/; revision=1834 --- diff --git a/ChangeLog b/ChangeLog index 5627629..1763ba2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-10-13 Jürg Billeter + + * gobject/Makefile.am: + * gobject/valagirwriter.vala: + * compiler/valacompiler.vala: + + Add partial support for writing .gir files, replaces .gidl writer + 2008-10-12 Jürg Billeter * gobject/valaccodemethodbinding.vala: diff --git a/compiler/valacompiler.vala b/compiler/valacompiler.vala index 2142811..0babf2e 100644 --- a/compiler/valacompiler.vala +++ b/compiler/valacompiler.vala @@ -300,15 +300,15 @@ class Vala.Compiler { interface_writer.write_file (context, vapi_filename); - var gidl_writer = new GIdlWriter (); - string gidl_filename = "%s.gidl".printf (library); + var gir_writer = new GIRWriter (); + string gir_filename = "%s.gir".printf (library); - // put .gidl file in current directory unless -d has been explicitly specified - if (directory != null && !Path.is_absolute( gidl_filename)) { - gidl_filename = "%s%c%s".printf (context.directory, Path.DIR_SEPARATOR, gidl_filename); + // put .gir file in current directory unless -d has been explicitly specified + if (directory != null && !Path.is_absolute (gir_filename)) { + gir_filename = "%s%c%s".printf (context.directory, Path.DIR_SEPARATOR, gir_filename); } - gidl_writer.write_file (context, gidl_filename); + gir_writer.write_file (context, gir_filename); library = null; diff --git a/gobject/Makefile.am b/gobject/Makefile.am index 232f312..392cda3 100644 --- a/gobject/Makefile.am +++ b/gobject/Makefile.am @@ -34,7 +34,7 @@ libvala_la_VALASOURCES = \ valaccodeobjecttypesymbolbinding.vala \ valaccodetypesymbolbinding.vala \ valaclassregisterfunction.vala \ - valagidlwriter.vala \ + valagirwriter.vala \ valainterfaceregisterfunction.vala \ valatyperegisterfunction.vala \ $(NULL) diff --git a/gobject/valagidlwriter.vala b/gobject/valagirwriter.vala similarity index 74% rename from gobject/valagidlwriter.vala rename to gobject/valagirwriter.vala index 4944ccc..d06419f 100644 --- a/gobject/valagidlwriter.vala +++ b/gobject/valagirwriter.vala @@ -1,4 +1,4 @@ -/* valagidlwriter.vala +/* valagirwriter.vala * * Copyright (C) 2008 Jürg Billeter * @@ -24,9 +24,9 @@ using GLib; using Gee; /** - * Code visitor generating .gidl file for the public interface. + * Code visitor generating .gir file for the public interface. */ -public class Vala.GIdlWriter : CodeVisitor { +public class Vala.GIRWriter : CodeVisitor { private CodeContext context; FileStream stream; @@ -53,11 +53,11 @@ public class Vala.GIdlWriter : CodeVisitor { stream.printf ("\n"); - stream.printf ("\n"); + stream.printf ("\n"); context.accept (this); - stream.printf ("\n"); + stream.printf ("\n"); stream = null; } @@ -73,8 +73,14 @@ public class Vala.GIdlWriter : CodeVisitor { return; } + if (ns.parent_symbol.name != null) { + // nested namespace + // not supported in GIR at the moment + return; + } + write_indent (); - stream.printf ("\n", ns.name); + stream.printf ("\n", ns.name); indent++; ns.accept_children (this); @@ -95,10 +101,10 @@ public class Vala.GIdlWriter : CodeVisitor { if (cl.is_subtype_of (gobject_type)) { write_indent (); - stream.printf ("\n"); indent++; @@ -127,10 +133,10 @@ public class Vala.GIdlWriter : CodeVisitor { indent--; write_indent (); - stream.printf ("\n"); + stream.printf ("\n"); } else { write_indent (); - stream.printf ("\n"); indent++; @@ -138,7 +144,7 @@ public class Vala.GIdlWriter : CodeVisitor { indent--; write_indent (); - stream.printf ("\n"); + stream.printf ("\n"); } } @@ -152,7 +158,7 @@ public class Vala.GIdlWriter : CodeVisitor { } write_indent (); - stream.printf ("\n"); indent++; @@ -160,7 +166,7 @@ public class Vala.GIdlWriter : CodeVisitor { indent--; write_indent (); - stream.printf ("\n"); + stream.printf ("\n"); } public override void visit_interface (Interface iface) { @@ -173,8 +179,8 @@ public class Vala.GIdlWriter : CodeVisitor { } write_indent (); - stream.printf ("\n"); indent++; @@ -219,8 +225,9 @@ public class Vala.GIdlWriter : CodeVisitor { } write_indent (); - stream.printf ("\n"); indent++; @@ -228,12 +235,12 @@ public class Vala.GIdlWriter : CodeVisitor { indent--; write_indent (); - stream.printf ("\n"); + stream.printf ("\n"); } public override void visit_enum_value (EnumValue ev) { write_indent (); - stream.printf ("\n", ev.get_cname ()); + stream.printf ("\n", string.joinv ("-", ev.name.down ().split ("_"))); } public override void visit_error_domain (ErrorDomain edomain) { @@ -285,25 +292,14 @@ public class Vala.GIdlWriter : CodeVisitor { } write_indent (); - stream.printf ("\n", f.get_cname ()); - } + stream.printf ("\n", f.get_cname ()); + indent++; - private string get_gidl_type_name (DataType type) { - // workaround to get GIDL-specific type name - string gidl_type = type.get_cname (); - if (type.data_type != null) { - string cname = type.data_type.get_cname (); - if (gidl_type.has_prefix (cname)) { - gidl_type = type.data_type.get_full_name () + gidl_type.substring (cname.len (), gidl_type.len () - cname.len ()); - } - } else if (type is DelegateType) { - var dt = (DelegateType) type; - string cname = dt.get_cname (); - if (gidl_type.has_prefix (cname)) { - gidl_type = dt.delegate_symbol.get_full_name () + gidl_type.substring (cname.len (), gidl_type.len () - cname.len ()); - } - } - return gidl_type; + write_type (f.field_type); + + indent--; + write_indent (); + stream.printf ("\n"); } private void write_params (Gee.List params, DataType? instance_type = null) { @@ -313,31 +309,44 @@ public class Vala.GIdlWriter : CodeVisitor { if (instance_type != null) { write_indent (); - stream.printf ("\n", get_gidl_type_name (instance_type)); + stream.printf ("\n"); + indent++; + + write_type (instance_type); + + indent--; + write_indent (); + stream.printf ("\n"); } foreach (FormalParameter param in params) { write_indent (); - stream.printf ("\n"); + stream.printf (">\n"); + indent++; + + write_type (param.parameter_type); + + indent--; + stream.printf ("\n"); } indent--; @@ -379,7 +388,7 @@ public class Vala.GIdlWriter : CodeVisitor { } write_indent (); - stream.printf ("\n"); indent++; @@ -407,7 +416,7 @@ public class Vala.GIdlWriter : CodeVisitor { } write_indent (); - stream.printf ("\n"); indent++; @@ -426,14 +435,21 @@ public class Vala.GIdlWriter : CodeVisitor { } write_indent (); - stream.printf ("\n"); + stream.printf (">\n"); + indent++; + + write_type (prop.property_type); + + indent--; + write_indent (); + stream.printf ("\n"); } public override void visit_signal (Signal sig) { @@ -442,7 +458,7 @@ public class Vala.GIdlWriter : CodeVisitor { } write_indent (); - stream.printf ("\n"); indent++; @@ -452,7 +468,7 @@ public class Vala.GIdlWriter : CodeVisitor { indent--; write_indent (); - stream.printf ("\n"); + stream.printf ("\n"); } private void write_indent () { @@ -465,11 +481,40 @@ public class Vala.GIdlWriter : CodeVisitor { private void write_return_type (DataType type) { write_indent (); - stream.printf ("\n"); + indent++; + + write_type (type); + + indent--; + write_indent (); + stream.printf ("\n"); + } + + private void write_type (DataType type) { + if (type is ArrayType) { + var array_type = (ArrayType) type; + + write_indent (); + stream.printf ("\n"); + indent++; + + write_type (array_type.element_type); + + indent--; + write_indent (); + stream.printf ("\n"); + } else if (type is VoidType) { + write_indent (); + stream.printf ("\n"); + } else { + write_indent (); + stream.printf ("\n", type.to_string ()); } - stream.printf ("/>\n"); } private bool check_accessibility (Symbol sym) {