Index of Section 3 Manual Pages
| Interix / SUA | Tcl_EvalObjEx.3 | Interix / SUA |
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
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) |
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 contain- |
ing the script to exe- |
cute. |
int flags (in) ||
ORed combination of |
flag bits that specify |
additional options. |
TCL_EVAL_GLOBAL and |
TCL_EVAL_DIRECT are |
currently supported. |
CONST char *file- |
Name (in) | |
Name of a file con- |
taining 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 command to exe- |
cute. |
int num- |
Bytes (in) | |
The number of bytes in |
script, not including |
any null terminating |
character. If -1, |
then all characters up |
to the first null byte |
are used. |
CONST |
char *script (in) | |
Points to first byte |
of script to execute |
(null-terminated and |
UTF-8). |
char *string (in) ||
String forming part of |
a Tcl script. |
va_list argList (in) ||
An argument list which |
must have been ini- |
tialised 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 pro- |
cedure 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 compiled into bytecode instructions which are then |
executed. The bytecodes 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, or possibly some other integer |
value originating in an extension. 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 evalu- |
ates its contents as a Tcl script. It returns the same |
information as Tcl_EvalObjEx. If the file couldn't be |
read then a Tcl error is returned to describe why the file |
couldn't be read. The eofchar for files is '\32' (^Z) for |
all platforms. If you require a ``^Z'' in code for string |
comparison, you can use ``\032'' or ``\u001a'', which will |
be safely substituted by the Tcl interpreter into ``^Z''.
Tcl_EvalObjv executes a single pre-parsed command instead
of a script. The objc and objv arguments contain the val-
ues 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 executed 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_ExternalToUtfD-
String or Tcl_ExternalToUtf when it is known to possibly
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 compil-
ing it and executing the bytecodes. 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 ver-
sions before Tcl 8.0, Tcl_Eval copies the object result in
interp to interp->result (use is deprecated) 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 effi-
ciency reason given above, Tcl_EvalEx is generally pre-
ferred 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 procedures 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, concatenates 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 dep-
recated.
FLAG BITS
Any ORed combination of the following values may be used
for the flags argument to procedures such as Tcl_EvalOb-
jEx:
TCL_EVAL_DIRECT This flag is only used by Tcl_Eval-
ObjEx; it is ignored by other pro-
cedures. If this flag bit is set,
the script is not compiled to byte-
codes; 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 imme-
diately, so the bytecodes 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 vari-
ables only (it ignores any Tcl pro-
cedures 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 pro-
cedures 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 inap-
propriate 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)