]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Improve assertion messages
authorJürg Billeter <j@bitron.ch>
Sat, 2 Jun 2012 16:17:43 +0000 (18:17 +0200)
committerJürg Billeter <j@bitron.ch>
Sat, 2 Jun 2012 16:17:43 +0000 (18:17 +0200)
Fixes bug 658825.

codegen/valaccodebasemodule.vala
codegen/valaccodemethodcallmodule.vala
vala/valamethodcall.vala

index 57ac8a5f1f6994766217e4932808cc89c0062e45..c158eafaa42d87ee7ee4e87d4b83af664f635ce2 100644 (file)
@@ -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 ();
                }
index 296efc145eada50e213737b6b7572cb4b001b96f..8be973ef15a8c0edd317b78bcb567690b1f69a82 100644 (file)
@@ -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;
index f0e9585f7f0e3540ba450441588a16ce0bc86d5f..33b820f774a28926c3c44edd4b634186e9e62b9c 100644 (file)
@@ -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;
+                               }
                        }
                }