Browse Source

Fix for the procedure signature to have an parent object and the parameters share the same parent value.

Henrique Gottardi Werlang 5 months ago
parent
commit
25e86f9afe
1 changed files with 5 additions and 5 deletions
  1. 5 5
      packages/rtl/src/rtti.pas

+ 5 - 5
packages/rtl/src/rtti.pas

@@ -243,7 +243,7 @@ type
     procedure LoadFlags;
     procedure LoadFlags;
     procedure LoadParameters;
     procedure LoadParameters;
   public
   public
-    constructor Create(const Signature: TProcedureSignature);
+    constructor Create(const Parent: TRttiObject; const Signature: TProcedureSignature);
 
 
     class function Invoke(const Instance: TValue; const Args: array of TValue): TValue;
     class function Invoke(const Instance: TValue; const Args: array of TValue): TValue;
 
 
@@ -2217,7 +2217,7 @@ end;
 function TRttiMethod.GetProcedureSignature: TRttiProcedureSignature;
 function TRttiMethod.GetProcedureSignature: TRttiProcedureSignature;
 begin
 begin
   if not Assigned(FProcedureSignature) then
   if not Assigned(FProcedureSignature) then
-    FProcedureSignature := TRttiProcedureSignature.Create(MethodTypeInfo.ProcSig);
+    FProcedureSignature := TRttiProcedureSignature.Create(Self, MethodTypeInfo.ProcSig);
 
 
   Result := FProcedureSignature;
   Result := FProcedureSignature;
 end;
 end;
@@ -2862,9 +2862,9 @@ end;
 
 
 { TRttiProcedureSignature }
 { TRttiProcedureSignature }
 
 
-constructor TRttiProcedureSignature.Create(const Signature: TProcedureSignature);
+constructor TRttiProcedureSignature.Create(const Parent: TRttiObject; const Signature: TProcedureSignature);
 begin
 begin
-  inherited Create(nil, Signature);
+  inherited Create(Parent, Signature);
 
 
   FReturnType := Pool.GetType(Signature.ResultType);
   FReturnType := Pool.GetType(Signature.ResultType);
 
 
@@ -2917,7 +2917,7 @@ begin
   for A := Low(FParameters) to High(FParameters) do
   for A := Low(FParameters) to High(FParameters) do
   begin
   begin
     Param := MethodParams[A];
     Param := MethodParams[A];
-    RttiParam := TRttiParameter.Create(Self, Param);
+    RttiParam := TRttiParameter.Create(Parent, Param);
     RttiParam.FName := Param.Name;
     RttiParam.FName := Param.Name;
     RttiParam.FParamType := Pool.GetType(Param.TypeInfo);
     RttiParam.FParamType := Pool.GetType(Param.TypeInfo);