Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / devtools / v9 / man / man3 / Tcl_SetObjErrorCode.3
CommitLineData
920dae64
AT
1'\"
2'\" Copyright (c) 1989-1993 The Regents of the University of California.
3'\" Copyright (c) 1994-1997 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: AddErrInfo.3,v 1.8.2.1 2003/07/18 16:56:24 dgp Exp $
9'\"
10'\" The definitions below are for supplemental macros used in Tcl/Tk
11'\" manual entries.
12'\"
13'\" .AP type name in/out ?indent?
14'\" Start paragraph describing an argument to a library procedure.
15'\" type is type of argument (int, etc.), in/out is either "in", "out",
16'\" or "in/out" to describe whether procedure reads or modifies arg,
17'\" and indent is equivalent to second arg of .IP (shouldn't ever be
18'\" needed; use .AS below instead)
19'\"
20'\" .AS ?type? ?name?
21'\" Give maximum sizes of arguments for setting tab stops. Type and
22'\" name are examples of largest possible arguments that will be passed
23'\" to .AP later. If args are omitted, default tab stops are used.
24'\"
25'\" .BS
26'\" Start box enclosure. From here until next .BE, everything will be
27'\" enclosed in one large box.
28'\"
29'\" .BE
30'\" End of box enclosure.
31'\"
32'\" .CS
33'\" Begin code excerpt.
34'\"
35'\" .CE
36'\" End code excerpt.
37'\"
38'\" .VS ?version? ?br?
39'\" Begin vertical sidebar, for use in marking newly-changed parts
40'\" of man pages. The first argument is ignored and used for recording
41'\" the version when the .VS was added, so that the sidebars can be
42'\" found and removed when they reach a certain age. If another argument
43'\" is present, then a line break is forced before starting the sidebar.
44'\"
45'\" .VE
46'\" End of vertical sidebar.
47'\"
48'\" .DS
49'\" Begin an indented unfilled display.
50'\"
51'\" .DE
52'\" End of indented unfilled display.
53'\"
54'\" .SO
55'\" Start of list of standard options for a Tk widget. The
56'\" options follow on successive lines, in four columns separated
57'\" by tabs.
58'\"
59'\" .SE
60'\" End of list of standard options for a Tk widget.
61'\"
62'\" .OP cmdName dbName dbClass
63'\" Start of description of a specific option. cmdName gives the
64'\" option's name as specified in the class command, dbName gives
65'\" the option's name in the option database, and dbClass gives
66'\" the option's class in the option database.
67'\"
68'\" .UL arg1 arg2
69'\" Print arg1 underlined, then print arg2 normally.
70'\"
71'\" RCS: @(#) $Id: man.macros,v 1.4 2000/08/25 06:18:32 ericm Exp $
72'\"
73'\" # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
74.if t .wh -1.3i ^B
75.nr ^l \n(.l
76.ad b
77'\" # Start an argument description
78.de AP
79.ie !"\\$4"" .TP \\$4
80.el \{\
81. ie !"\\$2"" .TP \\n()Cu
82. el .TP 15
83.\}
84.ta \\n()Au \\n()Bu
85.ie !"\\$3"" \{\
86\&\\$1 \\fI\\$2\\fP (\\$3)
87.\".b
88.\}
89.el \{\
90.br
91.ie !"\\$2"" \{\
92\&\\$1 \\fI\\$2\\fP
93.\}
94.el \{\
95\&\\fI\\$1\\fP
96.\}
97.\}
98..
99'\" # define tabbing values for .AP
100.de AS
101.nr )A 10n
102.if !"\\$1"" .nr )A \\w'\\$1'u+3n
103.nr )B \\n()Au+15n
104.\"
105.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
106.nr )C \\n()Bu+\\w'(in/out)'u+2n
107..
108.AS Tcl_Interp Tcl_CreateInterp in/out
109'\" # BS - start boxed text
110'\" # ^y = starting y location
111'\" # ^b = 1
112.de BS
113.br
114.mk ^y
115.nr ^b 1u
116.if n .nf
117.if n .ti 0
118.if n \l'\\n(.lu\(ul'
119.if n .fi
120..
121'\" # BE - end boxed text (draw box now)
122.de BE
123.nf
124.ti 0
125.mk ^t
126.ie n \l'\\n(^lu\(ul'
127.el \{\
128.\" Draw four-sided box normally, but don't draw top of
129.\" box if the box started on an earlier page.
130.ie !\\n(^b-1 \{\
131\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
132.\}
133.el \}\
134\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
135.\}
136.\}
137.fi
138.br
139.nr ^b 0
140..
141'\" # VS - start vertical sidebar
142'\" # ^Y = starting y location
143'\" # ^v = 1 (for troff; for nroff this doesn't matter)
144.de VS
145.if !"\\$2"" .br
146.mk ^Y
147.ie n 'mc \s12\(br\s0
148.el .nr ^v 1u
149..
150'\" # VE - end of vertical sidebar
151.de VE
152.ie n 'mc
153.el \{\
154.ev 2
155.nf
156.ti 0
157.mk ^t
158\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
159.sp -1
160.fi
161.ev
162.\}
163.nr ^v 0
164..
165'\" # Special macro to handle page bottom: finish off current
166'\" # box/sidebar if in box/sidebar mode, then invoked standard
167'\" # page bottom macro.
168.de ^B
169.ev 2
170'ti 0
171'nf
172.mk ^t
173.if \\n(^b \{\
174.\" Draw three-sided box if this is the box's first page,
175.\" draw two sides but no top otherwise.
176.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
177.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
178.\}
179.if \\n(^v \{\
180.nr ^x \\n(^tu+1v-\\n(^Yu
181\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
182.\}
183.bp
184'fi
185.ev
186.if \\n(^b \{\
187.mk ^y
188.nr ^b 2
189.\}
190.if \\n(^v \{\
191.mk ^Y
192.\}
193..
194'\" # DS - begin display
195.de DS
196.RS
197.nf
198.sp
199..
200'\" # DE - end display
201.de DE
202.fi
203.RE
204.sp
205..
206'\" # SO - start of list of standard options
207.de SO
208.SH "STANDARD OPTIONS"
209.LP
210.nf
211.ta 5.5c 11c
212.ft B
213..
214'\" # SE - end of list of standard options
215.de SE
216.fi
217.ft R
218.LP
219See the \\fBoptions\\fR manual entry for details on the standard options.
220..
221'\" # OP - start of full description for a single option
222.de OP
223.LP
224.nf
225.ta 4c
226Command-Line Name: \\fB\\$1\\fR
227Database Name: \\fB\\$2\\fR
228Database Class: \\fB\\$3\\fR
229.fi
230.IP
231..
232'\" # CS - begin code excerpt
233.de CS
234.RS
235.nf
236.ta .25i .5i .75i 1i
237..
238'\" # CE - end code excerpt
239.de CE
240.fi
241.RE
242..
243.de UL
244\\$1\l'|0\(ul'\\$2
245..
246.TH Tcl_AddErrorInfo 3 8.0 Tcl "Tcl Library Procedures"
247.BS
248.SH NAME
249Tcl_AddObjErrorInfo, Tcl_AddErrorInfo, Tcl_SetObjErrorCode, Tcl_SetErrorCode, Tcl_SetErrorCodeVA, Tcl_PosixError, Tcl_LogCommandInfo \- record information about errors
250.SH SYNOPSIS
251.nf
252\fB#include <tcl.h>\fR
253.sp
254\fBTcl_AddObjErrorInfo\fR(\fIinterp, message, length\fR)
255.sp
256\fBTcl_AddErrorInfo\fR(\fIinterp, message\fR)
257.sp
258\fBTcl_SetObjErrorCode\fR(\fIinterp, errorObjPtr\fR)
259.sp
260\fBTcl_SetErrorCode\fR(\fIinterp, element, element, ... \fB(char *) NULL\fR)
261.sp
262\fBTcl_SetErrorCodeVA\fR(\fIinterp, argList\fR)
263.sp
264CONST char *
265\fBTcl_PosixError\fR(\fIinterp\fR)
266.sp
267void
268\fBTcl_LogCommandInfo\fR(\fIinterp, script, command, commandLength\fR)
269.SH ARGUMENTS
270.AS Tcl_Interp *message
271.AP Tcl_Interp *interp in
272Interpreter in which to record information.
273.AP char *message in
274For \fBTcl_AddObjErrorInfo\fR,
275this points to the first byte of an array of bytes
276containing a string to record in the \fBerrorInfo\fR variable.
277This byte array may contain embedded null bytes
278unless \fIlength\fR is negative.
279For \fBTcl_AddErrorInfo\fR,
280this is a conventional C string to record in the \fBerrorInfo\fR variable.
281.AP int length in
282The number of bytes to copy from \fImessage\fR when
283setting the \fBerrorInfo\fR variable.
284If negative, all bytes up to the first null byte are used.
285.AP Tcl_Obj *errorObjPtr in
286This variable \fBerrorCode\fR will be set to this value.
287.AP char *element in
288String to record as one element of \fBerrorCode\fR variable.
289Last \fIelement\fR argument must be NULL.
290.AP va_list argList in
291An argument list which must have been initialized using
292\fBTCL_VARARGS_START\fR, and cleared using \fBva_end\fR.
293.AP "CONST char" *script in
294Pointer to first character in script containing command (must be <= command)
295.AP "CONST char" *command in
296Pointer to first character in command that generated the error
297.AP int commandLength in
298Number of bytes in command; -1 means use all bytes up to first null byte
299.BE
300
301.SH DESCRIPTION
302.PP
303These procedures are used to manipulate two Tcl global variables
304that hold information about errors.
305The variable \fBerrorInfo\fR holds a stack trace of the
306operations that were in progress when an error occurred,
307and is intended to be human-readable.
308The variable \fBerrorCode\fR holds a list of items that
309are intended to be machine-readable.
310The first item in \fBerrorCode\fR identifies the class of
311error that occurred
312(e.g. POSIX means an error occurred in a POSIX system call)
313and additional elements in \fBerrorCode\fR hold additional pieces
314of information that depend on the class.
315See the Tcl overview manual entry for details on the various
316formats for \fBerrorCode\fR.
317.PP
318The \fBerrorInfo\fR variable is gradually built up as an
319error unwinds through the nested operations.
320Each time an error code is returned to \fBTcl_EvalObjEx\fR
321(or \fBTcl_Eval\fR, which calls \fBTcl_EvalObjEx\fR)
322it calls the procedure \fBTcl_AddObjErrorInfo\fR to add
323additional text to \fBerrorInfo\fR describing the
324command that was being executed when the error occurred.
325By the time the error has been passed all the way back
326to the application, it will contain a complete trace
327of the activity in progress when the error occurred.
328.PP
329It is sometimes useful to add additional information to
330\fBerrorInfo\fR beyond what can be supplied automatically
331by \fBTcl_EvalObjEx\fR.
332\fBTcl_AddObjErrorInfo\fR may be used for this purpose:
333its \fImessage\fR and \fIlength\fR arguments describe an additional
334string to be appended to \fBerrorInfo\fR.
335For example, the \fBsource\fR command calls \fBTcl_AddObjErrorInfo\fR
336to record the name of the file being processed and the
337line number on which the error occurred;
338for Tcl procedures, the procedure name and line number
339within the procedure are recorded, and so on.
340The best time to call \fBTcl_AddObjErrorInfo\fR is just after
341\fBTcl_EvalObjEx\fR has returned \fBTCL_ERROR\fR.
342In calling \fBTcl_AddObjErrorInfo\fR, you may find it useful to
343use the \fBerrorLine\fR field of the interpreter (see the
344\fBTcl_Interp\fR manual entry for details).
345.PP
346\fBTcl_AddErrorInfo\fR resembles \fBTcl_AddObjErrorInfo\fR
347but differs in initializing \fBerrorInfo\fR from the string
348value of the interpreter's result
349if the error is just starting to be logged.
350It does not use the result as a Tcl object
351so any embedded null characters in the result
352will cause information to be lost.
353It also takes a conventional C string in \fImessage\fR
354instead of \fBTcl_AddObjErrorInfo\fR's counted string.
355.PP
356The procedure \fBTcl_SetObjErrorCode\fR is used to set the
357\fBerrorCode\fR variable. \fIerrorObjPtr\fR contains a list object
358built up by the caller. \fBerrorCode\fR is set to this
359value. \fBTcl_SetObjErrorCode\fR is typically invoked just
360before returning an error in an object command. If an error is
361returned without calling \fBTcl_SetObjErrorCode\fR or
362\fBTcl_SetErrorCode\fR the Tcl interpreter automatically sets
363\fBerrorCode\fR to \fBNONE\fR.
364.PP
365The procedure \fBTcl_SetErrorCode\fR is also used to set the
366\fBerrorCode\fR variable. However, it takes one or more strings to
367record instead of an object. Otherwise, it is similar to
368\fBTcl_SetObjErrorCode\fR in behavior.
369.PP
370\fBTcl_SetErrorCodeVA\fR is the same as \fBTcl_SetErrorCode\fR except that
371instead of taking a variable number of arguments it takes an argument list.
372.PP
373\fBTcl_PosixError\fR
374sets the \fBerrorCode\fR variable after an error in a POSIX kernel call.
375It reads the value of the \fBerrno\fR C variable and calls
376\fBTcl_SetErrorCode\fR to set \fBerrorCode\fR in the \fBPOSIX\fR format.
377The caller must previously have called \fBTcl_SetErrno\fR to set
378\fBerrno\fR; this is necessary on some platforms (e.g. Windows) where Tcl
379is linked into an application as a shared library, or when the error
380occurs in a dynamically loaded extension. See the manual entry for
381\fBTcl_SetErrno\fR for more information.
382.PP
383\fBTcl_PosixError\fR returns a human-readable diagnostic message
384for the error
385(this is the same value that will appear as the third element
386in \fBerrorCode\fR).
387It may be convenient to include this string as part of the
388error message returned to the application in
389the interpreter's result.
390.PP
391\fBTcl_LogCommandInfo\fR is invoked after an error occurs in an
392interpreter. It adds information about the command that was being
393executed when the error occurred to the \fBerrorInfo\fR variable, and
394the line number stored internally in the interpreter is set. On the
395first call to \fBTcl_LogCommandInfo\fR or \fBTcl_AddObjErrorInfo\fR
396since an error occurred, the old information in \fBerrorInfo\fR is
397deleted.
398.PP
399It is important to call the procedures described here rather than
400setting \fBerrorInfo\fR or \fBerrorCode\fR directly with
401\fBTcl_ObjSetVar2\fR.
402The reason for this is that the Tcl interpreter keeps information
403about whether these procedures have been called.
404For example, the first time \fBTcl_AddObjErrorInfo\fR is called
405for an error, it clears the existing value of \fBerrorInfo\fR
406and adds the error message in the interpreter's result to the variable
407before appending \fImessage\fR;
408in subsequent calls, it just appends the new \fImessage\fR.
409When \fBTcl_SetErrorCode\fR is called, it sets a flag indicating
410that \fBerrorCode\fR has been set;
411this allows the Tcl interpreter to set \fBerrorCode\fR to \fBNONE\fR
412if it receives an error return
413when \fBTcl_SetErrorCode\fR hasn't been called.
414.PP
415If the procedure \fBTcl_ResetResult\fR is called,
416it clears all of the state associated with
417\fBerrorInfo\fR and \fBerrorCode\fR
418(but it doesn't actually modify the variables).
419If an error had occurred, this will clear the error state to
420make it appear as if no error had occurred after all.
421
422.SH "SEE ALSO"
423Tcl_DecrRefCount, Tcl_IncrRefCount, Tcl_Interp, Tcl_ResetResult, Tcl_SetErrno
424
425.SH KEYWORDS
426error, object, object result, stack, trace, variable