mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-31 06:31:34 +01: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
	 Mattias Gaertner
						Mattias Gaertner