1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
-
+
|
/*
* tclCompExpr.c --
*
* This file contains the code to compile Tcl expressions.
*
* Copyright (c) 1997 Sun Microsystems, Inc.
* Copyright (c) 1998-2000 by Scriptics Corporation.
* Contributions from Don Porter, NIST, 2006. (not subject to US copyright)
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* RCS: @(#) $Id: tclCompExpr.c,v 1.50 2007/04/17 14:49:53 dkf Exp $
* RCS: @(#) $Id: tclCompExpr.c,v 1.51 2007/04/23 19:04:43 kennykb Exp $
*/
#include "tclInt.h"
#include "tclCompile.h"
#undef USE_EXPR_TOKENS
#undef PARSE_DIRECT_EXPR_TOKENS
|
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
|
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
|
-
+
|
* allocated OpNode tree should go. */
Tcl_Obj *litList, /* List to append literals to. */
Tcl_Obj *funcList, /* List to append function names to. */
Tcl_Parse *parsePtr) /* Structure to fill with tokens representing
* those operands that require run time
* substitutions. */
{
OpNode *nodes;
OpNode *nodes = NULL;
int nodesAvailable = 64, nodesUsed = 0;
int code = TCL_OK;
int numLiterals = 0, numFuncs = 0;
int scanned = 0, insertMark = 0;
int lastOpen = 0, lastWas = 0;
unsigned char lexeme = START;
Tcl_Obj *msg = NULL, *post = NULL;
|
719
720
721
722
723
724
725
726
727
728
729
730
731
732
|
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
|
+
+
+
|
}
}
start += scanned;
numBytes -= scanned;
}
if (code != TCL_OK && nodes != NULL) {
ckfree((char*) nodes);
}
if (code == TCL_OK) {
*opTreePtr = nodes;
} else if (interp == NULL) {
if (msg) {
Tcl_DecrRefCount(msg);
}
} else {
|