mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 23:09:08 +02:00
fcl-js: parse power token
This commit is contained in:
parent
0a0f213b8b
commit
2d3d5eba4a
@ -1821,7 +1821,7 @@ begin
|
|||||||
Result:=TJSPrimaryExpressionThis(CreateElement(TJSPrimaryExpressionThis));
|
Result:=TJSPrimaryExpressionThis(CreateElement(TJSPrimaryExpressionThis));
|
||||||
GetNextToken;
|
GetNextToken;
|
||||||
end;
|
end;
|
||||||
tjsidentifier:
|
tjsIdentifier:
|
||||||
begin
|
begin
|
||||||
R:=TJSPrimaryExpressionIdent(CreateElement(TJSPrimaryExpressionIdent));
|
R:=TJSPrimaryExpressionIdent(CreateElement(TJSPrimaryExpressionIdent));
|
||||||
Result:=R;
|
Result:=R;
|
||||||
|
@ -698,6 +698,11 @@ begin
|
|||||||
Inc(TokenStr);
|
Inc(TokenStr);
|
||||||
Result := tjsMulEq;
|
Result := tjsMulEq;
|
||||||
end
|
end
|
||||||
|
else if (TokenStr[0]='*') then
|
||||||
|
begin
|
||||||
|
Inc(TokenStr);
|
||||||
|
Result := tjsPower;
|
||||||
|
end
|
||||||
else
|
else
|
||||||
Result := tjsMul;
|
Result := tjsMul;
|
||||||
end;
|
end;
|
||||||
|
@ -28,7 +28,7 @@ type
|
|||||||
tjsANDAND, tjsANDEQ,
|
tjsANDAND, tjsANDEQ,
|
||||||
tjsBraceOpen,tjsBraceClose,tjsSQuaredBraceOpen,tjsSQuaredBraceClose,tjsCurlyBraceOpen,tjsCurlyBraceClose,
|
tjsBraceOpen,tjsBraceClose,tjsSQuaredBraceOpen,tjsSQuaredBraceClose,tjsCurlyBraceOpen,tjsCurlyBraceClose,
|
||||||
tjsCOMMA,tjsCOLON, tjsDOT,tjsSEMICOLON, tjsASSIGN,tjsGT,tjsLT, tjsConditional,
|
tjsCOMMA,tjsCOLON, tjsDOT,tjsSEMICOLON, tjsASSIGN,tjsGT,tjsLT, tjsConditional,
|
||||||
tjsPLUS,tjsMINUS,tjsMUL,tjsDIV,tjsAnd,tjsOR, tjsInv, tjsMod, tjsXOR, tjsNot,
|
tjsPLUS,tjsMINUS,tjsMUL,tjsDIV,tjsPower, tjsAnd,tjsOR, tjsInv, tjsMod, tjsXOR, tjsNot,
|
||||||
tjsEQ,
|
tjsEQ,
|
||||||
tjsGE,
|
tjsGE,
|
||||||
tjsLE, tjsLSHIFT, tjsLSHIFTEQ,
|
tjsLE, tjsLSHIFT, tjsLSHIFTEQ,
|
||||||
@ -66,7 +66,7 @@ const
|
|||||||
'&&','&=',
|
'&&','&=',
|
||||||
'(',')','[',']','{','}',
|
'(',')','[',']','{','}',
|
||||||
',',':','.',';','=','>','<','?',
|
',',':','.',';','=','>','<','?',
|
||||||
'+','-','*','/','&','|','~','%','^','!',
|
'+','-','*','/','**','&','|','~','%','^','!',
|
||||||
'==',
|
'==',
|
||||||
'>=',
|
'>=',
|
||||||
'<=', '<<', '<<=',
|
'<=', '<<', '<<=',
|
||||||
|
@ -707,6 +707,12 @@ Type
|
|||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TJSPowerExpression - e.g. A ** B }
|
||||||
|
|
||||||
|
TJSPowerExpression = Class(TJSBinaryExpression)
|
||||||
|
Class function OperatorToken : tjsToken; override;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TJSCommaExpression - e.g. A , B }
|
{ TJSCommaExpression - e.g. A , B }
|
||||||
|
|
||||||
TJSCommaExpression = Class(TJSBinaryExpression)
|
TJSCommaExpression = Class(TJSBinaryExpression)
|
||||||
@ -2720,6 +2726,13 @@ begin
|
|||||||
Result:=tjsMod;
|
Result:=tjsMod;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TJSPowerExpression }
|
||||||
|
|
||||||
|
class function TJSPowerExpression.OperatorToken: tjsToken;
|
||||||
|
begin
|
||||||
|
Result:=tjsPower;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TJSMultiplicativeExpressionDiv }
|
{ TJSMultiplicativeExpressionDiv }
|
||||||
|
|
||||||
Class function TJSMultiplicativeExpressionDiv.OperatorToken: tjsToken;
|
Class function TJSMultiplicativeExpressionDiv.OperatorToken: tjsToken;
|
||||||
|
@ -67,6 +67,7 @@ type
|
|||||||
procedure TestCurlyBraceClose;
|
procedure TestCurlyBraceClose;
|
||||||
procedure TestCurlyBraceOpen;
|
procedure TestCurlyBraceOpen;
|
||||||
procedure TestDiv;
|
procedure TestDiv;
|
||||||
|
procedure TestPower;
|
||||||
procedure TestDiveq;
|
procedure TestDiveq;
|
||||||
procedure TestXor;
|
procedure TestXor;
|
||||||
procedure TestXoreq;
|
procedure TestXoreq;
|
||||||
@ -183,7 +184,8 @@ type
|
|||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
Function TTestJSScanner.CreateScanner(AInput : TJSScannerString; aVersion : TECMAVersion = ecma5) : TJSScanner;
|
function TTestJSScanner.CreateScanner(AInput: TJSScannerString;
|
||||||
|
aVersion: TECMAVersion): TJSScanner;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
FStream:=TStringStream.Create(AInput);
|
FStream:=TStringStream.Create(AInput);
|
||||||
@ -365,6 +367,11 @@ begin
|
|||||||
CheckToken(tjsDiv,'/');
|
CheckToken(tjsDiv,'/');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TTestJSScanner.TestPower;
|
||||||
|
begin
|
||||||
|
CheckToken(tjsPower,'**');
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TTestJSScanner.TestEq;
|
procedure TTestJSScanner.TestEq;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
@ -796,7 +803,8 @@ begin
|
|||||||
CheckToken(tjsYield,'yield',ecma2021);
|
CheckToken(tjsYield,'yield',ecma2021);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTestJSScanner.CheckTokens(ASource : TJSScannerString; ATokens : Array of TJSToken; aVersion: TECMAVersion = ecma5);
|
procedure TTestJSScanner.CheckTokens(ASource: TJSScannerString;
|
||||||
|
ATokens: array of TJSToken; aVersion: TECMAVersion);
|
||||||
|
|
||||||
Var
|
Var
|
||||||
I : Integer;
|
I : Integer;
|
||||||
|
Loading…
Reference in New Issue
Block a user