summaryrefslogtreecommitdiffstats
path: root/generic/tclParse.c
Commit message (Collapse)AuthorAgeFilesLines
* Get rid of pre-C89-isms (esp. CONST vs const).dkf2008-04-271-2/+2
|
* Reconcile coding style issues between branchesdgp2008-01-231-7/+9
|
* * generic/tclInt.h: New macro TclGrowParseTokenArray() todgp2008-01-231-66/+14
| | | | | | | | | | | | | | * generic/tclCompCmds.c: simplify code that might need to grow * generic/tclCompExpr.c: an array of Tcl_Tokens in the parsePtr * generic/tclParse.c: field of a Tcl_Parse. Replaces the TclExpandTokenArray() routine via replacing: int needed = parsePtr->numTokens + growth; while (needed > parsePtr->tokensAvailable) { TclExpandTokenArray(parsePtr); } with: TclGrowParseTokenArray(parsePtr, growth); This revision merged over from dgp-refactor branch.
* merge stable branch onto HEADdgp2007-12-131-1/+1
|
* More minor cleanupdkf2007-11-181-127/+124
|
* [Patch 1830038]: Increased usage of macros to detect and take advantage of ↵Miguel Sofer2007-11-111-3/+3
| | | | objTypes.
* * generic/tclParse.c (Tcl_ParseBraces): fix for possible readMiguel Sofer2007-10-151-2/+2
| | | | after the end of buffer, [Bug 1813528] (Joe Mistachkin).
* * generic/tclParse.c: In contexts where interp and parsePtr->interpdgp2007-07-191-20/+20
| | | | | | might be different, be sure to use the latter for error reporting. Also pulled the interp argument back out of ParseTokens() since we already had a parsePtr->interp to work with.
* * generic/tclBasic.c: Move most instances of the Tcl_Parse structdgp2007-06-211-75/+79
| | | | | | * generic/tclCompExpr.c: off the C stack and onto the Tcl stack. * generic/tclCompile.c: This is a rather large struct (> 3kB). * generic/tclParse.c:
* * generic/tclParse.c: fix for uninit read [Bug 1732414].Miguel Sofer2007-06-061-2/+3
|
* * generic/tclBasic.c: Removed code that dealt withdgp2007-05-301-53/+138
| | | | | | | | | | | | | | | | * generic/tclCompile.c: TCL_TOKEN_EXPAND_WORD tokens representing * generic/tclCompile.h: expanded literal words. These sections were mostly in place to enable [info frame] to discover line information in expanded literals. Since the parser now generates a token for each post-expansion word referring to the right location in the original script string, [info frame] gets all the data it needs. * generic/tclInt.h: Revised the parser so that it never produces * generic/tclParse.c: TCL_TOKEN_EXPAND_WORD tokens when parsing an * tests/parse.test: expanded literal word; that is, something like {*}{x y z}. Instead, generate the series of TCL_TOKEN_SIMPLE_WORD tokens to represent the words that expansion of the literal string produces. [RFE 1725186]
* * unix/configure: autoconf-2.59 (FC6 fork)dgp2007-05-181-15/+1
| | | | | | | | | | | | | | | | | * win/configure: * README: Bump version number to 8.5a7 * generic/tcl.h: * library/init.tcl: * tools/tcl.wse.in: * unix/configure.in: * unix/tcl.spec: * win/configure.in: * generic/tclParse.c: Disable and remove the ALLOW_EXPAND sections * tests/info.test: that continued to support the deprecated * tests/mathop.test: {expand} syntax. Updated the few remaining users of that syntax in the test suite.
* Reformat to standard function definition formdkf2007-04-101-24/+27
|
* * generic/tclExecute.c: More ckalloc -> ckrealloc conversions.dgp2007-03-211-9/+10
| | | | | | | | | * generic/tclLiteral.c: * generic/tclNamesp.c: * generic/tclParse.c: * generic/tclPreserve.c: * generic/tclStringObj.c: * generic/tclUtil.c:
* * generic/tclBasic.c: TIP #280 implementation.andreas_kupries2006-11-281-8/+55
| | | | | | | | | | | | | | | | | | | | | * generic/tclCmdAH.c: * generic/tclCmdIL.c: * generic/tclCmdMZ.c: * generic/tclCompCmds.c: * generic/tclCompExpr.c: * generic/tclCompile.c: * generic/tclCompile.h: * generic/tclExecute.c: * generic/tclIOUtil.c: * generic/tclInt.h: * generic/tclInterp.c: * generic/tclNamesp.c: * generic/tclObj.c: * generic/tclProc.c: * tests/compile.test: * tests/info.test: * tests/platform.test: * tests/safe.test:
* * doc/ParseCmd.3, doc/Tcl.n, doc/eval.n, doc/exec.n:hobbs2006-11-031-9/+15
| | | | | | | | | | | | | | | | | | * doc/fconfigure.n, doc/interp.n, doc/unknown.n: * library/auto.tcl, library/init.tcl, library/package.tcl: * library/safe.tcl, library/tm.tcl, library/msgcat/msgcat.tcl: * tests/all.tcl, tests/basic.test, tests/cmdInfo.test: * tests/compile.test, tests/encoding.test, tests/execute.test: * tests/fCmd.test, tests/http.test, tests/init.test: * tests/interp.test, tests/io.test, tests/ioUtil.test: * tests/iogt.test, tests/namespace-old.test, tests/namespace.test: * tests/parse.test, tests/pkg.test, tests/pkgMkIndex.test: * tests/proc.test, tests/reg.test, tests/trace.test: * tests/upvar.test, tests/winConsole.test, tests/winFCmd.test: * tools/tclZIC.tcl: * generic/tclParse.c (Tcl_ParseCommand): Replace {expand} with {*} officially (TIP #293). Leave -DALLOW_EXPAND=0|1 option to keep {expand} syntax for transition users. [Bug 1589629]
* * generic/tclParse.c (Tcl_ParseCommand): also return an error ifMiguel Sofer2006-09-241-2/+2
| | | | start==NULL and numBytes<0. This is coverity's bug #20
* * generic/tclParseExpr.c: Completely new expression parserdgp2006-07-051-16/+48
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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:
* ANSIfy; generic/*.c now all done except for test codedkf2005-11-021-111/+110
|
* * generic/tclParse.c (Tcl_ParseCommand): add code that recognizeshobbs2005-10-041-15/+23
| | | | | {} in addition to {expand} for word expansion (make with -DALLOW_EMPTY_EXPAND).
* Systematizing the formattingdkf2005-07-211-808/+869
|
* Merged kennykb-numerics-branch back to the head; TIPs 132 and 232Kevin B Kenny2005-05-101-1/+1
|
* * doc/DString.3: Eliminated use of identifier "string" in Tcl'sdgp2005-05-031-35/+35
| | | | | | | | | | | | | * doc/Environment.3: public C API to avoid conflict/confusion with * doc/Eval.3: the std::string of C++. * doc/ExprLong.3, doc/ExprLongObj.3, doc/GetInt.3, doc/GetOpnFl.3: * doc/ParseCmd.3, doc/RegExp.3, doc/SetResult.3, doc/StrMatch.3: * doc/Utf.3, generic/tcl.decls, generic/tclBasic.c, generic/tclEnv.c: * generic/tclGet.c, generic/tclParse.c, generic/tclParseExpr.c: * generic/tclRegexp.c, generic/tclResult.c, generic/tclUtf.c: * generic/tclUtil.c, unix/tclUnixChan.c: * generic/tclDecls.h: `make genstubs`
* * generic/tclBasic.c (Tcl_EvalEx): Restored recursion limitdgp2005-03-181-4/+11
| | | | | | | | * generic/tclParse.c (TclSubstTokens): testing in nested command * tests/basic.test (basic-46.4): substitutions within direct * tests/parse.test (parse-19.*): script evaluation (Tcl_EvalEx) that got lost in the parser reforms of Tcl 8.1. Added tests for correct behavior. [Bug 1115904]
* * generic/tclParse.c (Tcl_SubstObj): Fix for failed subst-12.3 test.dgp2004-10-261-2/+2
| | | | * tests/subst.test (subst-12.3-5): More tests for Bug 1036649.
* Braces round if bodies...dkf2004-10-061-2/+3
|
* * generic/tclParse.c (Tcl_SubstObj): leak fix by dgp, releaseMiguel Sofer2004-07-121-1/+2
| | | | result on error.
* Patch 922727 committed. Implements three changes:dgp2004-04-061-2/+1
| | | | | | | | | | | | | | | | | | | | | | | * generic/tclInt.h: Reworked the Tcl header files into a clean * unix/tclUnixPort.h: hierarchy where tcl.h < tclPort.h < tclInt.h * win/tclWinInt.h: and every C source file should #include * win/tclWinPort.h: at most one of those files to satisfy its declaration needs. tclWinInt.h and tclWinPort.h also better organized so that tclWinPort.h includes the Windows implementation of cross-platform declarations, while tclWinInt.h makes declarations that are available on Windows only. * generic/tclBinary.c (TCL_NO_MATH): Deleted the generic/tclMath.h * generic/tclMath.h (removed): header file. The internal Tcl * macosx/Makefile (PRIVATE_HEADERS): header, tclInt.h, has a * win/tcl.dsp: #include <math.h> directly, and file external to Tcl needing libm should do the same. * win/Makefile.in (WIN_OBJS): Deleted the win/tclWinMtherr.c file. * win/makefile.bc (TCLOBJS): It's a vestige from matherr() days * win/makefile.vc (TCLOBJS): gone by. * win/tcl.dsp: * win/tclWinMtherr.c (removed):
* * generic/tclParse.c (TclParseInit): Modified TclParseInit sodgp2004-03-081-8/+5
| | | | | | * generic/tclTest.c ([testexprparser]): that Tcl_Parse initialization conforms to documented promised about what fields will not be modified by what Tcl_Parse* routines. [Bug 910595]
* * generic/tclInt.h (TclParseInit): Factored the common codedgp2004-03-041-15/+12
| | | | | * generic/tclParse.c (TclParseInit): for initializing a Tcl_Parse * generic/tclParseExpr.c: struct into one routine.
* * generic/tclParse.c (InitParse): Factored the common codedgp2004-03-041-45/+45
| | | | for initializing a Tcl_Parse struct into one routine.
* All uses of 'panic' (the macro) changeddavygrvy2003-12-241-2/+2
| | | | | | | to 'Tcl_Panic' (the function). The #define of panic in tcl.h clearly states it is deprecated in the comments. [Patch 865264]
* * generic/tclParse.c: Corrected faulty check for trailing whitedgp2003-11-241-2/+4
| | | | | space in {expand} parsing. Thanks Andreas Leitgeb. [Bug 848262]. * tests/parse.test: New tests for the bug.
* Added cast to suppress compiler warning.dgp2003-11-151-2/+2
|
* * doc/ParseCmd.3: Implementation of TIP 157. Adds recognitiondgp2003-11-141-4/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * doc/Tcl.n: of the new leading {expand} syntax on words. * generic/tcl.h: Parses such words as the new Tcl_Token type * generic/tclBasic.c: TCL_TOKEN_EXPAND_WORD. Updated Tcl_EvalEx * generic/tclCompile.c: and the bytecode compiler/execution engine * generic/tclCompile.h: to recognize the new token type. New opcodes * generic/tclExecute.c: INST_LIST_VERIFY and INST_INVOKE_EXP and a new * generic/tclParse.c: operand type OPERAND_ULIST1 are defined. Docs * generic/tclTest.c: and tests are included. * tests/basic.test: * tests/compile.test: * tests/parse.test: * library/auto.tcl: Replaced several [eval]s used to perform * library/package.tcl: argument expansion with the new syntax. * library/safe.tcl: In the test files lindex.test and lset.test, * tests/cmdInfo.test: replaced use of [eval] to force direct * tests/encoding.test: string evaluation with use of [testevalex] * tests/execute.test: which more directly and robustly serves the * tests/fCmd.test: same purpose. * tests/http.test: * tests/init.test: * tests/interp.test: * tests/io.test: * tests/ioUtil.test: * tests/iogt.test: * tests/lindex.test: * tests/lset.test: * tests/namespace-old.test: * tests/namespace.test: * tests/pkg.test: * tests/pkgMkIndex.test: * tests/proc.test: * tests/reg.test: * tests/trace.test: * tests/upvar.test: * tests/winConsole.test: * tests/winFCmd.test:
* Typo fixdkf2003-11-021-2/+2
|
* * generic/tclParse.c (TclSubstTokens): Moved declaration ofdgp2003-04-021-2/+2
| | | | | | utfCharBytes to beginning of procedure so that it does not go out of scope (get free()d) while append is still pointing to it. [Bugs 703167, 713754]
* * generic/tclBasic.c (Tcl_EvalTokensStandard):dgp2003-03-131-8/+451
| | | | | | | | | | | | | | | | | | | | | | | | * generic/tclCmdMZ.c (Tcl_SubstObj): * generic/tclCompCmds.c (TclCompileSwitchCmd): * generic/tclCompExpr.c (CompileSubExpr): * generic/tclCompile.c (TclSetByteCodeFromAny,TclCompileScript, TclCompileTokens,TclCompileCmdWord): * generic/tclCompile.h (TclCompileScript): * generic/tclExecute.c (TclCompEvalObj): * generic/tclInt.h (Interp,TCL_BRACKET_TERM,TclSubstTokens): * generic/tclParse.c (ParseTokens,Tcl_SubstObj,TclSubstTokens): * tests/subst.test (2.4, 8.7, 8.8, 11.4, 11.5): Substantial refactoring of Tcl_SubstObj to make use of the same parsing and substitution procedures as normal script evaluation. Tcl_SubstObj() moved to tclParse.c. New routine TclSubstTokens() created in tclParse.c which implements all substantial functioning of Tcl_EvalTokensStandard(). TclCompileScript() loses its "nested" argument, the Tcl_Interp struct loses its termOffset field and the TCL_BRACKET_TERM flag in the evalFlags field, all of which were only used (indirectly) by Tcl_SubstObj(). Tests subst-8.7,8.8,11.4,11.5 modified to accomodate the only behavior change: reporting of parse errors now takes precedence over [return] and [continue] exceptions. All other behavior should
* Don Porter's fix for bad parsing of nested scripts [Bug 681841].Miguel Sofer2003-02-161-3/+19
|
* * generic/tclParse.c (CommandComplete): more paranoid check tohobbs2003-02-111-2/+2
| | | | break on (p >= end) instead of just (p == end).
* * generic/tclParse.cMiguel Sofer2003-02-111-2/+2
| | | | * tests/parse.test: fix for [Bug 684744], by Don Porter.
* * doc/CmdCmplt.3: Applied Patch 585105 to fully CONST-ifydgp2002-08-051-352/+632
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * doc/Concat.3: all remaining public interfaces of Tcl. * doc/CrtCommand.3: Notably, the parser no longer writes on * doc/CrtSlave.3: the string it is parsing, so it is no * doc/CrtTrace.3: longer necessary for Tcl_Eval() to be * doc/Eval.3: given a writable string. Also, the * doc/ExprLong.3: refactoring of the Tcl_*Var* routines * doc/LinkVar.3: by Miguel Sofer is included, so that the * doc/ParseCmd.3: "part1" argument for them no longer needs * doc/SetVar.3: to be writable either. * doc/TraceVar.3: * doc/UpVar.3: Compatibility support has been enhanced so * generic/tcl.decls that a #define of USE_NON_CONST will remove * generic/tcl.h all possible source incompatibilities with * generic/tclBasic.c the 8.3 version of the header file(s). * generic/tclCmdMZ.c The new #define of USE_COMPAT_CONST now does * generic/tclCompCmds.c what USE_NON_CONST used to do -- disable * generic/tclCompExpr.c only those new CONST's that introduce * generic/tclCompile.c irreconcilable incompatibilities. * generic/tclCompile.h * generic/tclDecls.h Several bugs are also fixed by this patch. * generic/tclEnv.c [Bugs 584051,580433] [Patches 585105,582429] * generic/tclEvent.c * generic/tclInt.decls * generic/tclInt.h * generic/tclIntDecls.h * generic/tclInterp.c * generic/tclLink.c * generic/tclObj.c * generic/tclParse.c * generic/tclParseExpr.c * generic/tclProc.c * generic/tclTest.c * generic/tclUtf.c * generic/tclUtil.c * generic/tclVar.c * mac/tclMacTest.c * tests/expr-old.test * tests/parseExpr.test * unix/tclUnixTest.c * unix/tclXtTest.c * win/tclWinTest.c
* Cleanup and simplificationdkf2002-07-191-26/+26
| | | | (file-vars are private, loops are not done when effects are unobservable)
* * generic/tclParse.c (Tcl_ParseVar): conditionally incr objhobbs2002-04-121-2/+10
| | | | refcount to prevent possible mem leak.
* * Updated APIs in generic/tclParse.c according to the guidelinesdgp2002-01-171-2/+2
| | | | of TIP 27. Updated callers.
* Code reorganisation: moving all eval functions from tclParse.c to tclBasic.cMiguel Sofer2001-11-191-905/+2
|
* Code reordering; execution levels made consistent [Bug 480896].Miguel Sofer2001-11-161-44/+44
|
* Patch for [TIP 56], [Bug: 219384] and [Bug: 455151]: deprecate the useMiguel Sofer2001-09-131-39/+94
| | | | of Tcl_EvalTokens, replaced by the new Tcl_EvalTokensStandard.
* Patch for bug #420507Miguel Sofer2001-05-031-2/+2
|
* * tests/subst.test: added tests for non-zero return code handlinghobbs2000-11-011-6/+42
| | | | | | by subst. * generic/tclParse.c (Tcl_EvalEx): corrected handling of non-zero, non-error return code cases for subst. [BUG: 119829]