diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2016-04-08 14:55:57 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2016-04-08 14:55:57 (GMT) |
commit | 40226755c8b3dce53359663c442d359c36208b90 (patch) | |
tree | bcf2c2bdeb2b0c5c6c9ed51261baa41ccb7e0406 /generic | |
parent | 255b425c580cec59e9dc545ef92760ac77c70f48 (diff) | |
parent | daaf750d95e22d23e47f846f89b0d7033b4eb0bd (diff) | |
download | tcl-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.c | 19 | ||||
-rw-r--r-- | generic/tclProc.c | 13 | ||||
-rw-r--r-- | generic/zipfs.c | 13 |
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; } |