Attachment "1201589.patch" to
ticket [1201589fff]
added by
dgp
2005-05-20 21:29:57.
Index: generic/tclParseExpr.c
===================================================================
RCS file: /cvsroot/tcl/tcl/generic/tclParseExpr.c,v
retrieving revision 1.25
diff -u -r1.25 tclParseExpr.c
--- generic/tclParseExpr.c 10 May 2005 18:34:47 -0000 1.25
+++ generic/tclParseExpr.c 20 May 2005 14:23:23 -0000
@@ -1244,6 +1244,7 @@
* Int or double number.
*/
+ tokenizeLiteral:
if (parsePtr->numTokens == parsePtr->tokensAvailable) {
TclExpandTokenArray(parsePtr);
}
@@ -1431,20 +1432,16 @@
}
break;
- case FUNC_NAME:
+ case STREQ:
+ case STRNEQ:
+ case IN_LIST:
+ case NOT_IN_LIST:
+ case FUNC_NAME: {
/*
* math_func '(' expr {',' expr} ')'
*/
-
- if (parsePtr->numTokens == parsePtr->tokensAvailable) {
- TclExpandTokenArray(parsePtr);
- }
- tokenPtr = &parsePtr->tokenPtr[parsePtr->numTokens];
- tokenPtr->type = TCL_TOKEN_OPERATOR;
- tokenPtr->start = infoPtr->start;
- tokenPtr->size = infoPtr->size;
- tokenPtr->numComponents = 0;
- parsePtr->numTokens++;
+
+ ParseInfo savedInfo = *infoPtr;
code = GetLexeme(infoPtr); /* skip over function name */
if (code != TCL_OK) {
@@ -1452,10 +1449,12 @@
}
if (infoPtr->lexeme != OPEN_PAREN) {
+ *infoPtr = savedInfo;
+ goto tokenizeLiteral;
+
/*
* Either there's a math function without a (, or a
* variable name without a '$'.
- */
Tcl_Obj* errMsg
= Tcl_NewStringObj( "syntax error in expression \"", -1 );
@@ -1476,8 +1475,20 @@
infoPtr->parsePtr->errorType = TCL_PARSE_SYNTAX;
infoPtr->parsePtr->term = infoPtr->start;
return TCL_ERROR;
+ */
}
+
+ if (parsePtr->numTokens == parsePtr->tokensAvailable) {
+ TclExpandTokenArray(parsePtr);
+ }
+ tokenPtr = &parsePtr->tokenPtr[parsePtr->numTokens];
+ tokenPtr->type = TCL_TOKEN_OPERATOR;
+ tokenPtr->start = savedInfo.start;
+ tokenPtr->size = savedInfo.size;
+ tokenPtr->numComponents = 0;
+ parsePtr->numTokens++;
+
code = GetLexeme(infoPtr); /* skip over '(' */
if (code != TCL_OK) {
return code;
@@ -1505,6 +1516,7 @@
exprTokenPtr->size = (infoPtr->next - exprTokenPtr->start);
exprTokenPtr->numComponents = parsePtr->numTokens - firstIndex;
break;
+ }
case COMMA:
LogSyntaxError(infoPtr,
@@ -1919,7 +1931,6 @@
parsePtr->term = infoPtr->next;
/*
* Check for boolean literals (true, false, yes, no, on, off)
- */
switch (infoPtr->start[0]) {
case 'f':
if (infoPtr->size == 5 &&
@@ -1961,6 +1972,7 @@
}
break;
}
+ */
return TCL_OK;
}
infoPtr->lexeme = UNKNOWN_CHAR;