/* 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;
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)
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
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 (!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)
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
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);
}
}
}
}
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;