summaryrefslogtreecommitdiffstats
Commit message (Expand)AuthorAgeFilesLines
* Update versions.jsonMXEBot as Travis CI2015-11-281-1/+1
* cgal:update 4.5-->4.6.3 and enable sharedTony Theodore2015-11-282-44/+12
* hdf5: add cmake testTony Theodore2015-11-282-0/+22
* Update versions.jsonMXEBot as Travis CI2015-11-271-1/+1
* harfbuzz: updateMark Brand2015-11-271-2/+2
* docs: update homebrew notesTony Theodore2015-11-271-2/+4
* coin: add note about libtool workaroundTony Theodore2015-11-271-0/+1
* aspell: fix for -ldl detectionTony Theodore2015-11-271-2/+3
* qtwebkit: re-enable buildTony Theodore2015-11-262-6/+17
* Revert "Fix MySQL and PostgreSQL posix build"Tony Theodore2015-11-262-154/+0
* Merge pull request #1009 from saiarcot895/upstream-fix-posix-qt5Tony Theodore2015-11-262-0/+154
|\
| * Fix postgresql posix build, which also assumes pthreads is not available on W...Saikrishna Arcot2015-11-211-0/+68
| * Fix mysql posix build.Saikrishna Arcot2015-11-211-0/+86
* | docs: add instructions for homebrewTony Theodore2015-11-261-0/+15
* | Update versions.jsonMXEBot as Travis CI2015-11-261-1/+1
* | Merge pull request #935 from tonytheodore/pluginsTony Theodore2015-11-2619-8/+541
|\ \
| * | plugins: add gcc52 overlayTony Theodore2015-11-261-0/+25
| * | plugins: add qt override example with minimal deps and custom cflagsTony Theodore2015-11-261-0/+82
| * | add native and apps plugin packagesTony Theodore2015-11-2616-0/+415
| * | Makefile: add plugins functionality to include makefiles from MXE_PLUGIN_DIRSTony Theodore2015-11-261-8/+19
|/ /
* | Update versions.jsonMXEBot as Travis CI2015-11-261-10/+0
* | remove optional native pkgs and build-requirements targetTony Theodore2015-11-2613-345/+29
* | libjpeg-turbo: retry after parallel build failureTony Theodore2015-11-261-1/+2
* | coin: fix update and detection of -ldlTony Theodore2015-11-261-3/+3
* | Update versions.jsonMXEBot as Travis CI2015-11-261-1/+1
* | Update ffmpegTimothy Gu2015-11-261-2/+2
* | Update versions.jsonMXEBot as Travis CI2015-11-211-0/+1
* | add package muparserxTony Theodore2015-11-213-1/+79
* | muparser: fix-dll-install-directoryTony Theodore2015-11-211-0/+47
* | Update versions.jsonMXEBot as Travis CI2015-11-211-1/+1
* | librtmp: updateTony Theodore2015-11-211-2/+2
* | muparser: enable shared buildTony Theodore2015-11-211-5/+1
* | cleanup styleTony Theodore2015-11-213-3/+3
* | Merge pull request #1004 from LuaAndC/silence-travis-commitTony Theodore2015-11-211-1/+1
|\ \
| * | suppress git commit error in TravisBoris Nagaev2015-11-191-1/+1
* | | aspell: fix shared build for missing libtool depsTony Theodore2015-11-211-0/+5
* | | Update versions.jsonMXEBot as Travis CI2015-11-211-2/+2
* | | harfbuzz, vmime: updateMark Brand2015-11-212-4/+4
* | | Merge pull request #1005 from fiesh/masterTony Theodore2015-11-211-6/+0
|\ \ \ | |/ / |/| |
| * | Coin3D: do not disable features by defaultChristoph Weiss2015-11-191-6/+0
|/ /
* | Merge pull request #924 from LuaAndC/travis-build-pullsTony Theodore2015-11-182-9/+14
|\ \
| * | travis-push: make sure "git commit" succeededBoris Nagaev2015-10-131-1/+1
| * | travis: commit and push only if GH_TOKEN is setBoris Nagaev2015-10-132-9/+14
* | | Update versions.jsonMXEBot as Travis CI2015-11-181-1/+1
* | | dbus: updateMark Brand2015-11-181-2/+2
* | | Update versions.jsonMXEBot as Travis CI2015-11-181-0/+1
* | | coin: fix shared build and use pkg-config for testTony Theodore2015-11-181-10/+9
* | | Add Coin3D 3.1.3 (https://bitbucket.org/Coin3D/coin/wiki/Home)Christoph Weiss2015-11-184-0/+227
* | | Update versions.jsonMXEBot as Travis CI2015-11-171-2/+3
* | | Merge pull request #965 from LuaAndC/downgrade-gcc-to-4-9Tony Theodore2015-11-175-15/+92
|\ \ \
ng_ensembles Tcl is a high-level, general-purpose, interpreted, dynamic programming language. It was designed with the goal of being very simple but powerful.
summaryrefslogtreecommitdiffstats
path: root/doc/Interp.3
blob: 10aadb77116100d9f81468e76e1b92234981af50 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
'\"
'\" Copyright (c) 1989-1993 The Regents of the University of California.
'\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\" 
.TH Tcl_Interp 3 7.5 Tcl "Tcl Library Procedures"
.so man.macros
.BS
.SH NAME
Tcl_Interp \- client-visible fields of interpreter structures
.SH SYNOPSIS
.nf
\fB#include <tcl.h>\fR
.sp
typedef struct {
        char *\fIresult\fR;
        Tcl_FreeProc *\fIfreeProc\fR;
        int \fIerrorLine\fR;
} Tcl_Interp;

typedef void Tcl_FreeProc(char *\fIblockPtr\fR);
.BE

.SH DESCRIPTION
.PP
The \fBTcl_CreateInterp\fR 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 fields
that are used by Tcl, but only three that may be accessed by
clients:  \fIresult\fR, \fIfreeProc\fR, and \fIerrorLine\fR.
.PP
.VS 8.5
\fBNote that access to all three fields, \fIresult\fB, \fIfreeProc\fB and
\fIerrorLine\fB is deprecated.\fR  Use \fBTcl_SetResult\fR,
\fBTcl_GetResult\fR, and \fBTcl_GetReturnOptions\fR instead.
.VE 8.5
.PP
The \fIresult\fR and \fIfreeProc\fR fields are used to return
results or error messages from commands.
This information is returned by command procedures back to \fBTcl_Eval\fR,
and by \fBTcl_Eval\fR back to its callers.
The \fIresult\fR field points to the string that represents the
result or error message, and the \fIfreeProc\fR field tells how
to dispose of the storage for the string when it is not needed anymore.
The easiest way for command procedures to manipulate these
fields is to call procedures like \fBTcl_SetResult\fR
or \fBTcl_AppendResult\fR;  they
will hide all the details of managing the fields.
The description below is for those procedures that manipulate the
fields directly.
.PP
Whenever a command procedure returns, it must ensure
that the \fIresult\fR field of its interpreter points to the string
being returned by the command.
The \fIresult\fR field must always point to a valid string.
If a command wishes to return no result then \fIinterp->result\fR
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
\fBTcl_Eval\fR is called or some other command procedure is invoked.
In this case, the \fIfreeProc\fR field must be zero.
Alternatively, a command procedure may dynamically
allocate its return value (e.g. using \fBTcl_Alloc\fR)
and store a pointer to it in \fIinterp->result\fR.
In this case, the command procedure must also set \fIinterp->freeProc\fR
to the address of a procedure that can free the value, or \fBTCL_DYNAMIC\fR
if the storage was allocated directly by Tcl or by a call to
\fBTcl_Alloc\fR. 
If \fIinterp->freeProc\fR is non-zero, then Tcl will call \fIfreeProc\fR
to free the space pointed to by \fIinterp->result\fR before it
invokes the next command.
If a client procedure overwrites \fIinterp->result\fR when
\fIinterp->freeProc\fR is non-zero, then it is responsible for calling
\fIfreeProc\fR to free the old \fIinterp->result\fR (the \fBTcl_FreeResult\fR
macro should be used for this purpose).
.PP
\fIFreeProc\fR should have arguments and result that match the
\fBTcl_FreeProc\fR declaration above:  it receives a single
argument which is a pointer to the result value to free.
In most applications \fBTCL_DYNAMIC\fR is the only non-zero value ever
used for \fIfreeProc\fR.
However, an application may store a different procedure address
in \fIfreeProc\fR in order to use an alternate memory allocator
or in order to do other cleanup when the result memory is freed.
.PP
As part of processing each command, \fBTcl_Eval\fR initializes
\fIinterp->result\fR
and \fIinterp->freeProc\fR just before calling the command procedure for
the command.  The \fIfreeProc\fR field will be initialized to zero,
and \fIinterp->result\fR 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 \fIresult\fR is actually
part of an array of \fBTCL_RESULT_SIZE\fR characters (approximately 200).
If a command wishes to return a short string, it can simply copy
it to the area pointed to by \fIinterp->result\fR.  Or, it can use
the sprintf procedure to generate a short result string at the location
pointed to by \fIinterp->result\fR.
.PP
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 \fBTcl_ResetResult\fR should be called first to
reset the result to its initialized state.  The direct use of
\fIinterp->result\fR is strongly deprecated (see \fBTcl_SetResult\fR).
.PP
The \fIerrorLine\fR
field is valid only after \fBTcl_Eval\fR returns
a \fBTCL_ERROR\fR return code.  In this situation the \fIerrorLine\fR
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
\fBTcl_Eval\fR, 2 means the second line, and so on.
The \fIerrorLine\fR field is typically used in conjunction with
\fBTcl_AddErrorInfo\fR to report information about where an error
occurred.
\fIErrorLine\fR should not normally be modified except by \fBTcl_Eval\fR.

.SH KEYWORDS
free, initialized, interpreter, malloc, result