changeset 10146:24032289479c

(report_overlay_modification): Renamed from verify_overlay_modification. (call_overlay_mod_hooks): New args AFTER, ARG1, ARG2, ARG3. Args START, END deleted. Pass each function AFTER, ARG1 and ARG2, and ARG3 if ARG3 is not nil. (verify_overlay_modification): New args AFTER, ARG1, ARG2, ARG3. Pass them to call_overlay_mod_hooks.
author Richard M. Stallman <rms@gnu.org>
date Sun, 11 Dec 1994 11:30:43 +0000
parents 0091da658d85
children ab78d1d2f5d7
files src/buffer.c
diffstat 1 files changed, 27 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/buffer.c	Sun Dec 11 11:30:08 1994 +0000
+++ b/src/buffer.c	Sun Dec 11 11:30:43 1994 +0000
@@ -2281,20 +2281,27 @@
 /* Run the modification-hooks of overlays that include
    any part of the text in START to END.
    Run the insert-before-hooks of overlay starting at END,
-   and the insert-after-hooks of overlay ending at START.  */
+   and the insert-after-hooks of overlay ending at START.
+
+   This is called both before and after the modification.
+   AFTER is nonzero when we call after the modification.
+
+   ARG1, ARG2, ARG3 are arguments to pass to the hook functions.  */
 
 void
-verify_overlay_modification (start, end)
+report_overlay_modification (start, end, after, arg1, arg2, arg3)
      Lisp_Object start, end;
+     int after;
+     Lisp_Object arg1, arg2, arg3;
 {
   Lisp_Object prop, overlay, tail;
   int insertion = EQ (start, end);
   int tail_copied;
-  struct gcpro gcpro1, gcpro2;
+  struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
 
   overlay = Qnil;
   tail = Qnil;
-  GCPRO2 (overlay, tail);
+  GCPRO5 (overlay, tail, arg1, arg2, arg3);
 
   tail_copied = 0;
   for (tail = current_buffer->overlays_before;
@@ -2321,7 +2328,7 @@
 	      if (!tail_copied)
 		tail = Fcopy_sequence (tail);
 	      tail_copied = 1;
-	      call_overlay_mod_hooks (prop, overlay, start, end);
+	      call_overlay_mod_hooks (prop, overlay, after, arg1, arg2, arg3);
 	    }
 	}
       if (XFASTINT (start) == endpos && insertion)
@@ -2332,7 +2339,7 @@
 	      if (!tail_copied)
 		tail = Fcopy_sequence (tail);
 	      tail_copied = 1;
-	      call_overlay_mod_hooks (prop, overlay, start, end);
+	      call_overlay_mod_hooks (prop, overlay, after, arg1, arg2, arg3);
 	    }
 	}
       /* Test for intersecting intervals.  This does the right thing
@@ -2345,7 +2352,7 @@
 	      if (!tail_copied)
 		tail = Fcopy_sequence (tail);
 	      tail_copied = 1;
-	      call_overlay_mod_hooks (prop, overlay, start, end);
+	      call_overlay_mod_hooks (prop, overlay, after, arg1, arg2, arg3);
 	    }
 	}
     }
@@ -2374,7 +2381,7 @@
 	      if (!tail_copied)
 		tail = Fcopy_sequence (tail);
 	      tail_copied = 1;
-	      call_overlay_mod_hooks (prop, overlay, start, end);
+	      call_overlay_mod_hooks (prop, overlay, after, arg1, arg2, arg3);
 	    }
 	}
       if (XFASTINT (start) == endpos && insertion)
@@ -2385,7 +2392,7 @@
 	      if (!tail_copied)
 		tail = Fcopy_sequence (tail);
 	      tail_copied = 1;
-	      call_overlay_mod_hooks (prop, overlay, start, end);
+	      call_overlay_mod_hooks (prop, overlay, after, arg1, arg2, arg3);
 	    }
 	}
       /* Test for intersecting intervals.  This does the right thing
@@ -2398,7 +2405,7 @@
 	      if (!tail_copied)
 		tail = Fcopy_sequence (tail);
 	      tail_copied = 1;
-	      call_overlay_mod_hooks (prop, overlay, start, end);
+	      call_overlay_mod_hooks (prop, overlay, after, arg1, arg2, arg3);
 	    }
 	}
     }
@@ -2407,14 +2414,19 @@
 }
 
 static void
-call_overlay_mod_hooks (list, overlay, start, end)
-     Lisp_Object list, overlay, start, end;
+call_overlay_mod_hooks (list, overlay, after, arg1, arg2, arg3)
+     Lisp_Object list, overlay;
+     int after;
+     Lisp_Object arg1, arg2, arg3;
 {
-  struct gcpro gcpro1;
-  GCPRO1 (list);
+  struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
+  GCPRO4 (list, arg1, arg2, arg3);
   while (!NILP (list))
     {
-      call3 (Fcar (list), overlay, start, end);
+      if (NILP (arg3))
+	call4 (Fcar (list), overlay, after ? Qt : Qnil, arg1, arg2);
+      else
+	call5 (Fcar (list), overlay, after ? Qt : Qnil, arg1, arg2, arg3);
       list = Fcdr (list);
     }
   UNGCPRO;