summaryrefslogtreecommitdiff
path: root/vala/valaconditionalexpression.vala
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2008-11-29 17:25:51 +0000
committerJürg Billeter <juergbi@src.gnome.org>2008-11-29 17:25:51 +0000
commit9c112c985e1edafa2602416962702f185a5583a0 (patch)
tree00a87c40a46d3f07cf15797250d396d965d8006d /vala/valaconditionalexpression.vala
parent44a1c2f3196261abbc0930f84df21fc877afd266 (diff)
downloadvala-9c112c985e1edafa2602416962702f185a5583a0.tar.gz
Convert binary conditional expressions into if statements
2008-11-29 Jürg Billeter <j@bitron.ch> * vala/valaaddressofexpression.vala: * vala/valaarraycreationexpression.vala: * vala/valaassignment.vala: * vala/valabaseaccess.vala: * vala/valabinaryexpression.vala: * vala/valacastexpression.vala: * vala/valaconditionalexpression.vala: * vala/valadostatement.vala: * vala/valaelementaccess.vala: * vala/valaexpression.vala: * vala/valaforstatement.vala: * vala/valainitializerlist.vala: * vala/valalambdaexpression.vala: * vala/valaliteral.vala: * vala/valamemberaccess.vala: * vala/valamethodcall.vala: * vala/valaobjectcreationexpression.vala: * vala/valaparenthesizedexpression.vala: * vala/valapointerindirection.vala: * vala/valapostfixexpression.vala: * vala/valareferencetransferexpression.vala: * vala/valasizeofexpression.vala: * vala/valatuple.vala: * vala/valatypecheck.vala: * vala/valatypeofexpression.vala: * vala/valaunaryexpression.vala: * vala/valawhilestatement.vala: Convert binary conditional expressions into if statements svn path=/trunk/; revision=2085
Diffstat (limited to 'vala/valaconditionalexpression.vala')
-rw-r--r--vala/valaconditionalexpression.vala17
1 files changed, 12 insertions, 5 deletions
diff --git a/vala/valaconditionalexpression.vala b/vala/valaconditionalexpression.vala
index f53cd1a15..ff798a6a0 100644
--- a/vala/valaconditionalexpression.vala
+++ b/vala/valaconditionalexpression.vala
@@ -113,6 +113,9 @@ public class Vala.ConditionalExpression : Expression {
true_expression.target_type = target_type;
false_expression.target_type = target_type;
+ var local = new LocalVariable (null, temp_name, null, source_reference);
+ var decl = new DeclarationStatement (local, source_reference);
+
var true_local = new LocalVariable (null, temp_name, true_expression, true_expression.source_reference);
var true_block = new Block (true_expression.source_reference);
var true_decl = new DeclarationStatement (true_local, true_expression.source_reference);
@@ -124,6 +127,10 @@ public class Vala.ConditionalExpression : Expression {
false_block.add_statement (false_decl);
var if_stmt = new IfStatement (condition, true_block, false_block, source_reference);
+
+ insert_statement ((Block) analyzer.current_symbol, decl);
+ insert_statement ((Block) analyzer.current_symbol, if_stmt);
+
if (!if_stmt.check (analyzer)) {
return false;
}
@@ -146,8 +153,7 @@ public class Vala.ConditionalExpression : Expression {
value_type.value_owned = (true_expression.value_type.value_owned || false_expression.value_type.value_owned);
- var local = new LocalVariable (value_type, temp_name, null, source_reference);
- var decl = new DeclarationStatement (local, source_reference);
+ local.variable_type = value_type;
decl.check (analyzer);
true_expression.target_type = value_type;
@@ -162,9 +168,6 @@ public class Vala.ConditionalExpression : Expression {
true_block.replace_statement (true_decl, true_stmt);
false_block.replace_statement (false_decl, false_stmt);
- insert_statement ((Block) analyzer.current_symbol, decl);
- insert_statement ((Block) analyzer.current_symbol, if_stmt);
-
var ma = new MemberAccess.simple (local.name, source_reference);
ma.target_type = target_type;
ma.check (analyzer);
@@ -173,4 +176,8 @@ public class Vala.ConditionalExpression : Expression {
return true;
}
+
+ public override bool in_single_basic_block () {
+ return false;
+ }
}