summaryrefslogtreecommitdiffstats
path: root/generic/tclStringObj.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2024-06-19 09:25:51 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2024-06-19 09:25:51 (GMT)
commit96dd069f9fc0b4e987db3a0ee7dde49edd93d3af (patch)
tree6d6df6037727c460a921918e2c1f7c8d56ef61a4 /generic/tclStringObj.c
parent5c6b7dbf18cbb7a2ecb9a064790d175411e9b066 (diff)
parentd064b77a41441825f6578546de36e0122cd344d0 (diff)
downloadtcl-96dd069f9fc0b4e987db3a0ee7dde49edd93d3af.zip
tcl-96dd069f9fc0b4e987db3a0ee7dde49edd93d3af.tar.gz
tcl-96dd069f9fc0b4e987db3a0ee7dde49edd93d3af.tar.bz2
Merge trunk
Diffstat (limited to 'generic/tclStringObj.c')
-rw-r--r--generic/tclStringObj.c120
1 files changed, 59 insertions, 61 deletions
diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c
index c29d964..75b4fdd 100644
--- a/generic/tclStringObj.c
+++ b/generic/tclStringObj.c
@@ -1,24 +1,24 @@
/*
* tclStringObj.c --
*
- * This file contains functions that implement string operations on Tcl
- * objects. Some string operations work with UTF-8 encoding forms.
- * Functions that require knowledge of the width of each character,
- * such as indexing, operate on fixed width encoding forms such as UTF-32.
+ * This file contains functions that implement string operations on Tcl
+ * objects. Some string operations work with UTF-8 encoding forms.
+ * Functions that require knowledge of the width of each character,
+ * such as indexing, operate on fixed width encoding forms such as UTF-32.
*
- * Conceptually, a string is a sequence of Unicode code points. Internally
- * it may be stored in an encoding form such as a modified version of
- * UTF-8 or UTF-32.
+ * Conceptually, a string is a sequence of Unicode code points. Internally
+ * it may be stored in an encoding form such as a modified version of
+ * UTF-8 or UTF-32.
*
* The String object is optimized for the case where each UTF char
* in a string is only one byte. In this case, we store the value of
* numChars, but we don't store the fixed form encoding (unless
- * Tcl_GetUnicode is explicitly called).
+ * Tcl_GetUnicode is explicitly called).
*
- * The String object type stores one or both formats. The default
- * behavior is to store UTF-8. Once UTF-16/UTF32 is calculated, it is
- * stored in the internal rep for future access (without an additional
- * O(n) cost).
+ * The String object type stores one or both formats. The default
+ * behavior is to store UTF-8. Once UTF-16/UTF32 is calculated, it is
+ * stored in the internal rep for future access (without an additional
+ * O(n) cost).
*
* To allow many appends to be done to an object without constantly
* reallocating space, we allocate double the space and use the
@@ -124,8 +124,8 @@ const Tcl_ObjType tclStringType = {
static void
GrowStringBuffer(
Tcl_Obj *objPtr,
- Tcl_Size needed, /* Not including terminating nul */
- int flag) /* If 0, try to overallocate */
+ Tcl_Size needed, /* Not including terminating nul */
+ int flag) /* If 0, try to overallocate */
{
/*
* Preconditions:
@@ -718,8 +718,8 @@ Tcl_GetUnicodeFromObj(
Tcl_Obj *
Tcl_GetRange(
Tcl_Obj *objPtr, /* The Tcl object to find the range of. */
- Tcl_Size first, /* First index of the range. */
- Tcl_Size last) /* Last index of the range. */
+ Tcl_Size first, /* First index of the range. */
+ Tcl_Size last) /* Last index of the range. */
{
Tcl_Obj *newObjPtr; /* The Tcl object to find the range of. */
String *stringPtr;
@@ -1322,7 +1322,7 @@ Tcl_AppendUnicodeToObj(
const Tcl_UniChar *unicode, /* The Unicode string to append to the
* object. */
Tcl_Size length) /* Number of chars in Unicode. Negative
- * lengths means nul terminated */
+ * lengths means nul terminated */
{
String *stringPtr;
@@ -2151,7 +2151,7 @@ Tcl_AppendFormatToObj(
goto error;
}
if ((unsigned)code > 0x10FFFF) {
- code = 0xFFFD;
+ code = 0xFFFD;
}
length = Tcl_UniCharToUtf(code, buf);
segment = Tcl_NewStringObj(buf, length);
@@ -2971,11 +2971,11 @@ TclGetStringStorage(
* Performs the [string repeat] function.
*
* Results:
- * A (Tcl_Obj *) pointing to the result value, or NULL in case of an
- * error.
+ * A (Tcl_Obj *) pointing to the result value, or NULL in case of an
+ * error.
*
* Side effects:
- * On error, when interp is not NULL, error information is left in it.
+ * On error, when interp is not NULL, error information is left in it.
*
*---------------------------------------------------------------------------
*/
@@ -2998,8 +2998,8 @@ TclStringRepeat(
/*
* Analyze to determine what representation result should be.
* GOALS: Avoid shimmering & string rep generation.
- * Produce pure bytearray when possible.
- * Error on overflow.
+ * Produce pure bytearray when possible.
+ * Error on overflow.
*/
if (!binary) {
@@ -3033,11 +3033,9 @@ TclStringRepeat(
/* maxCount includes space for null */
if (count > (maxCount-1)) {
if (interp) {
- Tcl_SetObjResult(
- interp,
- Tcl_ObjPrintf("max size for a Tcl value (%" TCL_SIZE_MODIFIER
- "d bytes) exceeded",
- TCL_SIZE_MAX));
+ Tcl_SetObjResult(interp, Tcl_ObjPrintf(
+ "max size for a Tcl value (%" TCL_SIZE_MODIFIER
+ "d bytes) exceeded", TCL_SIZE_MAX));
Tcl_SetErrorCode(interp, "TCL", "MEMORY", (char *)NULL);
}
return NULL;
@@ -3128,11 +3126,11 @@ TclStringRepeat(
* Performs the [string cat] function.
*
* Results:
- * A (Tcl_Obj *) pointing to the result value, or NULL in case of an
- * error.
+ * A (Tcl_Obj *) pointing to the result value, or NULL in case of an
+ * error.
*
* Side effects:
- * On error, when interp is not NULL, error information is left in it.
+ * On error, when interp is not NULL, error information is left in it.
*
*---------------------------------------------------------------------------
*/
@@ -3166,8 +3164,8 @@ TclStringCat(
/*
* Analyze to determine what representation result should be.
* GOALS: Avoid shimmering & string rep generation.
- * Produce pure bytearray when possible.
- * Error on overflow.
+ * Produce pure bytearray when possible.
+ * Error on overflow.
*/
ov = objv, oc = objc;
@@ -3184,10 +3182,10 @@ TclStringCat(
* create a pure bytearray.
*/
- binary = 0;
- if (ov > objv+1 && ISCONTINUATION(TclGetString(objPtr))) {
- forceUniChar = 1;
- } else if ((objPtr->typePtr) && TclHasInternalRep(objPtr, &tclStringType)) {
+ binary = 0;
+ if (ov > objv+1 && ISCONTINUATION(TclGetString(objPtr))) {
+ forceUniChar = 1;
+ } else if ((objPtr->typePtr) && TclHasInternalRep(objPtr, &tclStringType)) {
/* Prevent shimmer of non-string types. */
allowUniChar = 0;
}
@@ -3286,11 +3284,11 @@ TclStringCat(
} while (--oc && (length == 0) && (pendingPtr == NULL));
/*
- * Either we found a possibly non-empty value, and we remember
- * this index as the first and last such value so far seen,
+ * Either we found a possibly non-empty value, and we remember
+ * this index as the first and last such value so far seen,
* or (oc == 0) and all values are known empty,
- * so first = last = objc - 1 signals the right quick return.
- */
+ * so first = last = objc - 1 signals the right quick return.
+ */
first = last = objc - oc - 1;
@@ -3401,7 +3399,7 @@ TclStringCat(
if (0 == Tcl_AttemptSetObjLength(objResultPtr, length)) {
if (interp) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "concatenation failed: unable to alloc %"
+ "concatenation failed: unable to alloc %"
TCL_Z_MODIFIER "u bytes",
STRING_SIZE(length)));
Tcl_SetErrorCode(interp, "TCL", "MEMORY", (char *)NULL);
@@ -3418,7 +3416,7 @@ TclStringCat(
Tcl_DecrRefCount(objResultPtr);
if (interp) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "concatenation failed: unable to alloc %"
+ "concatenation failed: unable to alloc %"
TCL_Z_MODIFIER "u bytes",
STRING_SIZE(length)));
Tcl_SetErrorCode(interp, "TCL", "MEMORY", (char *)NULL);
@@ -3450,7 +3448,7 @@ TclStringCat(
if (0 == Tcl_AttemptSetObjLength(objResultPtr, length)) {
if (interp) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "concatenation failed: unable to alloc %" TCL_SIZE_MODIFIER "d bytes",
+ "concatenation failed: unable to alloc %" TCL_SIZE_MODIFIER "d bytes",
length));
Tcl_SetErrorCode(interp, "TCL", "MEMORY", (char *)NULL);
}
@@ -3465,7 +3463,7 @@ TclStringCat(
Tcl_DecrRefCount(objResultPtr);
if (interp) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "concatenation failed: unable to alloc %" TCL_SIZE_MODIFIER "d bytes",
+ "concatenation failed: unable to alloc %" TCL_SIZE_MODIFIER "d bytes",
length));
Tcl_SetErrorCode(interp, "TCL", "MEMORY", (char *)NULL);
}
@@ -3492,7 +3490,8 @@ TclStringCat(
overflow:
if (interp) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "max size for a Tcl value (%" TCL_SIZE_MODIFIER "d bytes) exceeded", TCL_SIZE_MAX));
+ "max size for a Tcl value (%" TCL_SIZE_MODIFIER
+ "d bytes) exceeded", TCL_SIZE_MAX));
Tcl_SetErrorCode(interp, "TCL", "MEMORY", (char *)NULL);
}
return NULL;
@@ -3516,9 +3515,9 @@ TclStringCat(
static int
UniCharNcasememcmp(
- const void *ucsPtr, /* Unicode string to compare to uct. */
- const void *uctPtr, /* Unicode string ucs is compared to. */
- size_t numChars) /* Number of Unichars to compare. */
+ const void *ucsPtr, /* Unicode string to compare to uct. */
+ const void *uctPtr, /* Unicode string ucs is compared to. */
+ size_t numChars) /* Number of Unichars to compare. */
{
const Tcl_UniChar *ucs = (const Tcl_UniChar *)ucsPtr;
const Tcl_UniChar *uct = (const Tcl_UniChar *)uctPtr;
@@ -3539,7 +3538,7 @@ static int
UtfNmemcmp(
const void *csPtr, /* UTF string to compare to ct. */
const void *ctPtr, /* UTF string cs is compared to. */
- size_t numChars) /* Number of UTF chars to compare. */
+ size_t numChars) /* Number of UTF chars to compare. */
{
Tcl_UniChar ch1 = 0, ch2 = 0;
const char *cs = (const char *)csPtr;
@@ -3571,7 +3570,7 @@ static int
UtfNcasememcmp(
const void *csPtr, /* UTF string to compare to ct. */
const void *ctPtr, /* UTF string cs is compared to. */
- size_t numChars) /* Number of UTF chars to compare. */
+ size_t numChars) /* Number of UTF chars to compare. */
{
Tcl_UniChar ch1 = 0, ch2 = 0;
const char *cs = (const char *)csPtr;
@@ -3598,9 +3597,9 @@ UtfNcasememcmp(
static int
UniCharNmemcmp(
- const void *ucsPtr, /* Unicode string to compare to uct. */
- const void *uctPtr, /* Unicode string ucs is compared to. */
- size_t numChars) /* Number of unichars to compare. */
+ const void *ucsPtr, /* Unicode string to compare to uct. */
+ const void *uctPtr, /* Unicode string ucs is compared to. */
+ size_t numChars) /* Number of unichars to compare. */
{
const Tcl_UniChar *ucs = (const Tcl_UniChar *)ucsPtr;
const Tcl_UniChar *uct = (const Tcl_UniChar *)uctPtr;
@@ -3632,7 +3631,7 @@ TclStringCmp(
int checkEq, /* comparison is only for equality */
int nocase, /* comparison is not case sensitive */
Tcl_Size reqlength) /* requested length in characters;
- * TCL_INDEX_NONE to compare whole strings */
+ * TCL_INDEX_NONE to compare whole strings */
{
const char *s1, *s2;
int empty, match;
@@ -3678,9 +3677,8 @@ TclStringCmp(
&& (value1Ptr->bytes != NULL)
&& (s2len == value2Ptr->length)
&& (value2Ptr->bytes != NULL)) {
- /* each byte represents one character so s1l3n, s2l3n, and
- * reqlength are in both bytes and characters
- */
+ /* each byte represents one character so s1l3n, s2l3n,
+ * and reqlength are in both bytes and characters */
s1 = value1Ptr->bytes;
s2 = value2Ptr->bytes;
memCmpFn = memcmp;
@@ -3941,10 +3939,10 @@ TclStringLast(
if (ln == 0) {
/*
- * We don't find empty substrings. Bizarre!
+ * We don't find empty substrings. Bizarre!
*
- * TODO: When we one day make this a true substring
- * finder, change this to "return last", after limitation.
+ * TODO: When we one day make this a true substring
+ * finder, change this to "return last", after limitation.
*/
goto lastEnd;
}