Tcl_EvalObjEx
Tcl_Eval(3) Tcl Library Procedures Tcl_Eval(3)
______________________________________________________________________________
NAME
Tcl_EvalObjEx, Tcl_EvalFile, Tcl_EvalObjv, Tcl_Eval, Tcl_EvalEx,
Tcl_GlobalEval, Tcl_GlobalEvalObj, Tcl_VarEval, Tcl_VarEvalVA - execute
Tcl scripts
SYNOPSIS
#include <tcl.h>
int |
Tcl_EvalObjEx(interp, objPtr, flags) |
int |
Tcl_EvalFile(interp, fileName) |
int |
Tcl_EvalObjv(interp, objc, objv, flags) |
int |
Tcl_Eval(interp, script) |
int |
Tcl_EvalEx(interp, script, numBytes, flags) |
int |
Tcl_GlobalEval(interp, script) |
int |
Tcl_GlobalEvalObj(interp, objPtr, flags) |
int |
Tcl_VarEval(interp, string, string, ... (char *) NULL) |
int |
Tcl_VarEvalVA(interp, argList) |
ARGUMENTS |
Tcl_Interp *interp (in) ||
Interpreter in which to execute the |
script. The interpreter's result |
is modified to hold the result or |
error message from the script. |
Tcl_Obj *objPtr (in) ||
A Tcl object containing the script |
to execute. |
int flags (in) ||
ORed combination of flag bits that |
specify additional options. |
TCL_EVAL_GLOBAL and TCL_EVAL_DIRECT |
are currently supported. |
char *file- |
Name (in) | |
Name of a file containing a Tcl |
script. |
int objc (in) ||
The number of objects in the array |
pointed to by objPtr; this is also |
the number of words in the command. |
Tcl_Obj **objv (in) ||
Points to an array of pointers to |
objects; each object holds the |
value of a single word in the com- |
mand to execute. |
int num- |
Bytes (in) | |
The number of bytes in script, not |
including any null terminating |
character. If -1, then all charac- |
ters up to the first null byte are |
used. |
char *script (in) ||
Points to first byte of script to |
execute (NULL terminated and |
UTF-8). This script must be in |
writable memory: temporary modifi- |
cations are made to it during pars- |
ing. |
char *string (in) ||
String forming part of a Tcl |
script. |
va_list argList (in) ||
An argument list which must have |
been initialised using |
TCL_VARARGS_START, and cleared |
using va_end. |
_________________________________________________________________ |
DESCRIPTION |
The procedures described here are invoked to execute Tcl scripts in |
various forms. Tcl_EvalObjEx is the core procedure and is used by many |
of the others. It executes the commands in the script stored in objPtr |
until either an error occurs or the end of the script is reached. If |
this is the first time objPtr has been executed, its commands are com- |
piled into bytecode instructions which are then executed. The byte- |
codes are saved in objPtr so that the compilation step can be skipped |
if the object is evaluated again in the future. |
The return value from Tcl_EvalObjEx (and all the other procedures |
described here) is a Tcl completion code with one of the values TCL_OK, |
TCL_ERROR, TCL_RETURN, TCL_BREAK, or TCL_CONTINUE. In addition, a |
result value or error message is left in interp's result; it can be |
retrieved using Tcl_GetObjResult. |
Tcl_EvalFile reads the file given by fileName and evaluates its con- |
tents as a Tcl script. It returns the same information as Tcl_EvalOb- |
jEx. If the file couldn't be read then a Tcl error is returned to |
describe why the file couldn't be read. |
Tcl_EvalObjv executes a single pre-parsed command instead of a script. |
The objc and objv arguments contain the values of the words for the Tcl |
command, one word in each object in objv. Tcl_EvalObjv evaluates the |
command and returns a completion code and result just like Tcl_EvalOb- |
jEx. |
Tcl_Eval is similar to Tcl_EvalObjEx except that the script to be exe- |
cuted is supplied as a string instead of an object and no compilation |
occurs. The string should be a proper UTF-8 string as converted by |
Tcl_ExternalToUtfDString or Tcl_ExternalToUtf when it is known to pos- |
sibly contain upper ascii characters who's possible combinations might |
be a UTF-8 special code. The string is parsed and executed directly |
(using Tcl_EvalObjv) instead of compiling it and executing the byte- |
codes. In situations where it is known that the script will never be |
executed again, Tcl_Eval may be faster than Tcl_EvalObjEx. Tcl_Eval |
returns a completion code and result just like Tcl_EvalObjEx. Note: |
for backward compatibility with versions before Tcl 8.0, Tcl_Eval |
copies the object result in interp to interp->result (use is depre- |
cated) where it can be accessed directly. This makes Tcl_Eval somewhat |
slower than Tcl_EvalEx, which doesn't do the copy. |
Tcl_EvalEx is an extended version of Tcl_Eval that takes additional |
arguments numBytes and flags. For the efficiency reason given above, |
Tcl_EvalEx is generally preferred over Tcl_Eval. |
Tcl_GlobalEval and Tcl_GlobalEvalObj are older procedures that are now |
deprecated. They are similar to Tcl_EvalEx and Tcl_EvalObjEx except |
that the script is evaluated in the global namespace and its variable |
context consists of global variables only (it ignores any Tcl proce- |
dures that are active). These functions are equivalent to using the |
TCL_EVAL_GLOBAL flag (see below). |
Tcl_VarEval takes any number of string arguments of any length, con- |
catenates them into a single string, then calls Tcl_Eval to execute |
that string as a Tcl command. It returns the result of the command and |
also modifies interp->result in the same way as Tcl_Eval. The last |
argument to Tcl_VarEval must be NULL to indicate the end of arguments. |
Tcl_VarEval is now deprecated. |
Tcl_VarEvalVA is the same as Tcl_VarEval except that instead of taking |
a variable number of arguments it takes an argument list. Like |
Tcl_VarEval, Tcl_VarEvalVA is deprecated. |
FLAG BITS |
Any ORed combination of the following values may be used for the flags |
argument to procedures such as Tcl_EvalObjEx: |
TCL_EVAL_DIRECT ||
This flag is only used by Tcl_EvalObjEx; it is |
ignored by other procedures. If this flag bit |
is set, the script is not compiled to bytecodes; |
instead it is executed directly as is done by |
Tcl_EvalEx. The TCL_EVAL_DIRECT flag is useful |
in situations where the contents of an object |
are going to change immediately, so the byte- |
codes won't be reused in a future execution. In |
this case, it's faster to execute the script |
directly. |
TCL_EVAL_GLOBAL ||
If this flag is set, the script is processed at |
global level. This means that it is evaluated |
in the global namespace and its variable context |
consists of global variables only (it ignores |
any Tcl procedures at are active). |
MISCELLANEOUS DETAILS |
During the processing of a Tcl command it is legal to make nested calls |
to evaluate other commands (this is how procedures and some control |
structures are implemented). If a code other than TCL_OK is returned |
from a nested Tcl_EvalObjEx invocation, then the caller should normally |
return immediately, passing that same return code back to its caller, |
and so on until the top-level application is reached. A few commands, |
like for, will check for certain return codes, like TCL_BREAK and |
TCL_CONTINUE, and process them specially without returning. |
Tcl_EvalObjEx keeps track of how many nested Tcl_EvalObjEx invocations |
are in progress for interp. If a code of TCL_RETURN, TCL_BREAK, or |
TCL_CONTINUE is about to be returned from the topmost Tcl_EvalObjEx |
invocation for interp, it converts the return code to TCL_ERROR and |
sets interp's result to an error message indicating that the return, |
break, or continue command was invoked in an inappropriate place. This |
means that top-level applications should never see a return code from |
Tcl_EvalObjEx other then TCL_OK or TCL_ERROR.
KEYWORDS
execute, file, global, object, result, script
Tcl 8.1 Tcl_Eval(3)