[incremental] Patch: FYI: make main file user-owned

Tom Tromey tromey@redhat.com
Mon Oct 1 22:30:00 GMT 2007


I'm checking this in on the incremental-compiler branch.

This makes the C lexer consider the main source file to be "user
owned".  Also it makes it a bit friendlier to debug the token hunk
code -- saving the starting token offset in a local makes it possible
to go "up" from any point in parsing and still find the start of the
current hunk.

Tom

ChangeLog:
2007-10-01  Tom Tromey  <tromey@redhat.com>

	* c-parser.c (c_parser_translation_unit): Make next_token a
	local.
	* c-lex.c (fe_file_change): Mark main file as user-owned.

Index: c-lex.c
===================================================================
--- c-lex.c	(revision 128142)
+++ c-lex.c	(working copy)
@@ -268,7 +268,7 @@
 
   update_header_times (new_map->to_file);
   in_system_header = new_map->sysp != 0;
-  lstate->user_owned = new_map->user_owned;
+  lstate->user_owned = new_map->user_owned || MAIN_FILE_P (new_map);
 #ifdef USE_MAPPED_LOCATION
   input_location = new_map->start_location;
 #else
Index: c-parser.c
===================================================================
--- c-parser.c	(revision 128823)
+++ c-parser.c	(working copy)
@@ -1798,12 +1798,15 @@
       do
 	{
 	  struct parsed_hunk *last_used = NULL;
+	  /* It is a bit friendlier for debugging to copy this into a
+	     local.  */
+	  size_t next_token = parser->next_token;
 
 	  ggc_collect ();
 
 	  /* Skip all the hunks that we've handled.  */
 	  while (parser->first_hunk
-		 && parser->next_token >= parser->first_hunk->next_token)
+		 && next_token >= parser->first_hunk->next_token)
 	    {
 	      last_used = parser->first_hunk;
 	      parser->first_hunk = parser->first_hunk->next;
@@ -1813,7 +1816,7 @@
 	     hunk, and there was a hunk open, close it and save its
 	     contents.  */
 	  if (parser->first_hunk
-	      && parser->next_token == parser->first_hunk->start_token)
+	      && next_token == parser->first_hunk->start_token)
 	    {
 	      if (parser->prev_hunk && parsed_any)
 		{
@@ -1829,14 +1832,14 @@
 	     user-owned header, then we choose to hunk by the
 	     declaration, and not by file change events.  FIXME: this
 	     means compilations by root can be somewhat weird.  */
-	  if (!parser->buffer[parser->next_token].in_system_header
-	      && parser->buffer[parser->next_token].user_owned)
+	  if (!parser->buffer[next_token].in_system_header
+	      && parser->buffer[next_token].user_owned)
 	    {
 	      struct parsed_hunk isolani;
 	      /* We don't really need to set all the fields here, but
 		 it does let us modify the functions that might refer
 		 to this structure without being overly careful.  */
-	      isolani.start_token = parser->next_token;
+	      isolani.start_token = next_token;
 	      isolani.next_token = c_parser_find_decl_boundary (parser);
 	      isolani.next = NULL;
 
@@ -1877,7 +1880,7 @@
 	      continue;
 	    }
 	  else if (parser->first_hunk
-		   && parser->next_token == parser->first_hunk->start_token)
+		   && next_token == parser->first_hunk->start_token)
 	    {
 	      /* This will map in the saved bindings and update the
 		 token pointer as side effects.  */



More information about the Gcc-patches mailing list