HCoop
/
bpt
/
emacs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
use dynwind_begin and dynwind_end
[bpt/emacs.git]
/
src
/
composite.c
diff --git
a/src/composite.c
b/src/composite.c
index
5e14ad0
..
b75ac99
100644
(file)
--- a/
src/composite.c
+++ b/
src/composite.c
@@
-327,7
+327,7
@@
get_composition_id (ptrdiff_t charpos, ptrdiff_t bytepos, ptrdiff_t nchars,
cmp->method = method;
cmp->hash_index = hash_index;
cmp->glyph_len = glyph_len;
cmp->method = method;
cmp->hash_index = hash_index;
cmp->glyph_len = glyph_len;
- cmp->offsets = xnmalloc (glyph_len, 2 * sizeof *cmp->offsets);
+ cmp->offsets = xnmalloc
_atomic
(glyph_len, 2 * sizeof *cmp->offsets);
cmp->font = NULL;
if (cmp->method != COMPOSITION_WITH_RULE_ALTCHARS)
cmp->font = NULL;
if (cmp->method != COMPOSITION_WITH_RULE_ALTCHARS)
@@
-582,7
+582,7
@@
update_compositions (ptrdiff_t from, ptrdiff_t to, int check_mask)
}
if (min_pos < max_pos)
{
}
if (min_pos < max_pos)
{
-
ptrdiff_t count = SPECPDL_INDEX
();
+
dynwind_begin
();
specbind (Qinhibit_read_only, Qt);
specbind (Qinhibit_modification_hooks, Qt);
specbind (Qinhibit_read_only, Qt);
specbind (Qinhibit_modification_hooks, Qt);
@@
-590,7
+590,7
@@
update_compositions (ptrdiff_t from, ptrdiff_t to, int check_mask)
Fremove_list_of_text_properties (make_number (min_pos),
make_number (max_pos),
list1 (Qauto_composed), Qnil);
Fremove_list_of_text_properties (make_number (min_pos),
make_number (max_pos),
list1 (Qauto_composed), Qnil);
-
unbind_to (count, Qnil
);
+
dynwind_end (
);
}
}
}
}
@@
-869,7
+869,7
@@
autocmp_chars (Lisp_Object rule, ptrdiff_t charpos, ptrdiff_t bytepos,
ptrdiff_t limit, struct window *win, struct face *face,
Lisp_Object string)
{
ptrdiff_t limit, struct window *win, struct face *face,
Lisp_Object string)
{
-
ptrdiff_t count = SPECPDL_INDEX
();
+
dynwind_begin
();
struct frame *f = XFRAME (win->frame);
Lisp_Object pos = make_number (charpos);
ptrdiff_t to;
struct frame *f = XFRAME (win->frame);
Lisp_Object pos = make_number (charpos);
ptrdiff_t to;
@@
-881,8
+881,11
@@
autocmp_chars (Lisp_Object rule, ptrdiff_t charpos, ptrdiff_t bytepos,
re = AREF (rule, 0);
if (NILP (re))
len = 1;
re = AREF (rule, 0);
if (NILP (re))
len = 1;
- else if (! STRINGP (re))
- return unbind_to (count, Qnil);
+ else if (! STRINGP (re)){
+
+ dynwind_end ();
+ return Qnil;
+ }
else if ((len = fast_looking_at (re, charpos, bytepos, limit, -1, string))
> 0)
{
else if ((len = fast_looking_at (re, charpos, bytepos, limit, -1, string))
> 0)
{
@@
-891,8
+894,11
@@
autocmp_chars (Lisp_Object rule, ptrdiff_t charpos, ptrdiff_t bytepos,
else
len = string_byte_to_char (string, bytepos + len) - charpos;
}
else
len = string_byte_to_char (string, bytepos + len) - charpos;
}
- if (len <= 0)
- return unbind_to (count, Qnil);
+ if (len <= 0){
+
+ dynwind_end ();
+ return Qnil;
+ }
to = limit = charpos + len;
#ifdef HAVE_WINDOW_SYSTEM
if (FRAME_WINDOW_P (f))
to = limit = charpos + len;
#ifdef HAVE_WINDOW_SYSTEM
if (FRAME_WINDOW_P (f))
@@
-901,8
+907,11
@@
autocmp_chars (Lisp_Object rule, ptrdiff_t charpos, ptrdiff_t bytepos,
if (! FONT_OBJECT_P (font_object)
|| (! NILP (re)
&& to < limit
if (! FONT_OBJECT_P (font_object)
|| (! NILP (re)
&& to < limit
- && (fast_looking_at (re, charpos, bytepos, to, -1, string) <= 0)))
- return unbind_to (count, Qnil);
+ && (fast_looking_at (re, charpos, bytepos, to, -1, string) <= 0))){
+
+ dynwind_end ();
+ return Qnil;
+ }
}
else
#endif /* not HAVE_WINDOW_SYSTEM */
}
else
#endif /* not HAVE_WINDOW_SYSTEM */
@@
-918,7
+927,8
@@
autocmp_chars (Lisp_Object rule, ptrdiff_t charpos, ptrdiff_t bytepos,
lgstring = safe_call (6, Vauto_composition_function, AREF (rule, 2),
pos, make_number (to), font_object, string);
}
lgstring = safe_call (6, Vauto_composition_function, AREF (rule, 2),
pos, make_number (to), font_object, string);
}
- return unbind_to (count, lgstring);
+ dynwind_end ();
+ return lgstring;
}
/* 1 iff the character C is composable. Characters of general
}
/* 1 iff the character C is composable. Characters of general
@@
-1684,9
+1694,10
@@
Otherwise (for terminal display), FONT-OBJECT must be a terminal ID, a
frame, or nil for the selected frame's terminal device.
If the optional 4th argument STRING is not nil, it is a string
frame, or nil for the selected frame's terminal device.
If the optional 4th argument STRING is not nil, it is a string
-containing the target characters between indices FROM and TO.
-Otherwise FROM and TO are character positions in current buffer;
-they can be in either order, and can be integers or markers.
+containing the target characters between indices FROM and TO,
+which are treated as in `substring'. Otherwise FROM and TO are
+character positions in current buffer; they can be in either order,
+and can be integers or markers.
A glyph-string is a vector containing information about how to display
a specific character sequence. The format is:
A glyph-string is a vector containing information about how to display
a specific character sequence. The format is:
@@
-1742,15
+1753,10
@@
should be ignored. */)
}
else
{
}
else
{
- CHECK_NATNUM (from);
- CHECK_NATNUM (to);
CHECK_STRING (string);
CHECK_STRING (string);
+ validate_subarray (string, from, to, SCHARS (string), &frompos, &topos);
if (! STRING_MULTIBYTE (string))
error ("Attempt to shape unibyte text");
if (! STRING_MULTIBYTE (string))
error ("Attempt to shape unibyte text");
- if (! (XINT (from) <= XINT (to) && XINT (to) <= SCHARS (string)))
- args_out_of_range_3 (string, from, to);
- frompos = XFASTINT (from);
- topos = XFASTINT (to);
frombyte = string_char_to_byte (string, frompos);
}
frombyte = string_char_to_byte (string, frompos);
}
@@
-1795,21
+1801,18
@@
DEFUN ("compose-string-internal", Fcompose_string_internal,
Scompose_string_internal, 3, 5, 0,
doc: /* Internal use only.
Scompose_string_internal, 3, 5, 0,
doc: /* Internal use only.
-Compose text between indices START and END of STRING.
-Optional 4th and 5th arguments are COMPONENTS and MODIFICATION-FUNC
+Compose text between indices START and END of STRING, where
+START and END are treated as in `substring'. Optional 4th
+and 5th arguments are COMPONENTS and MODIFICATION-FUNC
for the composition. See `compose-string' for more details. */)
for the composition. See `compose-string' for more details. */)
- (Lisp_Object string, Lisp_Object start, Lisp_Object end, Lisp_Object components, Lisp_Object modification_func)
+ (Lisp_Object string, Lisp_Object start, Lisp_Object end,
+ Lisp_Object components, Lisp_Object modification_func)
{
{
- CHECK_STRING (string);
- CHECK_NUMBER (start);
- CHECK_NUMBER (end);
-
- if (XINT (start) < 0 ||
- XINT (start) > XINT (end)
- || XINT (end) > SCHARS (string))
- args_out_of_range (start, end);
+ ptrdiff_t from, to;
- compose_text (XINT (start), XINT (end), components, modification_func, string);
+ CHECK_STRING (string);
+ validate_subarray (string, start, end, SCHARS (string), &from, &to);
+ compose_text (from, to, components, modification_func, string);
return string;
}
return string;
}
@@
-1903,6
+1906,8
@@
syms_of_composite (void)
{
int i;
{
int i;
+#include "composite.x"
+
DEFSYM (Qcomposition, "composition");
/* Make a hash table for static composition. */
DEFSYM (Qcomposition, "composition");
/* Make a hash table for static composition. */
@@
-2015,9
+2020,4
@@
GSTRING, or modify GSTRING itself and return it.
See also the documentation of `auto-composition-mode'. */);
Vcomposition_function_table = Fmake_char_table (Qnil, Qnil);
See also the documentation of `auto-composition-mode'. */);
Vcomposition_function_table = Fmake_char_table (Qnil, Qnil);
-
- defsubr (&Scompose_region_internal);
- defsubr (&Scompose_string_internal);
- defsubr (&Sfind_composition_internal);
- defsubr (&Scomposition_get_gstring);
}
}