From 0c56350693573666c9fa30a9b4035301b29f0717 Mon Sep 17 00:00:00 2001 From: Juerg Billeter Date: Mon, 17 Sep 2007 21:01:20 +0000 Subject: [PATCH] rename CodeGenerator to CCodeGenerator, add abstract CodeGenerator and 2007-09-17 Juerg Billeter * vala/Makefile.am, vala/valacodebinding.vala, vala/valacodecontext.vala, vala/valacodegenerator.vala, vala/valacodenode.vala, gobject/Makefile.am, gobject/valaccodegenerator.vala, compiler/valacompiler.vala: rename CodeGenerator to CCodeGenerator, add abstract CodeGenerator and CodeBinding classes svn path=/trunk/; revision=617 --- ChangeLog | 9 +++ compiler/valacompiler.vala | 5 +- gobject/Makefile.am | 80 +++++++++---------- ...generator.vala => valaccodegenerator.vala} | 13 +-- ...vala => valaccodegeneratorassignment.vala} | 4 +- ...lass.vala => valaccodegeneratorclass.vala} | 4 +- ....vala => valaccodegeneratorinterface.vala} | 4 +- ...laccodegeneratorinvocationexpression.vala} | 4 +- ...la => valaccodegeneratormemberaccess.vala} | 4 +- ...hod.vala => valaccodegeneratormethod.vala} | 4 +- ...nal.vala => valaccodegeneratorsignal.vala} | 4 +- ...vala => valaccodegeneratorsourcefile.vala} | 4 +- ...uct.vala => valaccodegeneratorstruct.vala} | 4 +- vala/Makefile.am | 8 ++ vala/valacodebinding.vala | 29 +++++++ vala/valacodecontext.vala | 7 +- vala/valacodegenerator.vala | 35 ++++++++ vala/valacodenode.vala | 7 +- 18 files changed, 158 insertions(+), 71 deletions(-) rename gobject/{valacodegenerator.vala => valaccodegenerator.vala} (99%) rename gobject/{valacodegeneratorassignment.vala => valaccodegeneratorassignment.vala} (99%) rename gobject/{valacodegeneratorclass.vala => valaccodegeneratorclass.vala} (99%) rename gobject/{valacodegeneratorinterface.vala => valaccodegeneratorinterface.vala} (99%) rename gobject/{valacodegeneratorinvocationexpression.vala => valaccodegeneratorinvocationexpression.vala} (99%) rename gobject/{valacodegeneratormemberaccess.vala => valaccodegeneratormemberaccess.vala} (99%) rename gobject/{valacodegeneratormethod.vala => valaccodegeneratormethod.vala} (99%) rename gobject/{valacodegeneratorsignal.vala => valaccodegeneratorsignal.vala} (99%) rename gobject/{valacodegeneratorsourcefile.vala => valaccodegeneratorsourcefile.vala} (99%) rename gobject/{valacodegeneratorstruct.vala => valaccodegeneratorstruct.vala} (97%) create mode 100644 vala/valacodebinding.vala create mode 100644 vala/valacodegenerator.vala diff --git a/ChangeLog b/ChangeLog index 35dcbe364..867190c9b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2007-09-17 Jürg Billeter + + * vala/Makefile.am, vala/valacodebinding.vala, + vala/valacodecontext.vala, vala/valacodegenerator.vala, + vala/valacodenode.vala, gobject/Makefile.am, + gobject/valaccodegenerator.vala, compiler/valacompiler.vala: rename + CodeGenerator to CCodeGenerator, add abstract CodeGenerator and + CodeBinding classes + 2007-09-17 Jürg Billeter * vala/valacodevisitor.vala, vala/valalambdaexpression.vala, diff --git a/compiler/valacompiler.vala b/compiler/valacompiler.vala index 4de78c32a..f8aae3845 100644 --- a/compiler/valacompiler.vala +++ b/compiler/valacompiler.vala @@ -170,6 +170,8 @@ class Vala.Compiler : Object { context.optlevel = optlevel; context.save_temps = save_temps; + context.codegen = new CCodeGenerator (!disable_memory_management); + /* default package */ if (!add_package (context, "glib-2.0")) { Report.error (null, "glib-2.0 not found in specified Vala API directories"); @@ -248,8 +250,7 @@ class Vala.Compiler : Object { } } - var code_generator = new CodeGenerator (!disable_memory_management); - code_generator.emit (context); + context.codegen.emit (context); if (Report.get_errors () > 0) { return quit (); diff --git a/gobject/Makefile.am b/gobject/Makefile.am index 8dfdc6b51..2d544798c 100644 --- a/gobject/Makefile.am +++ b/gobject/Makefile.am @@ -19,36 +19,36 @@ libvala_la_SOURCES = \ valaclassregisterfunction.c \ valaclassregisterfunction.h \ valaclassregisterfunction.vala \ - valacodegenerator.c \ - valacodegenerator.h \ - valacodegenerator.vala \ - valacodegeneratorassignment.c \ - valacodegeneratorassignment.h \ - valacodegeneratorassignment.vala \ - valacodegeneratorclass.c \ - valacodegeneratorclass.h \ - valacodegeneratorclass.vala \ - valacodegeneratorinterface.c \ - valacodegeneratorinterface.h \ - valacodegeneratorinterface.vala \ - valacodegeneratorinvocationexpression.c \ - valacodegeneratorinvocationexpression.h \ - valacodegeneratorinvocationexpression.vala \ - valacodegeneratormemberaccess.c \ - valacodegeneratormemberaccess.h \ - valacodegeneratormemberaccess.vala \ - valacodegeneratormethod.c \ - valacodegeneratormethod.h \ - valacodegeneratormethod.vala \ - valacodegeneratorsignal.c \ - valacodegeneratorsignal.h \ - valacodegeneratorsignal.vala \ - valacodegeneratorsourcefile.c \ - valacodegeneratorsourcefile.h \ - valacodegeneratorsourcefile.vala \ - valacodegeneratorstruct.c \ - valacodegeneratorstruct.h \ - valacodegeneratorstruct.vala \ + valaccodegenerator.c \ + valaccodegenerator.h \ + valaccodegenerator.vala \ + valaccodegeneratorassignment.c \ + valaccodegeneratorassignment.h \ + valaccodegeneratorassignment.vala \ + valaccodegeneratorclass.c \ + valaccodegeneratorclass.h \ + valaccodegeneratorclass.vala \ + valaccodegeneratorinterface.c \ + valaccodegeneratorinterface.h \ + valaccodegeneratorinterface.vala \ + valaccodegeneratorinvocationexpression.c \ + valaccodegeneratorinvocationexpression.h \ + valaccodegeneratorinvocationexpression.vala \ + valaccodegeneratormemberaccess.c \ + valaccodegeneratormemberaccess.h \ + valaccodegeneratormemberaccess.vala \ + valaccodegeneratormethod.c \ + valaccodegeneratormethod.h \ + valaccodegeneratormethod.vala \ + valaccodegeneratorsignal.c \ + valaccodegeneratorsignal.h \ + valaccodegeneratorsignal.vala \ + valaccodegeneratorsourcefile.c \ + valaccodegeneratorsourcefile.h \ + valaccodegeneratorsourcefile.vala \ + valaccodegeneratorstruct.c \ + valaccodegeneratorstruct.h \ + valaccodegeneratorstruct.vala \ valadbusbindingprovider.c \ valadbusbindingprovider.h \ valadbusbindingprovider.vala \ @@ -71,16 +71,16 @@ gobjectincludedir = $(includedir)/vala-1.0/gobject gobjectinclude_HEADERS = \ valaccodecompiler.h \ valaclassregisterfunction.h \ - valacodegenerator.h \ - valacodegeneratorassignment.h \ - valacodegeneratorclass.h \ - valacodegeneratorinterface.h \ - valacodegeneratorinvocationexpression.h \ - valacodegeneratormemberaccess.h \ - valacodegeneratormethod.h \ - valacodegeneratorsignal.h \ - valacodegeneratorsourcefile.h \ - valacodegeneratorstruct.h \ + valaccodegenerator.h \ + valaccodegeneratorassignment.h \ + valaccodegeneratorclass.h \ + valaccodegeneratorinterface.h \ + valaccodegeneratorinvocationexpression.h \ + valaccodegeneratormemberaccess.h \ + valaccodegeneratormethod.h \ + valaccodegeneratorsignal.h \ + valaccodegeneratorsourcefile.h \ + valaccodegeneratorstruct.h \ valadbusbindingprovider.h \ valadbusmethod.h \ valadbussignal.h \ diff --git a/gobject/valacodegenerator.vala b/gobject/valaccodegenerator.vala similarity index 99% rename from gobject/valacodegenerator.vala rename to gobject/valaccodegenerator.vala index fe0ab8fa1..6dd15144c 100644 --- a/gobject/valacodegenerator.vala +++ b/gobject/valaccodegenerator.vala @@ -1,4 +1,4 @@ -/* valacodegenerator.vala +/* valaccodegenerator.vala * * Copyright (C) 2006-2007 Jürg Billeter, Raffaele Sandrini * @@ -27,7 +27,7 @@ using Gee; /** * Code visitor generating C Code. */ -public class Vala.CodeGenerator : CodeVisitor { +public class Vala.CCodeGenerator : CodeGenerator { /** * Specifies whether automatic memory management is active. */ @@ -123,7 +123,7 @@ public class Vala.CodeGenerator : CodeVisitor { private bool requires_array_free; private bool requires_array_move; - public CodeGenerator (bool manage_memory = true) { + public CCodeGenerator (bool manage_memory = true) { memory_management = manage_memory; } @@ -193,12 +193,7 @@ public class Vala.CodeGenerator : CodeVisitor { c_keywords.add ("cdecl"); } - /** - * Generate and emit C code for the specified code context. - * - * @param context a code context - */ - public void emit (CodeContext! context) { + public override void emit (CodeContext! context) { this.context = context; context.find_header_cycles (); diff --git a/gobject/valacodegeneratorassignment.vala b/gobject/valaccodegeneratorassignment.vala similarity index 99% rename from gobject/valacodegeneratorassignment.vala rename to gobject/valaccodegeneratorassignment.vala index 5695c5211..4e2aac9b3 100644 --- a/gobject/valacodegeneratorassignment.vala +++ b/gobject/valaccodegeneratorassignment.vala @@ -1,4 +1,4 @@ -/* valacodegeneratorassignment.vala +/* valaccodegeneratorassignment.vala * * Copyright (C) 2006-2007 Jürg Billeter, Raffaele Sandrini * @@ -24,7 +24,7 @@ using GLib; using Gee; -public class Vala.CodeGenerator { +public class Vala.CCodeGenerator { public override void visit_assignment (Assignment! a) { a.accept_children (this); diff --git a/gobject/valacodegeneratorclass.vala b/gobject/valaccodegeneratorclass.vala similarity index 99% rename from gobject/valacodegeneratorclass.vala rename to gobject/valaccodegeneratorclass.vala index c743e68e7..59c2e9507 100644 --- a/gobject/valacodegeneratorclass.vala +++ b/gobject/valaccodegeneratorclass.vala @@ -1,4 +1,4 @@ -/* valacodegeneratorclass.vala +/* valaccodegeneratorclass.vala * * Copyright (C) 2006-2007 Jürg Billeter, Raffaele Sandrini * @@ -23,7 +23,7 @@ using GLib; -public class Vala.CodeGenerator { +public class Vala.CCodeGenerator { public override void visit_class (Class! cl) { var old_symbol = current_symbol; var old_type_symbol = current_type_symbol; diff --git a/gobject/valacodegeneratorinterface.vala b/gobject/valaccodegeneratorinterface.vala similarity index 99% rename from gobject/valacodegeneratorinterface.vala rename to gobject/valaccodegeneratorinterface.vala index 0360b49af..0ae51fdbb 100644 --- a/gobject/valacodegeneratorinterface.vala +++ b/gobject/valaccodegeneratorinterface.vala @@ -1,4 +1,4 @@ -/* valacodegeneratorinterface.vala +/* valaccodegeneratorinterface.vala * * Copyright (C) 2006-2007 Jürg Billeter, Raffaele Sandrini * @@ -23,7 +23,7 @@ using GLib; -public class Vala.CodeGenerator { +public class Vala.CCodeGenerator { public override void visit_interface (Interface! iface) { current_symbol = iface; current_type_symbol = iface; diff --git a/gobject/valacodegeneratorinvocationexpression.vala b/gobject/valaccodegeneratorinvocationexpression.vala similarity index 99% rename from gobject/valacodegeneratorinvocationexpression.vala rename to gobject/valaccodegeneratorinvocationexpression.vala index 218418183..621b17445 100644 --- a/gobject/valacodegeneratorinvocationexpression.vala +++ b/gobject/valaccodegeneratorinvocationexpression.vala @@ -1,4 +1,4 @@ -/* valacodegeneratorinvocationexpression.vala +/* valaccodegeneratorinvocationexpression.vala * * Copyright (C) 2006-2007 Jürg Billeter, Raffaele Sandrini * @@ -24,7 +24,7 @@ using GLib; using Gee; -public class Vala.CodeGenerator { +public class Vala.CCodeGenerator { public override void visit_invocation_expression (InvocationExpression! expr) { expr.accept_children (this); diff --git a/gobject/valacodegeneratormemberaccess.vala b/gobject/valaccodegeneratormemberaccess.vala similarity index 99% rename from gobject/valacodegeneratormemberaccess.vala rename to gobject/valaccodegeneratormemberaccess.vala index e0a15bb34..267333f18 100644 --- a/gobject/valacodegeneratormemberaccess.vala +++ b/gobject/valaccodegeneratormemberaccess.vala @@ -1,4 +1,4 @@ -/* valacodegeneratormemberaccess.vala +/* valaccodegeneratormemberaccess.vala * * Copyright (C) 2006-2007 Jürg Billeter, Raffaele Sandrini * @@ -23,7 +23,7 @@ using GLib; -public class Vala.CodeGenerator { +public class Vala.CCodeGenerator { private void process_cmember (MemberAccess! expr, CCodeExpression pub_inst, DataType base_type) { if (expr.symbol_reference is Method) { var m = (Method) expr.symbol_reference; diff --git a/gobject/valacodegeneratormethod.vala b/gobject/valaccodegeneratormethod.vala similarity index 99% rename from gobject/valacodegeneratormethod.vala rename to gobject/valaccodegeneratormethod.vala index 9d69adc59..4dc0776d6 100644 --- a/gobject/valacodegeneratormethod.vala +++ b/gobject/valaccodegeneratormethod.vala @@ -1,4 +1,4 @@ -/* valacodegeneratormethod.vala +/* valaccodegeneratormethod.vala * * Copyright (C) 2006-2007 Jürg Billeter, Raffaele Sandrini * @@ -24,7 +24,7 @@ using GLib; using Gee; -public class Vala.CodeGenerator { +public class Vala.CCodeGenerator { public override void visit_method (Method! m) { Method old_method = current_method; TypeReference old_return_type = current_return_type; diff --git a/gobject/valacodegeneratorsignal.vala b/gobject/valaccodegeneratorsignal.vala similarity index 99% rename from gobject/valacodegeneratorsignal.vala rename to gobject/valaccodegeneratorsignal.vala index f446f94c2..7995562c0 100644 --- a/gobject/valacodegeneratorsignal.vala +++ b/gobject/valaccodegeneratorsignal.vala @@ -1,4 +1,4 @@ -/* valacodegeneratorsignal.vala +/* valaccodegeneratorsignal.vala * * Copyright (C) 2006-2007 Jürg Billeter, Raffaele Sandrini * @@ -23,7 +23,7 @@ using GLib; -public class Vala.CodeGenerator { +public class Vala.CCodeGenerator { private string get_marshaller_type_name (TypeReference t) { if (t.type_parameter != null) { return ("POINTER"); diff --git a/gobject/valacodegeneratorsourcefile.vala b/gobject/valaccodegeneratorsourcefile.vala similarity index 99% rename from gobject/valacodegeneratorsourcefile.vala rename to gobject/valaccodegeneratorsourcefile.vala index 6a84dce4e..4c79f46e2 100644 --- a/gobject/valacodegeneratorsourcefile.vala +++ b/gobject/valaccodegeneratorsourcefile.vala @@ -1,4 +1,4 @@ -/* valacodegeneratorsourcefile.vala +/* valaccodegeneratorsourcefile.vala * * Copyright (C) 2006-2007 Jürg Billeter, Raffaele Sandrini * @@ -24,7 +24,7 @@ using GLib; using Gee; -public class Vala.CodeGenerator { +public class Vala.CCodeGenerator { private CCodeIncludeDirective get_internal_include (string! filename) { return new CCodeIncludeDirective (filename, context.library == null); } diff --git a/gobject/valacodegeneratorstruct.vala b/gobject/valaccodegeneratorstruct.vala similarity index 97% rename from gobject/valacodegeneratorstruct.vala rename to gobject/valaccodegeneratorstruct.vala index afa7fb736..ca7884848 100644 --- a/gobject/valacodegeneratorstruct.vala +++ b/gobject/valaccodegeneratorstruct.vala @@ -1,4 +1,4 @@ -/* valacodegeneratorstruct.vala +/* valaccodegeneratorstruct.vala * * Copyright (C) 2006-2007 Jürg Billeter, Raffaele Sandrini * @@ -23,7 +23,7 @@ using GLib; -public class Vala.CodeGenerator { +public class Vala.CCodeGenerator { public override void visit_struct (Struct! st) { var old_type_symbol = current_type_symbol; var old_instance_struct = instance_struct; diff --git a/vala/Makefile.am b/vala/Makefile.am index 09833b452..cd24897aa 100644 --- a/vala/Makefile.am +++ b/vala/Makefile.am @@ -77,9 +77,15 @@ libvalacore_la_SOURCES = \ valaclass.c \ valaclass.h \ valaclass.vala \ + valacodebinding.c \ + valacodebinding.h \ + valacodebinding.vala \ valacodecontext.c \ valacodecontext.h \ valacodecontext.vala \ + valacodegenerator.c \ + valacodegenerator.h \ + valacodegenerator.vala \ valacodenode.c \ valacodenode.h \ valacodenode.vala \ @@ -346,7 +352,9 @@ valainclude_HEADERS = \ valacatchclause.h \ valacharacterliteral.h \ valaclass.h \ + valacodebinding.h \ valacodecontext.h \ + valacodegenerator.h \ valacodenode.h \ valacodevisitor.h \ valaconditionalexpression.h \ diff --git a/vala/valacodebinding.vala b/vala/valacodebinding.vala new file mode 100644 index 000000000..f38dd0828 --- /dev/null +++ b/vala/valacodebinding.vala @@ -0,0 +1,29 @@ +/* valacodebinding.vala + * + * Copyright (C) 2007 Jürg Billeter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Author: + * Jürg Billeter + */ + +using GLib; + +/** + * The link between a source code node and generated code. + */ +public abstract class Vala.CodeBinding : Object { +} diff --git a/vala/valacodecontext.vala b/vala/valacodecontext.vala index c6d501c0d..5c5300590 100644 --- a/vala/valacodecontext.vala +++ b/vala/valacodecontext.vala @@ -119,7 +119,12 @@ public class Vala.CodeContext : Object { public Namespace! root { get { return _root; } } - + + /** + * The selected code generator. + */ + public CodeGenerator codegen { get; set; } + /** * Returns a copy of the list of source files. * diff --git a/vala/valacodegenerator.vala b/vala/valacodegenerator.vala new file mode 100644 index 000000000..745c0b818 --- /dev/null +++ b/vala/valacodegenerator.vala @@ -0,0 +1,35 @@ +/* valacodegenerator.vala + * + * Copyright (C) 2007 Jürg Billeter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Author: + * Jürg Billeter + */ + +using GLib; + +/** + * Abstract code visitor generating code. + */ +public abstract class Vala.CodeGenerator : CodeVisitor { + /** + * Generate and emit C code for the specified code context. + * + * @param context a code context + */ + public abstract void emit (CodeContext! context); +} diff --git a/vala/valacodenode.vala b/vala/valacodenode.vala index fb80c8308..3fe38b3e2 100644 --- a/vala/valacodenode.vala +++ b/vala/valacodenode.vala @@ -62,7 +62,12 @@ public abstract class Vala.CodeNode : Object { _ccodenode = value; } } - + + /** + * Binding to the generated code. + */ + public CodeBinding code_binding { get; set; } + /** * Specifies whether a fatal error has been detected in this code node. */ -- GitLab