OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [insight/] [tcl/] [doc/] [CrtInterp.3] - Blame information for rev 1780

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 578 markom
'\"
2
'\" Copyright (c) 1989-1993 The Regents of the University of California.
3
'\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
4
'\"
5
'\" See the file "license.terms" for information on usage and redistribution
6
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
7
'\"
8
'\" RCS: @(#) $Id: CrtInterp.3,v 1.1.1.1 2002-01-16 10:25:23 markom Exp $
9
'\"
10
.so man.macros
11
.TH Tcl_CreateInterp 3 7.5 Tcl "Tcl Library Procedures"
12
.BS
13
.SH NAME
14
Tcl_CreateInterp, Tcl_DeleteInterp, Tcl_InterpDeleted \- create and delete Tcl command interpreters
15
.SH SYNOPSIS
16
.nf
17
\fB#include \fR
18
.sp
19
Tcl_Interp *
20
\fBTcl_CreateInterp\fR()
21
.sp
22
\fBTcl_DeleteInterp\fR(\fIinterp\fR)
23
.sp
24
int
25
\fBTcl_InterpDeleted\fR(\fIinterp\fR)
26
.SH ARGUMENTS
27
.AS Tcl_Interp *interp
28
.AP Tcl_Interp *interp in
29
Token for interpreter to be destroyed.
30
.BE
31
 
32
.SH DESCRIPTION
33
.PP
34
\fBTcl_CreateInterp\fR creates a new interpreter structure and returns
35
a token for it.  The token is required in calls to most other Tcl
36
procedures, such as \fBTcl_CreateCommand\fR, \fBTcl_Eval\fR, and
37
\fBTcl_DeleteInterp\fR.
38
Clients are only allowed to access a few of the fields of
39
Tcl_Interp structures;  see the Tcl_Interp
40
and \fBTcl_CreateCommand\fR man pages for details.
41
The new interpreter is initialized with no defined variables and only
42
the built-in Tcl commands.  To bind in additional commands, call
43
\fBTcl_CreateCommand\fR.
44
.PP
45
\fBTcl_DeleteInterp\fR marks an interpreter as deleted; the interpreter
46
will eventually be deleted when all calls to \fBTcl_Preserve\fR for it have
47
been matched by calls to \fBTcl_Release\fR. At that time, all of the
48
resources associated with it, including variables, procedures, and
49
application-specific command bindings, will be deleted.  After
50
\fBTcl_DeleteInterp\fR returns any attempt to use \fBTcl_Eval\fR on the
51
interpreter will fail and return \fBTCL_ERROR\fR. After the call to
52
\fBTcl_DeleteInterp\fR it is safe to examine \fIinterp->result\fR, query or
53
set the values of variables, define, undefine or retrieve procedures, and
54
examine the runtime evaluation stack. See below, in the section
55
\fBINTERPRETERS AND MEMORY MANAGEMENT\fR for details.
56
.PP
57
\fBTcl_InterpDeleted\fR returns nonzero if \fBTcl_DeleteInterp\fR was
58
called with \fIinterp\fR as its argument; this indicates that the
59
interpreter will eventually be deleted, when the last call to
60
\fBTcl_Preserve\fR for it is matched by a call to \fBTcl_Release\fR. If
61
nonzero is returned, further calls to \fBTcl_Eval\fR in this interpreter
62
will return \fBTCL_ERROR\fR.
63
.PP
64
\fBTcl_InterpDeleted\fR is useful in deletion callbacks to distinguish
65
between when only the memory the callback is responsible for is being
66
deleted and when the whole interpreter is being deleted. In the former case
67
the callback may recreate the data being deleted, but this would lead to an
68
infinite loop if the interpreter were being deleted.
69
 
70
.SH "INTERPRETERS AND MEMORY MANAGEMENT"
71
.PP
72
\fBTcl_DeleteInterp\fR can be called at any time on an interpreter that may
73
be used by nested evaluations and C code in various extensions. Tcl
74
implements a simple mechanism that allows callers to use interpreters
75
without worrying about the interpreter being deleted in a nested call, and
76
without requiring special code to protect the interpreter, in most cases.
77
This mechanism ensures that nested uses of an interpreter can safely
78
continue using it even after \fBTcl_DeleteInterp\fR is called.
79
.PP
80
The mechanism relies on matching up calls to \fBTcl_Preserve\fR with calls
81
to \fBTcl_Release\fR. If \fBTcl_DeleteInterp\fR has been called, only when
82
the last call to \fBTcl_Preserve\fR is matched by a call to
83
\fBTcl_Release\fR, will the interpreter be freed. See the manual entry for
84
\fBTcl_Preserve\fR for a description of these functions.
85
.PP
86
The rules for when the user of an interpreter must call \fBTcl_Preserve\fR
87
and \fBTcl_Release\fR are simple:
88
.TP
89
Interpreters Passed As Arguments
90
Functions that are passed an interpreter as an argument can safely use the
91
interpreter without any special protection. Thus, when you write an
92
extension consisting of new Tcl commands, no special code is needed to
93
protect interpreters received as arguments. This covers the majority of all
94
uses.
95
.TP
96
Interpreter Creation And Deletion
97
When a new interpreter is created and used in a call to \fBTcl_Eval\fR,
98
\fBTcl_VarEval\fR, \fBTcl_GlobalEval\fR, \fBTcl_SetVar\fR, or
99
\fBTcl_GetVar\fR, a pair of calls to \fBTcl_Preserve\fR and
100
\fBTcl_Release\fR should be wrapped around all uses of the interpreter.
101
Remember that it is unsafe to use the interpreter once \fBTcl_Release\fR
102
has been called. To ensure that the interpreter is properly deleted when
103
it is no longer needed, call \fBTcl_InterpDeleted\fR to test if some other
104
code already called \fBTcl_DeleteInterp\fR; if not, call
105
\fBTcl_DeleteInterp\fR before calling \fBTcl_Release\fR in your own code.
106
Do not call \fBTcl_DeleteInterp\fR on an interpreter for which
107
\fBTcl_InterpDeleted\fR returns nonzero.
108
.TP
109
Retrieving An Interpreter From A Data Structure
110
When an interpreter is retrieved from a data structure (e.g. the client
111
data of a callback) for use in \fBTcl_Eval\fR, \fBTcl_VarEval\fR,
112
\fBTcl_GlobalEval\fR, \fBTcl_SetVar\fR, or \fBTcl_GetVar\fR, a pair of
113
calls to \fBTcl_Preserve\fR and \fBTcl_Release\fR should be wrapped around
114
all uses of the interpreter; it is unsafe to reuse the interpreter once
115
\fBTcl_Release\fR has been called.  If an interpreter is stored inside a
116
callback data structure, an appropriate deletion cleanup mechanism should
117
be set up by the code that creates the data structure so that the
118
interpreter is removed from the data structure (e.g. by setting the field
119
to NULL) when the interpreter is deleted. Otherwise, you may be using an
120
interpreter that has been freed and whose memory may already have been
121
reused.
122
.PP
123
All uses of interpreters in Tcl and Tk have already been protected.
124
Extension writers should ensure that their code also properly protects any
125
additional interpreters used, as described above.
126
 
127
.SH KEYWORDS
128
command, create, delete, interpreter
129
 
130
.SH "SEE ALSO"
131
Tcl_Preserve(3), Tcl_Release(3)

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.