From 95f933049ae9eab54ed7a82d8b33ed8816220697 Mon Sep 17 00:00:00 2001 From: yury Date: Sat, 26 Dec 2015 20:48:15 +0000 Subject: [PATCH] * pas2jni: Fixed memory leaks. git-svn-id: trunk@32744 - --- utils/pas2jni/pas2jni.pas | 18 +++++++++++------- utils/pas2jni/ppuparser.pas | 19 ++++++++++++------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/utils/pas2jni/pas2jni.pas b/utils/pas2jni/pas2jni.pas index 7bb1bd09d0..6bd9f7c1a8 100644 --- a/utils/pas2jni/pas2jni.pas +++ b/utils/pas2jni/pas2jni.pas @@ -67,15 +67,17 @@ begin Result.Text:=r; end; -procedure ParseCmdLine; +function ParseCmdLine: boolean; var i: integer; s, ss: string; sl: TStringList; begin + Result:=False; if ParamCount = 0 then begin ShowUsage; - Halt(1); + ErrorCode:=1; + exit; end; for i:=1 to Paramcount do begin s:=ParamStr(i); @@ -151,12 +153,13 @@ begin '?', 'H': begin ShowUsage; - Halt(0); + exit; end; else begin writeln('Illegal parameter: -', s); - Halt(1); + ErrorCode:=1; + exit; end; end; end @@ -170,20 +173,21 @@ begin w.Units.Add(ExtractFileName(s)); end; end; + Result:=True; end; begin try w:=TWriter.Create; try - ParseCmdLine; - w.ProcessUnits; + if ParseCmdLine then + w.ProcessUnits; finally w.Free; end; except writeln(Exception(ExceptObject).Message); - Halt(2); + ErrorCode:=2; end; end. diff --git a/utils/pas2jni/ppuparser.pas b/utils/pas2jni/ppuparser.pas index 9ef358f05c..4b44d0949a 100644 --- a/utils/pas2jni/ppuparser.pas +++ b/utils/pas2jni/ppuparser.pas @@ -59,7 +59,7 @@ var implementation -uses process, pipes, fpjson, jsonparser; +uses process, pipes, fpjson, jsonparser, jsonscanner; const OnExceptionProcName = 'JNI_OnException'; @@ -119,7 +119,7 @@ constructor TPPUParser.Create(const ASearchPath: string); begin SearchPath:=TStringList.Create; AddSearchPath(ASearchPath); - Units:=TDef.Create(nil, dtNone); + Units:=TDef.Create; end; destructor TPPUParser.Destroy; @@ -188,7 +188,6 @@ end; function TPPUParser.InternalParse(const AUnitName: string): TUnitDef; var junit: TJSONObject; - jp: TJSONParser; deref: array of TUnitDef; CurUnit: TUnitDef; IsSystemUnit: boolean; @@ -550,6 +549,8 @@ var i, j: integer; s: string; chkres: TCheckItemResult; + jp: TJSONParser; + jdata: TJSONData; begin Result:=nil; for i:=0 to Units.Count - 1 do @@ -569,11 +570,12 @@ begin s:=ReadUnit(AUnitName); try - junit:=nil; + jdata:=nil; try - jp:=TJSONParser.Create(s); + jp:=TJSONParser.Create(s, [joUTF8]); try - junit:=TJSONObject(jp.Parse.Items[0]); + jdata:=jp.Parse; + junit:=TJSONObject(jdata.Items[0]); finally jp.Free; end; @@ -591,6 +593,9 @@ begin Result.OS:=Copy(Result.OS, 1, Length(Result.OS) - j - 1); Result.IntfCRC:=junit.Strings['InterfaceCRC']; + if IsSystemUnit then + Result.IsUsed:=True; + if not FDefaultSearchPathAdded then begin FDefaultSearchPathAdded:=True; AddDefaultSearchPath(AnsiLowerCase(Result.CPU), AnsiLowerCase(Result.OS)); @@ -631,7 +636,7 @@ begin end; SetLength(Result.UsedUnits, j); finally - junit.Free; + jdata.Free; end; except if CurObjName <> '' then