mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-04-17 07:19:24 +02:00
rtl: added TRttiInstanceType, issue 38824, from Henrique Gottardi Werlang
This commit is contained in:
parent
a3b1d0b22a
commit
37fe291187
@ -281,6 +281,7 @@ type
|
||||
|
||||
TRttiStructuredType = class abstract(TRttiType)
|
||||
private
|
||||
FFields: TRttiFieldArray;
|
||||
FMethods: TRttiMethodArray;
|
||||
FProperties: TRttiPropertyArray;
|
||||
protected
|
||||
@ -291,8 +292,10 @@ type
|
||||
|
||||
destructor Destroy; override;
|
||||
|
||||
function GetDeclaredFields: TRttiFieldArray; override;
|
||||
function GetDeclaredMethods: TRttiMethodArray; override;
|
||||
function GetDeclaredProperties: TRttiPropertyArray; override;
|
||||
function GetFields: TRttiFieldArray; override;
|
||||
function GetMethod(const aName: String): TRttiMethod; override;
|
||||
function GetMethods: TRttiMethodArray; override;
|
||||
function GetMethods(const aName: String): TRttiMethodArray; override;
|
||||
@ -306,8 +309,6 @@ type
|
||||
|
||||
TRttiInstanceType = class(TRttiStructuredType)
|
||||
private
|
||||
FFields: TRttiFieldArray;
|
||||
|
||||
function GetClassTypeInfo: TTypeInfoClass;
|
||||
function GetMetaClassType: TClass;
|
||||
protected
|
||||
@ -315,9 +316,6 @@ type
|
||||
public
|
||||
constructor Create(ATypeInfo: PTypeInfo);
|
||||
|
||||
function GetFields: TRttiFieldArray; override;
|
||||
function GetDeclaredFields: TRttiFieldArray; override;
|
||||
|
||||
property ClassTypeInfo: TTypeInfoClass read GetClassTypeInfo;
|
||||
property MetaClassType: TClass read GetMetaClassType;
|
||||
end;
|
||||
@ -992,31 +990,7 @@ begin
|
||||
Result := FMethods;
|
||||
end;
|
||||
|
||||
{ TRttiInstanceType }
|
||||
|
||||
function TRttiInstanceType.GetClassTypeInfo: TTypeInfoClass;
|
||||
begin
|
||||
Result:=TTypeInfoClass(FTypeInfo);
|
||||
end;
|
||||
|
||||
function TRttiInstanceType.GetMetaClassType: TClass;
|
||||
begin
|
||||
Result:=ClassTypeInfo.ClassType;
|
||||
end;
|
||||
|
||||
function TRttiInstanceType.GetAncestor: TRttiStructuredType;
|
||||
begin
|
||||
Result := GRttiContext.GetType(ClassTypeInfo.Ancestor) as TRttiStructuredType;
|
||||
end;
|
||||
|
||||
constructor TRttiInstanceType.Create(ATypeInfo: PTypeInfo);
|
||||
begin
|
||||
if not (TTypeInfo(ATypeInfo) is TTypeInfoClass) then
|
||||
raise EInvalidCast.Create('');
|
||||
inherited Create(ATypeInfo);
|
||||
end;
|
||||
|
||||
function TRttiInstanceType.GetDeclaredFields: TRttiFieldArray;
|
||||
function TRttiStructuredType.GetDeclaredFields: TRttiFieldArray;
|
||||
var
|
||||
A, FieldCount: Integer;
|
||||
|
||||
@ -1034,7 +1008,7 @@ begin
|
||||
Result := FFields;
|
||||
end;
|
||||
|
||||
function TRttiInstanceType.GetFields: TRttiFieldArray;
|
||||
function TRttiStructuredType.GetFields: TRttiFieldArray;
|
||||
var
|
||||
A, Start: Integer;
|
||||
|
||||
@ -1060,6 +1034,30 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TRttiInstanceType }
|
||||
|
||||
function TRttiInstanceType.GetClassTypeInfo: TTypeInfoClass;
|
||||
begin
|
||||
Result:=TTypeInfoClass(FTypeInfo);
|
||||
end;
|
||||
|
||||
function TRttiInstanceType.GetMetaClassType: TClass;
|
||||
begin
|
||||
Result:=ClassTypeInfo.ClassType;
|
||||
end;
|
||||
|
||||
function TRttiInstanceType.GetAncestor: TRttiStructuredType;
|
||||
begin
|
||||
Result := GRttiContext.GetType(ClassTypeInfo.Ancestor) as TRttiStructuredType;
|
||||
end;
|
||||
|
||||
constructor TRttiInstanceType.Create(ATypeInfo: PTypeInfo);
|
||||
begin
|
||||
if not (TTypeInfo(ATypeInfo) is TTypeInfoClass) then
|
||||
raise EInvalidCast.Create('');
|
||||
inherited Create(ATypeInfo);
|
||||
end;
|
||||
|
||||
{ TRttiInterfaceType }
|
||||
|
||||
constructor TRttiInterfaceType.Create(ATypeInfo: PTypeInfo);
|
||||
@ -1291,7 +1289,7 @@ end;
|
||||
|
||||
function TRttiField.GetFieldType: TRttiType;
|
||||
begin
|
||||
Result := GRttiContext.GetType(FTypeInfo);
|
||||
Result := GRttiContext.GetType(FieldTypeInfo.TypeInfo);
|
||||
end;
|
||||
|
||||
function TRttiField.GetFieldTypeInfo: TTypeMemberField;
|
||||
|
Loading…
Reference in New Issue
Block a user