diff options
author | Jürg Billeter <j@bitron.ch> | 2008-11-29 17:25:51 +0000 |
---|---|---|
committer | Jürg Billeter <juergbi@src.gnome.org> | 2008-11-29 17:25:51 +0000 |
commit | 9c112c985e1edafa2602416962702f185a5583a0 (patch) | |
tree | 00a87c40a46d3f07cf15797250d396d965d8006d /vala/valaconditionalexpression.vala | |
parent | 44a1c2f3196261abbc0930f84df21fc877afd266 (diff) | |
download | vala-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.vala | 17 |
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; + } } |