[vala/wip/debug: 2/2] codegen: Add push_line and pop_line
- From: Luca Bruno <lucabru src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/wip/debug: 2/2] codegen: Add push_line and pop_line
- Date: Mon, 18 Jul 2011 22:51:49 +0000 (UTC)
commit d52abde8634949b30e46cf50c8b72d00299b98ab
Author: Luca Bruno <lucabru src gnome org>
Date: Tue Jul 19 00:13:13 2011 +0200
codegen: Add push_line and pop_line
codegen/valaccodebasemodule.vala | 70 ++++++++++++++++++++++++++++++++++++++
1 files changed, 70 insertions(+), 0 deletions(-)
---
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index e553fbc..26f6941 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -63,6 +63,10 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
List<EmitContext> emit_context_stack = new ArrayList<EmitContext> ();
+ public CCodeLineDirective? current_line = null;
+
+ List<CCodeLineDirective> line_directive_stack = new ArrayList<CCodeLineDirective> ();
+
public Symbol current_symbol { get { return emit_context.current_symbol; } }
public TryStatement current_try {
@@ -518,19 +522,44 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
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);
+ if (ccode != null) {
+ ccode.current_line = current_line;
+ }
} else {
this.emit_context = null;
}
}
+ public void push_line (SourceReference? source_reference) {
+ if (source_reference != null) {
+ current_line = new CCodeLineDirective (source_reference.file.filename, source_reference.first_line);
+ }
+ line_directive_stack.add (current_line);
+ if (ccode != null) {
+ ccode.current_line = current_line;
+ }
+ }
+
+ public void pop_line () {
+ current_line = line_directive_stack[line_directive_stack.size - 1];
+ line_directive_stack.remove_at (line_directive_stack.size - 1);
+ if (ccode != null) {
+ ccode.current_line = current_line;
+ }
+ }
+
public void push_function (CCodeFunction func) {
emit_context.ccode_stack.add (ccode);
emit_context.ccode = func;
+ ccode.current_line = current_line;
}
public void pop_function () {
emit_context.ccode = emit_context.ccode_stack[emit_context.ccode_stack.size - 1];
emit_context.ccode_stack.remove_at (emit_context.ccode_stack.size - 1);
+ if (ccode != null) {
+ ccode.current_line = current_line;
+ }
}
public bool add_symbol_declaration (CCodeFile decl_space, Symbol sym, string name) {
@@ -717,6 +746,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
}
public override void visit_enum (Enum en) {
+ push_line (en.source_reference);
+
en.accept_children (this);
if (en.comment != null) {
@@ -731,6 +762,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
if (!en.is_private_symbol ()) {
generate_enum_declaration (en, internal_header_file);
}
+
+ pop_line ();
}
public void visit_member (Symbol m) {
@@ -816,6 +849,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
}
public override void visit_constant (Constant c) {
+ push_line (c.source_reference);
+
if (c.parent_symbol is Block) {
// local constant
@@ -838,6 +873,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
ccode.add_declaration (type_name, new CCodeVariableDeclarator ("%s%s".printf (c.get_cname (), arr), cinitializer), CCodeModifiers.STATIC);
+ pop_line ();
return;
}
@@ -849,6 +885,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
if (!c.is_private_symbol ()) {
generate_constant_declaration (c, internal_header_file);
}
+
+ pop_line ();
}
public void generate_field_declaration (Field f, CCodeFile decl_space) {
@@ -935,6 +973,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
}
public override void visit_field (Field f) {
+ push_line (f.source_reference);
+
visit_member (f);
check_type (f.variable_type);
@@ -1165,6 +1205,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
pop_context ();
}
+
+ pop_line ();
}
public bool is_constant_ccode_expression (CCodeExpression cexpr) {
@@ -1356,6 +1398,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
public override void visit_property_accessor (PropertyAccessor acc) {
push_context (new EmitContext (acc));
+ push_line (acc.source_reference);
var prop = (Property) acc.prop;
@@ -1400,6 +1443,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
}
if (acc.source_type == SourceFileType.FAST) {
+ pop_line ();
return;
}
@@ -1618,6 +1662,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
cfile.add_function (function);
}
+ pop_line ();
pop_context ();
}
@@ -1983,7 +2028,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
}
public override void visit_declaration_statement (DeclarationStatement stmt) {
+ push_line (stmt.source_reference);
stmt.declaration.accept (this);
+ pop_line ();
}
public CCodeExpression get_variable_cexpression (string name) {
@@ -2032,6 +2079,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
}
public override void visit_local_variable (LocalVariable local) {
+ push_line (local.source_reference);
check_type (local.variable_type);
if (local.initializer != null) {
@@ -2108,6 +2156,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
}
local.active = true;
+
+ pop_line ();
}
/**
@@ -3098,6 +3148,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
return;
}
+ push_line (stmt.source_reference);
+
/* free temporary objects and handle errors */
foreach (var value in temp_ref_values) {
@@ -3110,6 +3162,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
}
temp_ref_values.clear ();
+
+ pop_line ();
}
protected virtual void append_scope_free (Symbol sym, CodeNode? stop_at = null) {
@@ -3232,6 +3286,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
public override void visit_return_statement (ReturnStatement stmt) {
Symbol return_expression_symbol = null;
+ push_line (stmt.source_reference);
+
if (stmt.return_expression != null) {
// avoid unnecessary ref/unref pair
var local = stmt.return_expression.symbol_reference as LocalVariable;
@@ -3339,6 +3395,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
// required for destructors
current_method_return = true;
+
+ pop_line ();
}
public string get_symbol_lock_name (string symname) {
@@ -3385,24 +3443,34 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
}
public override void visit_lock_statement (LockStatement stmt) {
+ push_line (stmt.source_reference);
+
var l = get_lock_expression (stmt, stmt.resource);
var fc = new CCodeFunctionCall (new CCodeIdentifier (((Method) mutex_type.scope.lookup ("lock")).get_cname ()));
fc.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, l));
ccode.add_expression (fc);
+
+ pop_line ();
}
public override void visit_unlock_statement (UnlockStatement stmt) {
+ push_line (stmt.source_reference);
+
var l = get_lock_expression (stmt, stmt.resource);
var fc = new CCodeFunctionCall (new CCodeIdentifier (((Method) mutex_type.scope.lookup ("unlock")).get_cname ()));
fc.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, l));
ccode.add_expression (fc);
+
+ pop_line ();
}
public override void visit_delete_statement (DeleteStatement stmt) {
+ push_line (stmt.source_reference);
+
var pointer_type = (PointerType) stmt.expression.value_type;
DataType type = pointer_type;
if (pointer_type.base_type.data_type != null && pointer_type.base_type.data_type.is_reference_type ()) {
@@ -3412,6 +3480,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
var ccall = new CCodeFunctionCall (get_destroy_func_expression (type));
ccall.add_argument (get_cvalue (stmt.expression));
ccode.add_expression (ccall);
+
+ pop_line ();
}
public override void visit_expression (Expression expr) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]