Debugger: Fixes To TWatchResultData / introduced 2d0c2ea8ba

This commit is contained in:
Martin 2022-08-05 12:33:02 +02:00
parent f0d0b24add
commit 683d087e36
2 changed files with 15 additions and 10 deletions

View File

@ -64,7 +64,8 @@ begin
Result := ValConfig.Converter;
if Result <> nil then
Result.AddReference;
end;
end
else
if (ValConvList <> nil) then begin
ValConvList.Lock;
try
@ -136,12 +137,16 @@ begin
if FExtraDephtLevelItemConv = nil then
FExtraDephtLevelItemConv := GetValConv(AnFpValue);
CurConv := FExtraDephtLevelItemConv;
if CurConv <> nil then
CurConv.AddReference;
end
else
if (RecurseCnt = 1) and (FLevelZeroKind = skArray) then begin
if FLevelZeroArrayConv = nil then
FLevelZeroArrayConv := GetValConv(AnFpValue);
CurConv := FLevelZeroArrayConv;
if CurConv <> nil then
CurConv.AddReference;
end
else begin
CurConv := GetValConv(AnFpValue);
@ -149,13 +154,13 @@ begin
if (CurConv <> nil) then begin
if (FMaxTotalConv <= 0) then
CurConv := nil
ReleaseRefAndNil(CurConv)
else
dec(FMaxTotalConv);
if FInArray then begin
if (FCurMaxArrayConv <= 0) then
CurConv := nil
ReleaseRefAndNil(CurConv)
else
dec(FCurMaxArrayConv);
end;
@ -182,10 +187,7 @@ begin
AnResData := AnResData.AddField('', dfvUnknown, []);
end;
finally
if (CurConv <> FExtraDephtLevelItemConv) and
(CurConv <> FLevelZeroArrayConv)
then
CurConv.ReleaseReference;
CurConv.ReleaseReference;
NewFpVal.ReleaseReference;
end;
end;

View File

@ -2297,12 +2297,14 @@ end;
procedure TWatchResultTypeConverted.AfterAssign(ATypeOnly: Boolean);
begin
inherited AfterAssign(ATypeOnly);
if FHandler <> nil then
FHandler.AddReference;
end;
procedure TWatchResultTypeConverted.DoFree;
begin
inherited DoFree;
if FHandler <> nil then
FHandler.ReleaseReference;
end;
@ -4556,7 +4558,7 @@ function TGenericWatchResultDataStructWithAnchestor.MaybeUpdateProto(
ARecurse: boolean; ASkipStorage: boolean): boolean;
var
AStructProtoData: TGenericWatchResultDataStructWithAnchestor absolute AProtoData;
FieldStore: PNestedFieldsWatchResultStorage absolute AStorage;
FieldStore: PNestedFieldsAndAnchestorWatchResultStorage absolute AStorage;
dummy: TOverrideTemplateData;
begin
Result := inherited MaybeUpdateProto(AProtoData, AnOverrideTemplate, AStorage, ARecurse, ASkipStorage);
@ -4569,7 +4571,7 @@ begin
AStructProtoData.FType.FAnchestor := FType.FAnchestor.CreateCopy(True);
assert((AStorage=nil) or (AStorage^=nil) or (AStorage^ is TNestedFieldsWatchResultStorage), 'TGenericWatchResultDataStruct.MaybeUpdateProto: (AStorage=nil) or (AStorage^=nil) or (AStorage^ is TNestedFieldsWatchResultStorage)');
assert((AStorage=nil) or (AStorage^=nil) or (AStorage^ is TNestedFieldsAndAnchestorWatchResultStorage), 'TGenericWatchResultDataStruct.MaybeUpdateProto: (AStorage=nil) or (AStorage^=nil) or (AStorage^ is TNestedFieldsWatchResultStorage)');
if (AStorage = nil) or (AStorage^ = nil)
then begin
if (ARecurse) then begin // or "if not ASkipStorage and " ??
@ -4705,7 +4707,8 @@ constructor TWatchResultDataConverted.Create(
AHandler: TLazDbgValueConverterIntf);
begin
FType.FHandler := AHandler;
AHandler.AddReference;
if AHandler <> nil then
AHandler.AddReference;
end;
{ TGenericWatchResultDataProc }