diff options
author | dkf <donal.k.fellows@manchester.ac.uk> | 2012-03-08 09:01:11 (GMT) |
---|---|---|
committer | dkf <donal.k.fellows@manchester.ac.uk> | 2012-03-08 09:01:11 (GMT) |
commit | 6540c1e7abc493b3684a2b1312717329494b96b1 (patch) | |
tree | d7b16f89e6ba2e4f47876aff16fbbf8ae0c19786 /generic | |
parent | e3a722221577f7aaeaa942bb59bbe67306b61229 (diff) | |
parent | 4b85ca90cba7edb9a10caead17ffa8d407e1e2b3 (diff) | |
download | tcl-6540c1e7abc493b3684a2b1312717329494b96b1.zip tcl-6540c1e7abc493b3684a2b1312717329494b96b1.tar.gz tcl-6540c1e7abc493b3684a2b1312717329494b96b1.tar.bz2 |
merge from trunk
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tclLoad.c | 6 | ||||
-rw-r--r-- | generic/tclParse.c | 14 | ||||
-rw-r--r-- | generic/tclParse.h | 17 | ||||
-rw-r--r-- | generic/tclUtil.c | 33 |
4 files changed, 43 insertions, 27 deletions
diff --git a/generic/tclLoad.c b/generic/tclLoad.c index 820707e..202e66a 100644 --- a/generic/tclLoad.c +++ b/generic/tclLoad.c @@ -305,6 +305,12 @@ Tcl_LoadObjCmd( && (pkgGuess[2] == 'b')) { pkgGuess += 3; } +#ifdef __CYGWIN__ + if ((pkgGuess[0] == 'c') && (pkgGuess[1] == 'y') + && (pkgGuess[2] == 'g')) { + pkgGuess += 3; + } +#endif /* __CYGWIN__ */ for (p = pkgGuess; *p != 0; p += offset) { offset = Tcl_UtfToUniChar(p, &ch); if ((ch > 0x100) diff --git a/generic/tclParse.c b/generic/tclParse.c index 3c984bf..f0050c6 100644 --- a/generic/tclParse.c +++ b/generic/tclParse.c @@ -14,6 +14,7 @@ */ #include "tclInt.h" +#include "tclParse.h" /* * The following table provides parsing information about each possible 8-bit @@ -41,18 +42,7 @@ * TYPE_BRACE - Character is a curly brace (either left or right). */ -#define TYPE_NORMAL 0 -#define TYPE_SPACE 0x1 -#define TYPE_COMMAND_END 0x2 -#define TYPE_SUBS 0x4 -#define TYPE_QUOTE 0x8 -#define TYPE_CLOSE_PAREN 0x10 -#define TYPE_CLOSE_BRACK 0x20 -#define TYPE_BRACE 0x40 - -#define CHAR_TYPE(c) (charTypeTable+128)[(int)(c)] - -static const char charTypeTable[] = { +const char charTypeTable[] = { /* * Negative character values, from -128 to -1: */ diff --git a/generic/tclParse.h b/generic/tclParse.h new file mode 100644 index 0000000..be1ab15 --- /dev/null +++ b/generic/tclParse.h @@ -0,0 +1,17 @@ +/* + * Minimal set of shared macro definitions and declarations so that multiple + * source files can make use of the parsing table in tclParse.c + */ + +#define TYPE_NORMAL 0 +#define TYPE_SPACE 0x1 +#define TYPE_COMMAND_END 0x2 +#define TYPE_SUBS 0x4 +#define TYPE_QUOTE 0x8 +#define TYPE_CLOSE_PAREN 0x10 +#define TYPE_CLOSE_BRACK 0x20 +#define TYPE_BRACE 0x40 + +#define CHAR_TYPE(c) (charTypeTable+128)[(int)(c)] + +MODULE_SCOPE const char charTypeTable[]; diff --git a/generic/tclUtil.c b/generic/tclUtil.c index 31c9fd3..6ce430b 100644 --- a/generic/tclUtil.c +++ b/generic/tclUtil.c @@ -13,6 +13,7 @@ */ #include "tclInt.h" +#include "tclParse.h" #include <math.h> /* @@ -972,15 +973,16 @@ TclScanElement( } while (length) { + if (CHAR_TYPE(*p) != TYPE_NORMAL) { switch (*p) { - case '{': + case '{': /* TYPE_BRACE */ #if COMPAT braceCount++; #endif extra++; /* Escape '{' => '\{' */ nestingLevel++; break; - case '}': + case '}': /* TYPE_BRACE */ #if COMPAT braceCount++; #endif @@ -991,8 +993,8 @@ TclScanElement( requireEscape = 1; } break; - case ']': - case '"': + case ']': /* TYPE_CLOSE_BRACK */ + case '"': /* TYPE_SPACE */ #if COMPAT forbidNone = 1; extra++; /* Escapes all just prepend a backslash */ @@ -1001,22 +1003,22 @@ TclScanElement( #else /* FLOW THROUGH */ #endif - case '[': - case '$': - case ';': - case ' ': - case '\f': - case '\n': - case '\r': - case '\t': - case '\v': + case '[': /* TYPE_SUBS */ + case '$': /* TYPE_SUBS */ + case ';': /* TYPE_COMMAND_END */ + case ' ': /* TYPE_SPACE */ + case '\f': /* TYPE_SPACE */ + case '\n': /* TYPE_COMMAND_END */ + case '\r': /* TYPE_SPACE */ + case '\t': /* TYPE_SPACE */ + case '\v': /* TYPE_SPACE */ forbidNone = 1; extra++; /* Escape sequences all one byte longer. */ #if COMPAT preferBrace = 1; #endif break; - case '\\': + case '\\': /* TYPE_SUBS */ extra++; /* Escape '\' => '\\' */ if ((length == 1) || ((length == -1) && (p[1] == '\0'))) { /* Final backslash. Cannot format with brace quoting. */ @@ -1041,13 +1043,14 @@ TclScanElement( preferBrace = 1; #endif break; - case '\0': + case '\0': /* TYPE_SUBS */ if (length == -1) { goto endOfString; } /* TODO: Panic on improper encoding? */ break; } + } length -= (length > 0); p++; } |