mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-10-29 19:42:51 +01:00
pastojs: fixed mem leaks
git-svn-id: trunk@39439 -
This commit is contained in:
parent
c7e07a792c
commit
b11c5943b0
@ -18545,7 +18545,6 @@ const
|
|||||||
AssignSt.Expr:=FDS;
|
AssignSt.Expr:=FDS;
|
||||||
FD:=FDS.AFunction;
|
FD:=FDS.AFunction;
|
||||||
FD.Params.Add(EqualParamName);
|
FD.Params.Add(EqualParamName);
|
||||||
FD.Body:=TJSFunctionBody(CreateElement(TJSFunctionBody,El));
|
|
||||||
// add "return "
|
// add "return "
|
||||||
RetSt:=TJSReturnStatement(CreateElement(TJSReturnStatement,El));
|
RetSt:=TJSReturnStatement(CreateElement(TJSReturnStatement,El));
|
||||||
FD.Body.A:=RetSt;
|
FD.Body.A:=RetSt;
|
||||||
|
|||||||
@ -2097,6 +2097,7 @@ begin
|
|||||||
l:=ms.Size-ms.Position;
|
l:=ms.Size-ms.Position;
|
||||||
if l>0 then
|
if l>0 then
|
||||||
begin
|
begin
|
||||||
|
s:='';
|
||||||
SetLength(s,l);
|
SetLength(s,l);
|
||||||
ms.Read(s[1],l);
|
ms.Read(s[1],l);
|
||||||
end
|
end
|
||||||
|
|||||||
@ -563,6 +563,10 @@ type
|
|||||||
end;
|
end;
|
||||||
TPCUFilerElementRefArray = array of TPCUFilerElementRef;
|
TPCUFilerElementRefArray = array of TPCUFilerElementRef;
|
||||||
|
|
||||||
|
TPCUFilerElementRef2 = class(TPCUFilerElementRef)
|
||||||
|
s: string;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TPCUFiler - base class TPCUWriter/TPCUReader}
|
{ TPCUFiler - base class TPCUWriter/TPCUReader}
|
||||||
|
|
||||||
TPCUFiler = class
|
TPCUFiler = class
|
||||||
@ -1822,10 +1826,18 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
function TPCUFiler.CreateElementRef(El: TPasElement): TPCUFilerElementRef;
|
function TPCUFiler.CreateElementRef(El: TPasElement): TPCUFilerElementRef;
|
||||||
|
var
|
||||||
|
Node: TAVLTreeNode;
|
||||||
begin
|
begin
|
||||||
Result:=TPCUFilerElementRef.Create;
|
Result:=TPCUFilerElementRef.Create;
|
||||||
Result.Element:=El;
|
Result.Element:=El;
|
||||||
|
{$IFDEF MemCheck}
|
||||||
|
Node:=FElementRefs.Add(Result);
|
||||||
|
if Node<>FElementRefs.FindKey(El,@CompareElWithPCUFilerElementRef) then
|
||||||
|
RaiseMsg(20180711222046,El);
|
||||||
|
{$ELSE}
|
||||||
FElementRefs.Add(Result);
|
FElementRefs.Add(Result);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TPCUFiler.AddedBuiltInRef(Ref: TPCUFilerElementRef);
|
procedure TPCUFiler.AddedBuiltInRef(Ref: TPCUFilerElementRef);
|
||||||
@ -4063,7 +4075,8 @@ begin
|
|||||||
if RefEl is TPasType then
|
if RefEl is TPasType then
|
||||||
begin
|
begin
|
||||||
El.VarType:=TPasType(RefEl);
|
El.VarType:=TPasType(RefEl);
|
||||||
RefEl.AddRef;
|
if RefEl.Parent<>El then
|
||||||
|
RefEl.AddRef;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
RaiseMsg(20180211121809,El,GetObjName(RefEl));
|
RaiseMsg(20180211121809,El,GetObjName(RefEl));
|
||||||
@ -4076,7 +4089,8 @@ begin
|
|||||||
if RefEl is TPasType then
|
if RefEl is TPasType then
|
||||||
begin
|
begin
|
||||||
El.DestType:=TPasType(RefEl);
|
El.DestType:=TPasType(RefEl);
|
||||||
RefEl.AddRef;
|
if RefEl.Parent<>El then
|
||||||
|
RefEl.AddRef;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
RaiseMsg(20180211121801,El,GetObjName(RefEl));
|
RaiseMsg(20180211121801,El,GetObjName(RefEl));
|
||||||
@ -4090,7 +4104,8 @@ begin
|
|||||||
if RefEl is TPasType then
|
if RefEl is TPasType then
|
||||||
begin
|
begin
|
||||||
El.DestType:=TPasType(RefEl);
|
El.DestType:=TPasType(RefEl);
|
||||||
RefEl.AddRef;
|
if RefEl.Parent<>El then
|
||||||
|
RefEl.AddRef;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
RaiseMsg(20180211121757,El,GetObjName(RefEl));
|
RaiseMsg(20180211121757,El,GetObjName(RefEl));
|
||||||
@ -4104,7 +4119,8 @@ begin
|
|||||||
if RefEl is TPasType then
|
if RefEl is TPasType then
|
||||||
begin
|
begin
|
||||||
El.DestType:=TPasType(RefEl);
|
El.DestType:=TPasType(RefEl);
|
||||||
RefEl.AddRef;
|
if RefEl.Parent<>El then
|
||||||
|
RefEl.AddRef;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
RaiseMsg(20180211121750,El,GetObjName(RefEl));
|
RaiseMsg(20180211121750,El,GetObjName(RefEl));
|
||||||
@ -4117,7 +4133,8 @@ begin
|
|||||||
if RefEl is TPasType then
|
if RefEl is TPasType then
|
||||||
begin
|
begin
|
||||||
El.ElType:=TPasType(RefEl);
|
El.ElType:=TPasType(RefEl);
|
||||||
RefEl.AddRef;
|
if RefEl.Parent<>El then
|
||||||
|
RefEl.AddRef;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
RaiseMsg(20180211121732,El,GetObjName(RefEl));
|
RaiseMsg(20180211121732,El,GetObjName(RefEl));
|
||||||
@ -4130,7 +4147,8 @@ begin
|
|||||||
if RefEl is TPasType then
|
if RefEl is TPasType then
|
||||||
begin
|
begin
|
||||||
El.ElType:=TPasType(RefEl);
|
El.ElType:=TPasType(RefEl);
|
||||||
RefEl.AddRef;
|
if RefEl.Parent<>El then
|
||||||
|
RefEl.AddRef;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
RaiseMsg(20180211121726,El,GetObjName(RefEl));
|
RaiseMsg(20180211121726,El,GetObjName(RefEl));
|
||||||
@ -4143,7 +4161,8 @@ begin
|
|||||||
if RefEl is TPasType then
|
if RefEl is TPasType then
|
||||||
begin
|
begin
|
||||||
El.EnumType:=TPasType(RefEl);
|
El.EnumType:=TPasType(RefEl);
|
||||||
RefEl.AddRef;
|
if RefEl.Parent<>El then
|
||||||
|
RefEl.AddRef;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
RaiseMsg(20180211121714,El,GetObjName(RefEl));
|
RaiseMsg(20180211121714,El,GetObjName(RefEl));
|
||||||
@ -4156,7 +4175,8 @@ begin
|
|||||||
if RefEl is TPasRecordType then
|
if RefEl is TPasRecordType then
|
||||||
begin
|
begin
|
||||||
El.Members:=TPasRecordType(RefEl);
|
El.Members:=TPasRecordType(RefEl);
|
||||||
RefEl.AddRef;
|
if RefEl.Parent<>El then
|
||||||
|
RefEl.AddRef;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
RaiseMsg(20180211121657,El,GetObjName(RefEl));
|
RaiseMsg(20180211121657,El,GetObjName(RefEl));
|
||||||
@ -4170,7 +4190,8 @@ begin
|
|||||||
if (RefEl is TPasType) or (RefEl.ClassType=TPasVariable) then
|
if (RefEl is TPasType) or (RefEl.ClassType=TPasVariable) then
|
||||||
begin
|
begin
|
||||||
El.VariantEl:=RefEl;
|
El.VariantEl:=RefEl;
|
||||||
RefEl.AddRef;
|
if RefEl.Parent<>El then
|
||||||
|
RefEl.AddRef;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
RaiseMsg(20180210205031,El,GetObjName(RefEl));
|
RaiseMsg(20180210205031,El,GetObjName(RefEl));
|
||||||
@ -4183,7 +4204,8 @@ begin
|
|||||||
if RefEl is TPasType then
|
if RefEl is TPasType then
|
||||||
begin
|
begin
|
||||||
El.ArgType:=TPasType(RefEl);
|
El.ArgType:=TPasType(RefEl);
|
||||||
RefEl.AddRef;
|
if RefEl.Parent<>El then
|
||||||
|
RefEl.AddRef;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
RaiseMsg(20180211121643,El,GetObjName(RefEl));
|
RaiseMsg(20180211121643,El,GetObjName(RefEl));
|
||||||
@ -4251,7 +4273,8 @@ begin
|
|||||||
if RefEl is TPasType then
|
if RefEl is TPasType then
|
||||||
begin
|
begin
|
||||||
El.AncestorType:=TPasType(RefEl);
|
El.AncestorType:=TPasType(RefEl);
|
||||||
RefEl.AddRef;
|
if RefEl.Parent<>El then
|
||||||
|
RefEl.AddRef;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
RaiseMsg(20180211121632,El,GetObjName(RefEl));
|
RaiseMsg(20180211121632,El,GetObjName(RefEl));
|
||||||
@ -4265,7 +4288,8 @@ begin
|
|||||||
if RefEl is TPasType then
|
if RefEl is TPasType then
|
||||||
begin
|
begin
|
||||||
El.HelperForType:=TPasType(RefEl);
|
El.HelperForType:=TPasType(RefEl);
|
||||||
RefEl.AddRef;
|
if RefEl.Parent<>El then
|
||||||
|
RefEl.AddRef;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
RaiseMsg(20180211121612,El,GetObjName(RefEl));
|
RaiseMsg(20180211121612,El,GetObjName(RefEl));
|
||||||
@ -4279,7 +4303,8 @@ begin
|
|||||||
if RefEl is TPasType then
|
if RefEl is TPasType then
|
||||||
begin
|
begin
|
||||||
El.ResultType:=TPasType(RefEl);
|
El.ResultType:=TPasType(RefEl);
|
||||||
RefEl.AddRef;
|
if RefEl.Parent<>El then
|
||||||
|
RefEl.AddRef;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
RaiseMsg(20180211121537,El,GetObjName(RefEl));
|
RaiseMsg(20180211121537,El,GetObjName(RefEl));
|
||||||
@ -4358,7 +4383,8 @@ begin
|
|||||||
begin
|
begin
|
||||||
Scope:=El.CustomData as TPasEnumTypeScope;
|
Scope:=El.CustomData as TPasEnumTypeScope;
|
||||||
Scope.CanonicalSet:=TPasSetType(RefEl);
|
Scope.CanonicalSet:=TPasSetType(RefEl);
|
||||||
RefEl.AddRef;
|
if RefEl.Parent<>El then
|
||||||
|
RefEl.AddRef;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
RaiseMsg(20180316215238,Scope.Element,GetObjName(RefEl));
|
RaiseMsg(20180316215238,Scope.Element,GetObjName(RefEl));
|
||||||
@ -4555,6 +4581,9 @@ var
|
|||||||
RefItem: TPCUFilerPendingElRef;
|
RefItem: TPCUFilerPendingElRef;
|
||||||
PendingElRef: TPCUReaderPendingElRef;
|
PendingElRef: TPCUReaderPendingElRef;
|
||||||
PendingElListRef: TPCUReaderPendingElListRef;
|
PendingElListRef: TPCUReaderPendingElListRef;
|
||||||
|
{$IF defined(VerbosePCUFiler) or defined(memcheck)}
|
||||||
|
Node: TAVLTreeNode;
|
||||||
|
{$ENDIF}
|
||||||
begin
|
begin
|
||||||
if Id<=0 then
|
if Id<=0 then
|
||||||
RaiseMsg(20180207151233,ErrorEl);
|
RaiseMsg(20180207151233,ErrorEl);
|
||||||
@ -4580,18 +4609,30 @@ begin
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
Ref:=TPCUFilerElementRef.Create;
|
Ref:=TPCUFilerElementRef2.Create;
|
||||||
|
TPCUFilerElementRef2(Ref).s:=IntToStr(Id);
|
||||||
Ref.Id:=Id;
|
Ref.Id:=Id;
|
||||||
end;
|
end;
|
||||||
|
{$IF defined(VerbosePCUFiler) or defined(memcheck)}
|
||||||
|
if FElementRefsArray[Id]<>nil then
|
||||||
|
RaiseMsg(20180711212859,ErrorEl,IntToStr(Id)+' is not FElementRefsArray[Id]');
|
||||||
|
{$ENDIF}
|
||||||
FElementRefsArray[Id]:=Ref;
|
FElementRefsArray[Id]:=Ref;
|
||||||
end;
|
end;
|
||||||
Result:=Ref;
|
Result:=Ref;
|
||||||
|
|
||||||
if El=nil then exit;
|
if El=nil then
|
||||||
|
exit
|
||||||
if Ref.Element=nil then
|
else if Ref.Element=nil then
|
||||||
begin
|
begin
|
||||||
Ref.Element:=El;
|
Ref.Element:=El;
|
||||||
|
{$IF defined(VerbosePCUFiler) or defined(memcheck)}
|
||||||
|
Node:=FElementRefs.FindKey(El,@CompareElWithPCUFilerElementRef);
|
||||||
|
if Node<>nil then
|
||||||
|
RaiseMsg(20180711231646,El,GetObjName(TPCUFilerElementRef2(Node.Data).Element));
|
||||||
|
{$ENDIF}
|
||||||
|
FElementRefs.Add(Ref);
|
||||||
|
|
||||||
if Ref.Pending<>nil then
|
if Ref.Pending<>nil then
|
||||||
begin
|
begin
|
||||||
// resolve pending references
|
// resolve pending references
|
||||||
@ -7520,13 +7561,19 @@ end;
|
|||||||
|
|
||||||
destructor TPCUReader.Destroy;
|
destructor TPCUReader.Destroy;
|
||||||
begin
|
begin
|
||||||
|
FreeAndNil(FJSON);
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
FreeAndNil(FPendingIdentifierScopes);
|
FreeAndNil(FPendingIdentifierScopes);
|
||||||
FreeAndNil(FInitialFlags);
|
FreeAndNil(FInitialFlags);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TPCUReader.Clear;
|
procedure TPCUReader.Clear;
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
|
for i:=0 to length(FElementRefsArray)-1 do
|
||||||
|
if (FElementRefsArray[i]<>nil) and (FElementRefsArray[i].Element=nil) then
|
||||||
|
FElementRefsArray[i].Free;
|
||||||
FElementRefsArray:=nil;
|
FElementRefsArray:=nil;
|
||||||
FPendingIdentifierScopes.Clear;
|
FPendingIdentifierScopes.Clear;
|
||||||
inherited Clear;
|
inherited Clear;
|
||||||
@ -7543,6 +7590,7 @@ var
|
|||||||
Count: Cardinal;
|
Count: Cardinal;
|
||||||
Src: TStream;
|
Src: TStream;
|
||||||
begin
|
begin
|
||||||
|
FirstBytes:='';
|
||||||
SetLength(FirstBytes,4);
|
SetLength(FirstBytes,4);
|
||||||
if aStream.Read(FirstBytes[1],4)<4 then
|
if aStream.Read(FirstBytes[1],4)<4 then
|
||||||
RaiseMsg(20180313232754,nil);
|
RaiseMsg(20180313232754,nil);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user