mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-20 11:29:27 +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
|
||||
|
||||
ToDo:
|
||||
- $IFOpt
|
||||
$IF option()
|
||||
- @@
|
||||
- fix slow lookup declaration proc in PParser
|
||||
- fail to write a loop var inside the loop
|
||||
- warn: create class with abstract methods
|
||||
- classes - TPasClassType
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -224,6 +224,20 @@ type
|
||||
procedure TestMacro2;
|
||||
procedure TestMacro3;
|
||||
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;
|
||||
end;
|
||||
|
||||
@ -1511,24 +1525,21 @@ procedure TTestScanner.TestMacro1;
|
||||
begin
|
||||
FScanner.SkipWhiteSpace:=True;
|
||||
FScanner.SkipComments:=True;
|
||||
FScanner.MacrosOn:=true;
|
||||
TestTokens([tkbegin,tkend,tkDot],'{$DEFINE MM:=begin end.}'#13#10'MM',True,False);
|
||||
TestTokens([tkbegin,tkend,tkDot],'{$MACRO on}{$DEFINE MM:=begin end.}'#13#10'MM',True,False);
|
||||
end;
|
||||
|
||||
procedure TTestScanner.TestMacro2;
|
||||
begin
|
||||
FScanner.SkipWhiteSpace:=True;
|
||||
FScanner.SkipComments:=True;
|
||||
FScanner.MacrosOn:=true;
|
||||
TestTokens([tkbegin,tkend,tkDot],'{$DEFINE MM:=begin end}'#13#10'MM .',True,False);
|
||||
TestTokens([tkbegin,tkend,tkDot],'{$MACRO on}{$DEFINE MM:=begin end}'#13#10'MM .',True,False);
|
||||
end;
|
||||
|
||||
procedure TTestScanner.TestMacro3;
|
||||
begin
|
||||
FScanner.SkipComments:=True;
|
||||
FScanner.SkipWhiteSpace:=True;
|
||||
FScanner.MacrosOn:=true;
|
||||
TestTokens([tkof],'{$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;
|
||||
|
||||
procedure TTestScanner.TestMacroHandling;
|
||||
@ -1536,11 +1547,135 @@ begin
|
||||
TTestingPascalScanner(FScanner).DoSpecial:=True;
|
||||
FScanner.SkipComments:=True;
|
||||
FScanner.SkipWhiteSpace:=True;
|
||||
FScanner.MacrosOn:=true;
|
||||
TestTokens([tkIdentifier],'{$DEFINE MM:=begin end}'#13#10'MM');
|
||||
TestTokens([tkIdentifier],'{$MACRO on}{$DEFINE MM:=begin end}'#13#10'MM');
|
||||
AssertEQuals('Correct identifier', 'somethingweird',LastIdentifier);
|
||||
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;
|
||||
|
||||
Const
|
||||
|
Loading…
Reference in New Issue
Block a user