Commit cef90102 authored by Paul Eggert's avatar Paul Eggert
Browse files

SCHARS and STRING_BYTES are nonnegative

Tell the compiler that SCHARS and STRING_BYTES are nonnegative, in
the hopes that this will optimize a bit better.  Also, check this
at runtime if ENABLE_CHECKING.
* src/lisp.h (SCHARS, STRING_BYTES):
eassume that these functions return nonnegative values.
(STRING_SET_CHARS) [ENABLE_CHECKING]:
eassert that newsize is nonnegative.
parent 24f011d5
......@@ -1346,7 +1346,9 @@ SSET (Lisp_Object string, ptrdiff_t index, unsigned char new)
INLINE ptrdiff_t
SCHARS (Lisp_Object string)
{
return XSTRING (string)->size;
ptrdiff_t nchars = XSTRING (string)->size;
eassume (0 <= nchars);
return nchars;
}
#ifdef GC_CHECK_STRING_BYTES
......@@ -1356,10 +1358,12 @@ INLINE ptrdiff_t
STRING_BYTES (struct Lisp_String *s)
{
#ifdef GC_CHECK_STRING_BYTES
return string_bytes (s);
ptrdiff_t nbytes = string_bytes (s);
#else
return s->size_byte < 0 ? s->size : s->size_byte;
ptrdiff_t nbytes = s->size_byte < 0 ? s->size : s->size_byte;
#endif
eassume (0 <= nbytes);
return nbytes;
}
INLINE ptrdiff_t
......@@ -1373,7 +1377,7 @@ STRING_SET_CHARS (Lisp_Object string, ptrdiff_t newsize)
/* This function cannot change the size of data allocated for the
string when it was created. */
eassert (STRING_MULTIBYTE (string)
? newsize <= SBYTES (string)
? 0 <= newsize && newsize <= SBYTES (string)
: newsize == SCHARS (string));
XSTRING (string)->size = newsize;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment