changeset 108361:c1fe9f79424a

Fix for Bug#5984. * composite.c (autocmp_chars): Save point as marker before calling auto-composition-function. * lisp.h (restore_point_unwind): Add prototype. * fileio.c (restore_point_unwind): Remove static attribute.
author Chong Yidong <cyd@stupidchicken.com>
date Fri, 30 Apr 2010 12:00:48 -0400
parents 6b4205b02fd5
children e9328d74ba23
files src/ChangeLog src/composite.c src/fileio.c src/lisp.h
diffstat 4 files changed, 23 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Wed Apr 28 21:38:12 2010 -0500
+++ b/src/ChangeLog	Fri Apr 30 12:00:48 2010 -0400
@@ -1,3 +1,12 @@
+2010-04-30  Andreas Schwab  <schwab@linux-m68k.org>
+
+	* composite.c (autocmp_chars): Save point as marker before calling
+	auto-composition-function (Bug#5984).
+
+	* lisp.h (restore_point_unwind): Add prototype.
+
+	* fileio.c (restore_point_unwind): Remove static attribute.
+
 2010-04-23  Kenichi Handa  <handa@m17n.org>
 
 	* ftfont.c (M17N_FLT_USE_NEW_FEATURE): Define it if we can use the
--- a/src/composite.c	Wed Apr 28 21:38:12 2010 -0500
+++ b/src/composite.c	Fri Apr 30 12:00:48 2010 -0400
@@ -990,6 +990,14 @@
 	    {
 	      Lisp_Object args[6];
 
+	      /* Save point as marker before calling out to lisp.  */
+	      if (NILP (string))
+		{
+		  Lisp_Object m = Fmake_marker ();
+		  set_marker_both (m, Qnil, pt, pt_byte);
+		  record_unwind_protect (restore_point_unwind, m);
+		}
+
 	      args[0] = Vauto_composition_function;
 	      args[1] = AREF (elt, 2);
 	      args[2] = pos;
@@ -998,8 +1006,10 @@
 	      args[5] = string;
 	      gstring = safe_call (6, args);
 	    }
-	  if (NILP (string))
-	    TEMP_SET_PT_BOTH (pt, pt_byte);
+	  else if (NILP (string))
+	    {
+	      TEMP_SET_PT_BOTH (pt, pt_byte);
+	    }
 	  return unbind_to (count, gstring);
 	}
     }
--- a/src/fileio.c	Wed Apr 28 21:38:12 2010 -0500
+++ b/src/fileio.c	Fri Apr 30 12:00:48 2010 -0400
@@ -302,7 +302,7 @@
 
 /* Restore point, having saved it as a marker.  */
 
-static Lisp_Object
+Lisp_Object
 restore_point_unwind (location)
      Lisp_Object location;
 {
--- a/src/lisp.h	Wed Apr 28 21:38:12 2010 -0500
+++ b/src/lisp.h	Fri Apr 30 12:00:48 2010 -0400
@@ -3018,6 +3018,7 @@
 EXFUN (Ffile_executable_p, 1);
 EXFUN (Fread_file_name, 6);
 extern Lisp_Object close_file_unwind P_ ((Lisp_Object));
+extern Lisp_Object restore_point_unwind P_ ((Lisp_Object));
 extern void report_file_error P_ ((const char *, Lisp_Object)) NO_RETURN;
 extern int internal_delete_file P_ ((Lisp_Object));
 extern void syms_of_fileio P_ ((void));