[vala/wip/baedert/nullable: 25/25] WIP
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/wip/baedert/nullable: 25/25] WIP
- Date: Tue, 8 Nov 2016 21:20:09 +0000 (UTC)
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]