Diagnostic included-from loop

Message ID 1664468a-4474-5466-df05-dd4520fa08af@acm.org
State New
Headers show
Series
  • Diagnostic included-from loop
Related show

Commit Message

Nathan Sidwell Aug. 6, 2018, 3:32 p.m.
We currently emit the 'included from' information in a peeled-once loop. 
  This patch rerolls the loop.  It'll make some future changes simpler, 
and we're not at all worried about speed here -- it's a diagnostic!

In the long term, the include-at path will include modules (imported 
at).  Having single logic to figure that out is simpler.

In the near future, I have a patch to change the representation of the 
included-from information, which I'll get to shortly.

ok?

nathan

Comments

David Malcolm Aug. 6, 2018, 3:57 p.m. | #1
On Mon, 2018-08-06 at 11:32 -0400, Nathan Sidwell wrote:
> We currently emit the 'included from' information in a peeled-once
> loop. 
>   This patch rerolls the loop.  It'll make some future changes
> simpler, 
> and we're not at all worried about speed here -- it's a diagnostic!
> 
> In the long term, the include-at path will include modules (imported 
> at).  Having single logic to figure that out is simpler.
> 
> In the near future, I have a patch to change the representation of
> the 
> included-from information, which I'll get to shortly.
> 
> ok?
> 
> nathan

I believe the only functional change here is that the strings are now
marked for translation, and translated.

OK for trunk, assuming you performed the usual testing on this patch.

Dave

Patch

2018-08-06  Nathan Sidwell  <nathan@acm.org>

	* diagnostic.c (diagnostic_report_current_module): Reroll
	included-at loop.

Index: diagnostic.c
===================================================================
--- diagnostic.c	(revision 263332)
+++ diagnostic.c	(working copy)
@@ -587,22 +587,26 @@  diagnostic_report_current_module (diagno
       set_last_module (context, map);
       if (! MAIN_FILE_P (map))
 	{
-	  map = INCLUDED_FROM (line_table, map);
-	  const char *line_col
-	    = maybe_line_and_column (LAST_SOURCE_LINE (map),
-				     context->show_column
-				     ? LAST_SOURCE_COLUMN (map) : 0);
-	  pp_verbatim (context->printer,
-		       "In file included from %r%s%s%R", "locus",
-		       LINEMAP_FILE (map), line_col);
-	  while (! MAIN_FILE_P (map))
+	  bool first = true;
+	  do
 	    {
 	      map = INCLUDED_FROM (line_table, map);
-	      line_col = maybe_line_and_column (LAST_SOURCE_LINE (map), 0);
-	      pp_verbatim (context->printer,
-			   ",\n                 from %r%s%s%R", "locus",
-			   LINEMAP_FILE (map), line_col);
+	      const char *line_col
+		= maybe_line_and_column (LAST_SOURCE_LINE (map),
+					 first && context->show_column
+					 ? SOURCE_COLUMN (map, where) : 0);
+	      static const char *const msgs[] =
+		{
+		 N_("In file included from"),
+		 N_("                 from"),
+		};
+	      unsigned index = !first;
+	      pp_verbatim (context->printer, "%s%s %r%s%s%R",
+			   first ? "" : ",\n", _(msgs[index]),
+			   "locus", LINEMAP_FILE (map), line_col);
+	      first = false;
 	    }
+	  while (! MAIN_FILE_P (map));
 	  pp_verbatim (context->printer, ":");
 	  pp_newline (context->printer);
 	}