Tcl Source Code

Check-in [b8c8cdb8f4]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:[3487626] Backport fix for knownBug test dict-23.2.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | core-8-5-branch
Files: files | file ages | folders
SHA1: b8c8cdb8f4ea3f12faad4429e5edf540fd701878
User & Date: dgp 2013-09-19 04:03:57
Context
2013-09-19
04:27
Stop segfault due to OBOE in CompileWord() calls in [dict lappend] compiler. check-in: 166ffc0cc5 user: dgp tags: trunk
04:20
Stop segfault due to OBOE in CompileWord() calls in [dict lappend] compiler. check-in: 12dfd2bea4 user: dgp tags: core-8-5-branch
04:03
[3487626] Backport fix for knownBug test dict-23.2. check-in: b8c8cdb8f4 user: dgp tags: core-8-5-branch
2013-09-18
19:13
merge release check-in: 6eb7e50d87 user: dgp tags: core-8-5-branch
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to generic/tclCompCmds.c.

6145
6146
6147
6148
6149
6150
6151

6152
6153
6154
6155
6156
6157
6158
{
    Tcl_Token *tokenPtr;
    Tcl_Obj *mapObj, *subcmdObj, *targetCmdObj, *listObj, **elems;
    Tcl_Command ensemble = (Tcl_Command) cmdPtr;
    Tcl_Parse synthetic;
    int len, numBytes, result, flags = 0, i;
    const char *word;


    if (parsePtr->numWords < 2) {
	return TCL_ERROR;
    }

    tokenPtr = TokenAfter(parsePtr->tokenPtr);
    if (tokenPtr->type != TCL_TOKEN_SIMPLE_WORD) {







>







6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
{
    Tcl_Token *tokenPtr;
    Tcl_Obj *mapObj, *subcmdObj, *targetCmdObj, *listObj, **elems;
    Tcl_Command ensemble = (Tcl_Command) cmdPtr;
    Tcl_Parse synthetic;
    int len, numBytes, result, flags = 0, i;
    const char *word;
    DefineLineInformation;

    if (parsePtr->numWords < 2) {
	return TCL_ERROR;
    }

    tokenPtr = TokenAfter(parsePtr->tokenPtr);
    if (tokenPtr->type != TCL_TOKEN_SIMPLE_WORD) {
6383
6384
6385
6386
6387
6388
6389
6390



6391



6392
6393
6394
6395
6396
6397
6398
		sizeof(Tcl_Token) * toCopy);
	synthetic.numTokens += toCopy;
    }

    /*
     * Hand off compilation to the subcommand compiler. At last!
     */




    result = cmdPtr->compileProc(interp, &synthetic, cmdPtr, envPtr);




    /*
     * Clean up if necessary.
     */

    Tcl_FreeParse(&synthetic);
    return result;








>
>
>

>
>
>







6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
		sizeof(Tcl_Token) * toCopy);
	synthetic.numTokens += toCopy;
    }

    /*
     * Hand off compilation to the subcommand compiler. At last!
     */

    mapPtr->loc[eclIndex].line++;
    mapPtr->loc[eclIndex].next++;

    result = cmdPtr->compileProc(interp, &synthetic, cmdPtr, envPtr);

    mapPtr->loc[eclIndex].line--;
    mapPtr->loc[eclIndex].next--;

    /*
     * Clean up if necessary.
     */

    Tcl_FreeParse(&synthetic);
    return result;

Changes to tests/dict.test.

1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
			return [expr {$n - [linenumber]}]
		    }
		}
	    }
	}
    }} [linenumber]
} 5
test dict-23.2 {dict compilation crash: Bug 3487626} knownBug {
    # Something isn't quite right in line number and continuation line
    # tracking; at time of writing, this test produces 7, not 5, which
    # indicates that the extra newlines in the non-script argument are
    # confusing things.
    apply {n {
	set e {}
	set k {}







|







1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
			return [expr {$n - [linenumber]}]
		    }
		}
	    }
	}
    }} [linenumber]
} 5
test dict-23.2 {dict compilation crash: Bug 3487626} {
    # Something isn't quite right in line number and continuation line
    # tracking; at time of writing, this test produces 7, not 5, which
    # indicates that the extra newlines in the non-script argument are
    # confusing things.
    apply {n {
	set e {}
	set k {}