mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-09 18:08:35 +02:00
FpDebug: Refactor TFpSymbolDwarfFunctionResult, don't reload data from info-entry - use existing type
This commit is contained in:
parent
06d7230f75
commit
bba0a43742
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user