# HG changeset patch # User Katsumi Yamaoka # Date 1272286115 0 # Node ID 07667a45e6789c3be9f984f37c6ee8f540b4b301 # Parent 2d8a4d7868715e2a144963b3e64385eeb39f8226# Parent 769f66a9a7ef80812a72ba7caf0bf49fb844a5b1 Merge from mainline. diff -r 2d8a4d786871 -r 07667a45e678 src/ChangeLog --- a/src/ChangeLog Sun Apr 25 13:11:29 2010 +0000 +++ b/src/ChangeLog Mon Apr 26 12:48:35 2010 +0000 @@ -1,3 +1,38 @@ +2010-04-26 Kenichi Handa + + * composite.c (Ffind_composition_internal): Fix the return value + for an automatic composition. + +2010-04-25 Dan Nicolaescu + + Remove all NO_ARG_ARRAY uses. + * fns.c (concat2, concat3, nconc2): + * eval.c (apply1, call1, call2, call3, call4, call5, call6) + (call7): Remove NO_ARG_ARRAY usage, assume it's always true. + * m/xtensa.h (NO_ARG_ARRAY): + * m/template.h (NO_ARG_ARRAY): + * m/sparc.h (NO_ARG_ARRAY): + * m/sh3.h (NO_ARG_ARRAY): + * m/mips.h (NO_ARG_ARRAY): + * m/macppc.h (NO_ARG_ARRAY): + * m/iris4d.h (NO_ARG_ARRAY): + * m/intel386.h (NO_ARG_ARRAY): + * m/ibms390x.h (NO_ARG_ARRAY): + * m/ibms390.h (NO_ARG_ARRAY): + * m/ibmrs6000.h (NO_ARG_ARRAY): + * m/ia64.h (NO_ARG_ARRAY): + * m/hp800.h (NO_ARG_ARRAY): + * m/arm.h (NO_ARG_ARRAY): + * m/amdx86-64.h (NO_ARG_ARRAY): + * m/alpha.h (NO_ARG_ARRAY): Remove definition. + +2010-04-25 Eli Zaretskii + + * xdisp.c (display_line): Don't assume 2nd call to + get_next_display_element cannot return zero. (Bug#6030) + (iterate_out_of_display_property): New function, body from pop_it. + (pop_it): Use it. + 2010-04-24 Glenn Morris * m/amdx86-64.h (START_FILES, LIB_STANDARD) [__OpenBSD__]: diff -r 2d8a4d786871 -r 07667a45e678 src/composite.c --- a/src/composite.c Sun Apr 25 13:11:29 2010 +0000 +++ b/src/composite.c Mon Apr 26 12:48:35 2010 +0000 @@ -1674,7 +1674,7 @@ if (find_automatic_composition (from, to, &s, &e, &gstring, string) && (e <= XINT (pos) ? e > end : s < start)) - return list3 (make_number (start), make_number (end), gstring); + return list3 (make_number (s), make_number (e), gstring); } if (!COMPOSITION_VALID_P (start, end, prop)) return Fcons (make_number (start), Fcons (make_number (end), diff -r 2d8a4d786871 -r 07667a45e678 src/eval.c --- a/src/eval.c Sun Apr 25 13:11:29 2010 +0000 +++ b/src/eval.c Mon Apr 26 12:48:35 2010 +0000 @@ -2786,7 +2786,6 @@ if (NILP (arg)) RETURN_UNGCPRO (Ffuncall (1, &fn)); gcpro1.nvars = 2; -#ifdef NO_ARG_ARRAY { Lisp_Object args[2]; args[0] = fn; @@ -2794,9 +2793,6 @@ gcpro1.var = args; RETURN_UNGCPRO (Fapply (2, args)); } -#else /* not NO_ARG_ARRAY */ - RETURN_UNGCPRO (Fapply (2, &fn)); -#endif /* not NO_ARG_ARRAY */ } /* Call function fn on no arguments */ @@ -2817,7 +2813,6 @@ Lisp_Object fn, arg1; { struct gcpro gcpro1; -#ifdef NO_ARG_ARRAY Lisp_Object args[2]; args[0] = fn; @@ -2825,11 +2820,6 @@ GCPRO1 (args[0]); gcpro1.nvars = 2; RETURN_UNGCPRO (Ffuncall (2, args)); -#else /* not NO_ARG_ARRAY */ - GCPRO1 (fn); - gcpro1.nvars = 2; - RETURN_UNGCPRO (Ffuncall (2, &fn)); -#endif /* not NO_ARG_ARRAY */ } /* Call function fn with 2 arguments arg1, arg2 */ @@ -2839,7 +2829,6 @@ Lisp_Object fn, arg1, arg2; { struct gcpro gcpro1; -#ifdef NO_ARG_ARRAY Lisp_Object args[3]; args[0] = fn; args[1] = arg1; @@ -2847,11 +2836,6 @@ GCPRO1 (args[0]); gcpro1.nvars = 3; RETURN_UNGCPRO (Ffuncall (3, args)); -#else /* not NO_ARG_ARRAY */ - GCPRO1 (fn); - gcpro1.nvars = 3; - RETURN_UNGCPRO (Ffuncall (3, &fn)); -#endif /* not NO_ARG_ARRAY */ } /* Call function fn with 3 arguments arg1, arg2, arg3 */ @@ -2861,7 +2845,6 @@ Lisp_Object fn, arg1, arg2, arg3; { struct gcpro gcpro1; -#ifdef NO_ARG_ARRAY Lisp_Object args[4]; args[0] = fn; args[1] = arg1; @@ -2870,11 +2853,6 @@ GCPRO1 (args[0]); gcpro1.nvars = 4; RETURN_UNGCPRO (Ffuncall (4, args)); -#else /* not NO_ARG_ARRAY */ - GCPRO1 (fn); - gcpro1.nvars = 4; - RETURN_UNGCPRO (Ffuncall (4, &fn)); -#endif /* not NO_ARG_ARRAY */ } /* Call function fn with 4 arguments arg1, arg2, arg3, arg4 */ @@ -2884,7 +2862,6 @@ Lisp_Object fn, arg1, arg2, arg3, arg4; { struct gcpro gcpro1; -#ifdef NO_ARG_ARRAY Lisp_Object args[5]; args[0] = fn; args[1] = arg1; @@ -2894,11 +2871,6 @@ GCPRO1 (args[0]); gcpro1.nvars = 5; RETURN_UNGCPRO (Ffuncall (5, args)); -#else /* not NO_ARG_ARRAY */ - GCPRO1 (fn); - gcpro1.nvars = 5; - RETURN_UNGCPRO (Ffuncall (5, &fn)); -#endif /* not NO_ARG_ARRAY */ } /* Call function fn with 5 arguments arg1, arg2, arg3, arg4, arg5 */ @@ -2908,7 +2880,6 @@ Lisp_Object fn, arg1, arg2, arg3, arg4, arg5; { struct gcpro gcpro1; -#ifdef NO_ARG_ARRAY Lisp_Object args[6]; args[0] = fn; args[1] = arg1; @@ -2919,11 +2890,6 @@ GCPRO1 (args[0]); gcpro1.nvars = 6; RETURN_UNGCPRO (Ffuncall (6, args)); -#else /* not NO_ARG_ARRAY */ - GCPRO1 (fn); - gcpro1.nvars = 6; - RETURN_UNGCPRO (Ffuncall (6, &fn)); -#endif /* not NO_ARG_ARRAY */ } /* Call function fn with 6 arguments arg1, arg2, arg3, arg4, arg5, arg6 */ @@ -2933,7 +2899,6 @@ Lisp_Object fn, arg1, arg2, arg3, arg4, arg5, arg6; { struct gcpro gcpro1; -#ifdef NO_ARG_ARRAY Lisp_Object args[7]; args[0] = fn; args[1] = arg1; @@ -2945,11 +2910,6 @@ GCPRO1 (args[0]); gcpro1.nvars = 7; RETURN_UNGCPRO (Ffuncall (7, args)); -#else /* not NO_ARG_ARRAY */ - GCPRO1 (fn); - gcpro1.nvars = 7; - RETURN_UNGCPRO (Ffuncall (7, &fn)); -#endif /* not NO_ARG_ARRAY */ } /* Call function fn with 7 arguments arg1, arg2, arg3, arg4, arg5, arg6, arg7 */ @@ -2959,7 +2919,6 @@ Lisp_Object fn, arg1, arg2, arg3, arg4, arg5, arg6, arg7; { struct gcpro gcpro1; -#ifdef NO_ARG_ARRAY Lisp_Object args[8]; args[0] = fn; args[1] = arg1; @@ -2972,11 +2931,6 @@ GCPRO1 (args[0]); gcpro1.nvars = 8; RETURN_UNGCPRO (Ffuncall (8, args)); -#else /* not NO_ARG_ARRAY */ - GCPRO1 (fn); - gcpro1.nvars = 8; - RETURN_UNGCPRO (Ffuncall (8, &fn)); -#endif /* not NO_ARG_ARRAY */ } /* The caller should GCPRO all the elements of ARGS. */ diff -r 2d8a4d786871 -r 07667a45e678 src/fns.c --- a/src/fns.c Sun Apr 25 13:11:29 2010 +0000 +++ b/src/fns.c Mon Apr 26 12:48:35 2010 +0000 @@ -392,14 +392,10 @@ concat2 (s1, s2) Lisp_Object s1, s2; { -#ifdef NO_ARG_ARRAY Lisp_Object args[2]; args[0] = s1; args[1] = s2; return concat (2, args, Lisp_String, 0); -#else - return concat (2, &s1, Lisp_String, 0); -#endif /* NO_ARG_ARRAY */ } /* ARGSUSED */ @@ -407,15 +403,11 @@ concat3 (s1, s2, s3) Lisp_Object s1, s2, s3; { -#ifdef NO_ARG_ARRAY Lisp_Object args[3]; args[0] = s1; args[1] = s2; args[2] = s3; return concat (3, args, Lisp_String, 0); -#else - return concat (3, &s1, Lisp_String, 0); -#endif /* NO_ARG_ARRAY */ } DEFUN ("append", Fappend, Sappend, 0, MANY, 0, @@ -2344,14 +2336,10 @@ nconc2 (s1, s2) Lisp_Object s1, s2; { -#ifdef NO_ARG_ARRAY Lisp_Object args[2]; args[0] = s1; args[1] = s2; return Fnconc (2, args); -#else - return Fnconc (2, &s1); -#endif /* NO_ARG_ARRAY */ } DEFUN ("nconc", Fnconc, Snconc, 0, MANY, 0, diff -r 2d8a4d786871 -r 07667a45e678 src/m/alpha.h --- a/src/m/alpha.h Sun Apr 25 13:11:29 2010 +0000 +++ b/src/m/alpha.h Mon Apr 26 12:48:35 2010 +0000 @@ -41,11 +41,6 @@ #undef WORDS_BIG_ENDIAN -/* Define NO_ARG_ARRAY if you cannot take the address of the first of a - * group of arguments and treat it as an array of the arguments. */ - -#define NO_ARG_ARRAY - /* Now define a symbol for the cpu type, if your compiler does not define it automatically. */ diff -r 2d8a4d786871 -r 07667a45e678 src/m/amdx86-64.h --- a/src/m/amdx86-64.h Sun Apr 25 13:11:29 2010 +0000 +++ b/src/m/amdx86-64.h Mon Apr 26 12:48:35 2010 +0000 @@ -38,11 +38,6 @@ #undef WORDS_BIG_ENDIAN -/* Define NO_ARG_ARRAY if you cannot take the address of the first of a - * group of arguments and treat it as an array of the arguments. */ - -#define NO_ARG_ARRAY - /* Now define a symbol for the cpu type, if your compiler does not define it automatically: Ones defined so far include vax, m68000, ns16000, pyramid, diff -r 2d8a4d786871 -r 07667a45e678 src/m/arm.h --- a/src/m/arm.h Sun Apr 25 13:11:29 2010 +0000 +++ b/src/m/arm.h Mon Apr 26 12:48:35 2010 +0000 @@ -24,16 +24,6 @@ #undef WORDS_BIG_ENDIAN -/* Define NO_ARG_ARRAY if you cannot take the address of the first of a - * group of arguments and treat it as an array of the arguments. We can't - * do this on the arm with gcc, since the first 4 args are in registers. */ - -#ifdef __GNUC__ -#define NO_ARG_ARRAY -#else -#undef NO_ARG_ARRAY -#endif - #define NO_REMAP /* armin76@gentoo.org reported that the lgcc_s flag is necessary to diff -r 2d8a4d786871 -r 07667a45e678 src/m/hp800.h --- a/src/m/hp800.h Sun Apr 25 13:11:29 2010 +0000 +++ b/src/m/hp800.h Mon Apr 26 12:48:35 2010 +0000 @@ -27,11 +27,6 @@ #define WORDS_BIG_ENDIAN -/* Define NO_ARG_ARRAY if you cannot take the address of the first of a - * group of arguments and treat it as an array of the arguments. */ - -#define NO_ARG_ARRAY - /* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend the bit field into an int. In other words, if bit fields are always unsigned. diff -r 2d8a4d786871 -r 07667a45e678 src/m/ia64.h --- a/src/m/ia64.h Sun Apr 25 13:11:29 2010 +0000 +++ b/src/m/ia64.h Mon Apr 26 12:48:35 2010 +0000 @@ -26,11 +26,6 @@ #undef WORDS_BIG_ENDIAN -/* Define NO_ARG_ARRAY if you cannot take the address of the first of a - group of arguments and treat it as an array of the arguments. */ - -#define NO_ARG_ARRAY - /* Now define a symbol for the cpu type, if your compiler does not define it automatically. */ diff -r 2d8a4d786871 -r 07667a45e678 src/m/ibmrs6000.h --- a/src/m/ibmrs6000.h Sun Apr 25 13:11:29 2010 +0000 +++ b/src/m/ibmrs6000.h Mon Apr 26 12:48:35 2010 +0000 @@ -22,11 +22,6 @@ operating system this machine is likely to run. USUAL-OPSYS="aix3-1" */ -/* Define NO_ARG_ARRAY if you cannot take the address of the first of a - * group of arguments and treat it as an array of the arguments. */ - -#define NO_ARG_ARRAY - /* Now define a symbol for the cpu type, if your compiler does not define it automatically. */ diff -r 2d8a4d786871 -r 07667a45e678 src/m/ibms390.h --- a/src/m/ibms390.h Sun Apr 25 13:11:29 2010 +0000 +++ b/src/m/ibms390.h Mon Apr 26 12:48:35 2010 +0000 @@ -27,11 +27,6 @@ #define WORDS_BIG_ENDIAN -/* Define NO_ARG_ARRAY if you cannot take the address of the first of a - * group of arguments and treat it as an array of the arguments. */ - -#define NO_ARG_ARRAY - /* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend the 24-bit bit field into an int. In other words, if bit fields are always unsigned. diff -r 2d8a4d786871 -r 07667a45e678 src/m/ibms390x.h --- a/src/m/ibms390x.h Sun Apr 25 13:11:29 2010 +0000 +++ b/src/m/ibms390x.h Mon Apr 26 12:48:35 2010 +0000 @@ -40,11 +40,6 @@ #define WORDS_BIG_ENDIAN -/* Define NO_ARG_ARRAY if you cannot take the address of the first of a - * group of arguments and treat it as an array of the arguments. */ - -#define NO_ARG_ARRAY - /* Define the type to use. */ #define EMACS_INT long #define EMACS_UINT unsigned long diff -r 2d8a4d786871 -r 07667a45e678 src/m/intel386.h --- a/src/m/intel386.h Sun Apr 25 13:11:29 2010 +0000 +++ b/src/m/intel386.h Mon Apr 26 12:48:35 2010 +0000 @@ -39,11 +39,6 @@ #undef WORDS_BIG_ENDIAN -/* Define NO_ARG_ARRAY if you cannot take the address of the first of a - * group of arguments and treat it as an array of the arguments. */ - -/* #define NO_ARG_ARRAY */ - #ifdef USG #define TEXT_START 0 #endif /* USG */ @@ -51,7 +46,6 @@ #ifdef WINDOWSNT #define VIRT_ADDR_VARIES #define DATA_START get_data_start () -#define NO_ARG_ARRAY #endif #ifdef GNU_LINUX diff -r 2d8a4d786871 -r 07667a45e678 src/m/iris4d.h --- a/src/m/iris4d.h Sun Apr 25 13:11:29 2010 +0000 +++ b/src/m/iris4d.h Mon Apr 26 12:48:35 2010 +0000 @@ -23,11 +23,6 @@ #define WORDS_BIG_ENDIAN -/* Define NO_ARG_ARRAY if you cannot take the address of the first of a - * group of arguments and treat it as an array of the arguments. */ - -#define NO_ARG_ARRAY - /* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend the bit field into an int. In other words, if bit fields are always unsigned. diff -r 2d8a4d786871 -r 07667a45e678 src/m/macppc.h --- a/src/m/macppc.h Sun Apr 25 13:11:29 2010 +0000 +++ b/src/m/macppc.h Mon Apr 26 12:48:35 2010 +0000 @@ -22,11 +22,6 @@ #define WORDS_BIG_ENDIAN -/* Define NO_ARG_ARRAY if you cannot take the address of the first of a - * group of arguments and treat it as an array of the arguments. */ - -#define NO_ARG_ARRAY - /* Data type of load average, as read out of kmem. */ #define LOAD_AVE_TYPE long diff -r 2d8a4d786871 -r 07667a45e678 src/m/mips.h --- a/src/m/mips.h Sun Apr 25 13:11:29 2010 +0000 +++ b/src/m/mips.h Mon Apr 26 12:48:35 2010 +0000 @@ -33,11 +33,6 @@ #define WORDS_BIG_ENDIAN #endif -/* Define NO_ARG_ARRAY if you cannot take the address of the first of a - * group of arguments and treat it as an array of the arguments. */ - -#define NO_ARG_ARRAY - /* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend the 24-bit bit field into an int. In other words, if bit fields are always unsigned. diff -r 2d8a4d786871 -r 07667a45e678 src/m/sh3.h --- a/src/m/sh3.h Sun Apr 25 13:11:29 2010 +0000 +++ b/src/m/sh3.h Mon Apr 26 12:48:35 2010 +0000 @@ -4,7 +4,5 @@ # define WORDS_BIG_ENDIAN #endif -#define NO_ARG_ARRAY - /* arch-tag: 1b01b84f-f044-4afa-aa4b-caa54ec38966 (do not change this comment) */ diff -r 2d8a4d786871 -r 07667a45e678 src/m/sparc.h --- a/src/m/sparc.h Sun Apr 25 13:11:29 2010 +0000 +++ b/src/m/sparc.h Mon Apr 26 12:48:35 2010 +0000 @@ -31,11 +31,6 @@ #define WORDS_BIG_ENDIAN -/* Define NO_ARG_ARRAY if you cannot take the address of the first of a - * group of arguments and treat it as an array of the arguments. */ - -#define NO_ARG_ARRAY - /* __sparc__ is defined by the compiler by default. */ /* XINT must explicitly sign-extend diff -r 2d8a4d786871 -r 07667a45e678 src/m/template.h --- a/src/m/template.h Sun Apr 25 13:11:29 2010 +0000 +++ b/src/m/template.h Mon Apr 26 12:48:35 2010 +0000 @@ -27,11 +27,6 @@ #define WORDS_BIG_ENDIAN -/* Define NO_ARG_ARRAY if you cannot take the address of the first of a - * group of arguments and treat it as an array of the arguments. */ - -#define NO_ARG_ARRAY - /* Now define a symbol for the cpu type, if your compiler does not define it automatically. Ones defined so far include m68k and many others */ diff -r 2d8a4d786871 -r 07667a45e678 src/m/xtensa.h --- a/src/m/xtensa.h Sun Apr 25 13:11:29 2010 +0000 +++ b/src/m/xtensa.h Mon Apr 26 12:48:35 2010 +0000 @@ -2,8 +2,6 @@ Add a license notice if this grows to > 10 lines of code. */ -#define NO_ARG_ARRAY - #ifdef __LITTLE_ENDIAN #undef WORDS_BIG_ENDIAN #else diff -r 2d8a4d786871 -r 07667a45e678 src/xdisp.c --- a/src/xdisp.c Sun Apr 25 13:11:29 2010 +0000 +++ b/src/xdisp.c Mon Apr 26 12:48:35 2010 +0000 @@ -5259,6 +5259,33 @@ ++it->sp; } +static void +iterate_out_of_display_property (it) + struct it *it; +{ + /* Maybe initialize paragraph direction. If we are at the beginning + of a new paragraph, next_element_from_buffer may not have a + chance to do that. */ + if (it->bidi_it.first_elt && it->bidi_it.charpos < ZV) + bidi_paragraph_init (it->paragraph_embedding, &it->bidi_it); + /* prev_stop can be zero, so check against BEGV as well. */ + while (it->bidi_it.charpos >= BEGV + && it->prev_stop <= it->bidi_it.charpos + && it->bidi_it.charpos < CHARPOS (it->position)) + bidi_get_next_char_visually (&it->bidi_it); + /* Record the stop_pos we just crossed, for when we cross it + back, maybe. */ + if (it->bidi_it.charpos > CHARPOS (it->position)) + it->prev_stop = CHARPOS (it->position); + /* If we ended up not where pop_it put us, resync IT's + positional members with the bidi iterator. */ + if (it->bidi_it.charpos != CHARPOS (it->position)) + { + SET_TEXT_POS (it->position, + it->bidi_it.charpos, it->bidi_it.bytepos); + it->current.pos = it->position; + } +} /* Restore IT's settings from IT->stack. Called, for example, when no more overlay strings must be processed, and we return to delivering @@ -5309,25 +5336,7 @@ determine the paragraph base direction if the overlay we just processed is at the beginning of a new paragraph. */ - if (it->bidi_it.first_elt && it->bidi_it.charpos < ZV) - bidi_paragraph_init (it->paragraph_embedding, &it->bidi_it); - /* prev_stop can be zero, so check against BEGV as well. */ - while (it->bidi_it.charpos >= BEGV - && it->prev_stop <= it->bidi_it.charpos - && it->bidi_it.charpos < CHARPOS (it->position)) - bidi_get_next_char_visually (&it->bidi_it); - /* Record the stop_pos we just crossed, for when we cross it - back, maybe. */ - if (it->bidi_it.charpos > CHARPOS (it->position)) - it->prev_stop = CHARPOS (it->position); - /* If we ended up not where pop_it put us, resync IT's - positional members with the bidi iterator. */ - if (it->bidi_it.charpos != CHARPOS (it->position)) - { - SET_TEXT_POS (it->position, - it->bidi_it.charpos, it->bidi_it.bytepos); - it->current.pos = it->position; - } + iterate_out_of_display_property (it); } break; case GET_FROM_STRING: @@ -17979,9 +17988,8 @@ row_end = it->current; /* If the character at max_pos+1 is a newline, skip that as well. Note that this may skip some invisible text. */ - if (!get_next_display_element (it)) - abort (); - if (ITERATOR_AT_END_OF_LINE_P (it)) + if (get_next_display_element (it) + && ITERATOR_AT_END_OF_LINE_P (it)) { set_iterator_to_next (it, 1); /* Record the position after the newline of a continued