mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 05:19:17 +02:00
* Added support for C-style assignments
git-svn-id: trunk@22135 -
This commit is contained in:
parent
8c39b1eba8
commit
c087aff3b2
@ -68,6 +68,7 @@ Type
|
|||||||
Procedure AssertEquals(Const Msg : String; AExpected, AActual: TPasMemberVisibility); overload;
|
Procedure AssertEquals(Const Msg : String; AExpected, AActual: TPasMemberVisibility); overload;
|
||||||
Procedure AssertEquals(Const Msg : String; AExpected, AActual: TProcedureModifier); overload;
|
Procedure AssertEquals(Const Msg : String; AExpected, AActual: TProcedureModifier); overload;
|
||||||
Procedure AssertEquals(Const Msg : String; AExpected, AActual: TProcedureModifiers); overload;
|
Procedure AssertEquals(Const Msg : String; AExpected, AActual: TProcedureModifiers); overload;
|
||||||
|
Procedure AssertEquals(Const Msg : String; AExpected, AActual: TAssignKind); overload;
|
||||||
Procedure HaveHint(AHint : TPasMemberHint; AHints : TPasMemberHints);
|
Procedure HaveHint(AHint : TPasMemberHint; AHints : TPasMemberHints);
|
||||||
Property Resolver : TStreamResolver Read FResolver;
|
Property Resolver : TStreamResolver Read FResolver;
|
||||||
Property Scanner : TPascalScanner Read FScanner;
|
Property Scanner : TPascalScanner Read FScanner;
|
||||||
@ -430,6 +431,13 @@ begin
|
|||||||
AssertEquals(Msg,Sn(AExpected),SN(AActual));
|
AssertEquals(Msg,Sn(AExpected),SN(AActual));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TTestParser.AssertEquals(const Msg: String; AExpected,
|
||||||
|
AActual: TAssignKind);
|
||||||
|
begin
|
||||||
|
AssertEquals(Msg,GetEnumName(TypeInfo(TAssignKind),Ord(AExpected)),
|
||||||
|
GetEnumName(TypeInfo(TAssignKind),Ord(AActual)));
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TTestParser.HaveHint(AHint: TPasMemberHint; AHints: TPasMemberHints);
|
procedure TTestParser.HaveHint(AHint: TPasMemberHint; AHints: TPasMemberHints);
|
||||||
begin
|
begin
|
||||||
If not (AHint in AHints) then
|
If not (AHint in AHints) then
|
||||||
|
@ -99,6 +99,10 @@ type
|
|||||||
procedure TestBackslash;
|
procedure TestBackslash;
|
||||||
procedure TestDotDot;
|
procedure TestDotDot;
|
||||||
procedure TestAssign;
|
procedure TestAssign;
|
||||||
|
procedure TestAssignPlus;
|
||||||
|
procedure TestAssignMinus;
|
||||||
|
procedure TestAssignMul;
|
||||||
|
procedure TestAssignDivision;
|
||||||
procedure TestNotEqual;
|
procedure TestNotEqual;
|
||||||
procedure TestLessEqualThan;
|
procedure TestLessEqualThan;
|
||||||
procedure TestGreaterEqualThan;
|
procedure TestGreaterEqualThan;
|
||||||
@ -636,6 +640,34 @@ begin
|
|||||||
TestToken(tkAssign,':=');
|
TestToken(tkAssign,':=');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TTestScanner.TestAssignPlus;
|
||||||
|
begin
|
||||||
|
TestTokens([tkPlus,tkEqual],'+=');
|
||||||
|
FScanner.Options:=[po_cassignments];
|
||||||
|
TestToken(tkAssignPlus,'+=');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestScanner.TestAssignMinus;
|
||||||
|
begin
|
||||||
|
TestTokens([tkMinus,tkEqual],'-=');
|
||||||
|
FScanner.Options:=[po_cassignments];
|
||||||
|
TestToken(tkAssignMinus,'-=');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestScanner.TestAssignMul;
|
||||||
|
begin
|
||||||
|
TestTokens([tkMul,tkEqual],'*=');
|
||||||
|
FScanner.Options:=[po_cassignments];
|
||||||
|
TestToken(tkAssignMul,'*=');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestScanner.TestAssignDivision;
|
||||||
|
begin
|
||||||
|
TestTokens([tkDivision,tkEqual],'*=');
|
||||||
|
FScanner.Options:=[po_cassignments];
|
||||||
|
TestToken(tkAssignDivision,'/=');
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TTestScanner.TestNotEqual;
|
procedure TTestScanner.TestNotEqual;
|
||||||
|
|
||||||
|
@ -32,6 +32,10 @@ Type
|
|||||||
Procedure TestEmptyStatements;
|
Procedure TestEmptyStatements;
|
||||||
Procedure TestBlock;
|
Procedure TestBlock;
|
||||||
Procedure TestAssignment;
|
Procedure TestAssignment;
|
||||||
|
Procedure TestAssignmentAdd;
|
||||||
|
Procedure TestAssignmentMinus;
|
||||||
|
Procedure TestAssignmentMul;
|
||||||
|
Procedure TestAssignmentDivision;
|
||||||
Procedure TestCall;
|
Procedure TestCall;
|
||||||
Procedure TestCallQualified;
|
Procedure TestCallQualified;
|
||||||
Procedure TestCallQualified2;
|
Procedure TestCallQualified2;
|
||||||
@ -213,6 +217,72 @@ begin
|
|||||||
AssertEquals('1 statement',1,PasProgram.InitializationSection.Elements.Count);
|
AssertEquals('1 statement',1,PasProgram.InitializationSection.Elements.Count);
|
||||||
AssertEquals('Assignment statement',TPasImplAssign,Statement.ClassType);
|
AssertEquals('Assignment statement',TPasImplAssign,Statement.ClassType);
|
||||||
A:=Statement as TPasImplAssign;
|
A:=Statement as TPasImplAssign;
|
||||||
|
AssertEquals('Normal assignment',akDefault,A.Kind);
|
||||||
|
AssertExpression('Right side is constant',A.Right,pekNumber,'1');
|
||||||
|
AssertExpression('Left side is variable',A.Left,pekIdent,'a');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestStatementParser.TestAssignmentAdd;
|
||||||
|
|
||||||
|
Var
|
||||||
|
A : TPasImplAssign;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Parser.Scanner.Options:=[po_cassignments];
|
||||||
|
DeclareVar('integer');
|
||||||
|
TestStatement(['a+=1;']);
|
||||||
|
AssertEquals('1 statement',1,PasProgram.InitializationSection.Elements.Count);
|
||||||
|
AssertEquals('Assignment statement',TPasImplAssign,Statement.ClassType);
|
||||||
|
A:=Statement as TPasImplAssign;
|
||||||
|
AssertEquals('Add assignment',akAdd,A.Kind);
|
||||||
|
AssertExpression('Right side is constant',A.Right,pekNumber,'1');
|
||||||
|
AssertExpression('Left side is variable',A.Left,pekIdent,'a');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestStatementParser.TestAssignmentMinus;
|
||||||
|
Var
|
||||||
|
A : TPasImplAssign;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Parser.Scanner.Options:=[po_cassignments];
|
||||||
|
DeclareVar('integer');
|
||||||
|
TestStatement(['a-=1;']);
|
||||||
|
AssertEquals('1 statement',1,PasProgram.InitializationSection.Elements.Count);
|
||||||
|
AssertEquals('Assignment statement',TPasImplAssign,Statement.ClassType);
|
||||||
|
A:=Statement as TPasImplAssign;
|
||||||
|
AssertEquals('Minus assignment',akMinus,A.Kind);
|
||||||
|
AssertExpression('Right side is constant',A.Right,pekNumber,'1');
|
||||||
|
AssertExpression('Left side is variable',A.Left,pekIdent,'a');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestStatementParser.TestAssignmentMul;
|
||||||
|
Var
|
||||||
|
A : TPasImplAssign;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Parser.Scanner.Options:=[po_cassignments];
|
||||||
|
DeclareVar('integer');
|
||||||
|
TestStatement(['a*=1;']);
|
||||||
|
AssertEquals('1 statement',1,PasProgram.InitializationSection.Elements.Count);
|
||||||
|
AssertEquals('Assignment statement',TPasImplAssign,Statement.ClassType);
|
||||||
|
A:=Statement as TPasImplAssign;
|
||||||
|
AssertEquals('Mul assignment',akMul,A.Kind);
|
||||||
|
AssertExpression('Right side is constant',A.Right,pekNumber,'1');
|
||||||
|
AssertExpression('Left side is variable',A.Left,pekIdent,'a');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestStatementParser.TestAssignmentDivision;
|
||||||
|
Var
|
||||||
|
A : TPasImplAssign;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Parser.Scanner.Options:=[po_cassignments];
|
||||||
|
DeclareVar('integer');
|
||||||
|
TestStatement(['a/=1;']);
|
||||||
|
AssertEquals('1 statement',1,PasProgram.InitializationSection.Elements.Count);
|
||||||
|
AssertEquals('Assignment statement',TPasImplAssign,Statement.ClassType);
|
||||||
|
A:=Statement as TPasImplAssign;
|
||||||
|
AssertEquals('Division assignment',akDivision,A.Kind);
|
||||||
AssertExpression('Right side is constant',A.Right,pekNumber,'1');
|
AssertExpression('Right side is constant',A.Right,pekNumber,'1');
|
||||||
AssertExpression('Left side is variable',A.Left,pekIdent,'a');
|
AssertExpression('Left side is variable',A.Left,pekIdent,'a');
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user