From 24d175e0a7ed4d4218507d3eb7d00dd97e4d9470 Mon Sep 17 00:00:00 2001 From: michael Date: Wed, 25 Jan 2012 08:48:07 +0000 Subject: [PATCH] * Abstracted handling of defines git-svn-id: trunk@20169 - --- packages/fcl-passrc/src/pparser.pp | 34 ++++++++++++++--------------- packages/fcl-passrc/src/pscanner.pp | 31 ++++++++++++++++++++------ 2 files changed, 41 insertions(+), 24 deletions(-) diff --git a/packages/fcl-passrc/src/pparser.pp b/packages/fcl-passrc/src/pparser.pp index a84d492be1..b7c12668b7 100644 --- a/packages/fcl-passrc/src/pparser.pp +++ b/packages/fcl-passrc/src/pparser.pp @@ -348,7 +348,7 @@ var begin case s[2] of 'd': // -d define - Scanner.Defines.Append(UpperCase(Copy(s, 3, Length(s)))); + Scanner.AddDefine(UpperCase(Copy(s, 3, Length(s)))); 'F': // -F if (length(s)>2) and (s[3] = 'i') then // -Fi include path FileResolver.AddIncludePath(Copy(s, 4, Length(s))); @@ -378,42 +378,42 @@ begin FileResolver := TFileResolver.Create; FileResolver.UseStreams:=UseStreams; Scanner := TPascalScanner.Create(FileResolver); - Scanner.Defines.Append('FPK'); - Scanner.Defines.Append('FPC'); + Scanner.AddDefine('FPK'); + Scanner.AddDefine('FPC'); SCanner.LogEvents:=AEngine.ScannerLogEvents; SCanner.OnLog:=AEngine.Onlog; // TargetOS s := UpperCase(OSTarget); - Scanner.Defines.Append(s); + Scanner.AddDefine(s); if s = 'LINUX' then - Scanner.Defines.Append('UNIX') + Scanner.AddDefine('UNIX') else if s = 'FREEBSD' then begin - Scanner.Defines.Append('BSD'); - Scanner.Defines.Append('UNIX'); + Scanner.AddDefine('BSD'); + Scanner.AddDefine('UNIX'); end else if s = 'NETBSD' then begin - Scanner.Defines.Append('BSD'); - Scanner.Defines.Append('UNIX'); + Scanner.AddDefine('BSD'); + Scanner.AddDefine('UNIX'); end else if s = 'SUNOS' then begin - Scanner.Defines.Append('SOLARIS'); - Scanner.Defines.Append('UNIX'); + Scanner.AddDefine('SOLARIS'); + Scanner.AddDefine('UNIX'); end else if s = 'GO32V2' then - Scanner.Defines.Append('DPMI') + Scanner.AddDefine('DPMI') else if s = 'BEOS' then - Scanner.Defines.Append('UNIX') + Scanner.AddDefine('UNIX') else if s = 'QNX' then - Scanner.Defines.Append('UNIX'); + Scanner.AddDefine('UNIX'); // TargetCPU s := UpperCase(CPUTarget); - Scanner.Defines.Append('CPU'+s); + Scanner.AddDefine('CPU'+s); if (s='x86_64') then - Scanner.Defines.Append('CPU64') + Scanner.AddDefine('CPU64') else - Scanner.Defines.Append('CPU32'); + Scanner.AddDefine('CPU32'); Parser := TPasParser.Create(Scanner, FileResolver, AEngine); Filename := ''; diff --git a/packages/fcl-passrc/src/pscanner.pp b/packages/fcl-passrc/src/pscanner.pp index 34021839da..454d93e7ca 100644 --- a/packages/fcl-passrc/src/pscanner.pp +++ b/packages/fcl-passrc/src/pscanner.pp @@ -345,6 +345,8 @@ type destructor Destroy; override; procedure OpenFile(const AFilename: string); function FetchToken: TToken; + Procedure AddDefine(S : String); + Procedure RemoveDefine(S : String); property FileResolver: TBaseFileResolver read FFileResolver; property CurSourceFile: TLineReader read FCurSourceFile; @@ -1184,10 +1186,7 @@ begin Param := UpperCase(Param); Index:=Pos(':=',Param); If (Index=0) then - begin - if Defines.IndexOf(Param) < 0 then - Defines.Add(Param); - end + AddDefine(Param) else begin MV:=Trim(Param); @@ -1208,9 +1207,9 @@ Var begin Param := UpperCase(Param); - Index := Defines.IndexOf(Param); - if Index >= 0 then - Defines.Delete(Index) + Index:=FDefines.IndexOf(Param); + If (Index<0) then + RemoveDefine(Param) else begin Index := FMacros.IndexOf(Param); @@ -1786,4 +1785,22 @@ begin FOptions:=AValue; end; +Procedure TPascalScanner.AddDefine(S : String); + +begin + If FDefines.IndexOf(S)=-1 then + FDefines.Add(S); +end; + +Procedure TPascalScanner.RemoveDefine(S : String); + +Var + I : Integer; + +begin + I:=FDefines.IndexOf(S); + if (I<>-1) then + FDefines.Delete(I); +end; + end.