FpDebug: Refactor TFpSymbolDwarfFunctionResult, don't reload data from info-entry - use existing type

This commit is contained in:
Martin 2022-06-18 12:16:10 +02:00
parent 06d7230f75
commit bba0a43742
2 changed files with 36 additions and 26 deletions

View File

@ -13,6 +13,18 @@ uses
FpDbgClasses;
type
{ TFpSymbolDwarfFunctionResult }
TFpSymbolDwarfFunctionResult = class(TFpSymbolDwarfDataWithLocation)
protected
function GetValueAddress(AValueObj: TFpValueDwarf; out AnAddress: TFpDbgMemLocation): Boolean; override;
procedure Init; override;
public
constructor Create(const AName: String;
const AAddress: TFpDbgMemLocation;
ATypeSymbol: TFpSymbol); overload;
end;
{ TFpDbgInfoCallContext }
TFpDbgInfoCallContext = class(TFpDbgAbstractCallContext)
@ -22,20 +34,40 @@ type
implementation
{ TFpSymbolDwarfFunctionResult }
function TFpSymbolDwarfFunctionResult.GetValueAddress(AValueObj: TFpValueDwarf; out AnAddress: TFpDbgMemLocation): Boolean;
begin
AnAddress := Address;
Result := IsInitializedLoc(AnAddress);
end;
procedure TFpSymbolDwarfFunctionResult.Init;
begin
inherited Init;
EvaluatedFields := EvaluatedFields + [sfiAddress];
end;
constructor TFpSymbolDwarfFunctionResult.Create(const AName: String;
const AAddress: TFpDbgMemLocation; ATypeSymbol: TFpSymbol);
begin
inherited Create(AName, ATypeSymbol.Kind, AAddress); // TODO: intercept at TDbgDwarfSymbolBase and call Init?
SetTypeInfo(ATypeSymbol);
Init;
end;
{ TFpDbgInfoCallContext }
function TFpDbgInfoCallContext.CreateParamSymbol(AParamIndex: Integer;
ASymbolType: TFpSymbol; ADbgProcess: TDbgProcess; AName: String): TFpValue;
var
ParameterMemLocation: TFpDbgMemLocation;
TypeSymbol: TFpSymbol;
ParamSymbol: TFpSymbolDwarfFunctionResult;
ParamSymbol: TFpSymbol;// TFpSymbolDwarfFunctionResult;
begin
ParameterMemLocation := ADbgProcess.CallParamDefaultLocation(AParamIndex);
TypeSymbol := ASymbolType.TypeInfo;
if AName = '' then
AName := ASymbolType.Name;
ParamSymbol := TFpSymbolDwarfFunctionResult.Create(AName, TDbgDwarfSymbolBase(ASymbolType).InformationEntry, TypeSymbol.Kind, ParameterMemLocation);
ParamSymbol := TFpSymbolDwarfFunctionResult.Create(AName, ParameterMemLocation, ASymbolType.TypeInfo);
try
Result := ParamSymbol.Value;
finally

View File

@ -596,14 +596,6 @@ type
AnInitLocParserData: PInitLocParserData): Boolean; override;
end;
{ TFpSymbolDwarfFunctionResult }
TFpSymbolDwarfFunctionResult = class(TFpSymbolDwarfDataWithLocation)
protected
function GetValueAddress(AValueObj: TFpValueDwarf; out AnAddress: TFpDbgMemLocation): Boolean; override;
procedure Init; override;
end;
TFpSymbolDwarfThirdPartyExtension = class(TFpSymbolDwarf)
end;
@ -1069,20 +1061,6 @@ begin
FLocContext.ReleaseReference;
end;
{ TFpSymbolDwarfFunctionResult }
function TFpSymbolDwarfFunctionResult.GetValueAddress(AValueObj: TFpValueDwarf; out AnAddress: TFpDbgMemLocation): Boolean;
begin
AnAddress := Address;
Result := IsInitializedLoc(AnAddress);
end;
procedure TFpSymbolDwarfFunctionResult.Init;
begin
inherited Init;
EvaluatedFields := EvaluatedFields + [sfiAddress];
end;
{ TFpValueDwarfSubroutine }
function TFpValueDwarfSubroutine.IsValidTypeCast: Boolean;