[vala] Insert "%s" argument in printf calls with non-literal format string



commit e4dea42ed513323115a36358cbcb14116416a8b7
Author: Jürg Billeter <j bitron ch>
Date:   Sat Oct 10 15:31:01 2009 +0200

    Insert "%s" argument in printf calls with non-literal format string

 vala/valamethodcall.vala |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)
---
diff --git a/vala/valamethodcall.vala b/vala/valamethodcall.vala
index 7c31f6e..25865c6 100644
--- a/vala/valamethodcall.vala
+++ b/vala/valamethodcall.vala
@@ -271,6 +271,21 @@ public class Vala.MethodCall : Expression {
 			if (last_arg != null) {
 				// use last argument as format string
 				format_literal = last_arg as StringLiteral;
+				if (format_literal == null && args.size == params.size - 1) {
+					// insert "%s" to avoid issues with embedded %
+					format_literal = new StringLiteral ("\"%s\"");
+					format_literal.target_type = analyzer.string_type.copy ();
+					argument_list.insert (args.size - 1, format_literal);
+
+					// recreate iterator and skip to right position
+					arg_it = argument_list.iterator ();
+					foreach (FormalParameter param in params) {
+						if (param.ellipsis) {
+							break;
+						}
+						arg_it.next ();
+					}
+				}
 			} else {
 				// use instance as format string for string.printf (...)
 				var ma = call as MemberAccess;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]