Fix for Bug#5984.
authorAndreas Schwab <schwab@linux-m68k.org>
Fri, 30 Apr 2010 16:00:48 +0000 (12:00 -0400)
committerChong Yidong <cyd@stupidchicken.com>
Fri, 30 Apr 2010 16:00:48 +0000 (12:00 -0400)
* 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.

src/ChangeLog
src/composite.c
src/fileio.c
src/lisp.h

index d061857..29506be 100644 (file)
@@ -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
index 632c9f9..1295a03 100644 (file)
@@ -990,6 +990,14 @@ autocmp_chars (cft_element, charpos, bytepos, limit, win, face, string)
            {
              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 @@ autocmp_chars (cft_element, charpos, bytepos, limit, win, face, string)
              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);
        }
     }
index a80ba11..440a726 100644 (file)
@@ -302,7 +302,7 @@ close_file_unwind (fd)
 
 /* Restore point, having saved it as a marker.  */
 
-static Lisp_Object
+Lisp_Object
 restore_point_unwind (location)
      Lisp_Object location;
 {
index 7f5d5df..6cbf35c 100644 (file)
@@ -3018,6 +3018,7 @@ EXFUN (Ffile_readable_p, 1);
 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));