mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-23 16:09:43 +02:00
fcl-passrc: fixed precedence of multiply and power
This commit is contained in:
parent
f1bc31b057
commit
3822465e2f
packages
@ -2872,9 +2872,9 @@ begin
|
||||
case t of
|
||||
// tkDot:
|
||||
// Result:=5;
|
||||
tknot,tkAt,tkAtAt:
|
||||
tknot, tkAt, tkAtAt, tkPower:
|
||||
Result:=4;
|
||||
tkMul, tkDivision, tkdiv, tkmod, tkand, tkShl,tkShr, tkas, tkPower, tkis:
|
||||
tkMul, tkDivision, tkdiv, tkmod, tkand, tkShl,tkShr, tkas, tkis:
|
||||
// Note that "is" has same precedence as "and" in Delphi and fpc, even though
|
||||
// some docs say otherwise. e.g. "Obj is TObj and aBool"
|
||||
Result:=3;
|
||||
|
@ -142,6 +142,8 @@ type
|
||||
Procedure TestPrecedencePlusMod;
|
||||
Procedure TestPrecedenceMultiplyDiv;
|
||||
Procedure TestPrecedenceDivMultiply;
|
||||
Procedure TestPrecedenceMultiplyPower;
|
||||
Procedure TestPrecedencePowerMultiply;
|
||||
Procedure TestTypeCast;
|
||||
procedure TestTypeCast2;
|
||||
Procedure TestCreate;
|
||||
@ -583,6 +585,18 @@ begin
|
||||
AssertLeftPrecedence(1,eopDiv,2,eopMultiply,3);
|
||||
end;
|
||||
|
||||
procedure TTestExpressions.TestPrecedenceMultiplyPower;
|
||||
begin
|
||||
ParseExpression('1 * 2 ** 3');
|
||||
AssertRightPrecedence(1,eopMultiply,2,eopPower,3);
|
||||
end;
|
||||
|
||||
procedure TTestExpressions.TestPrecedencePowerMultiply;
|
||||
begin
|
||||
ParseExpression('1 ** 2 * 3');
|
||||
AssertLeftPrecedence(1,eopPower,2,eopMultiply,3);
|
||||
end;
|
||||
|
||||
procedure TTestExpressions.TestTypeCast;
|
||||
begin
|
||||
DeclareVar('TSDOBaseDataObjectClass');
|
||||
|
@ -112,6 +112,7 @@ type
|
||||
Procedure TestBinaryGreater;
|
||||
Procedure TestBinaryGreaterThanEqual;
|
||||
Procedure TestBinaryIs;
|
||||
Procedure TestBinaryPower;
|
||||
Procedure TestCallExpressionNone;
|
||||
Procedure TestCallExpressionOne;
|
||||
Procedure TestCallExpressionTwo;
|
||||
@ -1167,6 +1168,20 @@ begin
|
||||
AssertIdentifier('Correct right literal for is',E.B,'b');
|
||||
end;
|
||||
|
||||
procedure TTestExpressionConverter.TestBinaryPower;
|
||||
Var
|
||||
B : TBinaryExpr;
|
||||
E : TJSRelationalExpressionInstanceOf;
|
||||
|
||||
begin
|
||||
B:=CreateBinary(eopPower);
|
||||
B.left:=CreateIdent('a');
|
||||
B.Right:=CreateIdent('b');
|
||||
E:=TJSRelationalExpressionInstanceOf(TestBinaryExpression(B,TJSRelationalExpressionInstanceOf));
|
||||
AssertIdentifier('Correct left literal for power',E.A,'a');
|
||||
AssertIdentifier('Correct right literal for power',E.B,'b');
|
||||
end;
|
||||
|
||||
procedure TTestExpressionConverter.TestCallExpressionNone;
|
||||
Var
|
||||
B : TParamsExpr;
|
||||
|
Loading…
Reference in New Issue
Block a user