summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2016-04-08 14:55:57 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2016-04-08 14:55:57 (GMT)
commit40226755c8b3dce53359663c442d359c36208b90 (patch)
treebcf2c2bdeb2b0c5c6c9ed51261baa41ccb7e0406 /generic
parent255b425c580cec59e9dc545ef92760ac77c70f48 (diff)
parentdaaf750d95e22d23e47f846f89b0d7033b4eb0bd (diff)
downloadtcl-40226755c8b3dce53359663c442d359c36208b90.zip
tcl-40226755c8b3dce53359663c442d359c36208b90.tar.gz
tcl-40226755c8b3dce53359663c442d359c36208b90.tar.bz2
Merge core-8-6-branch, cherry-pick [http://www.androwish.org/index.html/info/04ea31271c40789d|04ea31271c40789d]
Diffstat (limited to 'generic')
-rw-r--r--generic/regc_lex.c19
-rw-r--r--generic/tclProc.c13
-rw-r--r--generic/zipfs.c13
3 files changed, 31 insertions, 14 deletions
diff --git a/generic/regc_lex.c b/generic/regc_lex.c
index 16e3ae9..affcb48 100644
--- a/generic/regc_lex.c
+++ b/generic/regc_lex.c
@@ -256,20 +256,33 @@ static const chr brbacks[] = { /* \s within brackets */
CHR('s'), CHR('p'), CHR('a'), CHR('c'), CHR('e'),
CHR(':'), CHR(']')
};
+
+#define PUNCT_CONN \
+ CHR('_'), \
+ 0x203f /* UNDERTIE */, \
+ 0x2040 /* CHARACTER TIE */,\
+ 0x2054 /* INVERTED UNDERTIE */,\
+ 0xfe33 /* PRESENTATION FORM FOR VERTICAL LOW LINE */, \
+ 0xfe34 /* PRESENTATION FORM FOR VERTICAL WAVY LOW LINE */, \
+ 0xfe4d /* DASHED LOW LINE */, \
+ 0xfe4e /* CENTRELINE LOW LINE */, \
+ 0xfe4f /* WAVY LOW LINE */, \
+ 0xff3f /* FULLWIDTH LOW LINE */
+
static const chr backw[] = { /* \w */
CHR('['), CHR('['), CHR(':'),
CHR('a'), CHR('l'), CHR('n'), CHR('u'), CHR('m'),
- CHR(':'), CHR(']'), CHR('_'), CHR(']')
+ CHR(':'), CHR(']'), PUNCT_CONN, CHR(']')
};
static const chr backW[] = { /* \W */
CHR('['), CHR('^'), CHR('['), CHR(':'),
CHR('a'), CHR('l'), CHR('n'), CHR('u'), CHR('m'),
- CHR(':'), CHR(']'), CHR('_'), CHR(']')
+ CHR(':'), CHR(']'), PUNCT_CONN, CHR(']')
};
static const chr brbackw[] = { /* \w within brackets */
CHR('['), CHR(':'),
CHR('a'), CHR('l'), CHR('n'), CHR('u'), CHR('m'),
- CHR(':'), CHR(']'), CHR('_')
+ CHR(':'), CHR(']'), PUNCT_CONN
};
/*
diff --git a/generic/tclProc.c b/generic/tclProc.c
index 9770d26..172b860 100644
--- a/generic/tclProc.c
+++ b/generic/tclProc.c
@@ -69,9 +69,8 @@ const Tcl_ObjType tclProcBodyType = {
};
/*
- * The [upvar]/[uplevel] level reference type. Uses the twoPtrValue field,
- * encoding the type of level reference in ptr and the actual parsed out
- * offset in ptr2.
+ * The [upvar]/[uplevel] level reference type. Uses the longValue field
+ * to remember the integer value of a parsed #<integer> format.
*
* Uses the default behaviour throughout, and never disposes of the string
* rep; it's just a cache type.
@@ -785,7 +784,7 @@ TclGetFrame(
* Results:
* The return value is -1 if an error occurred in finding the frame (in
* this case an error message is left in the interp's result). 1 is
- * returned if objPtr was either a number or a number preceded by "#" and
+ * returned if objPtr was either an int or an int preceded by "#" and
* it specified a valid frame. 0 is returned if objPtr isn't one of the
* two things above (in this case, the lookup acts as if objPtr were
* "1"). The variable pointed to by framePtrPtr is filled in with the
@@ -807,7 +806,6 @@ TclObjGetFrame(
{
register Interp *iPtr = (Interp *) interp;
int curLevel, level, result;
- CallFrame *framePtr;
const char *name = NULL;
/*
@@ -829,7 +827,7 @@ TclObjGetFrame(
level = curLevel - level;
result = 1;
} else if (objPtr->typePtr == &levelReferenceType) {
- level = PTR2INT(objPtr->internalRep.twoPtrValue.ptr1);
+ level = (int) objPtr->internalRep.longValue;
result = 1;
} else {
name = TclGetString(objPtr);
@@ -837,7 +835,7 @@ TclObjGetFrame(
if (TCL_OK == Tcl_GetInt(NULL, name+1, &level) && level >= 0) {
TclFreeIntRep(objPtr);
objPtr->typePtr = &levelReferenceType;
- objPtr->internalRep.twoPtrValue.ptr1 = INT2PTR(level);
+ objPtr->internalRep.longValue = level;
result = 1;
} else {
result = -1;
@@ -857,6 +855,7 @@ TclObjGetFrame(
}
if (result != -1) {
if (level >= 0) {
+ CallFrame *framePtr;
for (framePtr = iPtr->varFramePtr; framePtr != NULL;
framePtr = framePtr->callerVarPtr) {
if (framePtr->level == level) {
diff --git a/generic/zipfs.c b/generic/zipfs.c
index c2effac..ea8cd16 100644
--- a/generic/zipfs.c
+++ b/generic/zipfs.c
@@ -3606,15 +3606,20 @@ Zip_FSListVolumesProc(void)
while (hPtr != NULL) {
zf = (ZipFile *) Tcl_GetHashValue(hPtr);
#if HAS_DRIVES
- vol = Tcl_ObjPrintf("%c:%s", zf->mntdrv, zf->mntpt);
+ vol = Tcl_ObjPrintf("%c:%s", zf->mntdrv,
+ zf->mntpt[0] ? zf->mntpt : "/");
#else
- vol = Tcl_NewStringObj(zf->mntpt, zf->mntptlen);
+ if (zf->mntpt[0]) {
+ vol = Tcl_NewStringObj(zf->mntpt, zf->mntptlen);
+ } else {
+ vol = Tcl_NewStringObj("/", 1);
+ }
#endif
- Tcl_ListObjAppendList(NULL, vols, vol);
- Tcl_DecrRefCount(vol);
+ Tcl_ListObjAppendElement(NULL, vols, vol);
hPtr = Tcl_NextHashEntry(&search);
}
Unlock();
+ Tcl_IncrRefCount(vols);
return vols;
}