Browse Source

* Fix case sensitivity of macro value

Michaël Van Canneyt 3 years ago
parent
commit
412de8a17d
2 changed files with 13 additions and 3 deletions
  1. 4 3
      packages/fcl-passrc/src/pscanner.pp
  2. 9 0
      packages/fcl-passrc/tests/tcscanner.pas

+ 4 - 3
packages/fcl-passrc/src/pscanner.pp

@@ -3968,14 +3968,14 @@ Var
   MName,MValue : String;
   MName,MValue : String;
 
 
 begin
 begin
-  Param := UpperCase(Param);
+  // Param is already trimmed on entry.
   Index:=Pos(':=',Param);
   Index:=Pos(':=',Param);
   If (Index=0) then
   If (Index=0) then
     AddDefine(GetMacroName(Param))
     AddDefine(GetMacroName(Param))
   else
   else
     begin
     begin
-    MValue:=Trim(Param);
-    MName:=Trim(Copy(MValue,1,Index-1));
+    MValue:=Param;
+    MName:=UpperCase(Trim(Copy(MValue,1,Index-1)));
     Delete(MValue,1,Index+1);
     Delete(MValue,1,Index+1);
     AddMacro(MName,Trim(MValue));
     AddMacro(MName,Trim(MValue));
     end;
     end;
@@ -5729,6 +5729,7 @@ begin
   while (p<=length(Result)) and (Result[p] in ['a'..'z','A'..'Z','0'..'9','_']) do
   while (p<=length(Result)) and (Result[p] in ['a'..'z','A'..'Z','0'..'9','_']) do
     inc(p);
     inc(p);
   SetLength(Result,p-1);
   SetLength(Result,p-1);
+  Result:=UpperCase(Result);
 end;
 end;
 
 
 procedure TPascalScanner.SetCurMsg(MsgType: TMessageType; MsgNumber: integer;
 procedure TPascalScanner.SetCurMsg(MsgType: TMessageType; MsgNumber: integer;

+ 9 - 0
packages/fcl-passrc/tests/tcscanner.pas

@@ -274,6 +274,7 @@ type
     Procedure TestMacro1;
     Procedure TestMacro1;
     procedure TestMacro2;
     procedure TestMacro2;
     procedure TestMacro3;
     procedure TestMacro3;
+    procedure TestMacro4;
     procedure TestMacroHandling;
     procedure TestMacroHandling;
     procedure TestIFDefined;
     procedure TestIFDefined;
     procedure TestIFUnDefined;
     procedure TestIFUnDefined;
@@ -1906,6 +1907,14 @@ begin
   TestTokens([tkof],'{$MACRO on}{$DEFINE MM:=begin end}'#13#10'{$IFDEF MM} of {$ELSE} in {$ENDIF}');
   TestTokens([tkof],'{$MACRO on}{$DEFINE MM:=begin end}'#13#10'{$IFDEF MM} of {$ELSE} in {$ENDIF}');
 end;
 end;
 
 
+procedure TTestScanner.TestMacro4;
+begin
+  FScanner.SkipComments:=True;
+  FScanner.SkipWhiteSpace:=True;
+  TestTokens([tkIdentifier],'{$MACRO on}{$DEFINE MM:=Solo}'#13#10'MM',False);
+  AssertEquals('Token case preserved','Solo',FScanner.CurTokenString);
+end;
+
 procedure TTestScanner.TestMacroHandling;
 procedure TTestScanner.TestMacroHandling;
 begin
 begin
   TTestingPascalScanner(FScanner).DoSpecial:=True;
   TTestingPascalScanner(FScanner).DoSpecial:=True;