Fix bug #9963 with abort in "temacs -nw".
authorEli Zaretskii <eliz@gnu.org>
Sun, 6 Nov 2011 18:21:52 +0000 (20:21 +0200)
committerEli Zaretskii <eliz@gnu.org>
Sun, 6 Nov 2011 18:21:52 +0000 (20:21 +0200)
 src/xdisp.c (init_iterator, reseat_to_string): Don't set the
 iterator's bidi_p flag if Vpurify_flag is non-nil.
 (Fcurrent_bidi_paragraph_direction): If Vpurify_flag is non-nil,
 return Qleft_to_right.

src/ChangeLog
src/xdisp.c

index 12e9a5c..e393da2 100644 (file)
@@ -1,3 +1,10 @@
+2011-11-06  Eli Zaretskii  <eliz@gnu.org>
+
+       * xdisp.c (init_iterator, reseat_to_string): Don't set the
+       iterator's bidi_p flag if Vpurify_flag is non-nil.  (Bug#9963)
+       (Fcurrent_bidi_paragraph_direction): If Vpurify_flag is non-nil,
+       return Qleft_to_right.
+
 2011-11-06  Chong Yidong  <cyd@gnu.org>
 
        * window.c (Fwindow_live_p, Fwindow_frame, Fframe_root_window)
index f358cdd..197fb74 100644 (file)
@@ -2763,9 +2763,13 @@ init_iterator (struct it *it, struct window *w,
       /* Do we need to reorder bidirectional text?  Not if this is a
         unibyte buffer: by definition, none of the single-byte
         characters are strong R2L, so no reordering is needed.  And
-        bidi.c doesn't support unibyte buffers anyway.  */
+        bidi.c doesn't support unibyte buffers anyway.  Also, don't
+        reorder while we are loading loadup.el, since the tables of
+        character properties needed for reordering are not yet
+        available.  */
       it->bidi_p =
-       !NILP (BVAR (current_buffer, bidi_display_reordering))
+       NILP (Vpurify_flag)
+       && !NILP (BVAR (current_buffer, bidi_display_reordering))
        && it->multibyte_p;
 
       /* If we are to reorder bidirectional text, init the bidi
@@ -6136,8 +6140,12 @@ reseat_to_string (struct it *it, const char *s, Lisp_Object string,
     it->multibyte_p = multibyte > 0;
 
   /* Bidirectional reordering of strings is controlled by the default
-     value of bidi-display-reordering.  */
-  it->bidi_p = !NILP (BVAR (&buffer_defaults, bidi_display_reordering));
+     value of bidi-display-reordering.  Don't try to reorder while
+     loading loadup.el, as the necessary character property tables are
+     not yet available.  */
+  it->bidi_p =
+    NILP (Vpurify_flag)
+    && !NILP (BVAR (&buffer_defaults, bidi_display_reordering));
 
   if (s == NULL)
     {
@@ -19460,7 +19468,10 @@ See also `bidi-paragraph-direction'.  */)
     }
 
   if (NILP (BVAR (buf, bidi_display_reordering))
-      || NILP (BVAR (buf, enable_multibyte_characters)))
+      || NILP (BVAR (buf, enable_multibyte_characters))
+      /* When we are loading loadup.el, the character property tables
+        needed for bidi iteration are not yet available.  */
+      || !NILP (Vpurify_flag))
     return Qleft_to_right;
   else if (!NILP (BVAR (buf, bidi_paragraph_direction)))
     return BVAR (buf, bidi_paragraph_direction);