[vala/wip/transform: 44/48] Use builder for the while statements
- From: Luca Bruno <lucabru src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/wip/transform: 44/48] Use builder for the while statements
- Date: Wed, 11 Apr 2012 16:52:28 +0000 (UTC)
commit 9d1874c76c2533311066a7b3e5183fbd1487d927
Author: Luca Bruno <lucabru src gnome org>
Date: Thu Jan 5 20:41:10 2012 +0100
Use builder for the while statements
codegen/valaccodetransformer.vala | 32 ++++++++++++++----------------
codegen/valagdbusclienttransformer.vala | 1 -
codegen/valagvariantmodule.vala | 21 --------------------
vala/valacodebuilder.vala | 10 +++++++++
4 files changed, 25 insertions(+), 39 deletions(-)
---
diff --git a/codegen/valaccodetransformer.vala b/codegen/valaccodetransformer.vala
index 56373ea..195e954 100644
--- a/codegen/valaccodetransformer.vala
+++ b/codegen/valaccodetransformer.vala
@@ -156,28 +156,26 @@ public class Vala.CCodeTransformer : CodeTransformer {
public override void visit_while_statement (WhileStatement stmt) {
// convert to simple loop
+ push_builder (new CodeBuilder (context, stmt, stmt.source_reference));
- if (always_true (stmt.condition)) {
- // do not generate if block if condition is always true
- } else if (always_false (stmt.condition)) {
- // do not generate if block if condition is always false
- stmt.body.insert_statement (0, new BreakStatement (stmt.condition.source_reference));
- } else {
- var if_condition = new UnaryExpression (UnaryOperator.LOGICAL_NEGATION, stmt.condition, stmt.condition.source_reference);
- var true_block = new Block (stmt.condition.source_reference);
- true_block.add_statement (new BreakStatement (stmt.condition.source_reference));
- var if_stmt = new IfStatement (if_condition, true_block, null, stmt.condition.source_reference);
- stmt.body.insert_statement (0, if_stmt);
+ if (!always_false (stmt.condition)) {
+ b.open_loop ();
+ if (!always_true (stmt.condition)) {
+ b.open_if (new UnaryExpression (UnaryOperator.LOGICAL_NEGATION, stmt.condition, stmt.condition.source_reference));
+ b.add_break ();
+ b.close ();
+ b.add_statement (stmt.body);
+ }
+ b.close ();
}
- var loop = new Loop (stmt.body, stmt.source_reference);
-
- var parent_block = (Block) stmt.parent_node;
+ var parent_block = context.analyzer.get_current_block (stmt);
context.analyzer.replaced_nodes.add (stmt);
- parent_block.replace_statement (stmt, loop);
+ parent_block.replace_statement (stmt, new EmptyStatement (stmt.source_reference));
stmt.body.checked = false;
- check (loop);
+ b.check (this);
+ pop_builder ();
}
public override void visit_do_statement (DoStatement stmt) {
diff --git a/codegen/valagdbusclienttransformer.vala b/codegen/valagdbusclienttransformer.vala
index f981e27..6f383a3 100644
--- a/codegen/valagdbusclienttransformer.vala
+++ b/codegen/valagdbusclienttransformer.vala
@@ -102,7 +102,6 @@ public class Vala.GDBusClientTransformer : GVariantTransformer {
string fd_list = null;
foreach (var param in m.get_parameters ()) {
if (param.direction == ParameterDirection.IN) {
- string? type_name = null;
if (param.variable_type is ObjectType && param.variable_type.data_type.get_full_name () == "GLib.Cancellable") {
cancellable = param.name;
}
diff --git a/codegen/valagvariantmodule.vala b/codegen/valagvariantmodule.vala
index 1617be8..5cdd728 100644
--- a/codegen/valagvariantmodule.vala
+++ b/codegen/valagvariantmodule.vala
@@ -21,27 +21,6 @@
*/
public class Vala.GVariantModule : GAsyncModule {
- struct BasicTypeInfo {
- public unowned string signature;
- public unowned string type_name;
- public bool is_string;
- }
-
- const BasicTypeInfo[] basic_types = {
- { "y", "byte", false },
- { "b", "boolean", false },
- { "n", "int16", false },
- { "q", "uint16", false },
- { "i", "int32", false },
- { "u", "uint32", false },
- { "x", "int64", false },
- { "t", "uint64", false },
- { "d", "double", false },
- { "s", "string", true },
- { "o", "object_path", true },
- { "g", "signature", true }
- };
-
static bool is_string_marshalled_enum (TypeSymbol? symbol) {
if (symbol != null && symbol is Enum) {
return symbol.get_attribute_bool ("DBus", "use_string_marshalling");
diff --git a/vala/valacodebuilder.vala b/vala/valacodebuilder.vala
index 300c69f..1b8bcdf 100644
--- a/vala/valacodebuilder.vala
+++ b/vala/valacodebuilder.vala
@@ -97,6 +97,16 @@ public class Vala.CodeBuilder {
statement_stack.add (stmt);
}
+ public void open_loop () {
+ statement_stack.add (current_block);
+ var parent_block = current_block;
+
+ current_block = new Block (source_reference);
+
+ var stmt = new Loop (current_block, source_reference);
+ parent_block.add_statement (stmt);
+ }
+
public void open_while (Expression condition) {
statement_stack.add (current_block);
var parent_block = current_block;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]