[vala/emit: 3/4] Add EmitContext class
- From: Jürg Billeter <juergbi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/emit: 3/4] Add EmitContext class
- Date: Tue, 10 Aug 2010 07:31:18 +0000 (UTC)
commit f3985712a99b0dfb8c4b142d81b941b5765adb9f
Author: Jürg Billeter <j bitron ch>
Date: Sun Aug 8 11:03:07 2010 +0200
Add EmitContext class
codegen/valaccodearraymodule.vala | 18 ++----
codegen/valaccodebasemodule.vala | 127 ++++++++++++++++++++++--------------
codegen/valaccodemethodmodule.vala | 26 +-------
codegen/valaccodestructmodule.vala | 7 +-
codegen/valadovabasemodule.vala | 91 +++++++++++++++++---------
codegen/valadovaobjectmodule.vala | 38 +++--------
codegen/valadovastructmodule.vala | 7 +-
codegen/valagasyncmodule.vala | 5 +-
codegen/valagtypemodule.vala | 12 ++--
9 files changed, 171 insertions(+), 160 deletions(-)
---
diff --git a/codegen/valaccodearraymodule.vala b/codegen/valaccodearraymodule.vala
index 0758e1f..a0a6ab4 100644
--- a/codegen/valaccodearraymodule.vala
+++ b/codegen/valaccodearraymodule.vala
@@ -769,10 +769,7 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
var block = new CCodeBlock ();
if (requires_copy (array_type.element_type)) {
- var old_symbol = current_symbol;
- var old_temp_vars = temp_vars;
- current_symbol = null;
- temp_vars = new ArrayList<LocalVariable> ();
+ push_context (new EmitContext ());
var cdecl = new CCodeDeclaration (array_type.get_cname ());
var cvardecl = new CCodeVariableDeclarator ("result");
@@ -807,8 +804,8 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
var cfrag = new CCodeFragment ();
append_temp_decl (cfrag, temp_vars);
block.add_statement (cfrag);
- current_symbol = old_symbol;
- temp_vars = old_temp_vars;
+
+ pop_context ();
} else {
var dup_call = new CCodeFunctionCall (new CCodeIdentifier ("g_memdup"));
dup_call.add_argument (new CCodeIdentifier ("self"));
@@ -851,10 +848,7 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
var block = new CCodeBlock ();
if (requires_copy (array_type.element_type)) {
- var old_symbol = current_symbol;
- var old_temp_vars = temp_vars;
- current_symbol = null;
- temp_vars = new ArrayList<LocalVariable> ();
+ push_context (new EmitContext ());
var idx_decl = new CCodeDeclaration ("int");
idx_decl.add_declarator (new CCodeVariableDeclarator ("i"));
@@ -871,8 +865,8 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
var cfrag = new CCodeFragment ();
append_temp_decl (cfrag, temp_vars);
block.add_statement (cfrag);
- current_symbol = old_symbol;
- temp_vars = old_temp_vars;
+
+ pop_context ();
} else {
source_declarations.add_include ("string.h");
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 2ddd7b0..e71fa5b 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -27,11 +27,46 @@
* Code visitor generating C Code.
*/
public class Vala.CCodeBaseModule : CodeGenerator {
+ public class EmitContext {
+ public Symbol? current_symbol;
+ public ArrayList<Symbol> symbol_stack = new ArrayList<Symbol> ();
+ public TryStatement current_try;
+ public CCodeSwitchStatement state_switch_statement;
+ public ArrayList<LocalVariable> temp_vars = new ArrayList<LocalVariable> ();
+ public ArrayList<LocalVariable> temp_ref_vars = new ArrayList<LocalVariable> ();
+ public int next_temp_var_id;
+ public bool current_method_inner_error;
+ public Map<string,string> variable_name_map = new HashMap<string,string> (str_hash, str_equal);
+
+ public EmitContext (Symbol? symbol = null) {
+ current_symbol = symbol;
+ }
+
+ public void push_symbol (Symbol symbol) {
+ symbol_stack.add (current_symbol);
+ current_symbol = symbol;
+ }
+
+ public void pop_symbol () {
+ current_symbol = symbol_stack[symbol_stack.size - 1];
+ symbol_stack.remove_at (symbol_stack.size - 1);
+ }
+ }
+
public CodeContext context { get; set; }
public Symbol root_symbol;
- public Symbol current_symbol;
- public TryStatement current_try;
+
+ public EmitContext emit_context = new EmitContext ();
+
+ List<EmitContext> emit_context_stack = new ArrayList<EmitContext> ();
+
+ public Symbol current_symbol { get { return emit_context.current_symbol; } }
+
+ public TryStatement current_try {
+ get { return emit_context.current_try; }
+ set { emit_context.current_try = value; }
+ }
public TypeSymbol? current_type_symbol {
get {
@@ -135,13 +170,17 @@ public class Vala.CCodeBaseModule : CodeGenerator {
// code nodes to be inserted before the current statement
// used by async method calls in coroutines
public CCodeFragment pre_statement_fragment;
+
// case statements to be inserted for the couroutine state
- public CCodeSwitchStatement state_switch_statement;
+ public CCodeSwitchStatement state_switch_statement {
+ get { return emit_context.state_switch_statement; }
+ set { emit_context.state_switch_statement = value; }
+ }
/* all temporary variables */
- public ArrayList<LocalVariable> temp_vars = new ArrayList<LocalVariable> ();
+ public ArrayList<LocalVariable> temp_vars { get { return emit_context.temp_vars; } }
/* temporary variables that own their content */
- public ArrayList<LocalVariable> temp_ref_vars = new ArrayList<LocalVariable> ();
+ public ArrayList<LocalVariable> temp_ref_vars { get { return emit_context.temp_ref_vars; } }
/* cache to check whether a certain marshaller has been created yet */
public Set<string> user_marshal_set;
/* (constant) hash table with all predefined marshallers */
@@ -149,12 +188,21 @@ public class Vala.CCodeBaseModule : CodeGenerator {
/* (constant) hash table with all reserved identifiers in the generated code */
Set<string> reserved_identifiers;
- public int next_temp_var_id = 0;
+ public int next_temp_var_id {
+ get { return emit_context.next_temp_var_id; }
+ set { emit_context.next_temp_var_id = value; }
+ }
+
public int next_regex_id = 0;
public bool in_creation_method { get { return current_method is CreationMethod; } }
public bool in_constructor = false;
public bool in_static_or_class_context = false;
- public bool current_method_inner_error = false;
+
+ public bool current_method_inner_error {
+ get { return emit_context.current_method_inner_error; }
+ set { emit_context.current_method_inner_error = value; }
+ }
+
public int next_coroutine_state = 1;
int next_block_id = 0;
Map<Block,int> block_map = new HashMap<Block,int> ();
@@ -214,7 +262,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
public Set<string> wrappers;
Set<Symbol> generated_external_symbols;
- public Map<string,string> variable_name_map = new HashMap<string,string> (str_hash, str_equal);
+ public Map<string,string> variable_name_map { get { return emit_context.variable_name_map; } }
public CCodeBaseModule () {
predefined_marshal_set = new HashSet<string> (str_hash, str_equal);
@@ -475,6 +523,23 @@ public class Vala.CCodeBaseModule : CodeGenerator {
}
}
+ public void push_context (EmitContext emit_context) {
+ if (this.emit_context != null) {
+ emit_context_stack.add (this.emit_context);
+ }
+
+ this.emit_context = emit_context;
+ }
+
+ public void pop_context () {
+ if (emit_context_stack.size > 0) {
+ this.emit_context = emit_context_stack[emit_context_stack.size - 1];
+ emit_context_stack.remove_at (emit_context_stack.size - 1);
+ } else {
+ this.emit_context = null;
+ }
+ }
+
public CCodeIdentifier get_value_setter_function (DataType type_reference) {
var array_type = type_reference as ArrayType;
if (type_reference.data_type != null) {
@@ -566,9 +631,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
user_marshal_set = new HashSet<string> (str_hash, str_equal);
- next_temp_var_id = 0;
next_regex_id = 0;
- variable_name_map.clear ();
gvaluecollector_h_needed = false;
requires_array_free = false;
@@ -1224,21 +1287,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
check_type (prop.property_type);
- int old_next_temp_var_id = next_temp_var_id;
- var old_temp_vars = temp_vars;
- var old_temp_ref_vars = temp_ref_vars;
- var old_variable_name_map = variable_name_map;
- next_temp_var_id = 0;
- temp_vars = new ArrayList<LocalVariable> ();
- temp_ref_vars = new ArrayList<LocalVariable> ();
- variable_name_map = new HashMap<string,string> (str_hash, str_equal);
-
prop.accept_children (this);
-
- next_temp_var_id = old_next_temp_var_id;
- temp_vars = old_temp_vars;
- temp_ref_vars = old_temp_ref_vars;
- variable_name_map = old_variable_name_map;
}
public void generate_type_declaration (DataType type, CCodeDeclarationSpace decl_space) {
@@ -1353,10 +1402,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
}
public override void visit_property_accessor (PropertyAccessor acc) {
- var old_symbol = current_symbol;
- bool old_method_inner_error = current_method_inner_error;
- current_symbol = acc;
- current_method_inner_error = false;
+ push_context (new EmitContext (acc));
var prop = (Property) acc.prop;
@@ -1610,8 +1656,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
source_type_member_definition.append (function);
}
- current_symbol = old_symbol;
- current_method_inner_error = old_method_inner_error;
+ pop_context ();
}
public override void visit_destructor (Destructor d) {
@@ -4995,16 +5040,8 @@ public class Vala.CCodeBaseModule : CodeGenerator {
var dt = (DelegateType) l.target_type;
l.method.cinstance_parameter_position = dt.delegate_symbol.cinstance_parameter_position;
- var old_temp_vars = temp_vars;
- var old_temp_ref_vars = temp_ref_vars;
- temp_vars = new ArrayList<LocalVariable> ();
- temp_ref_vars = new ArrayList<LocalVariable> ();
-
l.accept_children (this);
- temp_vars = old_temp_vars;
- temp_ref_vars = old_temp_ref_vars;
-
l.ccodenode = new CCodeIdentifier (l.method.get_cname ());
}
@@ -5641,14 +5678,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
function.add_parameter (new CCodeFormalParameter ("self", "const " + st.get_cname () + "*"));
function.add_parameter (new CCodeFormalParameter ("dest", st.get_cname () + "*"));
- int old_next_temp_var_id = next_temp_var_id;
- var old_temp_vars = temp_vars;
- var old_temp_ref_vars = temp_ref_vars;
- var old_variable_name_map = variable_name_map;
- next_temp_var_id = 0;
- temp_vars = new ArrayList<LocalVariable> ();
- temp_ref_vars = new ArrayList<LocalVariable> ();
- variable_name_map = new HashMap<string,string> (str_hash, str_equal);
+ push_context (new EmitContext ());
var cblock = new CCodeBlock ();
var cfrag = new CCodeFragment ();
@@ -5698,10 +5728,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
append_temp_decl (cfrag, temp_vars);
temp_vars.clear ();
- next_temp_var_id = old_next_temp_var_id;
- temp_vars = old_temp_vars;
- temp_ref_vars = old_temp_ref_vars;
- variable_name_map = old_variable_name_map;
+ pop_context ();
source_declarations.add_type_member_declaration (function.copy ());
function.block = cblock;
diff --git a/codegen/valaccodemethodmodule.vala b/codegen/valaccodemethodmodule.vala
index f16433e..747631d 100644
--- a/codegen/valaccodemethodmodule.vala
+++ b/codegen/valaccodemethodmodule.vala
@@ -261,22 +261,7 @@ public class Vala.CCodeMethodModule : CCodeStructModule {
}
public override void visit_method (Method m) {
- var old_symbol = current_symbol;
- bool old_method_inner_error = current_method_inner_error;
- int old_next_temp_var_id = next_temp_var_id;
- var old_temp_vars = temp_vars;
- var old_temp_ref_vars = temp_ref_vars;
- var old_variable_name_map = variable_name_map;
- var old_try = current_try;
- var old_state_switch_statement = state_switch_statement;
- current_symbol = m;
- current_method_inner_error = false;
- next_temp_var_id = 0;
- temp_vars = new ArrayList<LocalVariable> ();
- temp_ref_vars = new ArrayList<LocalVariable> ();
- variable_name_map = new HashMap<string,string> (str_hash, str_equal);
- current_try = null;
- state_switch_statement = null;
+ push_context (new EmitContext (m));
bool in_gobject_creation_method = false;
bool in_fundamental_creation_method = false;
@@ -354,14 +339,7 @@ public class Vala.CCodeMethodModule : CCodeStructModule {
bool inner_error = current_method_inner_error;
- current_symbol = old_symbol;
- current_method_inner_error = old_method_inner_error;
- next_temp_var_id = old_next_temp_var_id;
- temp_vars = old_temp_vars;
- temp_ref_vars = old_temp_ref_vars;
- variable_name_map = old_variable_name_map;
- current_try = old_try;
- state_switch_statement = old_state_switch_statement;
+ pop_context ();
// do not declare overriding methods and interface implementations
if (m.is_abstract || m.is_virtual
diff --git a/codegen/valaccodestructmodule.vala b/codegen/valaccodestructmodule.vala
index fc0810b..84697a5 100644
--- a/codegen/valaccodestructmodule.vala
+++ b/codegen/valaccodestructmodule.vala
@@ -140,9 +140,9 @@ public class Vala.CCodeStructModule : CCodeBaseModule {
}
public override void visit_struct (Struct st) {
- var old_symbol = current_symbol;
+ push_context (new EmitContext (st));
+
var old_instance_finalize_fragment = instance_finalize_fragment;
- current_symbol = st;
instance_finalize_fragment = new CCodeFragment ();
generate_struct_declaration (st, source_declarations);
@@ -166,8 +166,9 @@ public class Vala.CCodeStructModule : CCodeBaseModule {
add_struct_free_function (st);
}
- current_symbol = old_symbol;
instance_finalize_fragment = old_instance_finalize_fragment;
+
+ pop_context ();
}
void add_struct_dup_function (Struct st) {
diff --git a/codegen/valadovabasemodule.vala b/codegen/valadovabasemodule.vala
index ab3f422..01f2b7c 100644
--- a/codegen/valadovabasemodule.vala
+++ b/codegen/valadovabasemodule.vala
@@ -26,11 +26,44 @@
* Code visitor generating C Code.
*/
public class Vala.DovaBaseModule : CodeGenerator {
+ public class EmitContext {
+ public Symbol? current_symbol;
+ public ArrayList<Symbol> symbol_stack = new ArrayList<Symbol> ();
+ public TryStatement current_try;
+ public ArrayList<LocalVariable> temp_vars = new ArrayList<LocalVariable> ();
+ public ArrayList<LocalVariable> temp_ref_vars = new ArrayList<LocalVariable> ();
+ public int next_temp_var_id;
+ public Map<string,string> variable_name_map = new HashMap<string,string> (str_hash, str_equal);
+
+ public EmitContext (Symbol? symbol = null) {
+ current_symbol = symbol;
+ }
+
+ public void push_symbol (Symbol symbol) {
+ symbol_stack.add (current_symbol);
+ current_symbol = symbol;
+ }
+
+ public void pop_symbol () {
+ current_symbol = symbol_stack[symbol_stack.size - 1];
+ symbol_stack.remove_at (symbol_stack.size - 1);
+ }
+ }
+
public CodeContext context { get; set; }
public Symbol root_symbol;
- public Symbol current_symbol;
- public TryStatement current_try;
+
+ public EmitContext emit_context = new EmitContext ();
+
+ List<EmitContext> emit_context_stack = new ArrayList<EmitContext> ();
+
+ public Symbol current_symbol { get { return emit_context.current_symbol; } }
+
+ public TryStatement current_try {
+ get { return emit_context.current_try; }
+ set { emit_context.current_try = value; }
+ }
public TypeSymbol? current_type_symbol {
get {
@@ -127,13 +160,17 @@ public class Vala.DovaBaseModule : CodeGenerator {
public CCodeFragment pre_statement_fragment;
/* all temporary variables */
- public ArrayList<LocalVariable> temp_vars = new ArrayList<LocalVariable> ();
+ public ArrayList<LocalVariable> temp_vars { get { return emit_context.temp_vars; } }
/* temporary variables that own their content */
- public ArrayList<LocalVariable> temp_ref_vars = new ArrayList<LocalVariable> ();
+ public ArrayList<LocalVariable> temp_ref_vars { get { return emit_context.temp_ref_vars; } }
/* (constant) hash table with all reserved identifiers in the generated code */
Set<string> reserved_identifiers;
- public int next_temp_var_id = 0;
+ public int next_temp_var_id {
+ get { return emit_context.next_temp_var_id; }
+ set { emit_context.next_temp_var_id = value; }
+ }
+
public int next_wrapper_id = 0;
public bool in_creation_method { get { return current_method is CreationMethod; } }
int next_block_id = 0;
@@ -161,7 +198,7 @@ public class Vala.DovaBaseModule : CodeGenerator {
Set<Symbol> generated_external_symbols;
- public Map<string,string> variable_name_map = new HashMap<string,string> (str_hash, str_equal);
+ public Map<string,string> variable_name_map { get { return emit_context.variable_name_map; } }
public DovaBaseModule () {
reserved_identifiers = new HashSet<string> (str_hash, str_equal);
@@ -250,9 +287,6 @@ public class Vala.DovaBaseModule : CodeGenerator {
source_declarations.add_include ("dova-base.h");
}
- next_temp_var_id = 0;
- variable_name_map.clear ();
-
generated_external_symbols = new HashSet<Symbol> ();
@@ -324,6 +358,23 @@ public class Vala.DovaBaseModule : CodeGenerator {
}
}
+ public void push_context (EmitContext emit_context) {
+ if (this.emit_context != null) {
+ emit_context_stack.add (this.emit_context);
+ }
+
+ this.emit_context = emit_context;
+ }
+
+ public void pop_context () {
+ if (emit_context_stack.size > 0) {
+ this.emit_context = emit_context_stack[emit_context_stack.size - 1];
+ emit_context_stack.remove_at (emit_context_stack.size - 1);
+ } else {
+ this.emit_context = null;
+ }
+ }
+
public override void visit_source_file (SourceFile source_file) {
if (csource_filename == null) {
csource_filename = source_file.get_csource_filename ();
@@ -594,21 +645,7 @@ public class Vala.DovaBaseModule : CodeGenerator {
}
public override void visit_property (Property prop) {
- int old_next_temp_var_id = next_temp_var_id;
- var old_temp_vars = temp_vars;
- var old_temp_ref_vars = temp_ref_vars;
- var old_variable_name_map = variable_name_map;
- next_temp_var_id = 0;
- temp_vars = new ArrayList<LocalVariable> ();
- temp_ref_vars = new ArrayList<LocalVariable> ();
- variable_name_map = new HashMap<string,string> (str_hash, str_equal);
-
prop.accept_children (this);
-
- next_temp_var_id = old_next_temp_var_id;
- temp_vars = old_temp_vars;
- temp_ref_vars = old_temp_ref_vars;
- variable_name_map = old_variable_name_map;
}
public void generate_type_declaration (DataType type, CCodeDeclarationSpace decl_space) {
@@ -2157,16 +2194,8 @@ public class Vala.DovaBaseModule : CodeGenerator {
var dt = (DelegateType) l.target_type;
l.method.cinstance_parameter_position = dt.delegate_symbol.cinstance_parameter_position;
- var old_temp_vars = temp_vars;
- var old_temp_ref_vars = temp_ref_vars;
- temp_vars = new ArrayList<LocalVariable> ();
- temp_ref_vars = new ArrayList<LocalVariable> ();
-
l.accept_children (this);
- temp_vars = old_temp_vars;
- temp_ref_vars = old_temp_ref_vars;
-
l.ccodenode = new CCodeIdentifier (l.method.get_cname ());
}
diff --git a/codegen/valadovaobjectmodule.vala b/codegen/valadovaobjectmodule.vala
index e944a0c..51b2778 100644
--- a/codegen/valadovaobjectmodule.vala
+++ b/codegen/valadovaobjectmodule.vala
@@ -791,9 +791,9 @@ public class Vala.DovaObjectModule : DovaArrayModule {
}
public override void visit_class (Class cl) {
- var old_symbol = current_symbol;
+ push_context (new EmitContext (cl));
+
var old_instance_finalize_fragment = instance_finalize_fragment;
- current_symbol = cl;
instance_finalize_fragment = new CCodeFragment ();
generate_class_declaration (cl, source_declarations);
@@ -969,13 +969,13 @@ public class Vala.DovaObjectModule : DovaArrayModule {
source_type_member_definition.append (create_set_value_from_any_function ());
}
- current_symbol = old_symbol;
instance_finalize_fragment = old_instance_finalize_fragment;
+
+ pop_context ();
}
public override void visit_interface (Interface iface) {
- var old_symbol = current_symbol;
- current_symbol = iface;
+ push_context (new EmitContext (iface));
generate_interface_declaration (iface, source_declarations);
@@ -1072,7 +1072,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
iface.accept_children (this);
- current_symbol = old_symbol;
+ pop_context ();
}
public override void generate_property_accessor_declaration (PropertyAccessor acc, CCodeDeclarationSpace decl_space) {
@@ -1135,8 +1135,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
}
public override void visit_property_accessor (PropertyAccessor acc) {
- var old_symbol = current_symbol;
- current_symbol = acc;
+ push_context (new EmitContext (acc));
var prop = (Property) acc.prop;
@@ -1261,7 +1260,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
source_type_member_definition.append (function);
}
- current_symbol = old_symbol;
+ pop_context ();
}
public override void generate_interface_declaration (Interface iface, CCodeDeclarationSpace decl_space) {
@@ -1372,19 +1371,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
}
public override void visit_method (Method m) {
- var old_symbol = current_symbol;
- int old_next_temp_var_id = next_temp_var_id;
- var old_temp_vars = temp_vars;
- var old_temp_ref_vars = temp_ref_vars;
- var old_variable_name_map = variable_name_map;
- var old_try = current_try;
- current_symbol = m;
- next_temp_var_id = 0;
- temp_vars = new ArrayList<LocalVariable> ();
- temp_ref_vars = new ArrayList<LocalVariable> ();
- variable_name_map = new HashMap<string,string> (str_hash, str_equal);
- current_try = null;
-
+ push_context (new EmitContext (m));
foreach (FormalParameter param in m.get_parameters ()) {
param.accept (this);
@@ -1407,12 +1394,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
}
- current_symbol = old_symbol;
- next_temp_var_id = old_next_temp_var_id;
- temp_vars = old_temp_vars;
- temp_ref_vars = old_temp_ref_vars;
- variable_name_map = old_variable_name_map;
- current_try = old_try;
+ pop_context ();
generate_method_declaration (m, source_declarations);
diff --git a/codegen/valadovastructmodule.vala b/codegen/valadovastructmodule.vala
index ddab46a..e934e80 100644
--- a/codegen/valadovastructmodule.vala
+++ b/codegen/valadovastructmodule.vala
@@ -70,9 +70,9 @@ public class Vala.DovaStructModule : DovaBaseModule {
}
public override void visit_struct (Struct st) {
- var old_symbol = current_symbol;
+ push_context (new EmitContext (st));
+
var old_instance_finalize_fragment = instance_finalize_fragment;
- current_symbol = st;
instance_finalize_fragment = new CCodeFragment ();
generate_struct_declaration (st, source_declarations);
@@ -83,8 +83,9 @@ public class Vala.DovaStructModule : DovaBaseModule {
st.accept_children (this);
- current_symbol = old_symbol;
instance_finalize_fragment = old_instance_finalize_fragment;
+
+ pop_context ();
}
}
diff --git a/codegen/valagasyncmodule.vala b/codegen/valagasyncmodule.vala
index c554612..c8fb945 100644
--- a/codegen/valagasyncmodule.vala
+++ b/codegen/valagasyncmodule.vala
@@ -92,8 +92,7 @@ public class Vala.GAsyncModule : GSignalModule {
datadecl.add_declarator (new CCodeVariableDeclarator ("data", new CCodeIdentifier ("_data")));
freeblock.add_statement (datadecl);
- var old_symbol = current_symbol;
- current_symbol = m;
+ push_context (new EmitContext (m));
foreach (FormalParameter param in m.get_parameters ()) {
if (param.direction != ParameterDirection.OUT) {
@@ -129,7 +128,7 @@ public class Vala.GAsyncModule : GSignalModule {
}
}
- current_symbol = old_symbol;
+ pop_context ();
var freecall = new CCodeFunctionCall (new CCodeIdentifier ("g_slice_free"));
freecall.add_argument (new CCodeIdentifier (dataname));
diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala
index 2480f0b..c989a39 100644
--- a/codegen/valagtypemodule.vala
+++ b/codegen/valagtypemodule.vala
@@ -492,7 +492,8 @@ public class Vala.GTypeModule : GErrorModule {
}
public override void visit_class (Class cl) {
- var old_symbol = current_symbol;
+ push_context (new EmitContext (cl));
+
var old_param_spec_struct = param_spec_struct;
var old_prop_enum = prop_enum;
var old_class_init_fragment = class_init_fragment;
@@ -501,7 +502,6 @@ public class Vala.GTypeModule : GErrorModule {
var old_base_finalize_fragment = base_finalize_fragment;
var old_instance_init_fragment = instance_init_fragment;
var old_instance_finalize_fragment = instance_finalize_fragment;
- current_symbol = cl;
bool is_gtypeinstance = !cl.is_compact;
bool is_fundamental = is_gtypeinstance && cl.base_class == null;
@@ -679,7 +679,6 @@ public class Vala.GTypeModule : GErrorModule {
}
}
- current_symbol = old_symbol;
param_spec_struct = old_param_spec_struct;
prop_enum = old_prop_enum;
class_init_fragment = old_class_init_fragment;
@@ -688,6 +687,8 @@ public class Vala.GTypeModule : GErrorModule {
base_finalize_fragment = old_base_finalize_fragment;
instance_init_fragment = old_instance_init_fragment;
instance_finalize_fragment = old_instance_finalize_fragment;
+
+ pop_context ();
}
private void add_type_value_table_init_function (Class cl) {
@@ -1914,8 +1915,7 @@ public class Vala.GTypeModule : GErrorModule {
}
public override void visit_interface (Interface iface) {
- var old_symbol = current_symbol;
- current_symbol = iface;
+ push_context (new EmitContext (iface));
if (iface.get_cname().len () < 3) {
iface.error = true;
@@ -1944,7 +1944,7 @@ public class Vala.GTypeModule : GErrorModule {
source_declarations.add_type_member_declaration (type_fun.get_source_declaration ());
source_type_member_definition.append (type_fun.get_definition ());
- current_symbol = old_symbol;
+ pop_context ();
}
public virtual TypeRegisterFunction create_interface_register_function (Interface iface) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]