Provided by: tcl8.4-doc_8.4.20-7_all bug

NAME

       Tcl_Interp - client-visible fields of interpreter structures

SYNOPSIS

       #include <tcl.h>

       typedef struct {
            char *result;
            Tcl_FreeProc *freeProc;
            int errorLine;
       } Tcl_Interp;

       typedef void Tcl_FreeProc(char *blockPtr);
_________________________________________________________________

DESCRIPTION

       The  Tcl_CreateInterp procedure returns a pointer to a Tcl_Interp structure.  This pointer is then passed
       into other Tcl procedures to process commands in the interpreter and  perform  other  operations  on  the
       interpreter.   Interpreter  structures contain many many fields that are used by Tcl, but only three that
       may be accessed by clients:  result, freeProc, and errorLine.

       The result and freeProc fields are used  to  return  results  or  error  messages  from  commands.   This
       information is returned by command procedures back to Tcl_Eval, and by Tcl_Eval back to its callers.  The
       result  field  points  to  the string that represents the result or error message, and the freeProc field
       tells how to dispose of the storage for the string when it isn't needed anymore.   The  easiest  way  for
       command   procedures   to   manipulate   these  fields  is  to  call  procedures  like  Tcl_SetResult  or
       Tcl_AppendResult;  they will hide all the details of managing the fields.  The description below  is  for
       those procedures that manipulate the fields directly.

       Whenever  a  command procedure returns, it must ensure that the result field of its interpreter points to
       the string being returned by the command.  The result field must always point to a valid  string.   If  a
       command  wishes  to  return  no  result  then  interp->result should point to an empty string.  Normally,
       results are assumed to be statically allocated, which means that the contents will not change before  the
       next  time  Tcl_Eval  is  called  or some other command procedure is invoked.  In this case, the freeProc 2
       field must be zero.  Alternatively, a command procedure may dynamically allocate its return  value  (e.g. 2
       using  Tcl_Alloc)  and store a pointer to it in interp->result.  In this case, the command procedure must 2
       also set interp->freeProc to the address of a procedure that can free the value, or  TCL_DYNAMIC  if  the 2
       storage  was  allocated directly by Tcl or by a call to Tcl_Alloc.  If interp->freeProc is non-zero, then
       Tcl will call freeProc to free the space pointed to by interp->result before it invokes the next command.
       If a client procedure overwrites interp->result when interp->freeProc is non-zero, then it is responsible
       for calling freeProc to free the old interp->result (the Tcl_FreeResult macro should  be  used  for  this
       purpose).

       FreeProc  should  have arguments and result that match the Tcl_FreeProc declaration above:  it receives a
       single argument which is a pointer to the result value to free.  In most applications TCL_DYNAMIC is  the 2
       only  non-zero  value  ever  used  for freeProc.  However, an application may store a different procedure
       address in freeProc in order to use an alternate memory allocator or in order to do  other  cleanup  when
       the result memory is freed.

       As  part of processing each command, Tcl_Eval initializes interp->result and interp->freeProc just before
       calling the command procedure for the command.  The freeProc field  will  be  initialized  to  zero,  and
       interp->result will point to an empty string.  Commands that do not return any value can simply leave the
       fields  alone.   Furthermore,  the  empty  string  pointed  to  by result is actually part of an array of
       TCL_RESULT_SIZE characters (approximately 200).  If a command wishes to return a  short  string,  it  can
       simply  copy  it  to  the  area  pointed  to  by interp->result.  Or, it can use the sprintf procedure to
       generate a short result string at the location pointed to by interp->result.

       It is a general convention in Tcl-based applications that the result of an interpreter is normally in the
       initialized state described in the previous  paragraph.   Procedures  that  manipulate  an  interpreter's
       result  (e.g.  by returning an error) will generally assume that the result has been initialized when the
       procedure is called.  If such a procedure is to be  called  after  the  result  has  been  changed,  then
       Tcl_ResetResult  should  be called first to reset the result to its initialized state.  The direct use of
       interp->result is strongly deprecated (see Tcl_SetResult).

       The errorLine field is valid only after Tcl_Eval returns a TCL_ERROR return code.  In this situation  the
       errorLine  field  identifies  the line number of the command being executed when the error occurred.  The
       line numbers are relative to the command being executed:  1 means the first line of the command passed to
       Tcl_Eval, 2 means the second line, and so on.  The errorLine field is typically used in conjunction  with
       Tcl_AddErrorInfo  to  report information about where an error occurred.  ErrorLine should not normally be
       modified except by Tcl_Eval.

KEYWORDS

       free, initialized, interpreter, malloc, result

Tcl                                                    7.5                                      Tcl_Interp(3tcl)