From 81bbc0ba267fefbb15f6d0f7003126b1bf401ffe Mon Sep 17 00:00:00 2001 From: hobbs Date: Wed, 16 Jul 2003 22:06:03 +0000 Subject: * generic/tcl.h: add recognition of -DTCL_UTF_MAX=6 on the * generic/regcustom.h: make line to support UCS-4 mode. No config arg at this time, as it is not the recommended build mode. --- ChangeLog | 4 ++++ generic/regcustom.h | 6 ++++++ generic/tcl.h | 24 ++++++++++++++++++++---- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index f094a7c..ee220d4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,10 @@ 2003-07-16 Jeff Hobbs + * generic/tcl.h: add recognition of -DTCL_UTF_MAX=6 on the + * generic/regcustom.h: make line to support UCS-4 mode. No config + arg at this time, as it is not the recommended build mode. + * generic/tclPreserve.c: In Result and Preserve'd routines, do not * generic/tclUtil.c: assume that ckfree == free, as that is not * generic/tclResult.c: always true. [Bug 756791] (fuller) diff --git a/generic/regcustom.h b/generic/regcustom.h index 9f505de..e258acd 100644 --- a/generic/regcustom.h +++ b/generic/regcustom.h @@ -91,9 +91,15 @@ typedef int celt; /* type to hold chr, MCCE number, or NOCELT */ #define NOCELT (-1) /* celt value which is not valid chr or MCCE */ #define CHR(c) (UCHAR(c)) /* turn char literal into chr literal */ #define DIGITVAL(c) ((c)-'0') /* turn chr digit into its value */ +#if TCL_UTF_MAX > 3 +#define CHRBITS 32 /* bits in a chr; must not use sizeof */ +#define CHR_MIN 0x00000000 /* smallest and largest chr; the value */ +#define CHR_MAX 0xffffffff /* CHR_MAX-CHR_MIN+1 should fit in uchr */ +#else #define CHRBITS 16 /* bits in a chr; must not use sizeof */ #define CHR_MIN 0x0000 /* smallest and largest chr; the value */ #define CHR_MAX 0xffff /* CHR_MAX-CHR_MIN+1 should fit in uchr */ +#endif /* functions operating on chr */ #define iscalnum(x) Tcl_UniCharIsAlnum(x) diff --git a/generic/tcl.h b/generic/tcl.h index ddf416d..acdf4e0 100644 --- a/generic/tcl.h +++ b/generic/tcl.h @@ -13,7 +13,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tcl.h,v 1.153.2.5 2003/07/15 22:25:32 dgp Exp $ + * RCS: @(#) $Id: tcl.h,v 1.153.2.6 2003/07/16 22:06:04 hobbs Exp $ */ #ifndef _TCL @@ -2168,18 +2168,34 @@ typedef struct Tcl_Parse { #define TCL_CONVERT_UNKNOWN -3 #define TCL_CONVERT_NOSPACE -4 - /* * The maximum number of bytes that are necessary to represent a single - * Unicode character in UTF-8. - */ + * Unicode character in UTF-8. The valid values should be 3 or 6 (or + * perhaps 1 if we want to support a non-unicode enabled core). + * If 3, then Tcl_UniChar must be 2-bytes in size (UCS-2). (default) + * If 6, then Tcl_UniChar must be 4-bytes in size (UCS-4). + * At this time UCS-2 mode is the default and recommended mode. + * UCS-4 is experimental and not recommended. It works for the core, + * but most extensions expect UCS-2. + */ +#ifndef TCL_UTF_MAX #define TCL_UTF_MAX 3 +#endif /* * This represents a Unicode character. Any changes to this should * also be reflected in regcustom.h. */ +#if TCL_UTF_MAX > 3 + /* + * unsigned int isn't 100% accurate as it should be a strict 4-byte + * value (perhaps wchar_t). 64-bit systems may have troubles. The + * size of this value must be reflected correctly in regcustom.h. + */ +typedef unsigned int Tcl_UniChar; +#else typedef unsigned short Tcl_UniChar; +#endif /* -- cgit v0.12