From: Luca Bruno Date: Wed, 4 Jan 2012 14:25:04 +0000 (+0100) Subject: Drop build_context from CodeBuilder X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=18e1b551a4f8ca41230c8683e575a580ab24a57b;p=thirdparty%2Fvala.git Drop build_context from CodeBuilder --- diff --git a/codegen/valagdbusclienttransformer.vala b/codegen/valagdbusclienttransformer.vala index 79f40ccda..6a9589c49 100644 --- a/codegen/valagdbusclienttransformer.vala +++ b/codegen/valagdbusclienttransformer.vala @@ -188,7 +188,7 @@ public class Vala.GDBusClientTransformer : GVariantTransformer { m.access = SymbolAccessibility.PRIVATE; m.add_parameter (new Parameter ("parameters", data_type ("GLib.Variant", false), sig.source_reference)); proxy_class.add_method (m); - b.push_method (m); + push_builder (new CodeBuilder.for_subroutine (m)); var iter = b.add_temp_declaration (null, expression ("parameters.iterator ()")); var call = new MethodCall (expression (sig.name), sig.source_reference); @@ -203,7 +203,7 @@ public class Vala.GDBusClientTransformer : GVariantTransformer { } b.add_expression (call); - b.pop_method (); + pop_builder (); return m.name; } diff --git a/codegen/valagdbusservertransformer.vala b/codegen/valagdbusservertransformer.vala index 747c6c160..f36af342d 100644 --- a/codegen/valagdbusservertransformer.vala +++ b/codegen/valagdbusservertransformer.vala @@ -43,7 +43,7 @@ public class Vala.GDBusServerTransformer : GDBusClientTransformer { wrapper.add_parameter (new Parameter ("object", object_type)); wrapper.add_parameter (new Parameter ("arguments", data_type ("GLib.Variant", false))); wrapper.add_parameter (new Parameter ("invocation", data_type ("GLib.DBusMethodInvocation", false))); - b.push_method (wrapper); + push_builder (new CodeBuilder.for_subroutine (wrapper)); var iter = b.add_temp_declaration (null, expression ("arguments.iterator ()")); @@ -136,7 +136,7 @@ public class Vala.GDBusServerTransformer : GDBusClientTransformer { check (ready); } - b.pop_method (); + pop_builder (); check (wrapper); return wrapper.name; } diff --git a/codegen/valagvarianttransformer.vala b/codegen/valagvarianttransformer.vala index e88dd05e2..72c7b8a6a 100644 --- a/codegen/valagvarianttransformer.vala +++ b/codegen/valagvarianttransformer.vala @@ -149,7 +149,7 @@ public class Vala.GVariantTransformer : CodeTransformer { Method m; if (!wrapper_method (data_type ("GLib.Variant"), "gvariant_serialize_array "+array_type.to_string(), out m)) { m.add_parameter (new Parameter ("array", copy_type (array_type, false), b.source_reference)); - b.push_method (m); + push_builder (new CodeBuilder.for_subroutine (m)); string[] indices = new string[array_type.rank]; for (int dim=1; dim <= array_type.rank; dim++) { @@ -157,7 +157,7 @@ public class Vala.GVariantTransformer : CodeTransformer { } b.add_return (serialize_array_dim (array_type, 1, indices, "array")); - b.pop_method (); + pop_builder (); check (m); } var call = (MethodCall) expression (m.name+"()"); @@ -217,7 +217,7 @@ public class Vala.GVariantTransformer : CodeTransformer { var type = context.analyzer.get_data_type_for_symbol (st); if (!wrapper_method (data_type ("GLib.Variant"), "gvariant_serialize_struct "+type.to_string(), out m)) { m.add_parameter (new Parameter ("st", type, b.source_reference)); - b.push_method (m); + push_builder (new CodeBuilder.for_subroutine (m)); var builderinit = expression ("new GLib.VariantBuilder (GLib.VariantType.TUPLE)"); var builder = b.add_temp_declaration (null, builderinit); @@ -231,7 +231,7 @@ public class Vala.GVariantTransformer : CodeTransformer { } b.add_return (expression (@"$builder.end ()")); - b.pop_method (); + pop_builder (); check (m); } @@ -244,7 +244,7 @@ public class Vala.GVariantTransformer : CodeTransformer { Method m; if (!wrapper_method (data_type ("GLib.Variant"), "gvariant_serialize_hash_table "+type.to_string(), out m)) { m.add_parameter (new Parameter ("ht", copy_type (type, false), b.source_reference)); - b.push_method (m); + push_builder (new CodeBuilder.for_subroutine (m)); var builderinit = expression (@"new GLib.VariantBuilder (new GLib.VariantType (\"$(get_type_signature (type))\"))"); var builder = b.add_temp_declaration (null, builderinit); @@ -253,7 +253,7 @@ public class Vala.GVariantTransformer : CodeTransformer { b.add_expression (for_each); b.add_return (expression (@"$builder.end ()")); - b.pop_method (); + pop_builder (); check (m); } var call = (MethodCall) expression (m.name+"()"); @@ -275,7 +275,7 @@ public class Vala.GVariantTransformer : CodeTransformer { Method m; if (!wrapper_method (copy_type (array_type, true), "gvariant_deserialize_array "+array_type.to_string(), out m)) { m.add_parameter (new Parameter ("variant", data_type ("GLib.Variant", false), b.source_reference)); - b.push_method (m); + push_builder (new CodeBuilder.for_subroutine (m)); var iterator = b.add_temp_declaration (data_type ("GLib.VariantIter"), expression ("variant.iterator ()")); @@ -296,7 +296,7 @@ public class Vala.GVariantTransformer : CodeTransformer { deserialize_array_dim (array_type, "variant", indices, 1, array); b.add_return (expression (array)); - b.pop_method (); + pop_builder (); check (m); } var call = (MethodCall) expression (m.name+"()"); @@ -340,7 +340,7 @@ public class Vala.GVariantTransformer : CodeTransformer { type.value_owned = true; if (!wrapper_method (type, "gvariant_deserialize_struct "+type.to_string(), out m)) { m.add_parameter (new Parameter ("variant", data_type ("GLib.Variant", false), b.source_reference)); - b.push_method (m); + push_builder (new CodeBuilder.for_subroutine (m)); var iterator = b.add_temp_declaration (data_type ("GLib.VariantIter"), expression (@"variant.iterator ()")); @@ -354,7 +354,7 @@ public class Vala.GVariantTransformer : CodeTransformer { b.add_assignment (expression (@"$result.$(f.name)"), expression (@"($(f.variable_type)) ($iterator.next_value ())")); } b.add_return (expression (result)); - b.pop_method (); + pop_builder (); check (m); } var call = (MethodCall) expression (m.name+"()"); @@ -366,7 +366,7 @@ public class Vala.GVariantTransformer : CodeTransformer { Method m; if (!wrapper_method (copy_type (type, true), "gvariant_deserialize_hash_table "+type.to_string(), out m)) { m.add_parameter (new Parameter ("variant", data_type ("GLib.Variant", false), b.source_reference)); - b.push_method (m); + push_builder (new CodeBuilder.for_subroutine (m)); var iterator = b.add_temp_declaration (data_type ("GLib.VariantIter"), expression (@"variant.iterator ()")); @@ -390,7 +390,7 @@ public class Vala.GVariantTransformer : CodeTransformer { b.close (); b.add_return (expression (hash_table)); - b.pop_method (); + pop_builder (); check (m); } var call = (MethodCall) expression (m.name+"()"); diff --git a/vala/valacodebuilder.vala b/vala/valacodebuilder.vala index 87989c857..955b23f66 100644 --- a/vala/valacodebuilder.vala +++ b/vala/valacodebuilder.vala @@ -23,119 +23,99 @@ using GLib; public class Vala.CodeBuilder { - class BuildContext { - public Block current_block; - public Statement insert_statement; - public Block insert_block; - public ArrayList statement_stack = new ArrayList (); - public ArrayList check_nodes = new ArrayList (); - } - - BuildContext build_context; - ArrayList context_stack = new ArrayList (); + public Block current_block; + public Statement insert_statement; + public Block insert_block; + public ArrayList statement_stack = new ArrayList (); + public ArrayList check_nodes = new ArrayList (); public SourceReference source_reference; public CodeBuilder (CodeContext context, Statement insert_statement, SourceReference source_reference) { - build_context = new BuildContext (); - build_context.current_block = new Block (source_reference); - build_context.insert_statement = insert_statement; - build_context.insert_block = context.analyzer.get_insert_block (insert_statement); + current_block = new Block (source_reference); + insert_statement = insert_statement; + insert_block = context.analyzer.get_insert_block (insert_statement); this.source_reference = source_reference; var statement_block = context.analyzer.get_current_block (insert_statement); - statement_block.insert_before (build_context.insert_statement, build_context.current_block); - build_context.insert_statement = build_context.current_block; - build_context.check_nodes.add (build_context.current_block); + statement_block.insert_before (insert_statement, current_block); + insert_statement = current_block; + check_nodes.add (current_block); } public CodeBuilder.for_subroutine (Subroutine m) { source_reference = m.source_reference; - build_context = new BuildContext (); - build_context.insert_block = m.body = new Block (source_reference); - build_context.insert_statement = build_context.current_block = new Block (source_reference); - m.body.add_statement (build_context.current_block); + insert_block = m.body = new Block (source_reference); + insert_statement = current_block = new Block (source_reference); + m.body.add_statement (current_block); } public void check (CodeTransformer transformer) { - foreach (var node in build_context.check_nodes) { + foreach (var node in check_nodes) { transformer.check (node); } } - public void push_method (Method m) { - context_stack.add (build_context); - build_context = new BuildContext (); - build_context.insert_block = m.body = new Block (source_reference); - build_context.insert_statement = build_context.current_block = new Block (source_reference); - m.body.add_statement (build_context.current_block); - } - - public void pop_method () { - build_context = context_stack[context_stack.size - 1]; - context_stack.remove_at (context_stack.size - 1); - } - public void open_block () { - build_context.statement_stack.add (build_context.current_block); - var parent_block = build_context.current_block; + statement_stack.add (current_block); + var parent_block = current_block; - build_context.current_block = new Block (source_reference); + current_block = new Block (source_reference); - parent_block.add_statement (build_context.current_block); + parent_block.add_statement (current_block); } public void open_if (Expression condition) { - build_context.statement_stack.add (build_context.current_block); - var parent_block = build_context.current_block; + statement_stack.add (current_block); + var parent_block = current_block; - build_context.current_block = new Block (source_reference); + current_block = new Block (source_reference); - var stmt = new IfStatement (condition, build_context.current_block, null, source_reference); - build_context.statement_stack.add (stmt); + var stmt = new IfStatement (condition, current_block, null, source_reference); + statement_stack.add (stmt); parent_block.add_statement (stmt); } public void add_else () { - build_context.current_block = new Block (source_reference); + current_block = new Block (source_reference); - var stmt = (IfStatement) build_context.statement_stack[build_context.statement_stack.size-1]; + var stmt = (IfStatement) statement_stack[statement_stack.size-1]; assert (stmt.false_statement == null); - stmt.false_statement = build_context.current_block; + stmt.false_statement = current_block; } public void else_if (Expression condition) { - var parent_if = (IfStatement) build_context.statement_stack[build_context.statement_stack.size - 1]; + var parent_if = (IfStatement) statement_stack[statement_stack.size - 1]; assert (parent_if.false_statement == null); - build_context.statement_stack.remove_at (build_context.statement_stack.size - 1); + statement_stack.remove_at (statement_stack.size - 1); - build_context.current_block = new Block (source_reference); + current_block = new Block (source_reference); - var stmt = new IfStatement (condition, build_context.current_block, null, source_reference); + var stmt = new IfStatement (condition, current_block, null, source_reference); var block = new Block (source_reference); block.add_statement (stmt); parent_if.false_statement = block; - build_context.statement_stack.add (stmt); + statement_stack.add (stmt); } public void open_while (Expression condition) { - build_context.statement_stack.add (build_context.current_block); - var parent_block = build_context.current_block; + statement_stack.add (current_block); + var parent_block = current_block; - build_context.current_block = new Block (source_reference); + current_block = new Block (source_reference); - var stmt = new WhileStatement (condition, build_context.current_block, source_reference); + var stmt = new WhileStatement (condition, current_block, source_reference); parent_block.add_statement (stmt); } public void open_for (Expression? initializer, Expression condition, Expression? iterator) { - build_context.statement_stack.add (build_context.current_block); - var parent_block = build_context.current_block; + statement_stack.add (current_block); + var parent_block = current_block; - build_context.current_block = new Block (source_reference); + current_block = new Block (source_reference); - var stmt = new ForStatement (condition, build_context.current_block, source_reference); + var stmt = new ForStatement (condition, current_block, source_reference); if (initializer != null) { stmt.add_initializer (initializer); } @@ -147,10 +127,10 @@ public class Vala.CodeBuilder { } public void open_switch (Expression expression, Expression? first_label) { - var parent_block = build_context.current_block; + var parent_block = current_block; var stmt = new SwitchStatement (expression, source_reference); - build_context.statement_stack.add (stmt); + statement_stack.add (stmt); var section = new SwitchSection (source_reference); SwitchLabel label; @@ -160,17 +140,17 @@ public class Vala.CodeBuilder { label = new SwitchLabel (first_label); } section.add_label (label); - build_context.current_block = section; - build_context.statement_stack.add (section); + current_block = section; + statement_stack.add (section); parent_block.add_statement (stmt); stmt.add_section (section); } public void add_section (Expression? expression) { - build_context.statement_stack.remove_at (build_context.statement_stack.size - 1); + statement_stack.remove_at (statement_stack.size - 1); - var stmt = (SwitchStatement) build_context.statement_stack[build_context.statement_stack.size - 1]; + var stmt = (SwitchStatement) statement_stack[statement_stack.size - 1]; var section = new SwitchSection (source_reference); SwitchLabel label; if (expression == null) { @@ -179,14 +159,14 @@ public class Vala.CodeBuilder { label = new SwitchLabel (expression); } section.add_label (label); - build_context.current_block = section; - build_context.statement_stack.add (section); + current_block = section; + statement_stack.add (section); stmt.add_section (section); } public void add_label (Expression? expression) { - var section = (SwitchSection) build_context.statement_stack[build_context.statement_stack.size - 1]; + var section = (SwitchSection) statement_stack[statement_stack.size - 1]; SwitchLabel label; if (expression == null) { label = new SwitchLabel.with_default (source_reference); @@ -197,26 +177,26 @@ public class Vala.CodeBuilder { } public void open_try () { - build_context.statement_stack.add (build_context.current_block); - var parent_block = build_context.current_block; + statement_stack.add (current_block); + var parent_block = current_block; - build_context.current_block = new Block (source_reference); + current_block = new Block (source_reference); - var stmt = new TryStatement (build_context.current_block, null, source_reference); - build_context.statement_stack.add (stmt); + var stmt = new TryStatement (current_block, null, source_reference); + statement_stack.add (stmt); parent_block.add_statement (stmt); } public void add_catch (DataType? error_type, string? variable_name) { - build_context.current_block = new Block (source_reference); + current_block = new Block (source_reference); - var stmt = (TryStatement) build_context.statement_stack[build_context.statement_stack.size-1]; - stmt.add_catch_clause (new CatchClause (error_type, variable_name, build_context.current_block, source_reference)); + var stmt = (TryStatement) statement_stack[statement_stack.size-1]; + stmt.add_catch_clause (new CatchClause (error_type, variable_name, current_block, source_reference)); } public void add_statement (Statement statement) { - build_context.current_block.add_statement (statement); + current_block.add_statement (statement); } public void add_expression (Expression expression) { @@ -246,16 +226,16 @@ public class Vala.CodeBuilder { public string add_temp_declaration (DataType? type, Expression? initializer = null) { var local = new LocalVariable (type, CodeNode.get_temp_name (), initializer, source_reference); var stmt = new DeclarationStatement (local, source_reference); - build_context.insert_block.insert_before (build_context.insert_statement, stmt); - build_context.check_nodes.insert (0, stmt); + insert_block.insert_before (insert_statement, stmt); + check_nodes.insert (0, stmt); return local.name; } public void close () { do { - var top = build_context.statement_stack[build_context.statement_stack.size - 1]; - build_context.statement_stack.remove_at (build_context.statement_stack.size - 1); - build_context.current_block = top as Block; - } while (build_context.current_block == null); + var top = statement_stack[statement_stack.size - 1]; + statement_stack.remove_at (statement_stack.size - 1); + current_block = top as Block; + } while (current_block == null); } }