diff options
Diffstat (limited to 'generic/tclParse.c')
| -rw-r--r-- | generic/tclParse.c | 50 | 
1 files changed, 26 insertions, 24 deletions
| diff --git a/generic/tclParse.c b/generic/tclParse.c index f0050c6..ee0d4c4 100644 --- a/generic/tclParse.c +++ b/generic/tclParse.c @@ -15,6 +15,7 @@  #include "tclInt.h"  #include "tclParse.h" +#include <assert.h>  /*   * The following table provides parsing information about each possible 8-bit @@ -42,7 +43,7 @@   * TYPE_BRACE -		Character is a curly brace (either left or right).   */ -const char charTypeTable[] = { +const char tclCharTypeTable[] = {      /*       * Negative character values, from -128 to -1:       */ @@ -258,7 +259,8 @@ Tcl_ParseCommand(      if ((start == NULL) && (numBytes != 0)) {  	if (interp != NULL) { -	    Tcl_SetResult(interp, "can't parse a NULL pointer", TCL_STATIC); +	    Tcl_SetObjResult(interp, Tcl_NewStringObj( +		    "can't parse a NULL pointer", -1));  	}  	return TCL_ERROR;      } @@ -568,14 +570,14 @@ Tcl_ParseCommand(  	}  	if (src[-1] == '"') {  	    if (interp != NULL) { -		Tcl_SetResult(interp, "extra characters after close-quote", -			TCL_STATIC); +		Tcl_SetObjResult(interp, Tcl_NewStringObj( +			"extra characters after close-quote", -1));  	    }  	    parsePtr->errorType = TCL_PARSE_QUOTE_EXTRA;  	} else {  	    if (interp != NULL) { -		Tcl_SetResult(interp, "extra characters after close-brace", -			TCL_STATIC); +		Tcl_SetObjResult(interp, Tcl_NewStringObj( +			"extra characters after close-brace", -1));  	    }  	    parsePtr->errorType = TCL_PARSE_BRACE_EXTRA;  	} @@ -1175,8 +1177,8 @@ ParseTokens(  		}  		if (numBytes == 0) {  		    if (parsePtr->interp != NULL) { -			Tcl_SetResult(parsePtr->interp, -				"missing close-bracket", TCL_STATIC); +			Tcl_SetObjResult(parsePtr->interp, Tcl_NewStringObj( +				"missing close-bracket", -1));  		    }  		    parsePtr->errorType = TCL_PARSE_MISSING_BRACKET;  		    parsePtr->term = tokenPtr->start; @@ -1411,8 +1413,8 @@ Tcl_ParseVarName(  	}  	if (numBytes == 0) {  	    if (parsePtr->interp != NULL) { -		Tcl_SetResult(parsePtr->interp, -			"missing close-brace for variable name", TCL_STATIC); +		Tcl_SetObjResult(parsePtr->interp, Tcl_NewStringObj( +			"missing close-brace for variable name", -1));  	    }  	    parsePtr->errorType = TCL_PARSE_MISSING_VAR_BRACE;  	    parsePtr->term = tokenPtr->start-1; @@ -1479,8 +1481,8 @@ Tcl_ParseVarName(  	    }  	    if ((parsePtr->term == src+numBytes) || (*parsePtr->term != ')')){  		if (parsePtr->interp != NULL) { -		    Tcl_SetResult(parsePtr->interp, "missing )", -			    TCL_STATIC); +		    Tcl_SetObjResult(parsePtr->interp, Tcl_NewStringObj( +			    "missing )", -1));  		}  		parsePtr->errorType = TCL_PARSE_MISSING_PAREN;  		parsePtr->term = src; @@ -1566,6 +1568,7 @@ Tcl_ParseVar(      code = TclSubstTokens(interp, parsePtr->tokenPtr, parsePtr->numTokens,  	    NULL, 1, NULL, NULL); +    Tcl_FreeParse(parsePtr);      TclStackFree(interp, parsePtr);      if (code != TCL_OK) {  	return NULL; @@ -1576,16 +1579,13 @@ Tcl_ParseVar(       * At this point we should have an object containing the value of a       * variable. Just return the string from that object.       * -     * This should have returned the object for the user to manage, but -     * instead we have some weak reference to the string value in the object, -     * which is why we make sure the object exists after resetting the result. -     * This isn't ideal, but it's the best we can do with the current -     * documented interface. -- hobbs +     * Since TclSubstTokens above returned TCL_OK, we know that objPtr +     * is shared.  It is in both the interp result and the value of the +     * variable.  Returning the string relies on that to be true.       */ -    if (!Tcl_IsShared(objPtr)) { -	Tcl_IncrRefCount(objPtr); -    } +    assert( Tcl_IsShared(objPtr) ); +      Tcl_ResetResult(interp);      return TclGetString(objPtr);  } @@ -1755,7 +1755,8 @@ Tcl_ParseBraces(  	goto error;      } -    Tcl_SetResult(parsePtr->interp, "missing close-brace", TCL_STATIC); +    Tcl_SetObjResult(parsePtr->interp, Tcl_NewStringObj( +	    "missing close-brace", -1));      /*       * Guess if the problem is due to comments by searching the source string @@ -1777,8 +1778,8 @@ Tcl_ParseBraces(  		break;  	    case '#' :  		if (openBrace && TclIsSpaceProc(src[-1])) { -		    Tcl_AppendResult(parsePtr->interp, -			    ": possible unbalanced brace in comment", NULL); +		    Tcl_AppendToObj(Tcl_GetObjResult(parsePtr->interp), +			    ": possible unbalanced brace in comment", -1);  		    goto error;  		}  		break; @@ -1857,7 +1858,8 @@ Tcl_ParseQuotedString(      }      if (*parsePtr->term != '"') {  	if (parsePtr->interp != NULL) { -	    Tcl_SetResult(parsePtr->interp, "missing \"", TCL_STATIC); +	    Tcl_SetObjResult(parsePtr->interp, Tcl_NewStringObj( +		    "missing \"", -1));  	}  	parsePtr->errorType = TCL_PARSE_MISSING_QUOTE;  	parsePtr->term = start; | 
