Rename VariableDeclarator to LocalVariable, remove
authorJuerg Billeter <j@bitron.ch>
Wed, 16 Apr 2008 15:45:33 +0000 (15:45 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Wed, 16 Apr 2008 15:45:33 +0000 (15:45 +0000)
2008-04-16  Juerg Billeter  <j@bitron.ch>

* vala/Makefile.am, vala/vala.h, vala/valablock.vala,
  vala/valacatchclause.vala, vala/valacfgbuilder.vala,
  vala/valaclass.vala, vala/valacodecontext.vala,
  vala/valacodegenerator.vala, vala/valacodevisitor.vala,
  vala/valadeclarationstatement.vala, vala/valaexpression.vala,
  vala/valaforeachstatement.vala, vala/valainterface.vala,
  vala/valalocalvariable.vala, vala/valamemorymanager.vala,
  vala/valamethod.vala, vala/valanullchecker.vala,
  vala/valaparser.vala, vala/valasemanticanalyzer.vala,
  vala/valastruct.vala, vala/valaswitchsection.vala,
  vala/valasymbolresolver.vala,
  gobject/valaccodearraycreationexpressionbinding.vala,
  gobject/valaccodeassignmentbinding.vala,
  gobject/valaccodegenerator.vala,
  gobject/valaccodegeneratorinvocationexpression.vala,
  gobject/valaccodegeneratormemberaccess.vala:

  Rename VariableDeclarator to LocalVariable,
  remove LocalVariableDeclaration class

svn path=/trunk/; revision=1243

29 files changed:
ChangeLog
gobject/valaccodearraycreationexpressionbinding.vala
gobject/valaccodeassignmentbinding.vala
gobject/valaccodegenerator.vala
gobject/valaccodegeneratorinvocationexpression.vala
gobject/valaccodegeneratormemberaccess.vala
vala/Makefile.am
vala/vala.h
vala/valablock.vala
vala/valacatchclause.vala
vala/valacfgbuilder.vala
vala/valaclass.vala
vala/valacodecontext.vala
vala/valacodegenerator.vala
vala/valacodevisitor.vala
vala/valadeclarationstatement.vala
vala/valaexpression.vala
vala/valaforeachstatement.vala
vala/valainterface.vala
vala/valalocalvariable.vala [moved from vala/valavariabledeclarator.vala with 70% similarity]
vala/valalocalvariabledeclaration.vala [deleted file]
vala/valamemorymanager.vala
vala/valamethod.vala
vala/valanullchecker.vala
vala/valaparser.vala
vala/valasemanticanalyzer.vala
vala/valastruct.vala
vala/valaswitchsection.vala
vala/valasymbolresolver.vala

index 64c1361..fa0f178 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2008-04-16  Jürg Billeter  <j@bitron.ch>
+
+       * vala/Makefile.am, vala/vala.h, vala/valablock.vala,
+         vala/valacatchclause.vala, vala/valacfgbuilder.vala,
+         vala/valaclass.vala, vala/valacodecontext.vala,
+         vala/valacodegenerator.vala, vala/valacodevisitor.vala,
+         vala/valadeclarationstatement.vala, vala/valaexpression.vala,
+         vala/valaforeachstatement.vala, vala/valainterface.vala,
+         vala/valalocalvariable.vala, vala/valamemorymanager.vala,
+         vala/valamethod.vala, vala/valanullchecker.vala,
+         vala/valaparser.vala, vala/valasemanticanalyzer.vala,
+         vala/valastruct.vala, vala/valaswitchsection.vala,
+         vala/valasymbolresolver.vala,
+         gobject/valaccodearraycreationexpressionbinding.vala,
+         gobject/valaccodeassignmentbinding.vala,
+         gobject/valaccodegenerator.vala,
+         gobject/valaccodegeneratorinvocationexpression.vala,
+         gobject/valaccodegeneratormemberaccess.vala:
+
+         Rename VariableDeclarator to LocalVariable,
+         remove LocalVariableDeclaration class
+
 2008-04-16  Marc-Andre Lureau  <marcandre.lureau@gmail.com>
 
        * vapi/glib-2.0.vapi: Make DestroyNotify delegate argument
index ab311c1..074673f 100644 (file)
@@ -48,7 +48,7 @@ public class Vala.CCodeArrayCreationExpressionBinding : CCodeExpressionBinding {
                        CCodeExpression csize = (CCodeExpression) size.ccodenode;
 
                        if (!codegen.is_pure_ccode_expression (csize)) {
-                               var temp_var = codegen.get_temp_variable_declarator (codegen.int_type, false, expr);
+                               var temp_var = codegen.get_temp_variable (codegen.int_type, false, expr);
                                var name_cnode = new CCodeIdentifier (temp_var.name);
                                size.ccodenode = name_cnode;
 
@@ -79,7 +79,7 @@ public class Vala.CCodeArrayCreationExpressionBinding : CCodeExpressionBinding {
                        }
 
                        var ce = new CCodeCommaExpression ();
-                       var temp_var = codegen.get_temp_variable_declarator (expr.static_type, true, expr);
+                       var temp_var = codegen.get_temp_variable (expr.static_type, true, expr);
                        var name_cnode = new CCodeIdentifier (temp_var.name);
                        int i = 0;
                        
index eed55de..8b7fb2b 100644 (file)
@@ -176,7 +176,7 @@ public class Vala.CCodeAssignmentBinding : CCodeExpressionBinding {
 
                        // get signal id
                        var ccomma = new CCodeCommaExpression ();
-                       var temp_decl = codegen.get_temp_variable_declarator (codegen.uint_type);
+                       var temp_decl = codegen.get_temp_variable (codegen.uint_type);
                        codegen.temp_vars.insert (0, temp_decl);
                        var parse_call = new CCodeFunctionCall (new CCodeIdentifier ("g_signal_parse_name"));
                        parse_call.add_argument (sig.get_canonical_cconstant ());
@@ -475,7 +475,7 @@ public class Vala.CCodeAssignmentBinding : CCodeExpressionBinding {
                if (unref_old || array || instance_delegate) {
                        var ccomma = new CCodeCommaExpression ();
                        
-                       var temp_decl = codegen.get_temp_variable_declarator (assignment.left.static_type);
+                       var temp_decl = codegen.get_temp_variable (assignment.left.static_type);
                        codegen.temp_vars.insert (0, temp_decl);
                        ccomma.append_expression (new CCodeAssignment (new CCodeIdentifier (temp_decl.name), rhs));
                        if (unref_old) {
@@ -532,7 +532,7 @@ public class Vala.CCodeAssignmentBinding : CCodeExpressionBinding {
                        // except when it's a simple expression
                        var cea = (CCodeElementAccess) assignment.left.ccodenode;
                        if (!(cea.index is CCodeConstant || cea.index is CCodeIdentifier)) {
-                               var index_temp_decl = codegen.get_temp_variable_declarator (codegen.int_type);
+                               var index_temp_decl = codegen.get_temp_variable (codegen.int_type);
                                codegen.temp_vars.insert (0, index_temp_decl);
                                
                                var ccomma = new CCodeCommaExpression ();
index e3b4335..a559746 100644 (file)
@@ -67,9 +67,9 @@ public class Vala.CCodeGenerator : CodeGenerator {
        CCodeBlock block;
        
        /* all temporary variables */
-       public ArrayList<VariableDeclarator> temp_vars = new ArrayList<VariableDeclarator> ();
+       public ArrayList<LocalVariable> temp_vars = new ArrayList<LocalVariable> ();
        /* temporary variables that own their content */
-       ArrayList<VariableDeclarator> temp_ref_vars = new ArrayList<VariableDeclarator> ();
+       ArrayList<LocalVariable> temp_ref_vars = new ArrayList<LocalVariable> ();
        /* cache to check whether a certain marshaller has been created yet */
        Gee.Set<string> user_marshal_set;
        /* (constant) hash table with all predefined marshallers */
@@ -997,8 +997,8 @@ public class Vala.CCodeGenerator : CodeGenerator {
                b.accept_children (this);
 
                var local_vars = b.get_local_variables ();
-               foreach (VariableDeclarator decl in local_vars) {
-                       decl.active = false;
+               foreach (LocalVariable local in local_vars) {
+                       local.active = false;
                }
                
                var cblock = new CCodeBlock ();
@@ -1018,11 +1018,11 @@ public class Vala.CCodeGenerator : CodeGenerator {
                        }
                }
 
-               foreach (VariableDeclarator decl in local_vars) {
-                       if (decl.type_reference.takes_ownership) {
-                               var ma = new MemberAccess.simple (decl.name);
-                               ma.symbol_reference = decl;
-                               cblock.add_statement (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier (get_variable_cname (decl.name)), decl.type_reference, ma)));
+               foreach (LocalVariable local in local_vars) {
+                       if (local.variable_type.takes_ownership) {
+                               var ma = new MemberAccess.simple (local.name);
+                               ma.symbol_reference = local;
+                               cblock.add_statement (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier (get_variable_cname (local.name)), local.variable_type, ma)));
                        }
                }
 
@@ -1047,34 +1047,11 @@ public class Vala.CCodeGenerator : CodeGenerator {
        }
 
        public override void visit_declaration_statement (DeclarationStatement stmt) {
-               /* split declaration statement as var declarators
-                * might have different types */
-       
-               var cfrag = new CCodeFragment ();
-               
-               foreach (VariableDeclarator decl in stmt.declaration.get_variable_declarators ()) {
-                       var cdecl = new CCodeDeclaration (decl.type_reference.get_cname (false, !decl.type_reference.takes_ownership));
-               
-                       cdecl.add_declarator ((CCodeVariableDeclarator) decl.ccodenode);
-
-                       cfrag.append (cdecl);
-
-                       if (decl.initializer != null && decl.initializer.can_fail) {
-                               add_simple_check (decl.initializer, cfrag);
-                       }
+               stmt.ccodenode = stmt.declaration.ccodenode;
 
-                       /* try to initialize uninitialized variables */
-                       if (decl.initializer == null) {
-                               ((CCodeVariableDeclarator) decl.ccodenode).initializer = default_value_for_type (decl.type_reference, true);
-                       }
-               }
-               
-               stmt.ccodenode = cfrag;
-
-               foreach (VariableDeclarator decl in stmt.declaration.get_variable_declarators ()) {
-                       if (decl.initializer != null) {
-                               create_temp_decl (stmt, decl.initializer.temp_vars);
-                       }
+               var local = stmt.declaration as LocalVariable;
+               if (local != null && local.initializer != null) {
+                       create_temp_decl (stmt, local.initializer.temp_vars);
                }
 
                create_temp_decl (stmt, temp_vars);
@@ -1089,80 +1066,92 @@ public class Vala.CCodeGenerator : CodeGenerator {
                }
        }
 
-       public override void visit_variable_declarator (VariableDeclarator decl) {
-               decl.accept_children (this);
+       public override void visit_local_variable (LocalVariable local) {
+               local.accept_children (this);
 
-               if (decl.type_reference is ArrayType) {
+               if (local.variable_type is ArrayType) {
                        // create variables to store array dimensions
-                       var array_type = (ArrayType) decl.type_reference;
+                       var array_type = (ArrayType) local.variable_type;
                        
                        for (int dim = 1; dim <= array_type.rank; dim++) {
-                               var len_decl = new VariableDeclarator (get_array_length_cname (decl.name, dim));
-                               len_decl.type_reference = int_type.copy ();
-
-                               temp_vars.insert (0, len_decl);
+                               var len_var = new LocalVariable (int_type.copy (), get_array_length_cname (local.name, dim));
+                               temp_vars.insert (0, len_var);
                        }
-               } else if (decl.type_reference is DelegateType) {
-                       var deleg_type = (DelegateType) decl.type_reference;
+               } else if (local.variable_type is DelegateType) {
+                       var deleg_type = (DelegateType) local.variable_type;
                        var d = deleg_type.delegate_symbol;
                        if (d.instance) {
                                // create variable to store delegate target
-                               var target_decl = new VariableDeclarator (get_delegate_target_cname (decl.name));
-                               target_decl.type_reference = new PointerType (new VoidType ());
-
-                               temp_vars.insert (0, target_decl);
+                               var target_var = new LocalVariable (new PointerType (new VoidType ()), get_delegate_target_cname (local.name));
+                               temp_vars.insert (0, target_var);
                        }
                }
        
                CCodeExpression rhs = null;
-               if (decl.initializer != null) {
-                       rhs = (CCodeExpression) decl.initializer.ccodenode;
-                       rhs = get_implicit_cast_expression (rhs, decl.initializer.static_type, decl.type_reference);
+               if (local.initializer != null) {
+                       rhs = (CCodeExpression) local.initializer.ccodenode;
+                       rhs = get_implicit_cast_expression (rhs, local.initializer.static_type, local.variable_type);
 
-                       if (decl.type_reference is ArrayType) {
-                               var array_type = (ArrayType) decl.type_reference;
+                       if (local.variable_type is ArrayType) {
+                               var array_type = (ArrayType) local.variable_type;
 
                                var ccomma = new CCodeCommaExpression ();
 
-                               var temp_decl = get_temp_variable_declarator (decl.type_reference, true, decl);
-                               temp_vars.insert (0, temp_decl);
-                               ccomma.append_expression (new CCodeAssignment (new CCodeIdentifier (temp_decl.name), rhs));
+                               var temp_var = get_temp_variable (local.variable_type, true, local);
+                               temp_vars.insert (0, temp_var);
+                               ccomma.append_expression (new CCodeAssignment (new CCodeIdentifier (temp_var.name), rhs));
 
                                for (int dim = 1; dim <= array_type.rank; dim++) {
-                                       var lhs_array_len = new CCodeIdentifier (get_array_length_cname (decl.name, dim));
-                                       var rhs_array_len = get_array_length_cexpression (decl.initializer, dim);
+                                       var lhs_array_len = new CCodeIdentifier (get_array_length_cname (local.name, dim));
+                                       var rhs_array_len = get_array_length_cexpression (local.initializer, dim);
                                        ccomma.append_expression (new CCodeAssignment (lhs_array_len, rhs_array_len));
                                }
                                
-                               ccomma.append_expression (new CCodeIdentifier (temp_decl.name));
+                               ccomma.append_expression (new CCodeIdentifier (temp_var.name));
                                
                                rhs = ccomma;
-                       } else if (decl.type_reference is DelegateType) {
-                               var deleg_type = (DelegateType) decl.type_reference;
+                       } else if (local.variable_type is DelegateType) {
+                               var deleg_type = (DelegateType) local.variable_type;
                                var d = deleg_type.delegate_symbol;
                                if (d.instance) {
                                        var ccomma = new CCodeCommaExpression ();
 
-                                       var temp_decl = get_temp_variable_declarator (decl.type_reference, true, decl);
-                                       temp_vars.insert (0, temp_decl);
-                                       ccomma.append_expression (new CCodeAssignment (new CCodeIdentifier (temp_decl.name), rhs));
+                                       var temp_var = get_temp_variable (local.variable_type, true, local);
+                                       temp_vars.insert (0, temp_var);
+                                       ccomma.append_expression (new CCodeAssignment (new CCodeIdentifier (temp_var.name), rhs));
 
-                                       var lhs_delegate_target = new CCodeIdentifier (get_delegate_target_cname (decl.name));
-                                       var rhs_delegate_target = get_delegate_target_cexpression (decl.initializer);
+                                       var lhs_delegate_target = new CCodeIdentifier (get_delegate_target_cname (local.name));
+                                       var rhs_delegate_target = get_delegate_target_cexpression (local.initializer);
                                        ccomma.append_expression (new CCodeAssignment (lhs_delegate_target, rhs_delegate_target));
                                
-                                       ccomma.append_expression (new CCodeIdentifier (temp_decl.name));
+                                       ccomma.append_expression (new CCodeIdentifier (temp_var.name));
                                
                                        rhs = ccomma;
                                }
                        }
-               } else if (decl.type_reference.data_type != null && decl.type_reference.data_type.is_reference_type ()) {
+               } else if (local.variable_type.data_type != null && local.variable_type.data_type.is_reference_type ()) {
                        rhs = new CCodeConstant ("NULL");
                }
                        
-               decl.ccodenode = new CCodeVariableDeclarator.with_initializer (get_variable_cname (decl.name), rhs);
+               var cvar = new CCodeVariableDeclarator.with_initializer (get_variable_cname (local.name), rhs);
+
+               var cfrag = new CCodeFragment ();
+               var cdecl = new CCodeDeclaration (local.variable_type.get_cname (false, !local.variable_type.takes_ownership));
+               cdecl.add_declarator (cvar);
+               cfrag.append (cdecl);
 
-               decl.active = true;
+               if (local.initializer != null && local.initializer.can_fail) {
+                       add_simple_check (local.initializer, cfrag);
+               }
+
+               /* try to initialize uninitialized variables */
+               if (local.initializer == null) {
+                       cvar.initializer = default_value_for_type (local.variable_type, true);
+               }
+
+               local.ccodenode = cfrag;
+
+               local.active = true;
        }
 
        public override void visit_initializer_list (InitializerList list) {
@@ -1175,18 +1164,18 @@ public class Vala.CCodeGenerator : CodeGenerator {
                list.ccodenode = clist;
        }
 
-       public VariableDeclarator get_temp_variable_declarator (DataType type, bool takes_ownership = true, CodeNode? node_reference = null) {
-               var decl = new VariableDeclarator ("_tmp%d".printf (next_temp_var_id));
-               decl.type_reference = type.copy ();
-               decl.type_reference.takes_ownership = takes_ownership;
+       public LocalVariable get_temp_variable (DataType type, bool takes_ownership = true, CodeNode? node_reference = null) {
+               var var_type = type.copy ();
+               var_type.takes_ownership = takes_ownership;
+               var local = new LocalVariable (var_type, "_tmp%d".printf (next_temp_var_id));
 
                if (node_reference != null) {
-                       decl.source_reference = node_reference.source_reference;
+                       local.source_reference = node_reference.source_reference;
                }
 
                next_temp_var_id++;
                
-               return decl;
+               return local;
        }
 
        private CCodeExpression get_type_id_expression (DataType type) {
@@ -1356,47 +1345,47 @@ public class Vala.CCodeGenerator : CodeGenerator {
                 * when deep list copying works
                 */
                expr.temp_vars.clear ();
-               foreach (VariableDeclarator decl1 in temp_vars) {
-                       expr.temp_vars.add (decl1);
+               foreach (LocalVariable local in temp_vars) {
+                       expr.temp_vars.add (local);
                }
                temp_vars.clear ();
 
-               if (((Gee.List<VariableDeclarator>) temp_ref_vars).size == 0) {
+               if (((Gee.List<LocalVariable>) temp_ref_vars).size == 0) {
                        /* nothing to do without temporary variables */
                        return;
                }
                
-               var full_expr_decl = get_temp_variable_declarator (expr.static_type, true, expr);
-               expr.temp_vars.add (full_expr_decl);
+               var full_expr_var = get_temp_variable (expr.static_type, true, expr);
+               expr.temp_vars.add (full_expr_var);
                
                var expr_list = new CCodeCommaExpression ();
-               expr_list.append_expression (new CCodeAssignment (new CCodeIdentifier (full_expr_decl.name), (CCodeExpression) expr.ccodenode));
+               expr_list.append_expression (new CCodeAssignment (new CCodeIdentifier (full_expr_var.name), (CCodeExpression) expr.ccodenode));
                
-               foreach (VariableDeclarator decl in temp_ref_vars) {
-                       var ma = new MemberAccess.simple (decl.name);
-                       ma.symbol_reference = decl;
-                       expr_list.append_expression (get_unref_expression (new CCodeIdentifier (decl.name), decl.type_reference, ma));
+               foreach (LocalVariable local in temp_ref_vars) {
+                       var ma = new MemberAccess.simple (local.name);
+                       ma.symbol_reference = local;
+                       expr_list.append_expression (get_unref_expression (new CCodeIdentifier (local.name), local.variable_type, ma));
                }
                
-               expr_list.append_expression (new CCodeIdentifier (full_expr_decl.name));
+               expr_list.append_expression (new CCodeIdentifier (full_expr_var.name));
                
                expr.ccodenode = expr_list;
                
                temp_ref_vars.clear ();
        }
        
-       private void append_temp_decl (CCodeFragment cfrag, Collection<VariableDeclarator> temp_vars) {
-               foreach (VariableDeclarator decl in temp_vars) {
-                       var cdecl = new CCodeDeclaration (decl.type_reference.get_cname (true, !decl.type_reference.takes_ownership));
+       private void append_temp_decl (CCodeFragment cfrag, Collection<LocalVariable> temp_vars) {
+               foreach (LocalVariable local in temp_vars) {
+                       var cdecl = new CCodeDeclaration (local.variable_type.get_cname (true, !local.variable_type.takes_ownership));
                
-                       var vardecl = new CCodeVariableDeclarator (decl.name);
+                       var vardecl = new CCodeVariableDeclarator (local.name);
                        // sets #line
-                       decl.ccodenode = vardecl;
+                       local.ccodenode = vardecl;
                        cdecl.add_declarator (vardecl);
 
-                       var st = decl.type_reference.data_type as Struct;
+                       var st = local.variable_type.data_type as Struct;
 
-                       if (decl.type_reference.is_reference_type_or_type_parameter ()) {
+                       if (local.variable_type.is_reference_type_or_type_parameter ()) {
                                vardecl.initializer = new CCodeConstant ("NULL");
                        } else if (st != null && !st.is_simple_type ()) {
                                // 0-initialize struct with struct initializer { 0 }
@@ -1432,13 +1421,13 @@ public class Vala.CCodeGenerator : CodeGenerator {
                        var cerror_block = new CCodeBlock ();
                        foreach (CatchClause clause in current_try.get_catch_clauses ()) {
                                // go to catch clause if error domain matches
-                               var cgoto_stmt = new CCodeGotoStatement ("__catch%d_%s".printf (current_try_id, clause.type_reference.get_lower_case_cname ()));
+                               var cgoto_stmt = new CCodeGotoStatement ("__catch%d_%s".printf (current_try_id, clause.error_type.get_lower_case_cname ()));
 
-                               if (clause.type_reference.equals (gerror_type)) {
+                               if (clause.error_type.equals (gerror_type)) {
                                        // general catch clause
                                        cerror_block.add_statement (cgoto_stmt);
                                } else {
-                                       var ccond = new CCodeBinaryExpression (CCodeBinaryOperator.EQUALITY, new CCodeMemberAccess.pointer (new CCodeIdentifier ("inner_error"), "domain"), new CCodeIdentifier (clause.type_reference.data_type.get_upper_case_cname ()));
+                                       var ccond = new CCodeBinaryExpression (CCodeBinaryOperator.EQUALITY, new CCodeMemberAccess.pointer (new CCodeIdentifier ("inner_error"), "domain"), new CCodeIdentifier (clause.error_type.data_type.get_upper_case_cname ()));
 
                                        var cgoto_block = new CCodeBlock ();
                                        cgoto_block.add_statement (cgoto_stmt);
@@ -1505,7 +1494,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
 
                /* free temporary objects */
 
-               if (((Gee.List<VariableDeclarator>) temp_vars).size == 0) {
+               if (((Gee.List<LocalVariable>) temp_vars).size == 0) {
                        /* nothing to do without temporary variables */
                        return;
                }
@@ -1515,10 +1504,10 @@ public class Vala.CCodeGenerator : CodeGenerator {
                
                cfrag.append (stmt.ccodenode);
                
-               foreach (VariableDeclarator decl in temp_ref_vars) {
-                       var ma = new MemberAccess.simple (decl.name);
-                       ma.symbol_reference = decl;
-                       cfrag.append (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier (decl.name), decl.type_reference, ma)));
+               foreach (LocalVariable local in temp_ref_vars) {
+                       var ma = new MemberAccess.simple (local.name);
+                       ma.symbol_reference = local;
+                       cfrag.append (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier (local.name), local.variable_type, ma)));
                }
                
                stmt.ccodenode = cfrag;
@@ -1527,7 +1516,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
                temp_ref_vars.clear ();
        }
        
-       private void create_temp_decl (Statement stmt, Collection<VariableDeclarator> temp_vars) {
+       private void create_temp_decl (Statement stmt, Collection<LocalVariable> temp_vars) {
                /* declare temporary variables */
                
                if (temp_vars.size == 0) {
@@ -1558,17 +1547,17 @@ public class Vala.CCodeGenerator : CodeGenerator {
 
        public override void visit_switch_statement (SwitchStatement stmt) {
                // we need a temporary variable to save the property value
-               var temp_decl = get_temp_variable_declarator (stmt.expression.static_type, true, stmt);
-               stmt.expression.temp_vars.insert (0, temp_decl);
+               var temp_var = get_temp_variable (stmt.expression.static_type, true, stmt);
+               stmt.expression.temp_vars.insert (0, temp_var);
 
-               var ctemp = new CCodeIdentifier (temp_decl.name);
+               var ctemp = new CCodeIdentifier (temp_var.name);
                var cinit = new CCodeAssignment (ctemp, (CCodeExpression) stmt.expression.ccodenode);
                var czero = new CCodeConstant ("0");
 
                var cswitchblock = new CCodeFragment ();
                stmt.ccodenode = cswitchblock;
 
-               var is_string_cmp = temp_decl.type_reference.data_type.is_subtype_of (string_type.data_type);
+               var is_string_cmp = temp_var.variable_type.data_type.is_subtype_of (string_type.data_type);
 
                if (is_string_cmp) {
                        var cisnull = new CCodeBinaryExpression (CCodeBinaryOperator.EQUALITY, new CCodeConstant ("NULL"), ctemp);
@@ -1577,8 +1566,8 @@ public class Vala.CCodeGenerator : CodeGenerator {
 
                        var ccond = new CCodeConditionalExpression (cisnull, new CCodeConstant ("0"), cquark);
 
-                       temp_decl = get_temp_variable_declarator (gquark_type);
-                       stmt.expression.temp_vars.insert (0, temp_decl);
+                       temp_var = get_temp_variable (gquark_type);
+                       stmt.expression.temp_vars.insert (0, temp_var);
 
                        var label_count = 0;
 
@@ -1591,7 +1580,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
                                        var cexpr = (CCodeExpression) label.expression.ccodenode;
 
                                        if (is_constant_ccode_expression (cexpr)) {
-                                               var cname = "%s_label%d".printf (temp_decl.name, label_count++);
+                                               var cname = "%s_label%d".printf (temp_var.name, label_count++);
                                                var cdecl = new CCodeDeclaration (gquark_type.get_cname ());
 
                                                cdecl.modifiers = CCodeModifiers.STATIC;
@@ -1604,7 +1593,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
 
                        cswitchblock.append (new CCodeExpressionStatement (cinit));
 
-                       ctemp = new CCodeIdentifier (temp_decl.name);
+                       ctemp = new CCodeIdentifier (temp_var.name);
                        cinit = new CCodeAssignment (ctemp, ccond);
                }
 
@@ -1630,7 +1619,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
 
                                if (is_string_cmp) {
                                        if (is_constant_ccode_expression (cexpr)) {
-                                               var cname = new CCodeIdentifier ("%s_label%d".printf (temp_decl.name, label_count++));
+                                               var cname = new CCodeIdentifier ("%s_label%d".printf (temp_var.name, label_count++));
                                                var ccond = new CCodeBinaryExpression (CCodeBinaryOperator.INEQUALITY, czero, cname);
                                                var ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_quark_from_static_string"));
                                                var cinit = new CCodeParenthesizedExpression (new CCodeAssignment (cname, ccall));
@@ -1744,10 +1733,10 @@ public class Vala.CCodeGenerator : CodeGenerator {
        }
 
        public override void visit_foreach_statement (ForeachStatement stmt) {
-               stmt.variable_declarator.active = true;
-               stmt.collection_variable_declarator.active = true;
-               if (stmt.iterator_variable_declarator != null) {
-                       stmt.iterator_variable_declarator.active = true;
+               stmt.element_variable.active = true;
+               stmt.collection_variable.active = true;
+               if (stmt.iterator_variable != null) {
+                       stmt.iterator_variable.active = true;
                }
 
                visit_block (stmt);
@@ -1760,8 +1749,8 @@ public class Vala.CCodeGenerator : CodeGenerator {
                append_temp_decl (cfrag, stmt.collection.temp_vars);
                cblock.add_statement (cfrag);
                
-               var collection_backup = stmt.collection_variable_declarator;
-               var collection_type = collection_backup.type_reference.copy ();
+               var collection_backup = stmt.collection_variable;
+               var collection_type = collection_backup.variable_type.copy ();
                var ccoldecl = new CCodeDeclaration (collection_type.get_cname ());
                var ccolvardecl = new CCodeVariableDeclarator.with_initializer (collection_backup.name, (CCodeExpression) stmt.collection.ccodenode);
                ccolvardecl.line = cblock.line;
@@ -1991,11 +1980,11 @@ public class Vala.CCodeGenerator : CodeGenerator {
                        cblock.add_statement (cwhile);
                }
 
-               foreach (VariableDeclarator decl in stmt.get_local_variables ()) {
-                       if (decl.type_reference.takes_ownership) {
-                               var ma = new MemberAccess.simple (decl.name);
-                               ma.symbol_reference = decl;
-                               var cunref = new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier (get_variable_cname (decl.name)), decl.type_reference, ma));
+               foreach (LocalVariable local in stmt.get_local_variables ()) {
+                       if (local.variable_type.takes_ownership) {
+                               var ma = new MemberAccess.simple (local.name);
+                               ma.symbol_reference = local;
+                               var cunref = new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier (get_variable_cname (local.name)), local.variable_type, ma));
                                cunref.line = cblock.line;
                                cblock.add_statement (cunref);
                        }
@@ -2018,11 +2007,11 @@ public class Vala.CCodeGenerator : CodeGenerator {
                var b = (Block) sym;
 
                var local_vars = b.get_local_variables ();
-               foreach (VariableDeclarator decl in local_vars) {
-                       if (decl.active && decl.type_reference.is_reference_type_or_type_parameter () && decl.type_reference.takes_ownership) {
-                               var ma = new MemberAccess.simple (decl.name);
-                               ma.symbol_reference = decl;
-                               cfrag.append (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier (get_variable_cname (decl.name)), decl.type_reference, ma)));
+               foreach (LocalVariable local in local_vars) {
+                       if (local.active && local.variable_type.is_reference_type_or_type_parameter () && local.variable_type.takes_ownership) {
+                               var ma = new MemberAccess.simple (local.name);
+                               ma.symbol_reference = local;
+                               cfrag.append (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier (get_variable_cname (local.name)), local.variable_type, ma)));
                        }
                }
                
@@ -2066,12 +2055,12 @@ public class Vala.CCodeGenerator : CodeGenerator {
                var b = (Block) sym;
 
                var local_vars = b.get_local_variables ();
-               foreach (VariableDeclarator decl in local_vars) {
-                       if (decl.active && decl.type_reference.is_reference_type_or_type_parameter () && decl.type_reference.takes_ownership) {
+               foreach (LocalVariable local in local_vars) {
+                       if (local.active && local.variable_type.is_reference_type_or_type_parameter () && local.variable_type.takes_ownership) {
                                found = true;
-                               var ma = new MemberAccess.simple (decl.name);
-                               ma.symbol_reference = decl;
-                               ccomma.append_expression (get_unref_expression (new CCodeIdentifier (get_variable_cname (decl.name)), decl.type_reference, ma));
+                               var ma = new MemberAccess.simple (local.name);
+                               ma.symbol_reference = local;
+                               ccomma.append_expression (get_unref_expression (new CCodeIdentifier (get_variable_cname (local.name)), local.variable_type, ma));
                        }
                }
                
@@ -2100,7 +2089,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
        }
 
        private void create_local_free_expr (Expression expr) {
-               var return_expr_decl = get_temp_variable_declarator (expr.static_type, true, expr);
+               var return_expr_decl = get_temp_variable (expr.static_type, true, expr);
                
                var ccomma = new CCodeCommaExpression ();
                ccomma.append_expression (new CCodeAssignment (new CCodeIdentifier (return_expr_decl.name), (CCodeExpression) expr.ccodenode));
@@ -2120,9 +2109,9 @@ public class Vala.CCodeGenerator : CodeGenerator {
                if (stmt.return_expression != null) {
                        // avoid unnecessary ref/unref pair
                        if (stmt.return_expression.ref_missing &&
-                           stmt.return_expression.symbol_reference is VariableDeclarator) {
-                               var decl = (VariableDeclarator) stmt.return_expression.symbol_reference;
-                               if (decl.type_reference.takes_ownership) {
+                           stmt.return_expression.symbol_reference is LocalVariable) {
+                               var local = (LocalVariable) stmt.return_expression.symbol_reference;
+                               if (local.variable_type.takes_ownership) {
                                        /* return expression is local variable taking ownership and
                                         * current method is transferring ownership */
                                        
@@ -2145,21 +2134,21 @@ public class Vala.CCodeGenerator : CodeGenerator {
                
                        // avoid unnecessary ref/unref pair
                        if (stmt.return_expression.ref_sink &&
-                           stmt.return_expression.symbol_reference is VariableDeclarator) {
-                               var decl = (VariableDeclarator) stmt.return_expression.symbol_reference;
-                               if (decl.type_reference.takes_ownership) {
+                           stmt.return_expression.symbol_reference is LocalVariable) {
+                               var local = (LocalVariable) stmt.return_expression.symbol_reference;
+                               if (local.variable_type.takes_ownership) {
                                        /* return expression is local variable taking ownership and
                                         * current method is transferring ownership */
                                        
                                        // don't unref expression
-                                       return_expression_symbol = decl;
+                                       return_expression_symbol = local;
                                        return_expression_symbol.active = false;
                                }
                        }
 
                        // return array length if appropriate
                        if (current_method != null && !current_method.no_array_length && current_return_type is ArrayType) {
-                               var return_expr_decl = get_temp_variable_declarator (stmt.return_expression.static_type, true, stmt);
+                               var return_expr_decl = get_temp_variable (stmt.return_expression.static_type, true, stmt);
 
                                var ccomma = new CCodeCommaExpression ();
                                ccomma.append_expression (new CCodeAssignment (new CCodeIdentifier (return_expr_decl.name), (CCodeExpression) stmt.return_expression.ccodenode));
@@ -2259,7 +2248,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
                clause.accept_children (this);
 
                var cfrag = new CCodeFragment ();
-               cfrag.append (new CCodeLabel ("__catch%d_%s".printf (current_try_id, clause.type_reference.get_lower_case_cname ())));
+               cfrag.append (new CCodeLabel ("__catch%d_%s".printf (current_try_id, clause.error_type.get_lower_case_cname ())));
 
                var cblock = new CCodeBlock ();
 
@@ -2429,9 +2418,9 @@ public class Vala.CCodeGenerator : CodeGenerator {
                                                return length_expr;
                                        }
                                }
-                       } else if (array_expr.symbol_reference is VariableDeclarator) {
-                               var decl = (VariableDeclarator) array_expr.symbol_reference;
-                               var length_expr = new CCodeIdentifier (get_array_length_cname (decl.name, dim));
+                       } else if (array_expr.symbol_reference is LocalVariable) {
+                               var local = (LocalVariable) array_expr.symbol_reference;
+                               var length_expr = new CCodeIdentifier (get_array_length_cname (local.name, dim));
                                if (is_out) {
                                        return new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, length_expr);
                                } else {
@@ -2549,9 +2538,9 @@ public class Vala.CCodeGenerator : CodeGenerator {
                                } else {
                                        return target_expr;
                                }
-                       } else if (delegate_expr.symbol_reference is VariableDeclarator) {
-                               var decl = (VariableDeclarator) delegate_expr.symbol_reference;
-                               var target_expr = new CCodeIdentifier (get_delegate_target_cname (decl.name));
+                       } else if (delegate_expr.symbol_reference is LocalVariable) {
+                               var local = (LocalVariable) delegate_expr.symbol_reference;
+                               var target_expr = new CCodeIdentifier (get_delegate_target_cname (local.name));
                                if (is_out) {
                                        return new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, target_expr);
                                } else {
@@ -2641,7 +2630,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
                        var ccomma = new CCodeCommaExpression ();
                        
                        // assign current value to temp variable
-                       var temp_decl = get_temp_variable_declarator (prop.type_reference, true, expr);
+                       var temp_decl = get_temp_variable (prop.type_reference, true, expr);
                        temp_vars.insert (0, temp_decl);
                        ccomma.append_expression (new CCodeAssignment (new CCodeIdentifier (temp_decl.name), (CCodeExpression) expr.inner.ccodenode));
                        
@@ -2706,7 +2695,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
                        
                        return ccall;
                } else {
-                       var decl = get_temp_variable_declarator (expr.static_type, false, expr);
+                       var decl = get_temp_variable (expr.static_type, false, expr);
                        temp_vars.insert (0, decl);
 
                        var ctemp = new CCodeIdentifier (decl.name);
@@ -2785,7 +2774,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
                }
        
                if (expr.ref_leaked) {
-                       var decl = get_temp_variable_declarator (expr.static_type, true, expr);
+                       var decl = get_temp_variable (expr.static_type, true, expr);
                        temp_vars.insert (0, decl);
                        temp_ref_vars.insert (0, decl);
                        expr.ccodenode = new CCodeParenthesizedExpression (new CCodeAssignment (new CCodeIdentifier (get_variable_cname (decl.name)), (CCodeExpression) expr.ccodenode));
@@ -2802,7 +2791,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
 
                if (expr.type_reference.data_type is Struct || expr.get_object_initializer ().size > 0) {
                        // value-type initialization or object creation expression with object initializer
-                       var temp_decl = get_temp_variable_declarator (expr.type_reference, false, expr);
+                       var temp_decl = get_temp_variable (expr.type_reference, false, expr);
                        temp_vars.add (temp_decl);
 
                        instance = new CCodeIdentifier (get_variable_cname (temp_decl.name));
@@ -3026,7 +3015,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
                        // GObject cast
                        if (expr.is_silent_cast) {
                                var ccomma = new CCodeCommaExpression ();
-                               var temp_decl = get_temp_variable_declarator (expr.inner.static_type, true, expr);
+                               var temp_decl = get_temp_variable (expr.inner.static_type, true, expr);
 
                                temp_vars.add (temp_decl);
 
@@ -3066,7 +3055,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
        public override void visit_reference_transfer_expression (ReferenceTransferExpression expr) {
                /* (tmp = var, var = null, tmp) */
                var ccomma = new CCodeCommaExpression ();
-               var temp_decl = get_temp_variable_declarator (expr.static_type, true, expr);
+               var temp_decl = get_temp_variable (expr.static_type, true, expr);
                temp_vars.insert (0, temp_decl);
                var cvar = new CCodeIdentifier (temp_decl.name);
 
@@ -3192,8 +3181,8 @@ public class Vala.CCodeGenerator : CodeGenerator {
        public override void visit_lambda_expression (LambdaExpression l) {
                var old_temp_vars = temp_vars;
                var old_temp_ref_vars = temp_ref_vars;
-               temp_vars = new ArrayList<VariableDeclarator> ();
-               temp_ref_vars = new ArrayList<VariableDeclarator> ();
+               temp_vars = new ArrayList<LocalVariable> ();
+               temp_ref_vars = new ArrayList<LocalVariable> ();
 
                l.accept_children (this);
 
@@ -3499,7 +3488,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
                if (ma.symbol_reference is FormalParameter) {
                        return true;
                }
-               if (ma.symbol_reference is VariableDeclarator) {
+               if (ma.symbol_reference is LocalVariable) {
                        return true;
                }
                if (ma.symbol_reference is Field) {
@@ -3517,7 +3506,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
                }
 
                var ccomma = new CCodeCommaExpression ();
-               var temp_decl = get_temp_variable_declarator (e.static_type);
+               var temp_decl = get_temp_variable (e.static_type);
                var ctemp = new CCodeIdentifier (temp_decl.name);
                temp_vars.add (temp_decl);
                ccomma.append_expression (new CCodeAssignment (ctemp, ce));
@@ -3640,11 +3629,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
                return null;
        }
 
-       public override CodeBinding? create_local_variable_declaration_binding (LocalVariableDeclaration node) {
-               return null;
-       }
-
-       public override CodeBinding? create_variable_declarator_binding (VariableDeclarator node) {
+       public override CodeBinding? create_local_variable_binding (LocalVariable node) {
                return null;
        }
 
index ec09ed3..f103f14 100644 (file)
@@ -267,7 +267,7 @@ public class Vala.CCodeGenerator {
 
                                                var ccomma = new CCodeCommaExpression ();
 
-                                               var temp_decl = get_temp_variable_declarator (arg.static_type);
+                                               var temp_decl = get_temp_variable (arg.static_type);
                                                temp_vars.insert (0, temp_decl);
                                                ccomma.append_expression (new CCodeAssignment (new CCodeIdentifier (temp_decl.name), cexpr));
 
@@ -285,29 +285,29 @@ public class Vala.CCodeGenerator {
                                                // (ret_tmp = call (&tmp), free (var1), var1 = tmp, ret_tmp)
                                                var ccomma = new CCodeCommaExpression ();
 
-                                               var temp_decl = get_temp_variable_declarator (unary.inner.static_type);
-                                               temp_vars.insert (0, temp_decl);
-                                               cexpr = new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier (temp_decl.name));
+                                               var temp_var = get_temp_variable (unary.inner.static_type);
+                                               temp_vars.insert (0, temp_var);
+                                               cexpr = new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier (temp_var.name));
 
                                                // call function
-                                               VariableDeclarator ret_temp_decl;
+                                               LocalVariable ret_temp_var;
                                                if (m.return_type is VoidType) {
                                                        ccomma.append_expression (ccall_expr);
                                                } else {
-                                                       ret_temp_decl = get_temp_variable_declarator (m.return_type);
-                                                       temp_vars.insert (0, ret_temp_decl);
-                                                       ccomma.append_expression (new CCodeAssignment (new CCodeIdentifier (ret_temp_decl.name), ccall_expr));
+                                                       ret_temp_var = get_temp_variable (m.return_type);
+                                                       temp_vars.insert (0, ret_temp_var);
+                                                       ccomma.append_expression (new CCodeAssignment (new CCodeIdentifier (ret_temp_var.name), ccall_expr));
                                                }
 
                                                // unref old value
                                                ccomma.append_expression (get_unref_expression ((CCodeExpression) unary.inner.ccodenode, arg.static_type, arg));
 
                                                // assign new value
-                                               ccomma.append_expression (new CCodeAssignment ((CCodeExpression) unary.inner.ccodenode, new CCodeIdentifier (temp_decl.name)));
+                                               ccomma.append_expression (new CCodeAssignment ((CCodeExpression) unary.inner.ccodenode, new CCodeIdentifier (temp_var.name)));
 
                                                // return value
                                                if (!(m.return_type is VoidType)) {
-                                                       ccomma.append_expression (new CCodeIdentifier (ret_temp_decl.name));
+                                                       ccomma.append_expression (new CCodeIdentifier (ret_temp_var.name));
                                                }
 
                                                ccall_expr = ccomma;
@@ -358,10 +358,10 @@ public class Vala.CCodeGenerator {
                        var array_type = (ArrayType) m.return_type;
                        for (int dim = 1; dim <= array_type.rank; dim++) {
                                if (!m.no_array_length) {
-                                       var temp_decl = get_temp_variable_declarator (int_type);
-                                       var temp_ref = new CCodeIdentifier (temp_decl.name);
+                                       var temp_var = get_temp_variable (int_type);
+                                       var temp_ref = new CCodeIdentifier (temp_var.name);
 
-                                       temp_vars.insert (0, temp_decl);
+                                       temp_vars.insert (0, temp_var);
 
                                        carg_map.set (get_param_pos (m.carray_length_parameter_position + 0.01 * dim), new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, temp_ref));
 
@@ -374,10 +374,10 @@ public class Vala.CCodeGenerator {
                        var deleg_type = (DelegateType) m.return_type;
                        var d = deleg_type.delegate_symbol;
                        if (d.instance) {
-                               var temp_decl = get_temp_variable_declarator (new PointerType (new VoidType ()));
-                               var temp_ref = new CCodeIdentifier (temp_decl.name);
+                               var temp_var = get_temp_variable (new PointerType (new VoidType ()));
+                               var temp_ref = new CCodeIdentifier (temp_var.name);
 
-                               temp_vars.insert (0, temp_decl);
+                               temp_vars.insert (0, temp_var);
 
                                carg_map.set (get_param_pos (m.cdelegate_target_parameter_position), new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, temp_ref));
 
@@ -450,7 +450,7 @@ public class Vala.CCodeGenerator {
                        arg_it.next ();
                        var new_size = (CCodeExpression) arg_it.get ().ccodenode;
 
-                       var temp_decl = get_temp_variable_declarator (int_type);
+                       var temp_decl = get_temp_variable (int_type);
                        var temp_ref = new CCodeIdentifier (temp_decl.name);
 
                        temp_vars.insert (0, temp_decl);
@@ -478,7 +478,7 @@ public class Vala.CCodeGenerator {
 
                        expr.ccodenode = ccomma;
                } else if (m == substring_method) {
-                       var temp_decl = get_temp_variable_declarator (string_type);
+                       var temp_decl = get_temp_variable (string_type);
                        var temp_ref = new CCodeIdentifier (temp_decl.name);
 
                        temp_vars.insert (0, temp_decl);
@@ -514,7 +514,7 @@ public class Vala.CCodeGenerator {
                                ccall.add_argument (get_dbus_array_type (array_type));
 
                                var garray_type_reference = get_data_type_for_symbol (garray_type);
-                               var temp_decl = get_temp_variable_declarator (garray_type_reference);
+                               var temp_decl = get_temp_variable (garray_type_reference);
                                temp_vars.insert (0, temp_decl);
                                ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier (temp_decl.name)));
 
@@ -541,7 +541,7 @@ public class Vala.CCodeGenerator {
                                        ccall.add_argument (new CCodeIdentifier (m.return_type.data_type.get_type_id ()));
                                }
 
-                               var temp_decl = get_temp_variable_declarator (m.return_type);
+                               var temp_decl = get_temp_variable (m.return_type);
                                temp_vars.insert (0, temp_decl);
                                ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier (temp_decl.name)));
 
index 0b5d497..f90d0e5 100644 (file)
@@ -54,9 +54,9 @@ public class Vala.CCodeGenerator {
                                        if (expr.inner != null && !expr.inner.is_pure ()) {
                                                // instance expression has side-effects
                                                // store in temp. variable
-                                               var temp_decl = get_temp_variable_declarator (expr.inner.static_type);
-                                               temp_vars.insert (0, temp_decl);
-                                               var ctemp = new CCodeIdentifier (temp_decl.name);
+                                               var temp_var = get_temp_variable (expr.inner.static_type);
+                                               temp_vars.insert (0, temp_var);
+                                               var ctemp = new CCodeIdentifier (temp_var.name);
                                                inst = new CCodeAssignment (ctemp, pub_inst);
                                                expr.inner.ccodenode = ctemp;
                                        }
@@ -131,9 +131,9 @@ public class Vala.CCodeGenerator {
                                // They are returned as out parameter.
                                if (base_property.type_reference.is_real_struct_type ()) {
                                        var ccomma = new CCodeCommaExpression ();
-                                       var temp_decl = get_temp_variable_declarator (base_property.type_reference);
-                                       var ctemp = new CCodeIdentifier (temp_decl.name);
-                                       temp_vars.add (temp_decl);
+                                       var temp_var = get_temp_variable (base_property.type_reference);
+                                       var ctemp = new CCodeIdentifier (temp_var.name);
+                                       temp_vars.add (temp_var);
                                        ccall.add_argument (new CCodeUnaryExpression(CCodeUnaryOperator.ADDRESS_OF, ctemp));
                                        ccomma.append_expression (ccall);
                                        ccomma.append_expression (ctemp);
@@ -153,10 +153,10 @@ public class Vala.CCodeGenerator {
                                
                                
                                // we need a temporary variable to save the property value
-                               var temp_decl = get_temp_variable_declarator (expr.static_type);
-                               temp_vars.insert (0, temp_decl);
+                               var temp_var = get_temp_variable (expr.static_type);
+                               temp_vars.insert (0, temp_var);
 
-                               var ctemp = new CCodeIdentifier (temp_decl.name);
+                               var ctemp = new CCodeIdentifier (temp_var.name);
                                ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, ctemp));
                                
                                
@@ -170,9 +170,9 @@ public class Vala.CCodeGenerator {
                } else if (expr.symbol_reference is EnumValue) {
                        var ev = (EnumValue) expr.symbol_reference;
                        expr.ccodenode = new CCodeConstant (ev.get_cname ());
-               } else if (expr.symbol_reference is VariableDeclarator) {
-                       var decl = (VariableDeclarator) expr.symbol_reference;
-                       expr.ccodenode = new CCodeIdentifier (get_variable_cname (decl.name));
+               } else if (expr.symbol_reference is LocalVariable) {
+                       var local = (LocalVariable) expr.symbol_reference;
+                       expr.ccodenode = new CCodeIdentifier (get_variable_cname (local.name));
                } else if (expr.symbol_reference is FormalParameter) {
                        var p = (FormalParameter) expr.symbol_reference;
                        if (p.name == "this") {
index e4c23de..bcdc947 100644 (file)
@@ -78,7 +78,7 @@ libvalacore_la_VALASOURCES = \
        valainvocationexpression.vala \
        valalambdaexpression.vala \
        valaliteral.vala \
-       valalocalvariabledeclaration.vala \
+       valalocalvariable.vala \
        valalockable.vala \
        valalockstatement.vala \
        valamember.vala \
@@ -137,7 +137,6 @@ libvalacore_la_VALASOURCES = \
        valaunresolvedsymbol.vala \
        valaunresolvedtype.vala \
        valavaluetype.vala \
-       valavariabledeclarator.vala \
        valavoidtype.vala \
        valawhilestatement.vala \
        $(NULL)
index a9697b4..30a3eef 100644 (file)
@@ -41,7 +41,7 @@
 #include <vala/valainvocationexpression.h>
 #include <vala/valalambdaexpression.h>
 #include <vala/valaliteral.h>
-#include <vala/valalocalvariabledeclaration.h>
+#include <vala/valalocalvariable.h>
 #include <vala/valalockstatement.h>
 #include <vala/valamemberaccess.h>
 #include <vala/valamemberinitializer.h>
@@ -81,6 +81,5 @@
 #include <vala/valaunaryexpression.h>
 #include <vala/valaunresolvedsymbol.h>
 #include <vala/valaunresolvedtype.h>
-#include <vala/valavariabledeclarator.h>
 #include <vala/valavoidtype.h>
 #include <vala/valawhilestatement.h>
index 20807f7..66e44af 100644 (file)
@@ -1,6 +1,6 @@
 /* valablock.vala
  *
- * Copyright (C) 2006-2007  Jürg Billeter
+ * Copyright (C) 2006-2008  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
@@ -34,7 +34,7 @@ public class Vala.Block : Symbol, Statement {
        public bool contains_jump_statement { get; set; }
 
        private Gee.List<Statement> statement_list = new ArrayList<Statement> ();
-       private Gee.List<VariableDeclarator> local_variables = new ArrayList<VariableDeclarator> ();
+       private Gee.List<LocalVariable> local_variables = new ArrayList<LocalVariable> ();
        
        /**
         * Creates a new block.
@@ -68,8 +68,8 @@ public class Vala.Block : Symbol, Statement {
         *
         * @param decl a variable declarator
         */
-       public void add_local_variable (VariableDeclarator decl) {
-               local_variables.add (decl);
+       public void add_local_variable (LocalVariable local) {
+               local_variables.add (local);
        }
        
        /**
@@ -77,8 +77,8 @@ public class Vala.Block : Symbol, Statement {
         *
         * @return variable declarator list
         */
-       public Collection<VariableDeclarator> get_local_variables () {
-               return new ReadOnlyCollection<VariableDeclarator> (local_variables);
+       public Collection<LocalVariable> get_local_variables () {
+               return new ReadOnlyCollection<LocalVariable> (local_variables);
        }
 
        public override void accept (CodeVisitor visitor) {
index fbaf646..301527a 100644 (file)
@@ -29,7 +29,7 @@ public class Vala.CatchClause : CodeNode {
        /**
         * Specifies the error type.
         */
-       public DataType? type_reference {
+       public DataType? error_type {
                get { return _data_type; }
                set {
                        _data_type = value;
@@ -52,7 +52,7 @@ public class Vala.CatchClause : CodeNode {
        /**
         * Specifies the declarator for the generated error variable.
         */
-       public VariableDeclarator variable_declarator { get; set; }
+       public LocalVariable error_variable { get; set; }
 
        private DataType _data_type;
 
@@ -65,8 +65,8 @@ public class Vala.CatchClause : CodeNode {
         * @param source_reference reference to source code
         * @return                 newly created catch clause
         */
-       public CatchClause (DataType? type_reference, string variable_name, Block body, SourceReference? source_reference = null) {
-               this.type_reference = type_reference;
+       public CatchClause (DataType? error_type, string variable_name, Block body, SourceReference? source_reference = null) {
+               this.error_type = error_type;
                this.variable_name = variable_name;
                this.body = body;
                this.source_reference = source_reference;
@@ -77,16 +77,16 @@ public class Vala.CatchClause : CodeNode {
        }
 
        public override void accept_children (CodeVisitor visitor) {
-               if (type_reference != null) {
-                       type_reference.accept (visitor);
+               if (error_type != null) {
+                       error_type.accept (visitor);
                }
 
                body.accept (visitor);
        }
 
        public override void replace_type (DataType old_type, DataType new_type) {
-               if (type_reference == old_type) {
-                       type_reference = new_type;
+               if (error_type == old_type) {
+                       error_type = new_type;
                }
        }
 }
index faf0f2a..d2aff68 100644 (file)
@@ -32,8 +32,8 @@ public class Vala.CFGBuilder : CodeVisitor {
                public bool continue_target { get; set; }
                public bool return_target { get; set; }
                public bool error_target { get; set; }
-               public Enum? error_domain { get; set; }
-               public EnumValue? error_code { get; set; }
+               public ErrorDomain? error_domain { get; set; }
+               public ErrorCode? error_code { get; set; }
                public bool finally_clause { get; set; }
                public BasicBlock basic_block { get; set; }
                public BasicBlock? last_block { get; set; }
@@ -54,7 +54,7 @@ public class Vala.CFGBuilder : CodeVisitor {
                        return_target = true;
                }
 
-               public JumpTarget.error_target (BasicBlock basic_block, CatchClause catch_clause, Enum? error_domain, EnumValue? error_code) {
+               public JumpTarget.error_target (BasicBlock basic_block, CatchClause catch_clause, ErrorDomain? error_domain, ErrorCode? error_code) {
                        this.basic_block = basic_block;
                        this.catch_clause = catch_clause;
                        this.error_domain = error_domain;
@@ -187,10 +187,9 @@ public class Vala.CFGBuilder : CodeVisitor {
 
                current_block.add_node (stmt);
 
-               foreach (VariableDeclarator decl in stmt.declaration.get_variable_declarators ()) {
-                       if (decl.initializer != null) {
-                               handle_errors (decl.initializer);
-                       }
+               var local = stmt.declaration as LocalVariable;
+               if (local != null && local.initializer != null) {
+                       handle_errors (local.initializer);
                }
        }
 
@@ -635,8 +634,8 @@ public class Vala.CFGBuilder : CodeVisitor {
                var catch_clauses = stmt.get_catch_clauses ();
                for (int i = catch_clauses.size - 1; i >= 0; i--) {
                        var catch_clause = catch_clauses[i];
-                       if (catch_clause.type_reference != null) {
-                               jump_stack.add (new JumpTarget.error_target (new BasicBlock (), catch_clause, catch_clause.type_reference.data_type as Enum, null));
+                       if (catch_clause.error_type != null) {
+                               jump_stack.add (new JumpTarget.error_target (new BasicBlock (), catch_clause, catch_clause.error_type.data_type as ErrorDomain, null));
                        } else {
                                jump_stack.add (new JumpTarget.error_target (new BasicBlock (), catch_clause, null, null));
                        }
index 6d4b68b..c143879 100644 (file)
@@ -205,8 +205,7 @@ public class Vala.Class : Typesymbol {
                        if (m.result_var != null) {
                                m.scope.remove (m.result_var.name);
                        }
-                       m.result_var = new VariableDeclarator ("result");
-                       m.result_var.type_reference = m.return_type.copy ();
+                       m.result_var = new LocalVariable (m.return_type.copy (), "result");
                        m.scope.add (m.result_var.name, m.result_var);
                }
                if (m is CreationMethod) {
index 3f544ba..07ac98f 100644 (file)
@@ -559,27 +559,15 @@ public class Vala.CodeContext : Object {
                return node;
        }
 
-       public DeclarationStatement create_declaration_statement (LocalVariableDeclaration declaration, SourceReference? source_reference) {
+       public DeclarationStatement create_declaration_statement (Symbol declaration, SourceReference? source_reference) {
                var node = new DeclarationStatement (declaration, source_reference);
                node.code_binding = codegen.create_declaration_statement_binding (node);
                return node;
        }
 
-       public LocalVariableDeclaration create_local_variable_declaration (DataType type_reference, SourceReference? source_reference) {
-               var node = new LocalVariableDeclaration (type_reference, source_reference);
-               node.code_binding = codegen.create_local_variable_declaration_binding (node);
-               return node;
-       }
-
-       public LocalVariableDeclaration create_local_variable_declaration_var_type (SourceReference? source_reference) {
-               var node = new LocalVariableDeclaration.var_type (source_reference);
-               node.code_binding = codegen.create_local_variable_declaration_binding (node);
-               return node;
-       }
-
-       public VariableDeclarator create_variable_declarator (string name, Expression? initializer = null, SourceReference? source_reference = null) {
-               var node = new VariableDeclarator (name, initializer, source_reference);
-               node.code_binding = codegen.create_variable_declarator_binding (node);
+       public LocalVariable create_local_variable (DataType? variable_type, string name, Expression? initializer = null, SourceReference? source_reference = null) {
+               var node = new LocalVariable (variable_type, name, initializer, source_reference);
+               node.code_binding = codegen.create_local_variable_binding (node);
                return node;
        }
 
index dbe9a6b..84f1015 100644 (file)
@@ -126,11 +126,7 @@ public class Vala.CodeGenerator : CodeVisitor {
                return null;
        }
 
-       public virtual CodeBinding? create_local_variable_declaration_binding (LocalVariableDeclaration node) {
-               return null;
-       }
-
-       public virtual CodeBinding? create_variable_declarator_binding (VariableDeclarator node) {
+       public virtual CodeBinding? create_local_variable_binding (LocalVariable node) {
                return null;
        }
 
index 7cb11ed..bd2d604 100644 (file)
@@ -252,19 +252,11 @@ public abstract class Vala.CodeVisitor : Object {
        }
 
        /**
-        * Visit operation called for local variable declarations.
+        * Visit operation called for local variables.
         *
-        * @param decl a local variable declaration
+        * @param local a local variable
         */
-       public virtual void visit_local_variable_declaration (LocalVariableDeclaration decl) {
-       }
-
-       /**
-        * Visit operation called for variable declarators.
-        *
-        * @param decl a variable declarator
-        */
-       public virtual void visit_variable_declarator (VariableDeclarator decl) {
+       public virtual void visit_local_variable (LocalVariable local) {
        }
 
        /**
index 77ed725..6cf835a 100644 (file)
@@ -1,6 +1,6 @@
 /* valadeclarationstatement.vala
  *
- * Copyright (C) 2006-2007  Jürg Billeter
+ * Copyright (C) 2006-2008  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
 using GLib;
 
 /**
- * Represents a local variable declaration statement in the source code.
+ * Represents a local variable or constant declaration statement in the source code.
  */
 public class Vala.DeclarationStatement : CodeNode, Statement {
        /**
-        * The local variable declaration.
+        * The local variable or constant declaration.
         */
-       public LocalVariableDeclaration declaration { get; set construct; }
+       public Symbol declaration { get; set construct; }
 
        /**
         * Creates a new declaration statement.
@@ -38,9 +38,9 @@ public class Vala.DeclarationStatement : CodeNode, Statement {
         * @param source reference to source code
         * @return       newly created declaration statement
         */
-       public DeclarationStatement (LocalVariableDeclaration decl, SourceReference source) {
-               declaration = decl;
-               source_reference = source;
+       public DeclarationStatement (Symbol declaration, SourceReference? source_reference) {
+               this.declaration = declaration;
+               this.source_reference = source_reference;
        }
        
        public override void accept (CodeVisitor visitor) {
index a82a211..0abd76d 100644 (file)
@@ -84,7 +84,7 @@ public abstract class Vala.Expression : CodeNode {
         *
         * The code generator sets and uses them for memory management.
         */
-       public ArrayList<VariableDeclarator> temp_vars = new ArrayList<VariableDeclarator> ();
+       public ArrayList<LocalVariable> temp_vars = new ArrayList<LocalVariable> ();
 
        /**
         * Returns whether this expression is pure, i.e. whether this expression
index 6e522fe..3feb32e 100644 (file)
@@ -72,17 +72,17 @@ public class Vala.ForeachStatement : Block {
        /**
         * Specifies the declarator for the generated element variable.
         */
-       public VariableDeclarator variable_declarator { get; set; }
+       public LocalVariable element_variable { get; set; }
 
        /**
         * Specifies the declarator for the generated collection variable.
         */
-       public VariableDeclarator collection_variable_declarator { get; set; }
+       public LocalVariable collection_variable { get; set; }
 
        /**
         * Specifies the declarator for the generated iterator variable.
         */
-       public VariableDeclarator iterator_variable_declarator { get; set; }
+       public LocalVariable iterator_variable { get; set; }
 
        private Expression _collection;
        private Block _body;
index 328b375..74a2826 100644 (file)
@@ -134,8 +134,7 @@ public class Vala.Interface : Typesymbol {
                        m.scope.add (m.this_parameter.name, m.this_parameter);
                }
                if (!(m.return_type is VoidType) && m.get_postconditions ().size > 0) {
-                       m.result_var = new VariableDeclarator ("result");
-                       m.result_var.type_reference = m.return_type.copy ();
+                       m.result_var = new LocalVariable (m.return_type.copy (), "result");
                        m.scope.add (m.result_var.name, m.result_var);
                }
 
similarity index 70%
rename from vala/valavariabledeclarator.vala
rename to vala/valalocalvariable.vala
index a7e989d..da6d396 100644 (file)
@@ -1,4 +1,4 @@
-/* valavariabledeclarator.vala
+/* valalocalvariable.vala
  *
  * Copyright (C) 2006-2008  Jürg Billeter
  *
  */
 
 using GLib;
-using Gee;
 
 /**
- * Represents a variable declarator in the source code.
+ * Represents a local variable declaration in the source code.
  */
-public class Vala.VariableDeclarator : Symbol {
+public class Vala.LocalVariable : Symbol {
        /**
         * The optional initializer expression.
         */
-       public Expression initializer {
+       public Expression? initializer {
                get {
                        return _initializer;
                }
@@ -45,33 +44,36 @@ public class Vala.VariableDeclarator : Symbol {
        /**
         * The variable type.
         */
-       public DataType type_reference {
-               get { return _data_type; }
+       public DataType? variable_type {
+               get { return _variable_type; }
                set {
-                       _data_type = value;
-                       _data_type.parent_node = this;
+                       _variable_type = value;
+                       if (_variable_type != null) {
+                               _variable_type.parent_node = this;
+                       }
                }
        }
 
-       private Expression _initializer;
-       private DataType _data_type;
+       private Expression? _initializer;
+       private DataType? _variable_type;
 
        /**
-        * Creates a new variable declarator.
+        * Creates a new local variable.
         *
         * @param name   name of the variable
         * @param init   optional initializer expression
         * @param source reference to source code
         * @return       newly created variable declarator
         */
-       public VariableDeclarator (string name, Expression? initializer = null, SourceReference? source_reference = null) {
+       public LocalVariable (DataType? variable_type, string name, Expression? initializer = null, SourceReference? source_reference = null) {
+               this.variable_type = variable_type;
                this.name = name;
                this.initializer = initializer;
                this.source_reference = source_reference;
        }
        
        public override void accept (CodeVisitor visitor) {
-               visitor.visit_variable_declarator (this);
+               visitor.visit_local_variable (this);
        }
 
        public override void accept_children (CodeVisitor visitor) {
@@ -81,8 +83,8 @@ public class Vala.VariableDeclarator : Symbol {
                        visitor.visit_end_full_expression (initializer);
                }
                
-               if (type_reference != null) {
-                       type_reference.accept (visitor);
+               if (variable_type != null) {
+                       variable_type.accept (visitor);
                }
        }
 
@@ -93,8 +95,8 @@ public class Vala.VariableDeclarator : Symbol {
        }
 
        public override void replace_type (DataType old_type, DataType new_type) {
-               if (type_reference == old_type) {
-                       type_reference = new_type;
+               if (variable_type == old_type) {
+                       variable_type = new_type;
                }
        }
 }
diff --git a/vala/valalocalvariabledeclaration.vala b/vala/valalocalvariabledeclaration.vala
deleted file mode 100644 (file)
index a1e0f02..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/* valalocalvariabledeclaration.vala
- *
- * Copyright (C) 2006-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 <j@bitron.ch>
- */
-
-using GLib;
-using Gee;
-
-/**
- * Represents a local variable declaration in the source code.
- */
-public class Vala.LocalVariableDeclaration : CodeNode {
-       /**
-        * The type of the local variable.
-        */
-       public DataType type_reference {
-               get { return _data_type; }
-               set {
-                       _data_type = value;
-                       _data_type.parent_node = this;
-               }
-       }
-
-       private DataType _data_type;
-
-       private Gee.List<VariableDeclarator> variable_declarators = new ArrayList<VariableDeclarator> ();
-       
-       /**
-        * Creates a new local variable declaration.
-        *
-        * @param type_reference   type of the variable
-        * @param source_reference reference to source code
-        * @return                 newly created local variable declaration
-        */
-       public LocalVariableDeclaration (DataType type_reference, SourceReference source_reference) {
-               this.type_reference = type_reference;
-               this.source_reference = source_reference;
-       }
-       
-       /**
-        * Creates a new implicitly typed local variable declaration. The type
-        * of the variable is inferred from the expression used to initialize
-        * the variable.
-        *
-        * @param source_reference reference to source code
-        * @return                 newly created local variable declaration
-        */
-       public LocalVariableDeclaration.var_type (SourceReference source_reference) {
-               this.source_reference = source_reference;
-       }
-       
-       /**
-        * Add the specified variable declarator to this local variable
-        * declaration.
-        *
-        * @param declarator a variable declarator
-        */
-       public void add_declarator (VariableDeclarator declarator) {
-               variable_declarators.add (declarator);
-       }
-       
-       /**
-        * Returns a copy of the list of variable declarators.
-        *
-        * @return variable declarator list
-        */
-       public Collection<VariableDeclarator> get_variable_declarators () {
-               return new ReadOnlyCollection<VariableDeclarator> (variable_declarators);
-       }
-       
-       public override void accept (CodeVisitor visitor) {
-               if (type_reference != null) {
-                       type_reference.accept (visitor);
-               }
-               
-               foreach (VariableDeclarator decl in variable_declarators) {
-                       decl.accept (visitor);
-               }
-       
-               visitor.visit_local_variable_declaration (this);
-       }
-
-       public override void replace_type (DataType old_type, DataType new_type) {
-               if (type_reference == old_type) {
-                       type_reference = new_type;
-               }
-       }
-}
index 76ed9b0..7b23170 100644 (file)
@@ -126,15 +126,15 @@ public class Vala.MemoryManager : CodeVisitor {
                b.accept_children (this);
        }
 
-       public override void visit_variable_declarator (VariableDeclarator decl) {
-               decl.accept_children (this);
+       public override void visit_local_variable (LocalVariable local) {
+               local.accept_children (this);
 
-               if (decl.initializer != null) {
-                       if (!(decl.type_reference is PointerType)) {
-                               if (decl.type_reference.takes_ownership) {
-                                       visit_possibly_missing_copy_expression (decl.initializer);
+               if (local.initializer != null) {
+                       if (!(local.variable_type is PointerType)) {
+                               if (local.variable_type.takes_ownership) {
+                                       visit_possibly_missing_copy_expression (local.initializer);
                                } else {
-                                       visit_possibly_leaked_expression (decl.initializer);
+                                       visit_possibly_leaked_expression (local.initializer);
                                }
                        }
                }
index 1a33bf6..eb31ef2 100644 (file)
@@ -151,7 +151,7 @@ public class Vala.Method : Member {
        /**
         * Specifies the generated `result' variable for postconditions.
         */
-       public VariableDeclarator result_var { get; set; }
+       public LocalVariable result_var { get; set; }
 
        /**
         * Specifies the position of the instance parameter in the C function.
@@ -264,7 +264,7 @@ public class Vala.Method : Member {
                }
 
                if (result_var != null) {
-                       result_var.type_reference.accept (visitor);
+                       result_var.variable_type.accept (visitor);
                }
 
                foreach (Expression precondition in preconditions) {
index e38a324..ab6f434 100644 (file)
@@ -122,11 +122,11 @@ public class Vala.NullChecker : CodeVisitor {
                b.accept_children (this);
        }
 
-       public override void visit_variable_declarator (VariableDeclarator decl) {
-               decl.accept_children (this);
+       public override void visit_local_variable (LocalVariable local) {
+               local.accept_children (this);
 
-               if (decl.initializer != null) {
-                       check_compatible (decl.initializer, decl.type_reference);
+               if (local.initializer != null) {
+                       check_compatible (local.initializer, local.variable_type);
                }
        }
 
index 9ebff5c..ce25605 100644 (file)
@@ -1094,55 +1094,97 @@ public class Vala.Parser : CodeVisitor {
                return expr;
        }
 
-       Statement parse_statement () throws ParseError {
-               comment = scanner.pop_comment ();
-               switch (current ()) {
-               case TokenType.OPEN_BRACE:
-                       return parse_block ();
-               case TokenType.SEMICOLON:
-                       return parse_empty_statement ();
-               case TokenType.IF:
-                       return parse_if_statement ();
-               case TokenType.SWITCH:
-                       return parse_switch_statement ();
-               case TokenType.WHILE:
-                       return parse_while_statement ();
-               case TokenType.DO:
-                       return parse_do_statement ();
-               case TokenType.FOR:
-                       return parse_for_statement ();
-               case TokenType.FOREACH:
-                       return parse_foreach_statement ();
-               case TokenType.BREAK:
-                       return parse_break_statement ();
-               case TokenType.CONTINUE:
-                       return parse_continue_statement ();
-               case TokenType.RETURN:
-                       return parse_return_statement ();
-               case TokenType.THROW:
-                       return parse_throw_statement ();
-               case TokenType.TRY:
-                       return parse_try_statement ();
-               case TokenType.LOCK:
-                       return parse_lock_statement ();
-               case TokenType.DELETE:
-                       return parse_delete_statement ();
-               case TokenType.VAR:
-                       return parse_declaration_statement ();
-               case TokenType.OP_INC:
-               case TokenType.OP_DEC:
-               case TokenType.BASE:
-               case TokenType.THIS:
-               case TokenType.OPEN_PARENS:
-               case TokenType.STAR:
-               case TokenType.NEW:
-                       return parse_expression_statement ();
-               }
+       void parse_statements (Block block) throws ParseError {
+               while (current () != TokenType.CLOSE_BRACE
+                      && current () != TokenType.CASE
+                      && current () != TokenType.DEFAULT) {
+                       try {
+                               Statement stmt;
+                               bool is_decl = false;
+                               comment = scanner.pop_comment ();
+                               switch (current ()) {
+                               case TokenType.OPEN_BRACE:
+                                       stmt = parse_block ();
+                                       break;
+                               case TokenType.SEMICOLON:
+                                       stmt = parse_empty_statement ();
+                                       break;
+                               case TokenType.IF:
+                                       stmt = parse_if_statement ();
+                                       break;
+                               case TokenType.SWITCH:
+                                       stmt = parse_switch_statement ();
+                                       break;
+                               case TokenType.WHILE:
+                                       stmt = parse_while_statement ();
+                                       break;
+                               case TokenType.DO:
+                                       stmt = parse_do_statement ();
+                                       break;
+                               case TokenType.FOR:
+                                       stmt = parse_for_statement ();
+                                       break;
+                               case TokenType.FOREACH:
+                                       stmt = parse_foreach_statement ();
+                                       break;
+                               case TokenType.BREAK:
+                                       stmt = parse_break_statement ();
+                                       break;
+                               case TokenType.CONTINUE:
+                                       stmt = parse_continue_statement ();
+                                       break;
+                               case TokenType.RETURN:
+                                       stmt = parse_return_statement ();
+                                       break;
+                               case TokenType.THROW:
+                                       stmt = parse_throw_statement ();
+                                       break;
+                               case TokenType.TRY:
+                                       stmt = parse_try_statement ();
+                                       break;
+                               case TokenType.LOCK:
+                                       stmt = parse_lock_statement ();
+                                       break;
+                               case TokenType.DELETE:
+                                       stmt = parse_delete_statement ();
+                                       break;
+                               case TokenType.VAR:
+                                       is_decl = true;
+                                       parse_local_variable_declarations (block);
+                                       break;
+                               case TokenType.OP_INC:
+                               case TokenType.OP_DEC:
+                               case TokenType.BASE:
+                               case TokenType.THIS:
+                               case TokenType.OPEN_PARENS:
+                               case TokenType.STAR:
+                               case TokenType.NEW:
+                                       stmt = parse_expression_statement ();
+                                       break;
+                               default:
+                                       if (is_expression ()) {
+                                               stmt = parse_expression_statement ();
+                                       } else {
+                                               is_decl = true;
+                                               parse_local_variable_declarations (block);
+                                       }
+                                       break;
+                               }
 
-               if (is_expression ()) {
-                       return parse_expression_statement ();
-               } else {
-                       return parse_declaration_statement ();
+                               if (!is_decl) {
+                                       if (stmt == null) {
+                                               // workaround for current limitation of exception handling
+                                               throw new ParseError.SYNTAX ("syntax error in statement");
+                                       }
+                                       block.add_statement (stmt);
+                               }
+                       } catch (ParseError e) {
+                               if (recover () != RecoveryState.STATEMENT_BEGIN) {
+                                       // beginning of next declaration or end of file reached
+                                       // return what we have so far
+                                       break;
+                               }
+                       }
                }
        }
 
@@ -1226,22 +1268,7 @@ public class Vala.Parser : CodeVisitor {
                Gee.List<Statement> list = new ArrayList<Statement> ();
                expect (TokenType.OPEN_BRACE);
                var block = context.create_block (get_src_com (begin));
-               while (current () != TokenType.CLOSE_BRACE) {
-                       try {
-                               var stmt = parse_statement ();
-                               if (stmt == null) {
-                                       // workaround for current limitation of exception handling
-                                       throw new ParseError.SYNTAX ("syntax error in statement");
-                               }
-                               block.add_statement (stmt);
-                       } catch (ParseError e) {
-                               if (recover () != RecoveryState.STATEMENT_BEGIN) {
-                                       // beginning of next declaration or end of file reached
-                                       // return what we have so far
-                                       return block;
-                               }
-                       }
-               }
+               parse_statements (block);
                if (!accept (TokenType.CLOSE_BRACE)) {
                        Report.error (get_current_src (), "expected `}'");
                }
@@ -1255,35 +1282,37 @@ public class Vala.Parser : CodeVisitor {
                return context.create_empty_statement (get_src_com (begin));
        }
 
-       Statement parse_declaration_statement () throws ParseError {
+       void parse_local_variable_declarations (Block block) throws ParseError {
                var begin = get_location ();
-               var decl = parse_local_variable_declaration ();
-               expect (TokenType.SEMICOLON);
-               return context.create_declaration_statement (decl, get_src_com (begin));
-       }
-
-       LocalVariableDeclaration parse_local_variable_declaration () throws ParseError {
-               var begin = get_location ();
-               LocalVariableDeclaration decl;
+               DataType variable_type;
                if (accept (TokenType.VAR)) {
-                       var declarators = parse_variable_declarators ();
-                       decl = context.create_local_variable_declaration_var_type (get_src (begin));
-                       foreach (VariableDeclarator var_decl in declarators) {
-                               decl.add_declarator (var_decl);
-                       }
+                       variable_type = null;
                } else {
-                       var type = parse_type ();
-                       var declarators = parse_variable_declarators ();
-                       if (!((UnresolvedType) type).is_weak) {
-                               type.takes_ownership = true;
+                       variable_type = parse_type ();
+                       var ut = variable_type as UnresolvedType;
+                       if (ut != null && !ut.is_weak) {
+                               variable_type.takes_ownership = true;
                        }
-                       decl = context.create_local_variable_declaration (type, get_src (begin));
-                       foreach (VariableDeclarator var_decl in declarators) {
-                               var_decl.type_reference = type.copy ();
-                               decl.add_declarator (var_decl);
+               }
+               do {
+                       DataType type_copy = null;
+                       if (variable_type != null) {
+                               type_copy = variable_type.copy ();
                        }
+                       var local = parse_local_variable (type_copy);
+                       block.add_statement (context.create_declaration_statement (local, local.source_reference));
+               } while (accept (TokenType.COMMA));
+               expect (TokenType.SEMICOLON);
+       }
+
+       LocalVariable parse_local_variable (DataType? variable_type) throws ParseError {
+               var begin = get_location ();
+               string id = parse_identifier ();
+               Expression initializer = null;
+               if (accept (TokenType.ASSIGN)) {
+                       initializer = parse_variable_initializer ();
                }
-               return decl;
+               return context.create_local_variable (variable_type, id, initializer, get_src_com (begin));
        }
 
        Statement parse_expression_statement () throws ParseError {
@@ -1334,11 +1363,7 @@ public class Vala.Parser : CodeVisitor {
                                }
                                expect (TokenType.COLON);
                        } while (current () == TokenType.CASE || current () == TokenType.DEFAULT);
-                       while (current () != TokenType.CLOSE_BRACE
-                              && current () != TokenType.CASE
-                              && current () != TokenType.DEFAULT) {
-                               section.add_statement (parse_statement ());
-                       }
+                       parse_statements (section);
                        stmt.add_section (section);
                }
                expect (TokenType.CLOSE_BRACE);
@@ -1392,11 +1417,22 @@ public class Vala.Parser : CodeVisitor {
                                do {
                                        initializer_list.add (parse_statement_expression ());
                                } while (accept (TokenType.COMMA));
-                               expect (TokenType.SEMICOLON);
                        } else {
                                block = context.create_block (get_src (begin));
-                               block.add_statement (parse_declaration_statement ());
+                               DataType variable_type;
+                               if (accept (TokenType.VAR)) {
+                                       variable_type = null;
+                               } else {
+                                       variable_type = parse_type ();
+                                       var ut = variable_type as UnresolvedType;
+                                       if (ut != null && !ut.is_weak) {
+                                               variable_type.takes_ownership = true;
+                                       }
+                               }
+                               var local = parse_local_variable (variable_type);
+                               block.add_statement (context.create_declaration_statement (local, local.source_reference));
                        }
+                       expect (TokenType.SEMICOLON);
                }
                Expression condition = null;
                if (current () != TokenType.SEMICOLON) {
@@ -1988,25 +2024,6 @@ public class Vala.Parser : CodeVisitor {
                return f;
        }
 
-       Gee.List<VariableDeclarator> parse_variable_declarators () throws ParseError {
-               var list = new ArrayList<VariableDeclarator> ();
-               do {
-                       var var_decl = parse_variable_declarator ();
-                       list.add (var_decl);
-               } while (accept (TokenType.COMMA));
-               return list;
-       }
-
-       VariableDeclarator parse_variable_declarator () throws ParseError {
-               var begin = get_location ();
-               string id = parse_identifier ();
-               Expression initializer = null;
-               if (accept (TokenType.ASSIGN)) {
-                       initializer = parse_variable_initializer ();
-               }
-               return context.create_variable_declarator (id, initializer, get_src (begin));
-       }
-
        InitializerList parse_initializer () throws ParseError {
                var begin = get_location ();
                expect (TokenType.OPEN_BRACE);
index 6196d2b..c5a199d 100644 (file)
@@ -771,93 +771,93 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
 
                b.accept_children (this);
 
-               foreach (VariableDeclarator decl in b.get_local_variables ()) {
-                       decl.active = false;
+               foreach (LocalVariable local in b.get_local_variables ()) {
+                       local.active = false;
                }
 
                current_symbol = current_symbol.parent_symbol;
        }
 
-       public override void visit_variable_declarator (VariableDeclarator decl) {
-               if (decl.initializer != null) {
-                       decl.initializer.expected_type = decl.type_reference;
+       public override void visit_local_variable (LocalVariable local) {
+               if (local.initializer != null) {
+                       local.initializer.expected_type = local.variable_type;
                }
 
-               decl.accept_children (this);
+               local.accept_children (this);
 
-               if (decl.type_reference == null) {
+               if (local.variable_type == null) {
                        /* var type */
 
-                       if (decl.initializer == null) {
-                               decl.error = true;
-                               Report.error (decl.source_reference, "var declaration not allowed without initializer");
+                       if (local.initializer == null) {
+                               local.error = true;
+                               Report.error (local.source_reference, "var declaration not allowed without initializer");
                                return;
                        }
-                       if (decl.initializer.static_type == null) {
-                               decl.error = true;
-                               Report.error (decl.source_reference, "var declaration not allowed with non-typed initializer");
+                       if (local.initializer.static_type == null) {
+                               local.error = true;
+                               Report.error (local.source_reference, "var declaration not allowed with non-typed initializer");
                                return;
                        }
 
-                       decl.type_reference = decl.initializer.static_type.copy ();
-                       decl.type_reference.takes_ownership = (decl.type_reference.data_type == null || decl.type_reference.data_type.is_reference_type ());
-                       decl.type_reference.transfers_ownership = false;
+                       local.variable_type = local.initializer.static_type.copy ();
+                       local.variable_type.takes_ownership = (local.variable_type.data_type == null || local.variable_type.data_type.is_reference_type ());
+                       local.variable_type.transfers_ownership = false;
                }
 
-               if (decl.initializer != null) {
-                       if (decl.initializer.static_type == null) {
-                               if (!(decl.initializer is MemberAccess) && !(decl.initializer is LambdaExpression)) {
-                                       decl.error = true;
-                                       Report.error (decl.source_reference, "expression type not allowed as initializer");
+               if (local.initializer != null) {
+                       if (local.initializer.static_type == null) {
+                               if (!(local.initializer is MemberAccess) && !(local.initializer is LambdaExpression)) {
+                                       local.error = true;
+                                       Report.error (local.source_reference, "expression type not allowed as initializer");
                                        return;
                                }
 
-                               if (decl.initializer.symbol_reference is Method &&
-                                   decl.type_reference is DelegateType) {
-                                       var m = (Method) decl.initializer.symbol_reference;
-                                       var dt = (DelegateType) decl.type_reference;
+                               if (local.initializer.symbol_reference is Method &&
+                                   local.variable_type is DelegateType) {
+                                       var m = (Method) local.initializer.symbol_reference;
+                                       var dt = (DelegateType) local.variable_type;
                                        var cb = dt.delegate_symbol;
 
                                        /* check whether method matches callback type */
                                        if (!cb.matches_method (m)) {
-                                               decl.error = true;
-                                               Report.error (decl.source_reference, "declaration of method `%s' doesn't match declaration of callback `%s'".printf (m.get_full_name (), cb.get_full_name ()));
+                                               local.error = true;
+                                               Report.error (local.source_reference, "declaration of method `%s' doesn't match declaration of callback `%s'".printf (m.get_full_name (), cb.get_full_name ()));
                                                return;
                                        }
 
-                                       decl.initializer.static_type = decl.type_reference;
+                                       local.initializer.static_type = local.variable_type;
                                } else {
-                                       decl.error = true;
-                                       Report.error (decl.source_reference, "expression type not allowed as initializer");
+                                       local.error = true;
+                                       Report.error (local.source_reference, "expression type not allowed as initializer");
                                        return;
                                }
                        }
 
-                       if (!decl.initializer.static_type.compatible (decl.type_reference)) {
-                               decl.error = true;
-                               Report.error (decl.source_reference, "Assignment: Cannot convert from `%s' to `%s'".printf (decl.initializer.static_type.to_string (), decl.type_reference.to_string ()));
+                       if (!local.initializer.static_type.compatible (local.variable_type)) {
+                               local.error = true;
+                               Report.error (local.source_reference, "Assignment: Cannot convert from `%s' to `%s'".printf (local.initializer.static_type.to_string (), local.variable_type.to_string ()));
                                return;
                        }
 
-                       if (decl.initializer.static_type.transfers_ownership) {
+                       if (local.initializer.static_type.transfers_ownership) {
                                /* rhs transfers ownership of the expression */
-                               if (!(decl.type_reference is PointerType) && !decl.type_reference.takes_ownership) {
+                               if (!(local.variable_type is PointerType) && !local.variable_type.takes_ownership) {
                                        /* lhs doesn't own the value */
-                                       decl.error = true;
-                                       Report.error (decl.source_reference, "Invalid assignment from owned expression to unowned variable");
+                                       local.error = true;
+                                       Report.error (local.source_reference, "Invalid assignment from owned expression to unowned variable");
                                        return;
                                }
                        }
                }
 
-               current_source_file.add_type_dependency (decl.type_reference, SourceFileDependencyType.SOURCE);
+               current_source_file.add_type_dependency (local.variable_type, SourceFileDependencyType.SOURCE);
 
-               current_symbol.scope.add (decl.name, decl);
+               current_symbol.scope.add (local.name, local);
 
                var block = (Block) current_symbol;
-               block.add_local_variable (decl);
+               block.add_local_variable (local);
 
-               decl.active = true;
+               local.active = true;
        }
 
        /**
@@ -968,8 +968,8 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                        st.accept (this);
                }
 
-               foreach (VariableDeclarator decl in section.get_local_variables ()) {
-                       decl.active = false;
+               foreach (LocalVariable local in section.get_local_variables ()) {
+                       local.active = false;
                }
 
                current_symbol = current_symbol.parent_symbol;
@@ -1026,21 +1026,20 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
        public override void visit_foreach_statement (ForeachStatement stmt) {
                current_source_file.add_type_dependency (stmt.type_reference, SourceFileDependencyType.SOURCE);
 
-               stmt.variable_declarator = new VariableDeclarator (stmt.variable_name);
-               stmt.variable_declarator.type_reference = stmt.type_reference;
+               stmt.element_variable = new LocalVariable (stmt.type_reference, stmt.variable_name);
 
-               stmt.body.scope.add (stmt.variable_name, stmt.variable_declarator);
+               stmt.body.scope.add (stmt.variable_name, stmt.element_variable);
 
-               stmt.body.add_local_variable (stmt.variable_declarator);
-               stmt.variable_declarator.active = true;
+               stmt.body.add_local_variable (stmt.element_variable);
+               stmt.element_variable.active = true;
 
                stmt.owner = current_symbol.scope;
                current_symbol = stmt;
 
                stmt.accept_children (this);
 
-               foreach (VariableDeclarator decl in stmt.get_local_variables ()) {
-                       decl.active = false;
+               foreach (LocalVariable local in stmt.get_local_variables ()) {
+                       local.active = false;
                }
 
                current_symbol = current_symbol.parent_symbol;
@@ -1055,15 +1054,14 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                        return;
                }
 
-               stmt.collection_variable_declarator = new VariableDeclarator ("%s_collection".printf (stmt.variable_name));
-               stmt.collection_variable_declarator.type_reference = stmt.collection.static_type.copy ();
-               stmt.collection_variable_declarator.type_reference.transfers_ownership = false;
-               stmt.collection_variable_declarator.type_reference.takes_ownership = stmt.collection.static_type.transfers_ownership;
+               var collection_type = stmt.collection.static_type.copy ();
+               collection_type.transfers_ownership = false;
+               collection_type.takes_ownership = stmt.collection.static_type.transfers_ownership;
+               stmt.collection_variable = new LocalVariable (collection_type, "%s_collection".printf (stmt.variable_name));
 
-               stmt.add_local_variable (stmt.collection_variable_declarator);
-               stmt.collection_variable_declarator.active = true;
+               stmt.add_local_variable (stmt.collection_variable);
+               stmt.collection_variable.active = true;
        
-               var collection_type = stmt.collection.static_type;
                DataType element_data_type = null;
                bool need_type_check = false;
        
@@ -1077,13 +1075,13 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                                need_type_check = true;
                        }
                } else if (iterable_type != null && collection_type.compatible (iterable_type)) {
-                       stmt.iterator_variable_declarator = new VariableDeclarator ("%s_it".printf (stmt.variable_name));
-                       stmt.iterator_variable_declarator.type_reference = new InterfaceType (iterator_type);
-                       stmt.iterator_variable_declarator.type_reference.takes_ownership = true;
-                       stmt.iterator_variable_declarator.type_reference.add_type_argument (stmt.type_reference);
+                       var foreach_iterator_type = new InterfaceType (iterator_type);
+                       foreach_iterator_type.takes_ownership = true;
+                       foreach_iterator_type.add_type_argument (stmt.type_reference);
+                       stmt.iterator_variable = new LocalVariable (foreach_iterator_type, "%s_it".printf (stmt.variable_name));
 
-                       stmt.add_local_variable (stmt.iterator_variable_declarator);
-                       stmt.iterator_variable_declarator.active = true;
+                       stmt.add_local_variable (stmt.iterator_variable);
+                       stmt.iterator_variable.active = true;
 
                        var it_method = (Method) iterable_type.data_type.scope.lookup ("iterator");
                        if (it_method.return_type.get_type_arguments ().size > 0) {
@@ -1154,7 +1152,7 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                }
 
                if (stmt.return_expression != null &&
-                   stmt.return_expression.symbol_reference is VariableDeclarator &&
+                   stmt.return_expression.symbol_reference is LocalVariable &&
                    stmt.return_expression.static_type.takes_ownership &&
                    !current_return_type.transfers_ownership) {
                        Report.warning (stmt.source_reference, "Local variable with strong reference used as return value and method return type hasn't been declared to transfer ownership");
@@ -1175,15 +1173,14 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
        }
 
        public override void visit_catch_clause (CatchClause clause) {
-               if (clause.type_reference != null) {
-                       current_source_file.add_type_dependency (clause.type_reference, SourceFileDependencyType.SOURCE);
+               if (clause.error_type != null) {
+                       current_source_file.add_type_dependency (clause.error_type, SourceFileDependencyType.SOURCE);
 
-                       clause.variable_declarator = new VariableDeclarator (clause.variable_name);
-                       clause.variable_declarator.type_reference = clause.type_reference.copy ();
+                       clause.error_variable = new LocalVariable (clause.error_type.copy (), clause.variable_name);
 
-                       clause.body.scope.add (clause.variable_name, clause.variable_declarator);
+                       clause.body.scope.add (clause.variable_name, clause.error_variable);
                } else {
-                       clause.type_reference = new ErrorType (null, clause.source_reference);
+                       clause.error_type = new ErrorType (null, clause.source_reference);
                }
 
                clause.accept_children (this);
@@ -1387,9 +1384,9 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                        return type;
                } else if (sym is DataType) {
                        return (DataType) sym;
-               } else if (sym is VariableDeclarator) {
-                       var decl = (VariableDeclarator) sym;
-                       return decl.type_reference;
+               } else if (sym is LocalVariable) {
+                       var local = (LocalVariable) sym;
+                       return local.variable_type;
                } else if (sym is EnumValue) {
                        return new ValueType ((Typesymbol) sym.parent_symbol);
                } else if (sym is Method) {
@@ -2453,7 +2450,7 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                        parenthexp.accept (this);
                        return;
                } else if (expr.operator == UnaryOperator.REF || expr.operator == UnaryOperator.OUT) {
-                       if (expr.inner.symbol_reference is Field || expr.inner.symbol_reference is FormalParameter || expr.inner.symbol_reference is VariableDeclarator) {
+                       if (expr.inner.symbol_reference is Field || expr.inner.symbol_reference is FormalParameter || expr.inner.symbol_reference is LocalVariable) {
                                // ref and out can only be used with fields, parameters, and local variables
                                expr.static_type = expr.inner.static_type;
                        } else {
@@ -2965,23 +2962,23 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                                        Report.error (ma.source_reference, "Property `%s' is read-only".printf (prop.get_full_name ()));
                                        return;
                                }
-                       } else if (ma.symbol_reference is VariableDeclarator && a.right.static_type == null) {
-                               var decl = (VariableDeclarator) ma.symbol_reference;
+                       } else if (ma.symbol_reference is LocalVariable && a.right.static_type == null) {
+                               var local = (LocalVariable) ma.symbol_reference;
 
                                if (a.right.symbol_reference is Method &&
-                                   decl.type_reference is DelegateType) {
+                                   local.variable_type is DelegateType) {
                                        var m = (Method) a.right.symbol_reference;
-                                       var dt = (DelegateType) decl.type_reference;
+                                       var dt = (DelegateType) local.variable_type;
                                        var cb = dt.delegate_symbol;
 
                                        /* check whether method matches callback type */
                                        if (!cb.matches_method (m)) {
-                                               decl.error = true;
+                                               a.error = true;
                                                Report.error (a.source_reference, "declaration of method `%s' doesn't match declaration of callback `%s'".printf (m.get_full_name (), cb.get_full_name ()));
                                                return;
                                        }
 
-                                       a.right.static_type = decl.type_reference;
+                                       a.right.static_type = local.variable_type;
                                } else {
                                        a.error = true;
                                        Report.error (a.source_reference, "Assignment: Invalid callback assignment attempt");
index 4692058..9a6cad9 100644 (file)
@@ -120,8 +120,7 @@ public class Vala.Struct : Typesymbol {
                        m.scope.add (m.this_parameter.name, m.this_parameter);
                }
                if (!(m.return_type is VoidType) && m.get_postconditions ().size > 0) {
-                       m.result_var = new VariableDeclarator ("result");
-                       m.result_var.type_reference = m.return_type.copy ();
+                       m.result_var = new LocalVariable (m.return_type.copy (), "result");
                        m.scope.add (m.result_var.name, m.result_var);
                }
                if (m is CreationMethod) {
index 6ea08b4..970369f 100644 (file)
@@ -1,6 +1,6 @@
 /* valaswitchsection.vala
  *
- * Copyright (C) 2006-2007  Jürg Billeter
+ * Copyright (C) 2006-2008  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
@@ -28,7 +28,6 @@ using Gee;
  */
 public class Vala.SwitchSection : Block {
        private Gee.List<SwitchLabel> labels = new ArrayList<SwitchLabel> ();
-       private Gee.List<Statement> statement_list = new ArrayList<Statement> ();
 
        /**
         * Creates a new switch section.
@@ -68,24 +67,6 @@ public class Vala.SwitchSection : Block {
                return false;
        }
        
-       /**
-        * Appends the specified statement to this switch section.
-        *
-        * @param stmt a statement
-        */
-       public void add_statement (Statement stmt) {
-               statement_list.add (stmt);
-       }
-       
-       /**
-        * Returns a copy of the list of statements.
-        *
-        * @return statement list
-        */
-       public Collection<Statement> get_statements () {
-               return new ReadOnlyCollection<Statement> (statement_list);
-       }
-       
        public override void accept (CodeVisitor visitor) {
                visitor.visit_switch_section (this);
        }
@@ -95,7 +76,7 @@ public class Vala.SwitchSection : Block {
                        label.accept (visitor);
                }
 
-               foreach (Statement st in statement_list) {
+               foreach (Statement st in get_statements ()) {
                        st.accept (visitor);
                }
        }
index 69c4c0b..db86996 100644 (file)
@@ -317,10 +317,10 @@ public class Vala.SymbolResolver : CodeVisitor {
                unresolved_type.parent_node.replace_type (unresolved_type, resolve_type (unresolved_type));
        }
 
-       public override void visit_variable_declarator (VariableDeclarator decl) {
-               decl.accept_children (this);
-               if (decl.type_reference is ReferenceType) {
-                       decl.type_reference.nullable = true;
+       public override void visit_local_variable (LocalVariable local) {
+               local.accept_children (this);
+               if (local.variable_type is ReferenceType) {
+                       local.variable_type.nullable = true;
                }
        }