Browse Source

* Abstracted handling of defines

git-svn-id: trunk@20169 -
michael 13 years ago
parent
commit
24d175e0a7
2 changed files with 41 additions and 24 deletions
  1. 17 17
      packages/fcl-passrc/src/pparser.pp
  2. 24 7
      packages/fcl-passrc/src/pscanner.pp

+ 17 - 17
packages/fcl-passrc/src/pparser.pp

@@ -348,7 +348,7 @@ var
     begin
     begin
       case s[2] of
       case s[2] of
         'd': // -d define
         'd': // -d define
-          Scanner.Defines.Append(UpperCase(Copy(s, 3, Length(s))));
+          Scanner.AddDefine(UpperCase(Copy(s, 3, Length(s))));
         'F': // -F
         'F': // -F
           if (length(s)>2) and (s[3] = 'i') then // -Fi include path
           if (length(s)>2) and (s[3] = 'i') then // -Fi include path
             FileResolver.AddIncludePath(Copy(s, 4, Length(s)));
             FileResolver.AddIncludePath(Copy(s, 4, Length(s)));
@@ -378,42 +378,42 @@ begin
     FileResolver := TFileResolver.Create;
     FileResolver := TFileResolver.Create;
     FileResolver.UseStreams:=UseStreams;
     FileResolver.UseStreams:=UseStreams;
     Scanner := TPascalScanner.Create(FileResolver);
     Scanner := TPascalScanner.Create(FileResolver);
-    Scanner.Defines.Append('FPK');
-    Scanner.Defines.Append('FPC');
+    Scanner.AddDefine('FPK');
+    Scanner.AddDefine('FPC');
     SCanner.LogEvents:=AEngine.ScannerLogEvents;
     SCanner.LogEvents:=AEngine.ScannerLogEvents;
     SCanner.OnLog:=AEngine.Onlog;
     SCanner.OnLog:=AEngine.Onlog;
 
 
     // TargetOS
     // TargetOS
     s := UpperCase(OSTarget);
     s := UpperCase(OSTarget);
-    Scanner.Defines.Append(s);
+    Scanner.AddDefine(s);
     if s = 'LINUX' then
     if s = 'LINUX' then
-      Scanner.Defines.Append('UNIX')
+      Scanner.AddDefine('UNIX')
     else if s = 'FREEBSD' then
     else if s = 'FREEBSD' then
     begin
     begin
-      Scanner.Defines.Append('BSD');
-      Scanner.Defines.Append('UNIX');
+      Scanner.AddDefine('BSD');
+      Scanner.AddDefine('UNIX');
     end else if s = 'NETBSD' then
     end else if s = 'NETBSD' then
     begin
     begin
-      Scanner.Defines.Append('BSD');
-      Scanner.Defines.Append('UNIX');
+      Scanner.AddDefine('BSD');
+      Scanner.AddDefine('UNIX');
     end else if s = 'SUNOS' then
     end else if s = 'SUNOS' then
     begin
     begin
-      Scanner.Defines.Append('SOLARIS');
-      Scanner.Defines.Append('UNIX');
+      Scanner.AddDefine('SOLARIS');
+      Scanner.AddDefine('UNIX');
     end else if s = 'GO32V2' then
     end else if s = 'GO32V2' then
-      Scanner.Defines.Append('DPMI')
+      Scanner.AddDefine('DPMI')
     else if s = 'BEOS' then
     else if s = 'BEOS' then
-      Scanner.Defines.Append('UNIX')
+      Scanner.AddDefine('UNIX')
     else if s = 'QNX' then
     else if s = 'QNX' then
-      Scanner.Defines.Append('UNIX');
+      Scanner.AddDefine('UNIX');
 
 
     // TargetCPU
     // TargetCPU
     s := UpperCase(CPUTarget);
     s := UpperCase(CPUTarget);
-    Scanner.Defines.Append('CPU'+s);
+    Scanner.AddDefine('CPU'+s);
     if (s='x86_64') then
     if (s='x86_64') then
-      Scanner.Defines.Append('CPU64')
+      Scanner.AddDefine('CPU64')
     else
     else
-      Scanner.Defines.Append('CPU32');
+      Scanner.AddDefine('CPU32');
 
 
     Parser := TPasParser.Create(Scanner, FileResolver, AEngine);
     Parser := TPasParser.Create(Scanner, FileResolver, AEngine);
     Filename := '';
     Filename := '';

+ 24 - 7
packages/fcl-passrc/src/pscanner.pp

@@ -345,6 +345,8 @@ type
     destructor Destroy; override;
     destructor Destroy; override;
     procedure OpenFile(const AFilename: string);
     procedure OpenFile(const AFilename: string);
     function FetchToken: TToken;
     function FetchToken: TToken;
+    Procedure AddDefine(S : String);
+    Procedure RemoveDefine(S : String);
 
 
     property FileResolver: TBaseFileResolver read FFileResolver;
     property FileResolver: TBaseFileResolver read FFileResolver;
     property CurSourceFile: TLineReader read FCurSourceFile;
     property CurSourceFile: TLineReader read FCurSourceFile;
@@ -1184,10 +1186,7 @@ begin
   Param := UpperCase(Param);
   Param := UpperCase(Param);
   Index:=Pos(':=',Param);
   Index:=Pos(':=',Param);
   If (Index=0) then
   If (Index=0) then
-    begin
-    if Defines.IndexOf(Param) < 0 then
-      Defines.Add(Param);
-    end
+    AddDefine(Param)
   else
   else
     begin
     begin
     MV:=Trim(Param);
     MV:=Trim(Param);
@@ -1208,9 +1207,9 @@ Var
 
 
 begin
 begin
   Param := UpperCase(Param);
   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
   else
     begin
     begin
     Index := FMacros.IndexOf(Param);
     Index := FMacros.IndexOf(Param);
@@ -1786,4 +1785,22 @@ begin
   FOptions:=AValue;
   FOptions:=AValue;
 end;
 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.
 end.