1 | '\" |
---|
2 | '\" Copyright (c) 1997 by Sun Microsystems, Inc. |
---|
3 | '\" Contributions from Don Porter, NIST, 2004. (not subject to US copyright) |
---|
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: SaveResult.3,v 1.9 2007/12/13 15:22:31 dgp Exp $ |
---|
9 | '\" |
---|
10 | .so man.macros |
---|
11 | .TH Tcl_SaveResult 3 8.1 Tcl "Tcl Library Procedures" |
---|
12 | .BS |
---|
13 | .SH NAME |
---|
14 | Tcl_SaveInterpState, Tcl_RestoreInterpState, Tcl_DiscardInterpState, Tcl_SaveResult, Tcl_RestoreResult, Tcl_DiscardResult \- save and restore an interpreter's state |
---|
15 | .SH SYNOPSIS |
---|
16 | .nf |
---|
17 | \fB#include <tcl.h>\fR |
---|
18 | .sp |
---|
19 | Tcl_InterpState |
---|
20 | \fBTcl_SaveInterpState\fR(\fIinterp, status\fR) |
---|
21 | .sp |
---|
22 | int |
---|
23 | \fBTcl_RestoreInterpState\fR(\fIinterp, state\fR) |
---|
24 | .sp |
---|
25 | \fBTcl_DiscardInterpState\fR(\fIstate\fR) |
---|
26 | .sp |
---|
27 | \fBTcl_SaveResult\fR(\fIinterp, savedPtr\fR) |
---|
28 | .sp |
---|
29 | \fBTcl_RestoreResult\fR(\fIinterp, savedPtr\fR) |
---|
30 | .sp |
---|
31 | \fBTcl_DiscardResult\fR(\fIsavedPtr\fR) |
---|
32 | .SH ARGUMENTS |
---|
33 | .AS Tcl_InterpState savedPtr |
---|
34 | .AP Tcl_Interp *interp in |
---|
35 | Interpreter for which state should be saved. |
---|
36 | .AP int status in |
---|
37 | Return code value to save as part of interpreter state. |
---|
38 | .AP Tcl_InterpState state in |
---|
39 | Saved state token to be restored or discarded. |
---|
40 | .AP Tcl_SavedResult *savedPtr in |
---|
41 | Pointer to location where interpreter result should be saved or restored. |
---|
42 | .BE |
---|
43 | |
---|
44 | .SH DESCRIPTION |
---|
45 | .PP |
---|
46 | .VS 8.5 |
---|
47 | These routines allows a C procedure to take a snapshot of the current |
---|
48 | state of an interpreter so that it can be restored after a call |
---|
49 | to \fBTcl_Eval\fR or some other routine that modifies the interpreter |
---|
50 | state. There are two triplets of routines meant to work together. |
---|
51 | .PP |
---|
52 | The first triplet stores the snapshot of interpreter state in |
---|
53 | an opaque token returned by \fBTcl_SaveInterpState\fR. That token |
---|
54 | value may then be passed back to one of \fBTcl_RestoreInterpState\fR |
---|
55 | or \fBTcl_DiscardInterpState\fR, depending on whether the interp |
---|
56 | state is to be restored. So long as one of the latter two routines |
---|
57 | is called, Tcl will take care of memory management. |
---|
58 | .PP |
---|
59 | The second triplet stores the snapshot of only the interpreter |
---|
60 | result (not its complete state) in memory allocated by the caller. |
---|
61 | These routines are passed a pointer to a \fBTcl_SavedResult\fR structure |
---|
62 | that is used to store enough information to restore the interpreter result. |
---|
63 | This structure can be allocated on the stack of the calling |
---|
64 | procedure. These routines do not save the state of any error |
---|
65 | information in the interpreter (e.g. the \fB\-errorcode\fR or |
---|
66 | \fB\-errorinfo\fR return options, when an error is in progress). |
---|
67 | .PP |
---|
68 | Because the routines \fBTcl_SaveInterpState\fR, |
---|
69 | \fBTcl_RestoreInterpState\fR, and \fBTcl_DiscardInterpState\fR perform |
---|
70 | a superset of the functions provided by the other routines, |
---|
71 | any new code should only make use of the more powerful routines. |
---|
72 | The older, weaker routines \fBTcl_SaveResult\fR, \fBTcl_RestoreResult\fR, |
---|
73 | and \fBTcl_DiscardResult\fR continue to exist only for the sake |
---|
74 | of existing programs that may already be using them. |
---|
75 | .PP |
---|
76 | \fBTcl_SaveInterpState\fR takes a snapshot of those portions of |
---|
77 | interpreter state that make up the full result of script evaluation. |
---|
78 | This include the interpreter result, the return code (passed in |
---|
79 | as the \fIstatus\fR argument, and any return options, including |
---|
80 | \fB\-errorinfo\fR and \fB\-errorcode\fR when an error is in progress. |
---|
81 | This snapshot is returned as an opaque token of type \fBTcl_InterpState\fR. |
---|
82 | The call to \fBTcl_SaveInterpState\fR does not itself change the |
---|
83 | state of the interpreter. Unlike \fBTcl_SaveResult\fR, it does |
---|
84 | not reset the interpreter. |
---|
85 | .PP |
---|
86 | \fBTcl_RestoreInterpState\fR accepts a \fBTcl_InterpState\fR token |
---|
87 | previously returned by \fBTcl_SaveInterpState\fR and restores the |
---|
88 | state of the interp to the state held in that snapshot. The return |
---|
89 | value of \fBTcl_RestoreInterpState\fR is the status value originally |
---|
90 | passed to \fBTcl_SaveInterpState\fR when the snapshot token was |
---|
91 | created. |
---|
92 | .PP |
---|
93 | \fBTcl_DiscardInterpState\fR is called to release a \fBTcl_InterpState\fR |
---|
94 | token previously returned by \fBTcl_SaveInterpState\fR when that |
---|
95 | snapshot is not to be restored to an interp. |
---|
96 | .PP |
---|
97 | The \fBTcl_InterpState\fR token returned by \fBTcl_SaveInterpState\fR |
---|
98 | must eventually be passed to either \fBTcl_RestoreInterpState\fR |
---|
99 | or \fBTcl_DiscardInterpState\fR to avoid a memory leak. Once |
---|
100 | the \fBTcl_InterpState\fR token is passed to one of them, the |
---|
101 | token is no longer valid and should not be used anymore. |
---|
102 | .VE 8.5 |
---|
103 | .PP |
---|
104 | \fBTcl_SaveResult\fR moves the string and object results |
---|
105 | of \fIinterp\fR into the location specified by \fIstatePtr\fR. |
---|
106 | \fBTcl_SaveResult\fR clears the result for \fIinterp\fR and |
---|
107 | leaves the result in its normal empty initialized state. |
---|
108 | .PP |
---|
109 | \fBTcl_RestoreResult\fR moves the string and object results from |
---|
110 | \fIstatePtr\fR back into \fIinterp\fR. Any result or error that was |
---|
111 | already in the interpreter will be cleared. The \fIstatePtr\fR is left |
---|
112 | in an uninitialized state and cannot be used until another call to |
---|
113 | \fBTcl_SaveResult\fR. |
---|
114 | .PP |
---|
115 | \fBTcl_DiscardResult\fR releases the saved interpreter state |
---|
116 | stored at \fBstatePtr\fR. The state structure is left in an |
---|
117 | uninitialized state and cannot be used until another call to |
---|
118 | \fBTcl_SaveResult\fR. |
---|
119 | .PP |
---|
120 | Once \fBTcl_SaveResult\fR is called to save the interpreter |
---|
121 | result, either \fBTcl_RestoreResult\fR or |
---|
122 | \fBTcl_DiscardResult\fR must be called to properly clean up the |
---|
123 | memory associated with the saved state. |
---|
124 | |
---|
125 | .SH KEYWORDS |
---|
126 | result, state, interp |
---|