Go to main content

man pages section 3: Extended Library Functions, Volume 1

Exit Print View

Updated: Wednesday, July 27, 2022
 
 

Tcl_EvalObjEx (3tcl)

Name

Tcl_EvalObjEx - Tcl_EvalObjEx, Tcl_EvalFile, Tcl_EvalObjv, Tcl_Eval, Tcl_EvalEx, 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)

int
Tcl_VarEval(interp, part, part, ... (char *) NULL)

int
Tcl_VarEvalVA(interp, argList)

Description

Tcl_Eval(3tcl)              Tcl Library Procedures              Tcl_Eval(3tcl)



______________________________________________________________________________

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)

       int
       Tcl_VarEval(interp, part, part, ... (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 value 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.

       const char *fileName (in)          Name of  a  file  containing  a  Tcl
                                          script.

       int objc (in)                      The  number  of  values 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
                                          values; each value holds  the  value
                                          of  a  single word in the command to
                                          execute.

       int numBytes (in)                  The number of bytes in  script,  not
                                          including any null terminating char-
                                          acter.  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 *part (in)                    String forming part of a Tcl script.

       va_list argList (in)               An argument  list  which  must  have
                                          been initialized using va_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 value 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  evaluates  its  con-
       tents  as a Tcl script.  It returns the same information as Tcl_EvalOb-
       jEx.  If the file could not be read then a Tcl  error  is  returned  to
       describe  why  the  file  could  not 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 sub-
       stituted 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 values of the words for the Tcl
       command, one word in each value in objv.   Tcl_EvalObjv  evaluates  the
       command  and returns a completion code and result just like Tcl_EvalOb-
       jEx.  The caller of Tcl_EvalObjv has to manage the reference  count  of
       the  elements  of  objv,  insuring  that  the  values  are  valid until
       Tcl_EvalObjv returns.

       Tcl_Eval is similar to Tcl_EvalObjEx except that the script to be  exe-
       cuted  is  supplied  as  a string instead of a value 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 whose 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 value 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 does not 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 a value  are
                              going  to  change  immediately, so the bytecodes
                              will not be reused in a  future  execution.   In
                              this  case,  it  is 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 that 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 than TCL_OK or TCL_ERROR.


KEYWORDS
       execute, file, global, result, script, value



ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:


       +---------------+------------------+
       |ATTRIBUTE TYPE | ATTRIBUTE VALUE  |
       +---------------+------------------+
       |Availability   | runtime/tcl-8    |
       +---------------+------------------+
       |Stability      | Uncommitted      |
       +---------------+------------------+

NOTES
       Source code for open source software components in Oracle  Solaris  can
       be found at https://www.oracle.com/downloads/opensource/solaris-source-
       code-downloads.html.

       This    software    was    built    from    source     available     at
       https://github.com/oracle/solaris-userland.    The  original  community
       source was downloaded from  http://prdownloads.sourceforge.net/tcl/tcl-
       core8.6.7-src.tar.gz.

       Further information about this software can be found on the open source
       community website at https://www.tcl.tk/.



Tcl                                   8.1                       Tcl_Eval(3tcl)