mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-16 01:20:43 +02:00

Merged revision(s) 28239-28289 from branches/svenbarth/packages: Provide the possiblity to switch between the direct and indirect RTTI symbols. ncgrtti.pas, TRTTIWriter: + get_rtti_label, get_rtti_label_ord2str & get_rtti_label_str2ord: add new "indirect" parameter and pass that along to rtti_mangledname hlcgobj.pas, thlcgobj: * g_incrrefcount, g_initialize, g_finalize, g_array_rtti_helper: for now pass along False to get_rtti_label() ncgvmt.pas, TVMTWriter: * writevmt: for now pass along False to get_rtti_label() ncgld.pas, tcgrttinode: * pass_generate_code: for now pass along False to the get_rtti_label*() methods ........ Provide possibility to select between using a direct and an indirect RTTI reference. This way the references can be changed for selected cases. ncgrtti, TRTTIWriter: * ref_rtti: new "indirect" parameter that's relayed to rtti_mangledname() * write_rtti_reference: new "indirect" paramater that's relayed to ref_rtti() ........ Switch properties to use the indirect type information without breaking backwards compatiblity. :) compiler/ncgrtti.pas, TRTTIWriter: * published_properties_write_rtti_data: use the indirect reference, not the direct one rtl/objpas/typinfo.pp: * to allow compilation with both 2.6.x and 2.7.1 and too avoid too many ifdefs at least in the declarations we define a macro TypeInfoPtr which is either PTypeInfo (2.6.x) or PPTypeInfo (2.7.1 and newer) * TPropInfo: rename PropType to PropTypeRef and change type to TypeInfoPtr + TPropInfo: add a new property PropType which returns a PTypeInfo out of the PropTypeRef depending on the compiler version ........ Switch further simple types (sets, enums, class references, pointers) to indirect type information (again without breaking backwards compatibility). compiler/ncgrtti.pas, TRTTIWriter.write_rtti_data: * enumdef_rtti, setdef_rtti, classrefdef_rtti & pointerdef_rtti: write an indirect RTTI reference rtl/objpas/typinfo.pp, TTypeData: * rename BaseType to BaseTypeRef, CompType to CompTypeRef, InstanceType to InstanceTypeRef and RefType to RefTypeRef and change their type to TypeInfoPtr + add properties BaseType, CompType, InstanceType & RefType which return a PTypeInfo out of the corresponding *Ref field depending on the compiler version ........ Switch class and interface parent as well as extended type to indirect type information compiler/ncgrtti.pas, TRTTIWriter: * write_rtti_data.objectdef_rtti.objectdef_rtti_class_full: use indirect reference for class parent and extended type * write_rtti_data.objectdef_rtti.objectdef_rtti_interface_full: use indirect reference for interface parent rtl/objpas/typinfo.pp, TTypeData: + add new method DerefTypeInfoPtr which returns Nil if the indirect reference is Nil and otherwise returns the dereferences indirect reference (for 2.6.x the direct reference is returned as is) * rename ParentInfo to ParentInfoRef, HelperParent to HelperParentRef, ExtendedInfo to ExtendedInfoRef, IntfParent ot IntfParentRef and RawIntfParent to RawIntfParentRef and change their type to TypeInfoPtr + introduce ParentInfo, HelperParent, ExtendedInfo, IntfParent and RawIntfParent properties that return a PTypeInfo and use the new DerefTypeInfoPtr to return the correct type info value * change the other newly introduced properties of TTypeData to use DerefTypeInfoPtr as well to be on the safe side ........ Switch record/object fields to indirect type information references. compiler/ncgrtti.pas, TRTTIWriter.fields_write_rtti_data: * use the indirect reference for the object parent type * use the indirect reference for the field type rtl/inc/rtti.inc: * TRecordElement: change TypeInfo to PPointer for 2.7.1 and newer * RecordRTTI: correctly dereference the element type for 2.7.1 and newer * fpc_copy: correctly reference the element type for 2.7.1 and newer ........ Switch static arrays to indirect RTTI reference. compiler/ncgrtti.pas, TRTTIWriter.write_rtti_data: * arraydef_rtti: write the dimension types and the final field type as indirect references rtl/inc/rtti.inc: * TArrayInfo: switch ElInfo to PPointer for 2.7.1+ * ArrayRTTI & fpc_copy: correctly dereference ElInfo for 2.7.1+ rtl/objpas/typinfo.pp, TArrayTypeData: * switch ElType and Dims to PPTypeInfo; no backwards compatibility needed here as TArrayTypeData was added in 2.7.1 only tests/test/trtti8.pp: fix test ........ Switch dynamic arrays to indirect RTTI references. compiler/ncgrtti.pas, TRTTIWriter.write_rtti_data.arraydef_rtti: * write indirect references for the two element entries rtl/inc/dynarr.inc: * tdynarraytypedata: change elType2 to PPointer for 2.7.1+ * fpc_dynarray_clear, fpc_dynarray_setlength & fpc_dynarray_copy: correctly dereference elType2 for 2.7.1+ rtl/objpas/typinfo.pp, TTypeData: * rename elType and elType2 to elTypeRef and elType2Ref respectively and change type to TypeInfoPtr * add properties elType and elType2 which return PTypeInfo by dereferencing elTypeRef and elType2Ref respecively correctly * remove a few stray "inline" directives in the implementation ........ Switch procedure parameters and result type to indirect RTTI references. compiler/ncgrtti.pas, TRTTIWriter.write_rtti_data.procvardef_rtti: * write_procedure_param: use indirect RTTI reference * write result info for both methods and procvars as indirect RTTI reference * write parameters for procvars as indirect RTTI reference rtl/objpas/typinfo.pp: * TProcedureParam: change type of ParamType to PPTypeInfo (no backwards compatiblity needed here; was added for 2.7.1) * TProcedureSignature: change type of RseultType to PPTypeInfo (no backwards compatibility needed here; was added for 2.7.1) * TTypeData: remark in the comments of tkMethod that ResultTypeRef and ParamTypeRefs are of type PPTypeInfo and not PTypeInfo tests/test/trtti9.pp: * fix test ........ Remove no longer needed "indirect" parameter for TRTTIWriter methods. ncgrtti.pas, TRTTIWriter: - ref_rtti & write_rtti_reference: remove "indirect" parameter * ref_rtti: call rtti_mangledname with "indirect" always set to "true" - remove "true" parameter on callsites of write_rtti_reference & ref_rtti ........ git-svn-id: trunk@33944 -
47 lines
1.6 KiB
PHP
47 lines
1.6 KiB
PHP
{
|
|
This file is part of the Free Pascal Run time library.
|
|
Copyright (c) 1999-2005 by the Free Pascal development team
|
|
|
|
This file contains type declarations necessary for the dynamic
|
|
array routine helpers in syshelp.inc
|
|
|
|
See the File COPYING.FPC, included in this distribution,
|
|
for details about the copyright.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
|
|
**********************************************************************}
|
|
|
|
type
|
|
tdynarrayindex = sizeint;
|
|
pdynarrayindex = ^tdynarrayindex;
|
|
|
|
pdynarraytypeinfo = ^tdynarraytypeinfo;
|
|
ppdynarraytypeinfo = ^pdynarraytypeinfo;
|
|
tdynarraytypeinfo = packed record
|
|
kind : byte;
|
|
namelen : byte;
|
|
{ here the chars follow, we've to skip them }
|
|
elesize : sizeint;
|
|
{$ifdef VER3_0}
|
|
eletype : pdynarraytypeinfo;
|
|
{$else}
|
|
eletype : ppdynarraytypeinfo;
|
|
{$endif}
|
|
vartype : longint;
|
|
end;
|
|
|
|
procedure DynArraySetLength(var a: Pointer; typeInfo: Pointer; dimCnt: SizeInt; lengthVec: PSizeInt);
|
|
function DynArraySize(a : pointer): tdynarrayindex;
|
|
procedure DynArrayClear(var a: Pointer; typeInfo: Pointer);
|
|
function DynArrayDim(typeInfo: Pointer): Integer;
|
|
function DynArrayBounds(a: Pointer; typeInfo: Pointer): TBoundArray;
|
|
|
|
function IsDynArrayRectangular(a: Pointer; typeInfo: Pointer): Boolean;
|
|
function DynArrayIndex(a: Pointer; const indices: array of SizeInt; typeInfo: Pointer): Pointer;
|
|
|
|
procedure fpc_dynarray_rangecheck(p : pointer;i : tdynarrayindex); compilerproc;
|