From: Jürg Billeter Date: Sat, 2 Jun 2012 16:17:43 +0000 (+0200) Subject: Improve assertion messages X-Git-Tag: 0.17.1~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4051a8a36cd40ec4a78c1eb963c10080557b54da;p=thirdparty%2Fvala.git Improve assertion messages Fixes bug 658825. --- diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 57ac8a5f1..c158eafaa 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -321,6 +321,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { public string module_init_param_name; public bool gvaluecollector_h_needed; + public bool requires_assert; public bool requires_array_free; public bool requires_array_move; public bool requires_array_length; @@ -664,6 +665,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { next_regex_id = 0; gvaluecollector_h_needed = false; + requires_assert = false; requires_array_free = false; requires_array_move = false; requires_array_length = false; @@ -692,6 +694,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { return; } + if (requires_assert) { + cfile.add_type_declaration (new CCodeMacroReplacement.with_expression ("_vala_assert(expr, msg)", new CCodeConstant ("if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);"))); + } if (requires_array_free) { append_vala_array_free (); } diff --git a/codegen/valaccodemethodcallmodule.vala b/codegen/valaccodemethodcallmodule.vala index 296efc145..8be973ef1 100644 --- a/codegen/valaccodemethodcallmodule.vala +++ b/codegen/valaccodemethodcallmodule.vala @@ -677,6 +677,14 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule { ccode.add_label ("_state_%d".printf (state)); } + if (expr.is_assert) { + string message = ((string) expr.source_reference.begin.pos).substring (0, (int) (expr.source_reference.end.pos - expr.source_reference.begin.pos)); + ccall.call = new CCodeIdentifier ("_vala_assert"); + ccall.add_argument (new CCodeConstant ("\"%s\"".printf (message.replace ("\n", " ").escape ("")))); + requires_assert = true; + + } + if (return_result_via_out_param) { ccode.add_expression (ccall_expr); ccall_expr = out_param_ref; diff --git a/vala/valamethodcall.vala b/vala/valamethodcall.vala index f0e9585f7..33b820f77 100644 --- a/vala/valamethodcall.vala +++ b/vala/valamethodcall.vala @@ -203,6 +203,11 @@ public class Vala.MethodCall : Expression { if (ma.symbol_reference != null && ma.symbol_reference.get_attribute ("Assert") != null) { this.is_assert = true; + + var args = get_argument_list (); + if (args.size == 1) { + this.source_reference = args[0].source_reference; + } } }