[vala/wip/baedert/nullable: 25/25] WIP



commit 7e6baf065b98d31b9e7fd081c97582457541e1c8
Author: Timm Bäder <mail baedert org>
Date:   Tue Nov 8 22:10:34 2016 +0100

    WIP

 configure.ac                       |    2 +-
 vala/Makefile.am                   |    1 +
 vala/valaassignment.vala           |   14 ++++++++------
 vala/valablock.vala                |   28 +++++++++++++++++++++++++---
 vala/valadeclarationstatement.vala |   27 ++++++++++++++++++++++++++-
 5 files changed, 61 insertions(+), 11 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 540d4a2..a48a1ff 100644
--- a/configure.ac
+++ b/configure.ac
@@ -49,7 +49,7 @@ AS_IF([test "$VALAC" != valac], [FOUND_VALAC_VERION=`$VALAC --version | sed 's/V
        AS_VERSION_COMPARE(["$VALAC_BOOTSTRAP_REQUIRED"], ["$FOUND_VALAC_VERION"],
                [enable_boostrap=yes], [enable_boostrap=yes], [enable_boostrap=no])])
 
-VALAFLAGS="$VALAFLAGS --disable-version-header"
+VALAFLAGS="$VALAFLAGS --disable-version-header -g"
 if test x$enable_boostrap = xyes; then
        VALAFLAGS="$VALAFLAGS --hide-internal"
 fi
diff --git a/vala/Makefile.am b/vala/Makefile.am
index 8b13a2f..11399ae 100644
--- a/vala/Makefile.am
+++ b/vala/Makefile.am
@@ -8,6 +8,7 @@ AM_CPPFLAGS = \
        $(GLIB_CFLAGS) \
        $(GMODULE_CFLAGS) \
        -DPACKAGE_DATADIR=\"$(pkgdatadir)\" \
+       -g \
        $(NULL)
 
 BUILT_SOURCES = vala.vala.stamp
diff --git a/vala/valaassignment.vala b/vala/valaassignment.vala
index 88e45ff..cd674f2 100644
--- a/vala/valaassignment.vala
+++ b/vala/valaassignment.vala
@@ -37,12 +37,12 @@ public class Vala.Assignment : Expression {
                        _left.parent_node = this;
                }
        }
-       
+
        /**
         * Assignment operator.
         */
        public AssignmentOperator operator { get; set; }
-       
+
        /**
         * Right hand side of the assignment.
         */
@@ -53,10 +53,10 @@ public class Vala.Assignment : Expression {
                        _right.parent_node = this;
                }
        }
-       
+
        private Expression _left;
        private Expression _right;
-       
+
        /**
         * Creates a new assignment.
         *
@@ -72,7 +72,7 @@ public class Vala.Assignment : Expression {
                this.source_reference = source_reference;
                this.left = left;
        }
-       
+
        public override void accept (CodeVisitor visitor) {
                visitor.visit_assignment (this);
 
@@ -220,6 +220,8 @@ public class Vala.Assignment : Expression {
                        return false;
                }
 
+               //message ("Right: %p", right);
+               //message ("Checking right: %s, %s", right.type_name, right.to_string ());
                if (!right.check (context)) {
                        // skip on error in inner expression
                        error = true;
@@ -572,7 +574,7 @@ public class Vala.Assignment : Expression {
                right.get_used_variables (collection);
        }
 }
-       
+
 public enum Vala.AssignmentOperator {
        NONE,
        SIMPLE,
diff --git a/vala/valablock.vala b/vala/valablock.vala
index 4064b6e..a096307 100644
--- a/vala/valablock.vala
+++ b/vala/valablock.vala
@@ -37,7 +37,7 @@ public class Vala.Block : Symbol, Statement {
        private List<Statement> statement_list = new ArrayList<Statement> ();
        private List<LocalVariable> local_variables = new ArrayList<LocalVariable> ();
        private List<Constant> local_constants = new ArrayList<Constant> ();
-       
+
        /**
         * Creates a new block.
         *
@@ -46,7 +46,7 @@ public class Vala.Block : Symbol, Statement {
        public Block (SourceReference? source_reference) {
                base (null, source_reference);
        }
-       
+
        /**
         * Append a statement to this block.
         *
@@ -81,7 +81,7 @@ public class Vala.Block : Symbol, Statement {
                }
                return list;
        }
-       
+
        /**
         * Add a local variable to this block.
         *
@@ -197,6 +197,28 @@ public class Vala.Block : Symbol, Statement {
                }
        }
 
+
+       public void insert_after (Statement stmt, Statement new_stmt) {
+               for (int i = 0; i < statement_list.size; i++) {
+                       var stmt_list = statement_list[i] as StatementList;
+                       if (stmt_list != null) {
+                               for (int j = 0; j < stmt_list.length; j++) {
+                                       if (stmt_list.get (j) == stmt) {
+                                               stmt_list.insert (j + 1, new_stmt);
+                                               new_stmt.parent_node = this;
+                                               break;
+                                       }
+                               }
+                       } else if (statement_list[i] == stmt) {
+                               stmt_list = new StatementList (source_reference);
+                               stmt_list.add (stmt);
+                               stmt_list.add (new_stmt);
+                               statement_list[i] = stmt_list;
+                               new_stmt.parent_node = this;
+                       }
+               }
+       }
+
        public void replace_statement (Statement old_stmt, Statement new_stmt) {
                for (int i = 0; i < statement_list.size; i++) {
                        var stmt_list = statement_list[i] as StatementList;
diff --git a/vala/valadeclarationstatement.vala b/vala/valadeclarationstatement.vala
index f0a3d41..2b9dc9e 100644
--- a/vala/valadeclarationstatement.vala
+++ b/vala/valadeclarationstatement.vala
@@ -69,10 +69,35 @@ public class Vala.DeclarationStatement : CodeNode, Statement {
 
                checked = true;
 
-               declaration.check (context);
 
                var local = declaration as LocalVariable;
                if (local != null && local.initializer != null) {
+                       var block = this.parent_node as Block;
+                       //var block = context.analyzer.current_symbol as Block;
+                       if (block != null) {
+                               var init = local.initializer;
+                               message ("Init: %s, %s", init.type_name, init.to_string ());
+                               local.initializer = null;
+                               var left = new MemberAccess.simple (local.name, local.source_reference);
+                               var assign = new Assignment (left, init, AssignmentOperator.SIMPLE, 
local.source_reference);
+                               var stmt = new ExpressionStatement (assign);
+                               //block.add_statement (stmt);
+                               //block.insert_statement (0, stmt);
+                               block.insert_after (this, stmt);
+
+                               if (!stmt.check (context)) {
+                                       error = true;
+                                       return false;
+                               }
+
+                       } else {
+                               message ("Parent type: %s", this.parent_node.type_name);
+                       }
+               }
+
+               declaration.check (context);
+
+               if (local != null && local.initializer != null) {
                        foreach (DataType error_type in local.initializer.get_error_types ()) {
                                // ensure we can trace back which expression may throw errors of this type
                                var initializer_error_type = error_type.copy ();


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]