2
$Id: rtti.inc,v 1.22 2005/02/14 17:13:26 peter Exp $
3
2
This file is part of the Free Pascal run time library.
4
3
Copyright (c) 1999-2000 by Michael Van Canneyt
5
4
member of the Free Pascal development team
130
Procedure fpc_Initialize (Data,TypeInfo : pointer);{$ifndef NOSAVEREGISTERS}saveregisters;{$endif}[Public,Alias : 'FPC_INITIALIZE']; {$ifdef hascompilerproc} compilerproc; {$endif}
128
Procedure fpc_Initialize (Data,TypeInfo : pointer);[Public,Alias : 'FPC_INITIALIZE']; compilerproc;
132
130
case PByte(TypeInfo)^ of
133
131
tkAstring,tkWstring,tkInterface,tkDynArray:
139
137
recordrtti(data,typeinfo,@int_initialize);
142
139
variant_init(PVarData(Data)^);
148
Procedure fpc_finalize (Data,TypeInfo: Pointer);{$ifndef NOSAVEREGISTERS}saveregisters;{$endif}[Public,Alias : 'FPC_FINALIZE']; {$ifdef hascompilerproc} compilerproc; {$endif}
144
Procedure fpc_finalize (Data,TypeInfo: Pointer);[Public,Alias : 'FPC_FINALIZE']; compilerproc;
150
146
case PByte(TypeInfo)^ of
153
149
fpc_AnsiStr_Decr_Ref(PPointer(Data)^);
154
150
PPointer(Data)^:=nil;
156
{$ifdef HASWIDESTRING}
159
154
fpc_WideStr_Decr_Ref(PPointer(Data)^);
160
155
PPointer(Data)^:=nil;
162
{$endif HASWIDESTRING}
164
158
arrayrtti(data,typeinfo,@int_finalize);
167
161
recordrtti(data,typeinfo,@int_finalize);
171
164
Intf_Decr_Ref(PPointer(Data)^);
172
165
PPointer(Data)^:=nil;
176
168
fpc_dynarray_decr_ref(PPointer(Data)^,TypeInfo);
179
170
variant_clear(PVarData(Data)^);
185
Procedure fpc_Addref (Data,TypeInfo : Pointer);{$ifndef NOSAVEREGISTERS}saveregisters;{$endif} [Public,alias : 'FPC_ADDREF']; {$ifdef hascompilerproc} compilerproc; {$endif}
175
Procedure fpc_Addref (Data,TypeInfo : Pointer); [Public,alias : 'FPC_ADDREF']; compilerproc;
187
177
case PByte(TypeInfo)^ of
189
179
fpc_AnsiStr_Incr_Ref(PPointer(Data)^);
190
{$ifdef HASWIDESTRING}
192
181
fpc_WideStr_Incr_Ref(PPointer(Data)^);
193
{$endif HASWIDESTRING}
195
183
arrayrtti(data,typeinfo,@int_addref);
198
186
recordrtti(data,typeinfo,@int_addref);
200
188
fpc_dynarray_incr_ref(PPointer(Data)^);
203
190
Intf_Incr_Ref(PPointer(Data)^);
207
192
variant_addref(pvardata(Data)^);
213
197
{ alias for internal use }
214
198
{ we use another name else the compiler gets puzzled because of the wrong forward def }
215
procedure fpc_systemDecRef (Data, TypeInfo : Pointer);{$ifndef NOSAVEREGISTERS}saveregisters;{$endif}[external name 'FPC_DECREF'];
199
procedure fpc_systemDecRef (Data, TypeInfo : Pointer);[external name 'FPC_DECREF'];
217
Procedure fpc_DecRef (Data, TypeInfo : Pointer);{$ifndef NOSAVEREGISTERS}saveregisters;{$endif}[Public,alias : 'FPC_DECREF']; {$ifdef hascompilerproc} compilerproc; {$endif}
201
Procedure fpc_DecRef (Data, TypeInfo : Pointer);[Public,alias : 'FPC_DECREF']; compilerproc;
219
203
case PByte(TypeInfo)^ of
220
204
{ see AddRef for comment about below construct (JM) }
222
206
fpc_AnsiStr_Decr_Ref(PPointer(Data)^);
223
{$ifdef HASWIDESTRING}
225
208
fpc_WideStr_Decr_Ref(PPointer(Data)^);
226
{$endif HASWIDESTRING}
228
210
arrayrtti(data,typeinfo,@fpc_systemDecRef);
231
213
recordrtti(data,typeinfo,@fpc_systemDecRef);
233
215
fpc_dynarray_decr_ref(PPointer(Data)^,TypeInfo);
236
217
Intf_Decr_Ref(PPointer(Data)^);
240
219
variant_clear(pvardata(data)^);
246
procedure fpc_finalize_array(data,typeinfo : pointer;count,size : longint); [Public,Alias:'FPC_FINALIZEARRAY']; {$ifdef hascompilerproc} compilerproc; {$endif}
225
Procedure fpc_Copy (Src, Dest, TypeInfo : Pointer);[Public,alias : 'FPC_COPY']; compilerproc;
234
case PByte(TypeInfo)^ of
237
fpc_AnsiStr_Incr_Ref(PPointer(Src)^);
238
fpc_AnsiStr_Decr_Ref(PPointer(Dest)^);
239
PPointer(Dest)^:=PPointer(Src)^;
243
fpc_WideStr_Incr_Ref(PPointer(Src)^);
244
fpc_WideStr_Decr_Ref(PPointer(Dest)^);
248
arrayrtti(data,typeinfo,@fpc_systemDecRef);
253
Temp:=PByte(TypeInfo);
258
temp:=aligntoptr(temp);
261
move(src^,dest^,plongint(temp)^);
266
Count:=PLongint(Temp)^;
267
inc(Temp,sizeof(Count));
271
Info:=PPointer(Temp)^;
272
inc(Temp,sizeof(Info));
273
Offset:=PLongint(Temp)^;
274
inc(Temp,sizeof(Offset));
275
fpc_Copy(Src+Offset,Src+Offset,Info);
279
fpc_dynarray_Incr_Ref(PPointer(Src)^);
280
fpc_dynarray_Decr_Ref(PPointer(Dest)^);
281
PPointer(Dest)^:=PPointer(Src)^;
285
Intf_Incr_Ref(PPointer(Src)^);
286
Intf_Decr_Ref(PPointer(Dest)^);
287
PPointer(Dest)^:=PPointer(Src)^;
290
VarCopyProc(pvardata(dest)^,pvardata(src)^);
296
procedure fpc_finalize_array(data,typeinfo : pointer;count,size : longint); [Public,Alias:'FPC_FINALIZEARRAY']; compilerproc;
251
301
int_finalize(data+size*i,typeinfo);
256
Revision 1.22 2005/02/14 17:13:26 peter
259
Revision 1.21 2005/01/15 18:47:26 florian
260
* several variant init./final. stuff fixed
262
Revision 1.20 2005/01/08 20:43:44 florian
263
+ init/cleaning code for variants added