changeset 20766:92c662c4ab0e

(back_comment): Move the find_defun_start call out of the scan_sexps_forward call. No need to call find_defun_start if we found the defun start in the initial scan.
author Richard M. Stallman <rms@gnu.org>
date Sun, 25 Jan 1998 01:55:51 +0000
parents 2bdc3877262b
children ad6c6f1bd674
files src/syntax.c
diffstat 1 files changed, 19 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/syntax.c	Sat Jan 24 16:13:08 1998 +0000
+++ b/src/syntax.c	Sun Jan 25 01:55:51 1998 +0000
@@ -407,9 +407,15 @@
   int comment_end = from;
   int comment_end_byte = from_byte;
   int comstart_pos = 0;
+  int comstart_byte;
+  /* Value that PARITY had, when we reached the position
+     in COMSTART_POS.  */
   int comstart_parity = 0;
-  int comstart_byte;
   int scanstart = from - 1;
+  /* Place where the containing defun starts,
+     or 0 if we didn't come across it yet.  */
+  int defun_start = 0;
+  int defun_start_byte = 0;
   register enum syntaxcode code;
   int c;
 
@@ -497,7 +503,11 @@
 	  && (from == stop
 	      || (temp_byte = dec_bytepos (from_byte),
 		  FETCH_CHAR (temp_byte) == '\n')))
-	break;
+	{
+	  defun_start = from;
+	  defun_start_byte = from_byte;
+	  break;
+	}
     }
 
   if (comstart_pos == 0)
@@ -525,9 +535,14 @@
 	 to the one in question; this records where we
 	 last passed a comment starter.  */
       struct lisp_parse_state state;
+      /* If we did not already find the defun start, find it now.  */
+      if (defun_start == 0)
+	{
+	  defun_start = find_defun_start (comment_end, comment_end_byte);
+	  defun_start_byte = find_start_value_byte;
+	}
       scan_sexps_forward (&state,
-			  find_defun_start (comment_end, comment_end_byte),
-			  find_start_value_byte,
+			  defun_start, defun_start_byte,
 			  comment_end - 1, -10000, 0, Qnil, 0);
       if (state.incomment)
 	{