diff options
Diffstat (limited to 'ChangeLog')
-rw-r--r-- | ChangeLog | 34 |
1 files changed, 34 insertions, 0 deletions
@@ -1,3 +1,37 @@ +2006-07-05 Don Porter <dgp@users.sourceforge.net> + + * generic/tclParseExpr.c: Completely new expression parser + that builds a parse tree instead of operating with deep recursion. + This corrects reports of stack-blowing crashes parsing long + expressions [Bug 906201] and replaces a fundamentally O(N^2) + algorithm with an O(N) one [RFE 903765]. The new parser is better + able to generate error messages that clearly report both the nature + and context of the syntax error [Bugs 1029267, 1381715]. For now, + the code for the old parser is still present and can be activated + with a "#define OLD_EXPR_PARSER 1". This is for the sake of a clean + implementation patch, and for ease of benchmarking. The new parser + is non-recursive, so much lighter in stack consumption, but it + does use more heap, so there may be cases where parsing of long + expressions that succeeded with the old parser will lead to out + of memory panics with the new one. There are still more improvements + possible on that point, though significant progress may require + changes to the Tcl_Token specifications documented for the public + Tcl_Parse*() routines. + ***POTENTIAL INCOMPATIBILITY*** for any callers that rely on the + exact (usually terrible) error messages generated by the old parser. + This includes a large number of tests in the test suite. + + * generic/tclInt.h: Replaced TclParseWhiteSpace() with + * generic/tclParse.c: TclParseAllWhiteSpace() which is what + * generic/tclParseExpr.c: all the callers really needed. + Breaking whitespace runs at newlines is useful only to the command + parsing function, and it can call the file scoped routine + ParseWhiteSpace() to do that. + + * tests/expr-old.test: Removed knownBug constraints that masked + * tests/expr.test: failures due to revised error messages. + * tests/parseExpr.test: + 2006-06-20 Don Porter <dgp@users.sourceforge.net> * generic/tclIOUtil.c: Changed default configuration to |