mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-13 18:24:19 +02:00
fcl-passrc: implemented $if
git-svn-id: trunk@36140 -
This commit is contained in:
parent
6ed045a911
commit
04807d1ac4
@ -137,8 +137,9 @@ Works:
|
|||||||
- dotted unitnames
|
- dotted unitnames
|
||||||
|
|
||||||
ToDo:
|
ToDo:
|
||||||
|
- $IFOpt
|
||||||
|
$IF option()
|
||||||
- @@
|
- @@
|
||||||
- fix slow lookup declaration proc in PParser
|
|
||||||
- fail to write a loop var inside the loop
|
- fail to write a loop var inside the loop
|
||||||
- warn: create class with abstract methods
|
- warn: create class with abstract methods
|
||||||
- classes - TPasClassType
|
- classes - TPasClassType
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -224,6 +224,20 @@ type
|
|||||||
procedure TestMacro2;
|
procedure TestMacro2;
|
||||||
procedure TestMacro3;
|
procedure TestMacro3;
|
||||||
procedure TestMacroHandling;
|
procedure TestMacroHandling;
|
||||||
|
procedure TestIFDefined;
|
||||||
|
procedure TestIFUnDefined;
|
||||||
|
procedure TestIFAnd;
|
||||||
|
procedure TestIFAndShortEval;
|
||||||
|
procedure TestIFOr;
|
||||||
|
procedure TestIFOrShortEval;
|
||||||
|
procedure TestIFXor;
|
||||||
|
procedure TestIFAndOr;
|
||||||
|
procedure TestIFEqual;
|
||||||
|
procedure TestIFNotEqual;
|
||||||
|
procedure TestIFGreaterThan;
|
||||||
|
procedure TestIFGreaterEqualThan;
|
||||||
|
procedure TestIFLesserThan;
|
||||||
|
procedure TestIFLesserEqualThan;
|
||||||
Procedure TestModeSwitch;
|
Procedure TestModeSwitch;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1511,24 +1525,21 @@ procedure TTestScanner.TestMacro1;
|
|||||||
begin
|
begin
|
||||||
FScanner.SkipWhiteSpace:=True;
|
FScanner.SkipWhiteSpace:=True;
|
||||||
FScanner.SkipComments:=True;
|
FScanner.SkipComments:=True;
|
||||||
FScanner.MacrosOn:=true;
|
TestTokens([tkbegin,tkend,tkDot],'{$MACRO on}{$DEFINE MM:=begin end.}'#13#10'MM',True,False);
|
||||||
TestTokens([tkbegin,tkend,tkDot],'{$DEFINE MM:=begin end.}'#13#10'MM',True,False);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTestScanner.TestMacro2;
|
procedure TTestScanner.TestMacro2;
|
||||||
begin
|
begin
|
||||||
FScanner.SkipWhiteSpace:=True;
|
FScanner.SkipWhiteSpace:=True;
|
||||||
FScanner.SkipComments:=True;
|
FScanner.SkipComments:=True;
|
||||||
FScanner.MacrosOn:=true;
|
TestTokens([tkbegin,tkend,tkDot],'{$MACRO on}{$DEFINE MM:=begin end}'#13#10'MM .',True,False);
|
||||||
TestTokens([tkbegin,tkend,tkDot],'{$DEFINE MM:=begin end}'#13#10'MM .',True,False);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTestScanner.TestMacro3;
|
procedure TTestScanner.TestMacro3;
|
||||||
begin
|
begin
|
||||||
FScanner.SkipComments:=True;
|
FScanner.SkipComments:=True;
|
||||||
FScanner.SkipWhiteSpace:=True;
|
FScanner.SkipWhiteSpace:=True;
|
||||||
FScanner.MacrosOn:=true;
|
TestTokens([tkof],'{$MACRO on}{$DEFINE MM:=begin end}'#13#10'{$IFDEF MM} of {$ELSE} in {$ENDIF}');
|
||||||
TestTokens([tkof],'{$DEFINE MM:=begin end}'#13#10'{$IFDEF MM} of {$ELSE} in {$ENDIF}');
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTestScanner.TestMacroHandling;
|
procedure TTestScanner.TestMacroHandling;
|
||||||
@ -1536,11 +1547,135 @@ begin
|
|||||||
TTestingPascalScanner(FScanner).DoSpecial:=True;
|
TTestingPascalScanner(FScanner).DoSpecial:=True;
|
||||||
FScanner.SkipComments:=True;
|
FScanner.SkipComments:=True;
|
||||||
FScanner.SkipWhiteSpace:=True;
|
FScanner.SkipWhiteSpace:=True;
|
||||||
FScanner.MacrosOn:=true;
|
TestTokens([tkIdentifier],'{$MACRO on}{$DEFINE MM:=begin end}'#13#10'MM');
|
||||||
TestTokens([tkIdentifier],'{$DEFINE MM:=begin end}'#13#10'MM');
|
|
||||||
AssertEQuals('Correct identifier', 'somethingweird',LastIdentifier);
|
AssertEQuals('Correct identifier', 'somethingweird',LastIdentifier);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TTestScanner.TestIFDefined;
|
||||||
|
begin
|
||||||
|
FScanner.SkipWhiteSpace:=True;
|
||||||
|
FScanner.SkipComments:=True;
|
||||||
|
TestTokens([tkbegin,tkend,tkDot],'{$DEFINE A}{$IF defined(A)}begin{$ENDIF}end.',True,False);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestScanner.TestIFUnDefined;
|
||||||
|
begin
|
||||||
|
FScanner.SkipWhiteSpace:=True;
|
||||||
|
FScanner.SkipComments:=True;
|
||||||
|
TestTokens([tkbegin,tkend,tkDot],'{$IF undefined(A)}begin{$ENDIF}end.',True,False);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestScanner.TestIFAnd;
|
||||||
|
begin
|
||||||
|
FScanner.SkipWhiteSpace:=True;
|
||||||
|
FScanner.SkipComments:=True;
|
||||||
|
TestTokens([tkbegin,tkend,tkDot],
|
||||||
|
'{$DEFINE A}{$IF defined(A) and undefined(B)}begin{$ENDIF}end.',True,False);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestScanner.TestIFAndShortEval;
|
||||||
|
begin
|
||||||
|
FScanner.SkipWhiteSpace:=True;
|
||||||
|
FScanner.SkipComments:=True;
|
||||||
|
TestTokens([tkbegin,tkend,tkDot],
|
||||||
|
'{$UNDEFINE A}{$IF defined(A) and undefined(B)}wrong{$ELSE}begin{$ENDIF}end.',
|
||||||
|
True,False);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestScanner.TestIFOr;
|
||||||
|
begin
|
||||||
|
FScanner.SkipWhiteSpace:=True;
|
||||||
|
FScanner.SkipComments:=True;
|
||||||
|
TestTokens([tkbegin,tkend,tkDot],
|
||||||
|
'{$DEFINE B}{$IF defined(A) or defined(B)}begin{$ENDIF}end.',True,False);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestScanner.TestIFOrShortEval;
|
||||||
|
begin
|
||||||
|
FScanner.SkipWhiteSpace:=True;
|
||||||
|
FScanner.SkipComments:=True;
|
||||||
|
TestTokens([tkbegin,tkend,tkDot],
|
||||||
|
'{$DEFINE A}{$IF defined(A) or defined(B)}begin{$ENDIF}end.',True,False);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestScanner.TestIFXor;
|
||||||
|
begin
|
||||||
|
FScanner.SkipWhiteSpace:=True;
|
||||||
|
FScanner.SkipComments:=True;
|
||||||
|
TestTokens([tkbegin,tkend,tkDot],
|
||||||
|
'{$DEFINE B}{$IF defined(A) xor defined(B)}begin{$ENDIF}end.',True,False);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestScanner.TestIFAndOr;
|
||||||
|
begin
|
||||||
|
FScanner.SkipWhiteSpace:=True;
|
||||||
|
FScanner.SkipComments:=True;
|
||||||
|
TestTokens([tkbegin,tkend,tkDot],
|
||||||
|
'{$IF defined(A) and defined(B) or defined(C)}wrong1{$ENDIF}'+LineEnding
|
||||||
|
+'{$IF defined(A) and defined(B) or undefined(C)}{$ELSE}wrong2{$ENDIF}'+LineEnding
|
||||||
|
+'{$IF defined(A) and undefined(B) or defined(C)}wrong3{$ENDIF}'+LineEnding
|
||||||
|
+'{$IF defined(A) and undefined(B) or undefined(C)}{$ELSE}wrong4{$ENDIF}'+LineEnding
|
||||||
|
+'{$IF undefined(A) and defined(B) or defined(C)}wrong5{$ENDIF}'+LineEnding
|
||||||
|
+'{$IF undefined(A) and defined(B) or undefined(C)}{$ELSE}wrong6{$ENDIF}'+LineEnding
|
||||||
|
+'{$IF undefined(A) and undefined(B) or defined(C)}{$ELSE}wrong7{$ENDIF}'+LineEnding
|
||||||
|
+'{$IF undefined(A) and undefined(B) or undefined(C)}begin{$ENDIF}end.',
|
||||||
|
True,False);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestScanner.TestIFEqual;
|
||||||
|
begin
|
||||||
|
FScanner.SkipWhiteSpace:=True;
|
||||||
|
FScanner.SkipComments:=True;
|
||||||
|
FScanner.AddMacro('Version','30101');
|
||||||
|
TestTokens([tkbegin,tkend,tkDot],
|
||||||
|
'{$IF Version=30101}begin{$ENDIF}end.',True,False);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestScanner.TestIFNotEqual;
|
||||||
|
begin
|
||||||
|
FScanner.SkipWhiteSpace:=True;
|
||||||
|
FScanner.SkipComments:=True;
|
||||||
|
FScanner.AddMacro('Version','30101');
|
||||||
|
TestTokens([tkbegin,tkend,tkDot],
|
||||||
|
'{$IF Version<>30000}begin{$ENDIF}end.',True,False);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestScanner.TestIFGreaterThan;
|
||||||
|
begin
|
||||||
|
FScanner.SkipWhiteSpace:=True;
|
||||||
|
FScanner.SkipComments:=True;
|
||||||
|
FScanner.AddMacro('Version','30101');
|
||||||
|
TestTokens([tkbegin,tkend,tkDot],
|
||||||
|
'{$IF Version>30000}begin{$ENDIF}end.',True,False);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestScanner.TestIFGreaterEqualThan;
|
||||||
|
begin
|
||||||
|
FScanner.SkipWhiteSpace:=True;
|
||||||
|
FScanner.SkipComments:=True;
|
||||||
|
FScanner.AddMacro('Version','30101');
|
||||||
|
TestTokens([tkbegin,tkend,tkDot],
|
||||||
|
'{$IF Version>=30000}begin{$ENDIF}end.',True,False);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestScanner.TestIFLesserThan;
|
||||||
|
begin
|
||||||
|
FScanner.SkipWhiteSpace:=True;
|
||||||
|
FScanner.SkipComments:=True;
|
||||||
|
FScanner.AddMacro('Version','30101');
|
||||||
|
TestTokens([tkbegin,tkend,tkDot],
|
||||||
|
'{$IF Version<40000}begin{$ENDIF}end.',True,False);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestScanner.TestIFLesserEqualThan;
|
||||||
|
begin
|
||||||
|
FScanner.SkipWhiteSpace:=True;
|
||||||
|
FScanner.SkipComments:=True;
|
||||||
|
FScanner.AddMacro('Version','30101');
|
||||||
|
TestTokens([tkbegin,tkend,tkDot],
|
||||||
|
'{$IF Version<=30101}begin{$ENDIF}end.',True,False);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TTestScanner.TestModeSwitch;
|
procedure TTestScanner.TestModeSwitch;
|
||||||
|
|
||||||
Const
|
Const
|
||||||
|
Loading…
Reference in New Issue
Block a user