You've already forked lazarus-ccr
chelper: fix mem leaks in cconverter
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1296 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@@ -10,7 +10,6 @@
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<MainUnit Value="0"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
<i18n>
|
||||
<EnableI18N LFM="False"/>
|
||||
@@ -65,19 +64,18 @@
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<GenerateDebugInfo Value="True"/>
|
||||
<UseLineInfoUnit Value="False"/>
|
||||
</Debugging>
|
||||
<LinkSmart Value="True"/>
|
||||
<Options>
|
||||
<LinkerOptions Value="-macosx_version_min 10.4 "/>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
<Other>
|
||||
<CompilerMessages>
|
||||
<IgnoredMessages idx3018="True" idx3031="True" idx3189="True" idx4035="True" idx4036="True" idx4055="True" idx4079="True" idx4080="True" idx4081="True" idx5024="True" idx5057="True" idx5058="True" idx5060="True"/>
|
||||
<UseMsgFile Value="True"/>
|
||||
<MsgFileName Value="/Users/dmitry/FPC_Laz/fpc/compiler/msg/errore.msg"/>
|
||||
<MsgFileName Value="/Users/igorkokarev/Fpc_Laz/fpc/compiler/msg/errore.msg"/>
|
||||
</CompilerMessages>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
|
@@ -100,8 +100,6 @@ type
|
||||
|
||||
function IsMultiLine: Boolean;
|
||||
procedure SkipSingleEoLnChars;
|
||||
|
||||
function AddChildToStackEntity(ent: TObject): Boolean;
|
||||
public
|
||||
Buf : AnsiString;
|
||||
|
||||
@@ -149,18 +147,13 @@ type
|
||||
TEntity = class(TObject)
|
||||
protected
|
||||
function DoParse(AParser: TTextParser): Boolean; virtual;
|
||||
|
||||
public
|
||||
Offset : Integer;
|
||||
Items : TList;
|
||||
|
||||
TagComment : AnsiString;
|
||||
Specifiers : TStringList;
|
||||
|
||||
constructor Create(AOffset: Integer=-1); virtual;
|
||||
destructor Destroy; override;
|
||||
function Parse(AParser: TTextParser): Boolean; virtual;
|
||||
procedure Assign(AEntity: TEntity); virtual;
|
||||
end;
|
||||
TEntityClass = class of TEntity;
|
||||
|
||||
@@ -178,11 +171,15 @@ type
|
||||
destructor Destroy; override;
|
||||
end;
|
||||
|
||||
{ TCPrepInclude }
|
||||
|
||||
TCPrepInclude = class(TCPrepocessor)
|
||||
protected
|
||||
function DoParse(AParser: TTextParser): Boolean; override;
|
||||
public
|
||||
Params : TStringList;
|
||||
Included : AnsiString;
|
||||
function DoParse(AParser: TTextParser): Boolean; override;
|
||||
destructor Destroy; override;
|
||||
end;
|
||||
|
||||
TCPrepElse = class(TCPrepocessor)
|
||||
@@ -244,7 +241,6 @@ type
|
||||
end;
|
||||
|
||||
TExpression = class(TEntity)
|
||||
function DoParse(AParser: TTextParser): Boolean; override;
|
||||
public
|
||||
Tokens : array of TExpPart;
|
||||
Count : Integer;
|
||||
@@ -272,8 +268,8 @@ type
|
||||
|
||||
TNamePart = class(TObject)
|
||||
private
|
||||
fChild : TNamePart;
|
||||
fOwner : TNamePart;
|
||||
fChild : TNamePart;
|
||||
fOwner : TNamePart;
|
||||
public
|
||||
Kind : TNameKind;
|
||||
RefCount : Integer;
|
||||
@@ -281,6 +277,7 @@ type
|
||||
arrayexp : array of TExpression;
|
||||
params : array of TFuncParam;
|
||||
constructor Create(AKind: TNameKind);
|
||||
destructor Destroy; override;
|
||||
procedure AddParam(prmtype: TEntity; prmname: TNamePart);
|
||||
procedure AddArrayExpr(expr: TExpression);
|
||||
property child: TNamePart read fchild write fChild; // int (*p)[10]; "[10]" is child of (*p)
|
||||
@@ -331,8 +328,6 @@ type
|
||||
{ TVarFuncEntity }
|
||||
|
||||
TVarFuncEntity = class(TEntity)
|
||||
protected
|
||||
function DoParse(AParser:TTextParser): Boolean; override;
|
||||
public
|
||||
RetType : TEntity;
|
||||
Names : TList;
|
||||
@@ -354,6 +349,7 @@ type
|
||||
public
|
||||
Name : AnsiString;
|
||||
fields : array oF TStructTypeField;
|
||||
destructor Destroy; override;
|
||||
function AddField(ev: TVarFuncEntity): Integer;
|
||||
end;
|
||||
|
||||
@@ -363,6 +359,7 @@ type
|
||||
public
|
||||
Name : AnsiString;
|
||||
fields : array oF TStructTypeField;
|
||||
destructor Destroy; override;
|
||||
function AddField(ev: TVarFuncEntity): Integer;
|
||||
end;
|
||||
|
||||
@@ -686,7 +683,12 @@ begin
|
||||
end;
|
||||
|
||||
destructor TTextParser.Destroy;
|
||||
var
|
||||
i : Integer;
|
||||
begin
|
||||
TokenTable.Free;
|
||||
for i:=0 to Comments.Count-1 do
|
||||
TObject(Comments[i]).Free;
|
||||
Comments.Free;
|
||||
//IgnoreTokens.Free;
|
||||
Errors.Free;
|
||||
@@ -735,9 +737,8 @@ begin
|
||||
if Result then begin
|
||||
Index:=i;
|
||||
Result := df.Parse(Self);
|
||||
if UsePrecompileEntities then AddChildToStackEntity(df);
|
||||
if Assigned(OnPrecompile) then
|
||||
OnPrecompile(Self, df);
|
||||
Comments.Add(df);
|
||||
if Assigned(OnPrecompile) then OnPrecompile(Self, df);
|
||||
end;
|
||||
|
||||
if not Result then begin
|
||||
@@ -954,18 +955,6 @@ begin
|
||||
Result := Cmd;
|
||||
end;
|
||||
|
||||
function TTextParser.AddChildToStackEntity(ent: TObject): Boolean;
|
||||
var
|
||||
parent : TEntity;
|
||||
begin
|
||||
Result := Assigned(stack) and (stack.Count>0);
|
||||
if not Result then Exit;
|
||||
|
||||
parent := stack[stack.Count-1];
|
||||
if Assigned(parent) and (parent is TEntity) then
|
||||
(parent as TEntity).Items.Add(ent);
|
||||
end;
|
||||
|
||||
function TTextParser.IsMultiLine: Boolean;
|
||||
begin
|
||||
Result := TokenTable.MultiLine <> #0;
|
||||
@@ -1029,11 +1018,6 @@ end;
|
||||
|
||||
{ TEntity }
|
||||
|
||||
procedure TEntity.Assign(AEntity: TEntity);
|
||||
begin
|
||||
TagComment := AEntity.TagComment;
|
||||
end;
|
||||
|
||||
function TEntity.DoParse(AParser:TTextParser):Boolean;
|
||||
begin
|
||||
Result:=False;
|
||||
@@ -1043,14 +1027,12 @@ constructor TEntity.Create(AOffset: Integer);
|
||||
begin
|
||||
inherited Create;
|
||||
Offset := AOffset;
|
||||
Items := TList.Create;
|
||||
Specifiers := TStringList.create;
|
||||
end;
|
||||
|
||||
destructor TEntity.Destroy;
|
||||
begin
|
||||
Specifiers.Free;
|
||||
Items.Free;
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
@@ -1208,6 +1190,12 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
destructor TCPrepInclude.Destroy;
|
||||
begin
|
||||
Params.Free;
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
{ TCPrepElse }
|
||||
|
||||
function TCPrepElse.DoParse(AParser: TTextParser): Boolean;
|
||||
@@ -1561,7 +1549,6 @@ begin
|
||||
|
||||
nm:='';
|
||||
simple:=TSimpleType.Create(Parser.TokenPos);
|
||||
//simple.Name:=Parser.Token;
|
||||
|
||||
issig:=(Parser.Token='unsigned') or (simple.Name='signed');
|
||||
if issig then begin
|
||||
@@ -1643,11 +1630,6 @@ end;
|
||||
|
||||
{ TExpression }
|
||||
|
||||
function TExpression.DoParse(AParser: TTextParser): Boolean;
|
||||
begin
|
||||
Result:=False;
|
||||
end;
|
||||
|
||||
procedure TExpression.PushToken(const AToken:AnsiString; ATokenType: TTokenType);
|
||||
begin
|
||||
if Count=length(Tokens) then begin
|
||||
@@ -1826,6 +1808,23 @@ begin
|
||||
Kind:=AKind;
|
||||
end;
|
||||
|
||||
destructor TNamePart.Destroy;
|
||||
var
|
||||
i : Integer;
|
||||
begin
|
||||
if Assigned(fChild) then begin
|
||||
fChild.owner:=nil;
|
||||
fChild.Free;
|
||||
end;
|
||||
if Assigned(fOwner) then fOwner.fChild:=nil;
|
||||
for i:=0 to length(arrayexp)-1 do arrayexp[i].Free;
|
||||
for i:=0 to length(params)-1 do begin
|
||||
params[i].prmtype.Free;
|
||||
params[i].name.Free;
|
||||
end;
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TNamePart.AddParam(prmtype:TEntity;prmname:TNamePart);
|
||||
var
|
||||
i : Integer;
|
||||
@@ -1847,11 +1846,6 @@ end;
|
||||
|
||||
{ TVarFuncEntity }
|
||||
|
||||
function TVarFuncEntity.DoParse(AParser:TTextParser):Boolean;
|
||||
begin
|
||||
Result:=False;
|
||||
end;
|
||||
|
||||
constructor TVarFuncEntity.Create(AOffset: Integer);
|
||||
begin
|
||||
inherited Create(AOffset);
|
||||
@@ -1859,7 +1853,12 @@ begin
|
||||
end;
|
||||
|
||||
destructor TVarFuncEntity.Destroy;
|
||||
var
|
||||
i : Integer;
|
||||
begin
|
||||
RetType.Free;
|
||||
for i:=0 to Names.Count-1 do TObject(Names[i]).Free;
|
||||
Names.Free;
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
@@ -1870,6 +1869,17 @@ end;
|
||||
|
||||
{ TStructType }
|
||||
|
||||
destructor TStructType.Destroy;
|
||||
var
|
||||
i : Integer;
|
||||
begin
|
||||
for i:=0 to length(fields)-1 do begin
|
||||
fields[i].v.Free;
|
||||
fields[i].bits.Free;
|
||||
end;
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
function TStructType.AddField(ev:TVarFuncEntity):Integer;
|
||||
var
|
||||
i : Integer;
|
||||
@@ -2045,6 +2055,17 @@ begin
|
||||
Result:=i;
|
||||
end;
|
||||
|
||||
destructor TUnionType.Destroy;
|
||||
var
|
||||
i : Integer;
|
||||
begin
|
||||
for i:=0 to length(fields)-1 do begin
|
||||
fields[i].v.Free;
|
||||
fields[i].bits.Free;
|
||||
end;
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
{ TEnumType }
|
||||
|
||||
function TEnumType.AddItem(const name:AnsiString;x:TExpression; Offset: Integer): Integer;
|
||||
@@ -2068,7 +2089,11 @@ begin
|
||||
end;
|
||||
|
||||
destructor TTypeDef.Destroy;
|
||||
var
|
||||
i : Integer;
|
||||
begin
|
||||
origintype.Free;
|
||||
for i:=0 to names.Count-1 do TObject(names[i]).Free;
|
||||
names.Free;
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
@@ -325,6 +325,8 @@ begin
|
||||
end;
|
||||
Result:=ent;
|
||||
AParser.Index:=entidx;
|
||||
end else begin
|
||||
ent.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
@@ -450,6 +452,8 @@ var
|
||||
cmt : TStopComment;
|
||||
i : Integer;
|
||||
succidx : Integer;
|
||||
cmtlist : TList;
|
||||
|
||||
begin
|
||||
FillChar(ParseError, sizeof(ParseError), 0);
|
||||
Result:='';
|
||||
@@ -468,7 +472,7 @@ begin
|
||||
p.UseCommentEntities := True;
|
||||
p.OnComment:=@cmt.OnComment;
|
||||
p.OnPrecompile:=@cmt.OnPrecompiler;
|
||||
|
||||
cmtlist:=TList.Create;
|
||||
try
|
||||
repeat
|
||||
try
|
||||
@@ -499,7 +503,10 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
cnv.WriteCtoPas(ent, p.Comments, p.Buf);
|
||||
cmtlist.Clear;
|
||||
for i:=0 to p.Comments.Count-1 do
|
||||
if TObject(p.Comments[i]) is TComment then cmtlist.Add(TObject(p.Comments[i]));
|
||||
cnv.WriteCtoPas(ent, cmtlist, p.Buf);
|
||||
|
||||
lastsec:=cnv.wr.Section;
|
||||
except
|
||||
@@ -509,6 +516,7 @@ begin
|
||||
cnv.Free;
|
||||
end;
|
||||
|
||||
if Assigned(ent) and (p.Comments.IndexOf(ent)<0) then ent.Free;
|
||||
for i:=0 to p.Comments.Count-1 do TComment(p.Comments[i]).Free;
|
||||
p.Comments.Clear;
|
||||
cmt.Clear;
|
||||
@@ -524,6 +532,7 @@ begin
|
||||
p.Free;
|
||||
macros.Free;
|
||||
cmt.Free;
|
||||
cmtlist.Free;
|
||||
end;
|
||||
except
|
||||
on e: Exception do Result:=Result+LineEnding+' internal error: '+ e.Message;
|
||||
@@ -734,7 +743,8 @@ begin
|
||||
for i:=0 to cent.Protocols.Count-2 do wr.W(cent.Protocols[i]+'Protocol, ');
|
||||
wr.W(cent.Protocols[cent.Protocols.Count-1]+'Protocol');
|
||||
end;
|
||||
if (cent.SuperClass<>'') or (cent.Protocols.Count>0) then wr.Wln(')');
|
||||
if (cent.SuperClass<>'') or (cent.Protocols.Count>0) then wr.Wln(')')
|
||||
else wr.Wln;
|
||||
|
||||
sect:='';
|
||||
sc:=os_Public;
|
||||
|
@@ -473,7 +473,6 @@ constructor TObjCMethod.Create(AOffset:Integer);
|
||||
begin
|
||||
inherited Create(AOffset);
|
||||
Name := TStringList.Create;
|
||||
RetType := TVarFuncEntity.Create;
|
||||
end;
|
||||
|
||||
destructor TObjCMethod.Destroy;
|
||||
|
@@ -53,7 +53,7 @@ function SkipCommentBlock(const s: AnsiString; var index: Integer; const closecm
|
||||
|
||||
function SkipLine(const s: AnsiString; var index: Integer): AnsiString;
|
||||
|
||||
function OffsetToLinePos(const t: AnsiString; Offset: Integer; var P: TPoint): AnsiString;
|
||||
procedure OffsetToLinePos(const t: AnsiString; Offset: Integer; var P: TPoint);
|
||||
|
||||
implementation
|
||||
|
||||
@@ -152,7 +152,7 @@ begin
|
||||
inc(index);
|
||||
end;
|
||||
|
||||
function OffsetToLinePos(const t: AnsiString; Offset: Integer; var P: TPoint): AnsiString;
|
||||
procedure OffsetToLinePos(const t: AnsiString; Offset: Integer; var P: TPoint);
|
||||
var
|
||||
i, le : Integer;
|
||||
begin
|
||||
|
Reference in New Issue
Block a user