Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / devtools / amd64 / man / man3 / Tcl_ConvertToType.3
CommitLineData
920dae64
AT
1'\"
2'\" Copyright (c) 1996-1997 Sun Microsystems, Inc.
3'\"
4'\" See the file "license.terms" for information on usage and redistribution
5'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
6'\"
7'\" RCS: @(#) $Id: ObjectType.3,v 1.7 2002/08/16 13:45:36 dkf Exp $
8'\"
9'\" The definitions below are for supplemental macros used in Tcl/Tk
10'\" manual entries.
11'\"
12'\" .AP type name in/out ?indent?
13'\" Start paragraph describing an argument to a library procedure.
14'\" type is type of argument (int, etc.), in/out is either "in", "out",
15'\" or "in/out" to describe whether procedure reads or modifies arg,
16'\" and indent is equivalent to second arg of .IP (shouldn't ever be
17'\" needed; use .AS below instead)
18'\"
19'\" .AS ?type? ?name?
20'\" Give maximum sizes of arguments for setting tab stops. Type and
21'\" name are examples of largest possible arguments that will be passed
22'\" to .AP later. If args are omitted, default tab stops are used.
23'\"
24'\" .BS
25'\" Start box enclosure. From here until next .BE, everything will be
26'\" enclosed in one large box.
27'\"
28'\" .BE
29'\" End of box enclosure.
30'\"
31'\" .CS
32'\" Begin code excerpt.
33'\"
34'\" .CE
35'\" End code excerpt.
36'\"
37'\" .VS ?version? ?br?
38'\" Begin vertical sidebar, for use in marking newly-changed parts
39'\" of man pages. The first argument is ignored and used for recording
40'\" the version when the .VS was added, so that the sidebars can be
41'\" found and removed when they reach a certain age. If another argument
42'\" is present, then a line break is forced before starting the sidebar.
43'\"
44'\" .VE
45'\" End of vertical sidebar.
46'\"
47'\" .DS
48'\" Begin an indented unfilled display.
49'\"
50'\" .DE
51'\" End of indented unfilled display.
52'\"
53'\" .SO
54'\" Start of list of standard options for a Tk widget. The
55'\" options follow on successive lines, in four columns separated
56'\" by tabs.
57'\"
58'\" .SE
59'\" End of list of standard options for a Tk widget.
60'\"
61'\" .OP cmdName dbName dbClass
62'\" Start of description of a specific option. cmdName gives the
63'\" option's name as specified in the class command, dbName gives
64'\" the option's name in the option database, and dbClass gives
65'\" the option's class in the option database.
66'\"
67'\" .UL arg1 arg2
68'\" Print arg1 underlined, then print arg2 normally.
69'\"
70'\" RCS: @(#) $Id: man.macros,v 1.4 2000/08/25 06:18:32 ericm Exp $
71'\"
72'\" # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
73.if t .wh -1.3i ^B
74.nr ^l \n(.l
75.ad b
76'\" # Start an argument description
77.de AP
78.ie !"\\$4"" .TP \\$4
79.el \{\
80. ie !"\\$2"" .TP \\n()Cu
81. el .TP 15
82.\}
83.ta \\n()Au \\n()Bu
84.ie !"\\$3"" \{\
85\&\\$1 \\fI\\$2\\fP (\\$3)
86.\".b
87.\}
88.el \{\
89.br
90.ie !"\\$2"" \{\
91\&\\$1 \\fI\\$2\\fP
92.\}
93.el \{\
94\&\\fI\\$1\\fP
95.\}
96.\}
97..
98'\" # define tabbing values for .AP
99.de AS
100.nr )A 10n
101.if !"\\$1"" .nr )A \\w'\\$1'u+3n
102.nr )B \\n()Au+15n
103.\"
104.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
105.nr )C \\n()Bu+\\w'(in/out)'u+2n
106..
107.AS Tcl_Interp Tcl_CreateInterp in/out
108'\" # BS - start boxed text
109'\" # ^y = starting y location
110'\" # ^b = 1
111.de BS
112.br
113.mk ^y
114.nr ^b 1u
115.if n .nf
116.if n .ti 0
117.if n \l'\\n(.lu\(ul'
118.if n .fi
119..
120'\" # BE - end boxed text (draw box now)
121.de BE
122.nf
123.ti 0
124.mk ^t
125.ie n \l'\\n(^lu\(ul'
126.el \{\
127.\" Draw four-sided box normally, but don't draw top of
128.\" box if the box started on an earlier page.
129.ie !\\n(^b-1 \{\
130\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
131.\}
132.el \}\
133\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
134.\}
135.\}
136.fi
137.br
138.nr ^b 0
139..
140'\" # VS - start vertical sidebar
141'\" # ^Y = starting y location
142'\" # ^v = 1 (for troff; for nroff this doesn't matter)
143.de VS
144.if !"\\$2"" .br
145.mk ^Y
146.ie n 'mc \s12\(br\s0
147.el .nr ^v 1u
148..
149'\" # VE - end of vertical sidebar
150.de VE
151.ie n 'mc
152.el \{\
153.ev 2
154.nf
155.ti 0
156.mk ^t
157\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
158.sp -1
159.fi
160.ev
161.\}
162.nr ^v 0
163..
164'\" # Special macro to handle page bottom: finish off current
165'\" # box/sidebar if in box/sidebar mode, then invoked standard
166'\" # page bottom macro.
167.de ^B
168.ev 2
169'ti 0
170'nf
171.mk ^t
172.if \\n(^b \{\
173.\" Draw three-sided box if this is the box's first page,
174.\" draw two sides but no top otherwise.
175.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
176.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
177.\}
178.if \\n(^v \{\
179.nr ^x \\n(^tu+1v-\\n(^Yu
180\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
181.\}
182.bp
183'fi
184.ev
185.if \\n(^b \{\
186.mk ^y
187.nr ^b 2
188.\}
189.if \\n(^v \{\
190.mk ^Y
191.\}
192..
193'\" # DS - begin display
194.de DS
195.RS
196.nf
197.sp
198..
199'\" # DE - end display
200.de DE
201.fi
202.RE
203.sp
204..
205'\" # SO - start of list of standard options
206.de SO
207.SH "STANDARD OPTIONS"
208.LP
209.nf
210.ta 5.5c 11c
211.ft B
212..
213'\" # SE - end of list of standard options
214.de SE
215.fi
216.ft R
217.LP
218See the \\fBoptions\\fR manual entry for details on the standard options.
219..
220'\" # OP - start of full description for a single option
221.de OP
222.LP
223.nf
224.ta 4c
225Command-Line Name: \\fB\\$1\\fR
226Database Name: \\fB\\$2\\fR
227Database Class: \\fB\\$3\\fR
228.fi
229.IP
230..
231'\" # CS - begin code excerpt
232.de CS
233.RS
234.nf
235.ta .25i .5i .75i 1i
236..
237'\" # CE - end code excerpt
238.de CE
239.fi
240.RE
241..
242.de UL
243\\$1\l'|0\(ul'\\$2
244..
245.TH Tcl_ObjType 3 8.0 Tcl "Tcl Library Procedures"
246.BS
247.SH NAME
248Tcl_RegisterObjType, Tcl_GetObjType, Tcl_AppendAllObjTypes, Tcl_ConvertToType \- manipulate Tcl object types
249.SH SYNOPSIS
250.nf
251\fB#include <tcl.h>\fR
252.sp
253\fBTcl_RegisterObjType\fR(\fItypePtr\fR)
254.sp
255Tcl_ObjType *
256\fBTcl_GetObjType\fR(\fItypeName\fR)
257.sp
258int
259\fBTcl_AppendAllObjTypes\fR(\fIinterp, objPtr\fR)
260.sp
261int
262\fBTcl_ConvertToType\fR(\fIinterp, objPtr, typePtr\fR)
263.SH ARGUMENTS
264.AS Tcl_ObjType *typeName in
265.AP Tcl_ObjType *typePtr in
266Points to the structure containing information about the Tcl object type.
267This storage must live forever,
268typically by being statically allocated.
269.AP "CONST char" *typeName in
270The name of a Tcl object type that \fBTcl_GetObjType\fR should look up.
271.AP Tcl_Interp *interp in
272Interpreter to use for error reporting.
273.AP Tcl_Obj *objPtr in
274For \fBTcl_AppendAllObjTypes\fR, this points to the object onto which
275it appends the name of each object type as a list element.
276For \fBTcl_ConvertToType\fR, this points to an object that
277must have been the result of a previous call to \fBTcl_NewObj\fR.
278.BE
279
280.SH DESCRIPTION
281.PP
282The procedures in this man page manage Tcl object types.
283The are used to register new object types,
284look up types,
285and force conversions from one type to another.
286.PP
287\fBTcl_RegisterObjType\fR registers a new Tcl object type
288in the table of all object types supported by Tcl.
289The argument \fItypePtr\fR points to a Tcl_ObjType structure that
290describes the new type by giving its name
291and by supplying pointers to four procedures
292that implement the type.
293If the type table already contains a type
294with the same name as in \fItypePtr\fR,
295it is replaced with the new type.
296The Tcl_ObjType structure is described
297in the section \fBTHE TCL_OBJTYPE STRUCTURE\fR below.
298.PP
299\fBTcl_GetObjType\fR returns a pointer to the Tcl_ObjType
300with name \fItypeName\fR.
301It returns NULL if no type with that name is registered.
302.PP
303\fBTcl_AppendAllObjTypes\fR appends the name of each object type
304as a list element onto the Tcl object referenced by \fIobjPtr\fR.
305The return value is \fBTCL_OK\fR unless there was an error
306converting \fIobjPtr\fR to a list object;
307in that case \fBTCL_ERROR\fR is returned.
308.PP
309\fBTcl_ConvertToType\fR converts an object from one type to another
310if possible.
311It creates a new internal representation for \fIobjPtr\fR
312appropriate for the target type \fItypePtr\fR
313and sets its \fItypePtr\fR member to that type.
314Any internal representation for \fIobjPtr\fR's old type is freed.
315If an error occurs during conversion, it returns \fBTCL_ERROR\fR
316and leaves an error message in the result object for \fIinterp\fR
317unless \fIinterp\fR is NULL.
318Otherwise, it returns \fBTCL_OK\fR.
319Passing a NULL \fIinterp\fR allows this procedure to be used
320as a test whether the conversion can be done (and in fact was done).
321
322.SH "THE TCL_OBJTYPE STRUCTURE"
323.PP
324Extension writers can define new object types by defining four
325procedures,
326initializing a Tcl_ObjType structure to describe the type,
327and calling \fBTcl_RegisterObjType\fR.
328The \fBTcl_ObjType\fR structure is defined as follows:
329.CS
330typedef struct Tcl_ObjType {
331 char *\fIname\fR;
332 Tcl_FreeInternalRepProc *\fIfreeIntRepProc\fR;
333 Tcl_DupInternalRepProc *\fIdupIntRepProc\fR;
334 Tcl_UpdateStringProc *\fIupdateStringProc\fR;
335 Tcl_SetFromAnyProc *\fIsetFromAnyProc\fR;
336} Tcl_ObjType;
337.CE
338.PP
339The \fIname\fR member describes the name of the type, e.g. \fBint\fR.
340Extension writers can look up an object type using its name
341with the \fBTcl_GetObjType\fR procedure.
342The remaining four members are pointers to procedures
343called by the generic Tcl object code:
344.PP
345The \fIsetFromAnyProc\fR member contains the address of a function
346called to create a valid internal representation
347from an object's string representation.
348.CS
349typedef int (Tcl_SetFromAnyProc) (Tcl_Interp *\fIinterp\fR, Tcl_Obj *\fIobjPtr\fR);
350.CE
351If an internal representation can't be created from the string,
352it returns \fBTCL_ERROR\fR and puts a message
353describing the error in the result object for \fIinterp\fR
354unless \fIinterp\fR is NULL.
355If \fIsetFromAnyProc\fR is successful,
356it stores the new internal representation,
357sets \fIobjPtr\fR's \fItypePtr\fR member to point to
358\fIsetFromAnyProc\fR's \fBTcl_ObjType\fR, and returns \fBTCL_OK\fR.
359Before setting the new internal representation,
360the \fIsetFromAnyProc\fR must free any internal representation
361of \fIobjPtr\fR's old type;
362it does this by calling the old type's \fIfreeIntRepProc\fR
363if it is not NULL.
364As an example, the \fIsetFromAnyProc\fR for the builtin Tcl integer type
365gets an up-to-date string representation for \fIobjPtr\fR
366by calling \fBTcl_GetStringFromObj\fR.
367It parses the string to obtain an integer and,
368if this succeeds,
369stores the integer in \fIobjPtr\fR's internal representation
370and sets \fIobjPtr\fR's \fItypePtr\fR member to point to the integer type's
371Tcl_ObjType structure.
372Do not release \fIobjPtr\fR's old internal representation unless you
373replace it with a new one or reset the \fItypePtr\fR member to NULL.
374.PP
375The \fIupdateStringProc\fR member contains the address of a function
376called to create a valid string representation
377from an object's internal representation.
378.CS
379typedef void (Tcl_UpdateStringProc) (Tcl_Obj *\fIobjPtr\fR);
380.CE
381\fIobjPtr\fR's \fIbytes\fR member is always NULL when it is called.
382It must always set \fIbytes\fR non-NULL before returning.
383We require the string representation's byte array
384to have a null after the last byte, at offset \fIlength\fR;
385this allows string representations that do not contain null bytes
386to be treated as conventional null character-terminated C strings.
387Storage for the byte array must be allocated in the heap by \fBTcl_Alloc\fR
388or \fBckalloc\fR. Note that \fIupdateStringProc\fRs must allocate
389enough storage for the string's bytes and the terminating null byte.
390The \fIupdateStringProc\fR for Tcl's builtin list type, for example,
391builds an array of strings for each element object
392and then calls \fBTcl_Merge\fR
393to construct a string with proper Tcl list structure.
394It stores this string as the list object's string representation.
395.PP
396The \fIdupIntRepProc\fR member contains the address of a function
397called to copy an internal representation from one object to another.
398.CS
399typedef void (Tcl_DupInternalRepProc) (Tcl_Obj *\fIsrcPtr\fR, Tcl_Obj *\fIdupPtr\fR);
400.CE
401\fIdupPtr\fR's internal representation is made a copy of \fIsrcPtr\fR's
402internal representation.
403Before the call,
404\fIsrcPtr\fR's internal representation is valid and \fIdupPtr\fR's is not.
405\fIsrcPtr\fR's object type determines what
406copying its internal representation means.
407For example, the \fIdupIntRepProc\fR for the Tcl integer type
408simply copies an integer.
409The builtin list type's \fIdupIntRepProc\fR
410allocates a new array that points at the original element objects;
411the elements are shared between the two lists
412(and their reference counts are incremented to reflect the new references).
413.PP
414The \fIfreeIntRepProc\fR member contains the address of a function
415that is called when an object is freed.
416.CS
417typedef void (Tcl_FreeInternalRepProc) (Tcl_Obj *\fIobjPtr\fR);
418.CE
419The \fIfreeIntRepProc\fR function can deallocate the storage
420for the object's internal representation
421and do other type-specific processing necessary when an object is freed.
422For example, Tcl list objects have an \fIinternalRep.otherValuePtr\fR
423that points to an array of pointers to each element in the list.
424The list type's \fIfreeIntRepProc\fR decrements
425the reference count for each element object
426(since the list will no longer refer to those objects),
427then deallocates the storage for the array of pointers.
428The \fIfreeIntRepProc\fR member can be set to NULL
429to indicate that the internal representation does not require freeing.
430
431.SH "SEE ALSO"
432Tcl_NewObj, Tcl_DecrRefCount, Tcl_IncrRefCount
433
434.SH KEYWORDS
435internal representation, object, object type, string representation, type conversion