Tcl Source Code

Check-in [ca488c3bfe]
Login

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

Overview
Comment:Fix for [86fb5ea28e]. Test will eventually merge in from tip280-test-coverage.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: ca488c3bfec9e01e81f06c5598038b6556e5a831
User & Date: dgp 2013-07-10 17:58:45
Context
2013-07-11
04:07
Add a test for each call to SetLineInformation() demonstrating the need for it to be there. Fixed b... check-in: b5f3a4a690 user: dgp tags: trunk
2013-07-10
18:02
merge trunk check-in: 4e4f10a76c user: dgp tags: tip280-test-coverage
17:58
Fix for [86fb5ea28e]. Test will eventually merge in from tip280-test-coverage. check-in: ca488c3bfe user: dgp tags: trunk
2013-07-08
18:56
Unbreak MSVC6 debug build (thanks Andreas Kupries!) check-in: d369017148 user: jan.nijtmans tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to generic/tclEnsemble.c.

3055
3056
3057
3058
3059
3060
3061

3062
3063
3064
3065
3066
3067
3068
{
    Tcl_Parse synthetic;
    Tcl_Token *tokenPtr;
    int result, i;
    int savedNumCmds = envPtr->numCommands;
    int savedStackDepth = envPtr->currStackDepth;
    unsigned savedCodeNext = envPtr->codeNext - envPtr->codeStart;


    if (cmdPtr->compileProc == NULL) {
	return TCL_ERROR;
    }

    TclParseInit(interp, NULL, 0, &synthetic);
    synthetic.numWords = parsePtr->numWords - depth + 1;







>







3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
{
    Tcl_Parse synthetic;
    Tcl_Token *tokenPtr;
    int result, i;
    int savedNumCmds = envPtr->numCommands;
    int savedStackDepth = envPtr->currStackDepth;
    unsigned savedCodeNext = envPtr->codeNext - envPtr->codeStart;
    DefineLineInformation;

    if (cmdPtr->compileProc == NULL) {
	return TCL_ERROR;
    }

    TclParseInit(interp, NULL, 0, &synthetic);
    synthetic.numWords = parsePtr->numWords - depth + 1;
3102
3103
3104
3105
3106
3107
3108








3109
3110
3111
3112
3113
3114







3115
3116
3117
3118
3119
3120
3121
	TclGrowParseTokenArray(&synthetic, toCopy);
	memcpy(synthetic.tokenPtr + synthetic.numTokens, tokenPtr,
		sizeof(Tcl_Token) * toCopy);
	synthetic.numTokens += toCopy;
	tokenPtr = TokenAfter(tokenPtr);
    }









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

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








    /*
     * If our target fails to compile, revert the number of commands and the
     * pointer to the place to issue the next instruction. [Bug 3600328]
     */

    if (result != TCL_OK) {
	envPtr->numCommands = savedNumCmds;







>
>
>
>
>
>
>
>






>
>
>
>
>
>
>







3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
	TclGrowParseTokenArray(&synthetic, toCopy);
	memcpy(synthetic.tokenPtr + synthetic.numTokens, tokenPtr,
		sizeof(Tcl_Token) * toCopy);
	synthetic.numTokens += toCopy;
	tokenPtr = TokenAfter(tokenPtr);
    }

    /*
     * Shift the line information arrays to account for different word
     * index values.
     */

    mapPtr->loc[eclIndex].line += (depth - 1);
    mapPtr->loc[eclIndex].next += (depth - 1);

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

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

    /*
     * Undo the shift. 
     */

    mapPtr->loc[eclIndex].line -= (depth - 1);
    mapPtr->loc[eclIndex].next -= (depth - 1);

    /*
     * If our target fails to compile, revert the number of commands and the
     * pointer to the place to issue the next instruction. [Bug 3600328]
     */

    if (result != TCL_OK) {
	envPtr->numCommands = savedNumCmds;