mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-19 07:49:10 +02:00
* Some clean-up patches by Mattias
git-svn-id: trunk@34204 -
This commit is contained in:
parent
ef1369fef2
commit
62f39e0037
@ -25,8 +25,6 @@ Type
|
|||||||
FPrevious,
|
FPrevious,
|
||||||
FCurrent : TJSToken;
|
FCurrent : TJSToken;
|
||||||
FCurrentString : String;
|
FCurrentString : String;
|
||||||
FNextNewLine : Boolean;
|
|
||||||
FNextBol : Boolean;
|
|
||||||
FFreeScanner : Boolean;
|
FFreeScanner : Boolean;
|
||||||
FCurrentVars : TJSElementNodes;
|
FCurrentVars : TJSElementNodes;
|
||||||
FPeekToken: TJSToken;
|
FPeekToken: TJSToken;
|
||||||
@ -557,8 +555,6 @@ function TJSParser.ParseObjectLiteral: TJSElement;
|
|||||||
Var
|
Var
|
||||||
N : TJSObjectLiteral;
|
N : TJSObjectLiteral;
|
||||||
E : TJSObjectLiteralElement;
|
E : TJSObjectLiteralElement;
|
||||||
I : Integer;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Consume(tjsCurlyBraceOpen);
|
Consume(tjsCurlyBraceOpen);
|
||||||
N:=TJSObjectLiteral(CreateElement(TJSObjectLiteral));
|
N:=TJSObjectLiteral(CreateElement(TJSObjectLiteral));
|
||||||
@ -618,9 +614,6 @@ function TJSParser.ParseStringLiteral: TJSElement;
|
|||||||
|
|
||||||
Var
|
Var
|
||||||
L : TJSLiteral;
|
L : TJSLiteral;
|
||||||
D : Double;
|
|
||||||
I : Integer;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
{$ifdef debugparser} Writeln('Parsing string literal');{$endif debugparser}
|
{$ifdef debugparser} Writeln('Parsing string literal');{$endif debugparser}
|
||||||
Result:=Nil;
|
Result:=Nil;
|
||||||
@ -746,7 +739,6 @@ Var
|
|||||||
M : TJSDotMemberExpression;
|
M : TJSDotMemberExpression;
|
||||||
N : TJSNewMemberExpression;
|
N : TJSNewMemberExpression;
|
||||||
B : TJSBracketMemberExpression;
|
B : TJSBracketMemberExpression;
|
||||||
C : TJSCallExpression;
|
|
||||||
Done : Boolean;
|
Done : Boolean;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
@ -758,7 +750,7 @@ begin
|
|||||||
N:=TJSNewMemberExpression(CreateElement(TJSNewMemberExpression));
|
N:=TJSNewMemberExpression(CreateElement(TJSNewMemberExpression));
|
||||||
try
|
try
|
||||||
Result:=N;
|
Result:=N;
|
||||||
N.Mexpr:=ParseMemberExpression();
|
N.MExpr:=ParseMemberExpression();
|
||||||
if (CurrentToken=tjsBraceOpen) then
|
if (CurrentToken=tjsBraceOpen) then
|
||||||
N.Args:=ParseArguments;
|
N.Args:=ParseArguments;
|
||||||
except
|
except
|
||||||
@ -1378,7 +1370,6 @@ end;
|
|||||||
function TJSParser.ParseVariableStatement : TJSElement;
|
function TJSParser.ParseVariableStatement : TJSElement;
|
||||||
|
|
||||||
Var
|
Var
|
||||||
E : TJSElement;
|
|
||||||
V : TJSVariableStatement;
|
V : TJSVariableStatement;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
@ -1429,7 +1420,7 @@ begin
|
|||||||
I:=TJSIfStatement(CreateElement(TJSIfStatement));
|
I:=TJSIfStatement(CreateElement(TJSIfStatement));
|
||||||
I.Cond:=C;
|
I.Cond:=C;
|
||||||
I.BTrue:=Btrue;
|
I.BTrue:=Btrue;
|
||||||
I.bfalse:=BFalse;
|
I.BFalse:=BFalse;
|
||||||
Result:=I;
|
Result:=I;
|
||||||
except
|
except
|
||||||
FreeAndNil(C);
|
FreeAndNil(C);
|
||||||
@ -1641,8 +1632,6 @@ function TJSParser.ParseWithStatement : TJSElement;
|
|||||||
|
|
||||||
Var
|
Var
|
||||||
W : TJSWithStatement;
|
W : TJSWithStatement;
|
||||||
N : TJSElement;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
W:=TJSWithStatement(CreateElement(TJSWithStatement));
|
W:=TJSWithStatement(CreateElement(TJSWithStatement));
|
||||||
try
|
try
|
||||||
@ -1655,6 +1644,7 @@ begin
|
|||||||
FreeAndNil(W);
|
FreeAndNil(W);
|
||||||
Raise;
|
Raise;
|
||||||
end;
|
end;
|
||||||
|
Result:=W;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TJSParser.ParseSwitchStatement : TJSElement;
|
function TJSParser.ParseSwitchStatement : TJSElement;
|
||||||
@ -1662,7 +1652,6 @@ function TJSParser.ParseSwitchStatement : TJSElement;
|
|||||||
|
|
||||||
Var
|
Var
|
||||||
N : TJSSwitchStatement;
|
N : TJSSwitchStatement;
|
||||||
C : TJSElement;
|
|
||||||
Ca : TJSCaseElement;
|
Ca : TJSCaseElement;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
@ -1883,8 +1872,6 @@ function TJSParser.ParseLabeledStatement : TJSElement;
|
|||||||
Var
|
Var
|
||||||
OL : TJSLabelSet;
|
OL : TJSLabelSet;
|
||||||
LS : TJSLabeledStatement;
|
LS : TJSLabeledStatement;
|
||||||
LN : String;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
LS:=TJSLabeledStatement(CreateElement(TJSLabeledStatement));
|
LS:=TJSLabeledStatement(CreateElement(TJSLabeledStatement));
|
||||||
try
|
try
|
||||||
@ -2046,7 +2033,7 @@ begin
|
|||||||
If (PeekNextToken<>tjsBraceOpen) then
|
If (PeekNextToken<>tjsBraceOpen) then
|
||||||
begin
|
begin
|
||||||
F:=Self.ParseFunctionDeclaration;
|
F:=Self.ParseFunctionDeclaration;
|
||||||
Result.functions.AddNode.Node:=F;
|
Result.Functions.AddNode.Node:=F;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
@ -2095,8 +2082,6 @@ end;
|
|||||||
Function TJSParser.ParseProgram: TJSFunctionDeclarationStatement;
|
Function TJSParser.ParseProgram: TJSFunctionDeclarationStatement;
|
||||||
|
|
||||||
Var
|
Var
|
||||||
F : TJSFunctionDeclarationStatement;
|
|
||||||
FD : TJSFuncDef;
|
|
||||||
B : TJSElement;
|
B : TJSElement;
|
||||||
begin
|
begin
|
||||||
{$ifdef debugparser} Writeln('>>> Entering FunctionDeclarationStatement');{$endif}
|
{$ifdef debugparser} Writeln('>>> Entering FunctionDeclarationStatement');{$endif}
|
||||||
|
@ -8,7 +8,7 @@ type
|
|||||||
|
|
||||||
TJSToken = (tjsUnknown,
|
TJSToken = (tjsUnknown,
|
||||||
// Specials
|
// Specials
|
||||||
tjsEOF,tjsWhiteSpace,tjsChar,tjsString, tjsIdentifier,tjsNumber, tjsComment,tjsREGEX, tjsRESERVED,
|
tjsEOF,tjsWhiteSpace,tjsChar,tjsString{this bites TJSString}, tjsIdentifier,tjsNumber, tjsComment,tjsREGEX, tjsRESERVED,
|
||||||
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,
|
||||||
|
@ -73,45 +73,47 @@ Type
|
|||||||
TJSObject = Class(TObject);
|
TJSObject = Class(TObject);
|
||||||
|
|
||||||
|
|
||||||
{ TJSLabelSet }
|
{ TJSLabelSet }
|
||||||
|
|
||||||
TJSLabelSet = Class(TJSObject)
|
TJSLabelSet = Class(TJSObject)
|
||||||
private
|
private
|
||||||
FCOnt: Boolean;
|
FCont: Boolean;
|
||||||
FNext: TJSLabelSet;
|
FNext: TJSLabelSet;
|
||||||
FTarget: Cardinal;
|
FTarget: Cardinal;
|
||||||
Public
|
Public
|
||||||
Property Target : Cardinal Read FTarget Write FTarget;
|
Property Target : Cardinal Read FTarget Write FTarget;
|
||||||
Property Next : TJSLabelSet Read FNext Write FNext; // Linked list
|
Property Next : TJSLabelSet Read FNext Write FNext; // Linked list
|
||||||
Property Continuable : Boolean Read FCOnt Write FCont;
|
Property Continuable : Boolean Read FCont Write FCont;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSLabel }
|
{ TJSLabel }
|
||||||
|
|
||||||
TJSLabel = Class(TJSObject)
|
TJSLabel = Class(TJSObject)
|
||||||
private
|
private
|
||||||
FLabelSet: TJSLabelSet;
|
FLabelSet: TJSLabelSet;
|
||||||
FLocationLine: Integer;
|
FLocationLine: Integer;
|
||||||
FLocationPos: Integer;
|
FLocationPos: Integer;
|
||||||
FLocationSource: String;
|
FLocationSource: String;
|
||||||
FName: String;
|
FName: String;
|
||||||
FNext: TJSLabel;
|
FNext: TJSLabel;
|
||||||
Public
|
Public
|
||||||
Property Name : String Read FName Write FName;
|
Property Name : String Read FName Write FName;
|
||||||
Property LabelSet : TJSLabelSet Read FLabelSet Write FLabelSet;
|
Property LabelSet : TJSLabelSet Read FLabelSet Write FLabelSet;
|
||||||
Property LocationSource : String Read FLocationSource Write FLocationSource;
|
Property LocationSource : String Read FLocationSource Write FLocationSource;
|
||||||
Property LocationLine : Integer Read FLocationLine Write FLocationLine;
|
Property LocationLine : Integer Read FLocationLine Write FLocationLine;
|
||||||
Property LocationPos : Integer Read FLocationPos Write FLocationPos;
|
Property LocationPos : Integer Read FLocationPos Write FLocationPos;
|
||||||
Property Next : TJSLabel Read FNext Write FNext;
|
Property Next : TJSLabel Read FNext Write FNext;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSFuncDef }
|
TJSString = jsbase.TJSString; // beware of jstoken.tjsString
|
||||||
|
|
||||||
|
{ TJSFuncDef - e.g. 'function Name(Params)Body' }
|
||||||
|
|
||||||
TJSFuncDef = Class(TJSObject)
|
TJSFuncDef = Class(TJSObject)
|
||||||
private
|
private
|
||||||
FBody: TJSFunctionBody;
|
FBody: TJSFunctionBody;
|
||||||
FIsEmpty: Boolean;
|
FIsEmpty: Boolean;
|
||||||
FName: String;
|
FName: TJSString;
|
||||||
FParams: TStrings;
|
FParams: TStrings;
|
||||||
procedure SetParams(const AValue: TStrings);
|
procedure SetParams(const AValue: TStrings);
|
||||||
Public
|
Public
|
||||||
@ -119,13 +121,13 @@ Type
|
|||||||
Destructor Destroy; override;
|
Destructor Destroy; override;
|
||||||
Property Params : TStrings Read FParams Write SetParams;
|
Property Params : TStrings Read FParams Write SetParams;
|
||||||
Property Body : TJSFunctionBody Read FBody Write FBody;
|
Property Body : TJSFunctionBody Read FBody Write FBody;
|
||||||
Property Name : String Read FName Write FName;
|
Property Name : TJSString Read FName Write FName;
|
||||||
Property IsEmpty : Boolean Read FIsEmpty Write FIsEmpty;
|
Property IsEmpty : Boolean Read FIsEmpty Write FIsEmpty;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TJSString = WideString;
|
{ TJSElement }
|
||||||
|
|
||||||
TJSElement = Class (TJSObject)
|
TJSElement = Class(TJSObject)
|
||||||
private
|
private
|
||||||
FFlags: TJSElementFlags;
|
FFlags: TJSElementFlags;
|
||||||
FLine: Integer;
|
FLine: Integer;
|
||||||
@ -140,9 +142,12 @@ Type
|
|||||||
end;
|
end;
|
||||||
TJSElementClass = Class of TJSElement;
|
TJSElementClass = Class of TJSElement;
|
||||||
|
|
||||||
{ TJSEmptyBlockStatement }
|
{ TJSEmptyBlockStatement - empty curly brackets }
|
||||||
|
|
||||||
TJSEmptyBlockStatement = Class(TJSElement);
|
TJSEmptyBlockStatement = Class(TJSElement);
|
||||||
|
|
||||||
|
{ TJSEmptyStatement - a dummy placeholder, needs sometimes a single semicolon }
|
||||||
|
|
||||||
TJSEmptyStatement = Class(TJSElement);
|
TJSEmptyStatement = Class(TJSElement);
|
||||||
|
|
||||||
{ TJSLiteral }
|
{ TJSLiteral }
|
||||||
@ -156,15 +161,6 @@ Type
|
|||||||
Property Value : TJSValue Read FValue Write FValue;
|
Property Value : TJSValue Read FValue Write FValue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
(* { TJSStringLiteral }
|
|
||||||
|
|
||||||
TJSStringLiteral = Class(TJSElement)
|
|
||||||
private
|
|
||||||
FValue: TJSString;
|
|
||||||
Public
|
|
||||||
Property Value : TJSString Read FValue Write FValue;
|
|
||||||
end;
|
|
||||||
*)
|
|
||||||
{ TJSRegularExpressionLiteral }
|
{ TJSRegularExpressionLiteral }
|
||||||
|
|
||||||
TJSRegularExpressionLiteral = Class(TJSElement)
|
TJSRegularExpressionLiteral = Class(TJSElement)
|
||||||
@ -182,18 +178,20 @@ Type
|
|||||||
Property Argv[AIndex : integer] : TJSValue Read GetA Write SetA;
|
Property Argv[AIndex : integer] : TJSValue Read GetA Write SetA;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSPrimaryExpressionIdent }
|
|
||||||
TJSPrimaryExpression = Class(TJSElement);
|
TJSPrimaryExpression = Class(TJSElement);
|
||||||
|
|
||||||
|
TJSPrimaryExpressionThis = Class(TJSPrimaryExpression); // 'this'
|
||||||
|
|
||||||
|
{ TJSPrimaryExpressionIdent }
|
||||||
|
|
||||||
TJSPrimaryExpressionIdent = Class(TJSPrimaryExpression)
|
TJSPrimaryExpressionIdent = Class(TJSPrimaryExpression)
|
||||||
private
|
private
|
||||||
FName: TJSString;
|
FName: TJSString;
|
||||||
Public
|
Public
|
||||||
Property Name : TJSString Read FName Write FName;
|
Property Name : TJSString Read FName Write FName;
|
||||||
end;
|
end;
|
||||||
TJSPrimaryExpressionThis = Class(TJSPrimaryExpression);
|
|
||||||
|
|
||||||
{ TJSArrayLiteralElement }
|
{ TJSArrayLiteralElement - an item of a TJSArrayLiteralElements }
|
||||||
|
|
||||||
TJSArrayLiteralElement = Class(TCollectionItem)
|
TJSArrayLiteralElement = Class(TCollectionItem)
|
||||||
private
|
private
|
||||||
@ -205,7 +203,7 @@ Type
|
|||||||
Property ElementIndex : Integer Read FFindex Write FFIndex;
|
Property ElementIndex : Integer Read FFindex Write FFIndex;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSArrayLiteralElements }
|
{ TJSArrayLiteralElements - Elements property of TJSArrayLiteral }
|
||||||
|
|
||||||
TJSArrayLiteralElements = Class(TCollection)
|
TJSArrayLiteralElements = Class(TCollection)
|
||||||
private
|
private
|
||||||
@ -226,7 +224,7 @@ Type
|
|||||||
Property Elements : TJSArrayLiteralElements Read FElements;
|
Property Elements : TJSArrayLiteralElements Read FElements;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSObjectLiteralElement }
|
{ TJSObjectLiteralElement - an item of TJSObjectLiteralElements }
|
||||||
|
|
||||||
TJSObjectLiteralElement = Class(TCollectionItem)
|
TJSObjectLiteralElement = Class(TCollectionItem)
|
||||||
private
|
private
|
||||||
@ -238,7 +236,7 @@ Type
|
|||||||
Property Name : TJSString Read FName Write FName;
|
Property Name : TJSString Read FName Write FName;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSObjectLiteralElements }
|
{ TJSObjectLiteralElements - Elements property of TJSObjectLiteral }
|
||||||
|
|
||||||
TJSObjectLiteralElements = Class(TCollection)
|
TJSObjectLiteralElements = Class(TCollection)
|
||||||
private
|
private
|
||||||
@ -263,17 +261,17 @@ Type
|
|||||||
|
|
||||||
TJSArguments = Class(TJSArrayLiteral);
|
TJSArguments = Class(TJSArrayLiteral);
|
||||||
|
|
||||||
{ TJSMemberExpression }
|
{ TJSMemberExpression - base class }
|
||||||
|
|
||||||
TJSMemberExpression = Class(TJSElement)
|
TJSMemberExpression = Class(TJSElement)
|
||||||
private
|
private
|
||||||
FMexpr: TJSElement;
|
FMexpr: TJSElement;
|
||||||
Public
|
Public
|
||||||
Destructor Destroy; override;
|
Destructor Destroy; override;
|
||||||
Property Mexpr : TJSElement Read FMexpr Write FMexpr;
|
Property MExpr : TJSElement Read FMexpr Write FMexpr;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSNewMemberExpression }
|
{ TJSNewMemberExpression - e.g. 'new MExpr(Args)' }
|
||||||
|
|
||||||
TJSNewMemberExpression = Class(TJSMemberExpression)
|
TJSNewMemberExpression = Class(TJSMemberExpression)
|
||||||
private
|
private
|
||||||
@ -283,7 +281,7 @@ Type
|
|||||||
Property Args : TJSArguments Read FArgs Write FArgs;
|
Property Args : TJSArguments Read FArgs Write FArgs;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSDotMemberExpression }
|
{ TJSDotMemberExpression - e.g. 'MExpr.Name' }
|
||||||
|
|
||||||
TJSDotMemberExpression = Class(TJSMemberExpression)
|
TJSDotMemberExpression = Class(TJSMemberExpression)
|
||||||
private
|
private
|
||||||
@ -292,7 +290,7 @@ Type
|
|||||||
Property Name : TJSString Read FName Write FName;
|
Property Name : TJSString Read FName Write FName;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSBracketMemberExpression }
|
{ TJSBracketMemberExpression - e.g. 'MExpr[Name]' }
|
||||||
|
|
||||||
TJSBracketMemberExpression = Class(TJSMemberExpression)
|
TJSBracketMemberExpression = Class(TJSMemberExpression)
|
||||||
private
|
private
|
||||||
@ -302,7 +300,7 @@ Type
|
|||||||
Property Name : TJSElement Read FName Write FName;
|
Property Name : TJSElement Read FName Write FName;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSCallExpression }
|
{ TJSCallExpression - e.g. 'Expr(Args)'}
|
||||||
|
|
||||||
TJSCallExpression = Class(TJSElement)
|
TJSCallExpression = Class(TJSElement)
|
||||||
private
|
private
|
||||||
@ -314,7 +312,7 @@ Type
|
|||||||
Property Args : TJSArguments Read FArgs Write FArgs;
|
Property Args : TJSArguments Read FArgs Write FArgs;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSUnary }
|
{ TJSUnary - e.g. 'PrefixOperator A PostFixOperator', '--i' }
|
||||||
|
|
||||||
TJSUnary = Class(TJSElement)
|
TJSUnary = Class(TJSElement)
|
||||||
private
|
private
|
||||||
@ -329,87 +327,103 @@ Type
|
|||||||
end;
|
end;
|
||||||
TJSUnaryClass = class of TJSUnary;
|
TJSUnaryClass = class of TJSUnary;
|
||||||
|
|
||||||
{ TJSVariableStatement }
|
{ TJSVariableStatement - e.g. 'var A' }
|
||||||
|
|
||||||
TJSVariableStatement = Class(TJSUnary);
|
TJSVariableStatement = Class(TJSUnary);
|
||||||
|
|
||||||
|
{ TJSExpressionStatement - ? }
|
||||||
|
|
||||||
TJSExpressionStatement = Class(TJSUnary);
|
TJSExpressionStatement = Class(TJSUnary);
|
||||||
|
|
||||||
{ TJSThrowStatement }
|
{ TJSThrowStatement - e.g. 'throw A' }
|
||||||
|
|
||||||
TJSThrowStatement = Class(TJSUnary)
|
TJSThrowStatement = Class(TJSUnary)
|
||||||
|
Public
|
||||||
Class function PrefixOperatorToken : tjsToken; Override;
|
Class function PrefixOperatorToken : tjsToken; Override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TJSUnaryExpression = Class(TJSUnary);
|
TJSUnaryExpression = Class(TJSUnary);
|
||||||
|
|
||||||
{ TJSUnaryDeleteExpression }
|
{ TJSUnaryDeleteExpression - e.g. 'delete A' }
|
||||||
|
|
||||||
TJSUnaryDeleteExpression = Class(TJSUnaryExpression)
|
TJSUnaryDeleteExpression = Class(TJSUnaryExpression)
|
||||||
|
Public
|
||||||
Class function PrefixOperatorToken : tjsToken; override;
|
Class function PrefixOperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSUnaryVoidExpression }
|
{ TJSUnaryVoidExpression - e.g. 'void A' }
|
||||||
|
|
||||||
TJSUnaryVoidExpression = Class(TJSUnaryExpression)
|
TJSUnaryVoidExpression = Class(TJSUnaryExpression)
|
||||||
|
Public
|
||||||
Class function PrefixOperatorToken : tjsToken; override;
|
Class function PrefixOperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSUnaryTypeOfExpression }
|
{ TJSUnaryTypeOfExpression - e.g. 'typeof A' }
|
||||||
|
|
||||||
TJSUnaryTypeOfExpression = Class(TJSUnaryExpression)
|
TJSUnaryTypeOfExpression = Class(TJSUnaryExpression)
|
||||||
|
Public
|
||||||
Class function PrefixOperatorToken : tjsToken; override;
|
Class function PrefixOperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSUnaryPrePlusPlusExpression }
|
{ TJSUnaryPrePlusPlusExpression - e.g. '++A' }
|
||||||
|
|
||||||
TJSUnaryPrePlusPlusExpression = Class(TJSUnaryExpression)
|
TJSUnaryPrePlusPlusExpression = Class(TJSUnaryExpression)
|
||||||
|
Public
|
||||||
Class function PrefixOperatorToken : tjsToken; override;
|
Class function PrefixOperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSUnaryPreMinusMinusExpression }
|
{ TJSUnaryPreMinusMinusExpression - e.g. '--A' }
|
||||||
|
|
||||||
TJSUnaryPreMinusMinusExpression = Class(TJSUnaryExpression)
|
TJSUnaryPreMinusMinusExpression = Class(TJSUnaryExpression)
|
||||||
|
Public
|
||||||
Class function PrefixOperatorToken : tjsToken; override;
|
Class function PrefixOperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSUnaryPlusExpression }
|
{ TJSUnaryPlusExpression - e.g. '+A' }
|
||||||
|
|
||||||
TJSUnaryPlusExpression = Class(TJSUnaryExpression)
|
TJSUnaryPlusExpression = Class(TJSUnaryExpression)
|
||||||
|
Public
|
||||||
Class function PrefixOperatorToken : tjsToken; override;
|
Class function PrefixOperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSUnaryMinusExpression }
|
{ TJSUnaryMinusExpression - e.g. '-A' }
|
||||||
|
|
||||||
TJSUnaryMinusExpression = Class(TJSUnaryExpression)
|
TJSUnaryMinusExpression = Class(TJSUnaryExpression)
|
||||||
|
Public
|
||||||
Class function PrefixOperatorToken : tjsToken; override;
|
Class function PrefixOperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSUnaryInvExpression }
|
{ TJSUnaryInvExpression - e.g. '~A' }
|
||||||
|
|
||||||
TJSUnaryInvExpression = Class(TJSUnaryExpression)
|
TJSUnaryInvExpression = Class(TJSUnaryExpression)
|
||||||
|
Public
|
||||||
Class function PrefixOperatorToken : tjsToken; override;
|
Class function PrefixOperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSUnaryNotExpression }
|
{ TJSUnaryNotExpression - e.g. '!A' }
|
||||||
|
|
||||||
TJSUnaryNotExpression = Class(TJSUnaryExpression)
|
TJSUnaryNotExpression = Class(TJSUnaryExpression)
|
||||||
|
Public
|
||||||
Class function PrefixOperatorToken : tjsToken; override;
|
Class function PrefixOperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSUnaryPostPlusPlusExpression }
|
{ TJSUnaryPostPlusPlusExpression - e.g. 'A++' }
|
||||||
|
|
||||||
TJSUnaryPostPlusPlusExpression = Class(TJSUnaryExpression)
|
TJSUnaryPostPlusPlusExpression = Class(TJSUnaryExpression)
|
||||||
|
Public
|
||||||
Class function PostFixOperatorToken : tjsToken; override;
|
Class function PostFixOperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSUnaryPostMinusMinusExpression }
|
{ TJSUnaryPostMinusMinusExpression - e.g. 'A--' }
|
||||||
|
|
||||||
TJSUnaryPostMinusMinusExpression = Class(TJSUnaryExpression)
|
TJSUnaryPostMinusMinusExpression = Class(TJSUnaryExpression)
|
||||||
|
Public
|
||||||
Class function PostFixOperatorToken : tjsToken; override;
|
Class function PostFixOperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{ TJSBinary }
|
{ TJSBinary - base class }
|
||||||
|
|
||||||
TJSBinary = Class(TJSElement)
|
TJSBinary = Class(TJSElement)
|
||||||
private
|
private
|
||||||
@ -425,42 +439,49 @@ Type
|
|||||||
{ TJSStatementList }
|
{ TJSStatementList }
|
||||||
|
|
||||||
TJSStatementList = Class(TJSBinary); // A->first statement, B->next in list, chained.
|
TJSStatementList = Class(TJSBinary); // A->first statement, B->next in list, chained.
|
||||||
TJSVariableDeclarationList = Class(TJSBinary);
|
|
||||||
|
{ TJSVariableDeclarationList }
|
||||||
|
|
||||||
|
TJSVariableDeclarationList = Class(TJSBinary); // A->first variable, B->next in list, chained.
|
||||||
|
|
||||||
|
{ TJSWithStatement }
|
||||||
|
|
||||||
TJSWithStatement = Class(TJSBinary); // A-> with expression, B->statement(s)
|
TJSWithStatement = Class(TJSBinary); // A-> with expression, B->statement(s)
|
||||||
|
|
||||||
{ TJSBinaryExpression }
|
{ TJSBinaryExpression - e.g. A operator B }
|
||||||
|
|
||||||
TJSBinaryExpression = Class(TJSBinary)
|
TJSBinaryExpression = Class(TJSBinary)
|
||||||
|
Public
|
||||||
Class function OperatorToken : tjsToken; virtual;
|
Class function OperatorToken : tjsToken; virtual;
|
||||||
Class function OperatorString : string;
|
Class function OperatorString : string;
|
||||||
Class Function AllowCompact : Boolean; virtual;
|
Class Function AllowCompact : Boolean; virtual;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSLogicalOrExpression }
|
{ TJSLogicalOrExpression - e.g. A || B }
|
||||||
|
|
||||||
TJSLogicalOrExpression = Class (TJSBinaryExpression)
|
TJSLogicalOrExpression = Class (TJSBinaryExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSLogicalAndExpression }
|
{ TJSLogicalAndExpression - e.g. A && B }
|
||||||
|
|
||||||
TJSLogicalAndExpression = Class (TJSBinaryExpression)
|
TJSLogicalAndExpression = Class (TJSBinaryExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSBitwiseAndExpression }
|
{ TJSBitwiseAndExpression - e.g. A & B }
|
||||||
|
|
||||||
TJSBitwiseAndExpression = Class (TJSBinaryExpression)
|
TJSBitwiseAndExpression = Class (TJSBinaryExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSBitwiseOrExpression }
|
{ TJSBitwiseOrExpression - e.g. A | B }
|
||||||
|
|
||||||
TJSBitwiseOrExpression = Class (TJSBinaryExpression)
|
TJSBitwiseOrExpression = Class (TJSBinaryExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSBitwiseXOrExpression }
|
{ TJSBitwiseXOrExpression - e.g. A ^ B }
|
||||||
|
|
||||||
TJSBitwiseXOrExpression = Class (TJSBinaryExpression)
|
TJSBitwiseXOrExpression = Class (TJSBinaryExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
@ -468,25 +489,25 @@ Type
|
|||||||
|
|
||||||
TJSEqualityExpression = Class (TJSBinaryExpression);
|
TJSEqualityExpression = Class (TJSBinaryExpression);
|
||||||
|
|
||||||
{ TJSEqualityExpressionEQ }
|
{ TJSEqualityExpressionEQ - e.g. A == B }
|
||||||
|
|
||||||
TJSEqualityExpressionEQ = Class(TJSEqualityExpression)
|
TJSEqualityExpressionEQ = Class(TJSEqualityExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSEqualityExpressionNE }
|
{ TJSEqualityExpressionNE - e.g. A != B }
|
||||||
|
|
||||||
TJSEqualityExpressionNE = Class(TJSEqualityExpression)
|
TJSEqualityExpressionNE = Class(TJSEqualityExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSEqualityExpressionSEQ }
|
{ TJSEqualityExpressionSEQ strict equal - e.g. A === B }
|
||||||
|
|
||||||
TJSEqualityExpressionSEQ = Class(TJSEqualityExpression)
|
TJSEqualityExpressionSEQ = Class(TJSEqualityExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSEqualityExpressionSNE }
|
{ TJSEqualityExpressionSNE not strict equal - e.g. A !== B }
|
||||||
|
|
||||||
TJSEqualityExpressionSNE = Class(TJSEqualityExpression)
|
TJSEqualityExpressionSNE = Class(TJSEqualityExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
@ -494,38 +515,38 @@ Type
|
|||||||
|
|
||||||
TJSRelationalExpression = Class(TJSBinaryExpression);
|
TJSRelationalExpression = Class(TJSBinaryExpression);
|
||||||
|
|
||||||
{ TJSRelationalExpressionLT }
|
{ TJSRelationalExpressionLT lower than - e.g. A < B }
|
||||||
|
|
||||||
TJSRelationalExpressionLT = Class(TJSRelationalExpression)
|
TJSRelationalExpressionLT = Class(TJSRelationalExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSRelationalExpressionGT }
|
{ TJSRelationalExpressionGT greater than - e.g. A > B }
|
||||||
|
|
||||||
TJSRelationalExpressionGT = Class(TJSRelationalExpression)
|
TJSRelationalExpressionGT = Class(TJSRelationalExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSRelationalExpressionLE }
|
{ TJSRelationalExpressionLE lower equal - e.g. A <= B }
|
||||||
|
|
||||||
TJSRelationalExpressionLE = Class(TJSRelationalExpression)
|
TJSRelationalExpressionLE = Class(TJSRelationalExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSRelationalExpressionGE }
|
{ TJSRelationalExpressionGE greater equal - e.g. A >= B }
|
||||||
|
|
||||||
TJSRelationalExpressionGE = Class(TJSRelationalExpression)
|
TJSRelationalExpressionGE = Class(TJSRelationalExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSRelationalExpressionIn }
|
{ TJSRelationalExpressionIn - e.g. A in B }
|
||||||
|
|
||||||
TJSRelationalExpressionIn = Class(TJSRelationalExpression)
|
TJSRelationalExpressionIn = Class(TJSRelationalExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
Class Function AllowCompact : Boolean; override;
|
Class Function AllowCompact : Boolean; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSRelationalExpressionInstanceOf }
|
{ TJSRelationalExpressionInstanceOf - e.g. A instanceof B }
|
||||||
|
|
||||||
TJSRelationalExpressionInstanceOf = Class(TJSRelationalExpression)
|
TJSRelationalExpressionInstanceOf = Class(TJSRelationalExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
@ -534,19 +555,19 @@ Type
|
|||||||
|
|
||||||
TJSShiftExpression = Class(TJSBinaryExpression);
|
TJSShiftExpression = Class(TJSBinaryExpression);
|
||||||
|
|
||||||
{ TJSLShiftExpression }
|
{ TJSLShiftExpression - e.g. A << B }
|
||||||
|
|
||||||
TJSLShiftExpression = Class(TJSShiftExpression)
|
TJSLShiftExpression = Class(TJSShiftExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSRShiftExpression }
|
{ TJSRShiftExpression right shift keep sign - e.g. A >> B }
|
||||||
|
|
||||||
TJSRShiftExpression = Class(TJSShiftExpression)
|
TJSRShiftExpression = Class(TJSShiftExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSURShiftExpression }
|
{ TJSURShiftExpression right shift unsigned, insert zeroes - e.g. A >>> B }
|
||||||
|
|
||||||
TJSURShiftExpression = Class(TJSShiftExpression)
|
TJSURShiftExpression = Class(TJSShiftExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
@ -554,13 +575,13 @@ Type
|
|||||||
|
|
||||||
TJSAdditiveExpression = Class(TJSBinaryExpression);
|
TJSAdditiveExpression = Class(TJSBinaryExpression);
|
||||||
|
|
||||||
{ TJSAdditiveExpressionPlus }
|
{ TJSAdditiveExpressionPlus - e.g. A + B }
|
||||||
|
|
||||||
TJSAdditiveExpressionPlus = Class(TJSAdditiveExpression)
|
TJSAdditiveExpressionPlus = Class(TJSAdditiveExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSAdditiveExpressionMinus }
|
{ TJSAdditiveExpressionMinus - e.g. A - B }
|
||||||
|
|
||||||
TJSAdditiveExpressionMinus = Class(TJSAdditiveExpression)
|
TJSAdditiveExpressionMinus = Class(TJSAdditiveExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
@ -568,31 +589,31 @@ Type
|
|||||||
|
|
||||||
TJSMultiplicativeExpression = Class(TJSBinaryExpression);
|
TJSMultiplicativeExpression = Class(TJSBinaryExpression);
|
||||||
|
|
||||||
{ TJSMultiplicativeExpressionMul }
|
{ TJSMultiplicativeExpressionMul - e.g. A * B }
|
||||||
|
|
||||||
TJSMultiplicativeExpressionMul = Class(TJSMultiplicativeExpression)
|
TJSMultiplicativeExpressionMul = Class(TJSMultiplicativeExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSMultiplicativeExpressionDiv }
|
{ TJSMultiplicativeExpressionDiv - e.g. A / B }
|
||||||
|
|
||||||
TJSMultiplicativeExpressionDiv = Class(TJSMultiplicativeExpression)
|
TJSMultiplicativeExpressionDiv = Class(TJSMultiplicativeExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSMultiplicativeExpressionMod }
|
{ TJSMultiplicativeExpressionMod - e.g. A % B }
|
||||||
|
|
||||||
TJSMultiplicativeExpressionMod = Class(TJSMultiplicativeExpression)
|
TJSMultiplicativeExpressionMod = Class(TJSMultiplicativeExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSCommaExpression }
|
{ TJSCommaExpression - e.g. A , B }
|
||||||
|
|
||||||
TJSCommaExpression = Class(TJSBinaryExpression)
|
TJSCommaExpression = Class(TJSBinaryExpression)
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSConditionalExpression }
|
{ TJSConditionalExpression - e.g. A ? B :C }
|
||||||
|
|
||||||
TJSConditionalExpression = Class(TJSElement)
|
TJSConditionalExpression = Class(TJSElement)
|
||||||
private
|
private
|
||||||
@ -606,7 +627,7 @@ Type
|
|||||||
Property C : TJSElement Read FC Write FC;
|
Property C : TJSElement Read FC Write FC;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSAssignStatement }
|
{ TJSAssignStatement - e.g. LHS operator Expr }
|
||||||
|
|
||||||
TJSAssignStatement = Class(TJSElement)
|
TJSAssignStatement = Class(TJSElement)
|
||||||
private
|
private
|
||||||
@ -622,79 +643,91 @@ Type
|
|||||||
|
|
||||||
TJSAssignStatementClass = Class of TJSAssignStatement;
|
TJSAssignStatementClass = Class of TJSAssignStatement;
|
||||||
|
|
||||||
{ TJSSimpleAssignStatement }
|
{ TJSSimpleAssignStatement - e.g. LHS=Expr }
|
||||||
|
|
||||||
TJSSimpleAssignStatement = Class(TJSAssignStatement)
|
TJSSimpleAssignStatement = Class(TJSAssignStatement)
|
||||||
|
Public
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSMulEqAssignStatement }
|
{ TJSMulEqAssignStatement - e.g. LHS*=Expr }
|
||||||
|
|
||||||
TJSMulEqAssignStatement = Class(TJSAssignStatement)
|
TJSMulEqAssignStatement = Class(TJSAssignStatement)
|
||||||
|
Public
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSDivEqAssignStatement }
|
{ TJSDivEqAssignStatement - e.g. LHS/=Expr }
|
||||||
|
|
||||||
TJSDivEqAssignStatement = Class(TJSAssignStatement)
|
TJSDivEqAssignStatement = Class(TJSAssignStatement)
|
||||||
|
Public
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSModEqAssignStatement }
|
{ TJSModEqAssignStatement - e.g. LHS%=Expr }
|
||||||
|
|
||||||
TJSModEqAssignStatement = Class(TJSAssignStatement)
|
TJSModEqAssignStatement = Class(TJSAssignStatement)
|
||||||
|
Public
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSAddEqAssignStatement }
|
{ TJSAddEqAssignStatement - e.g. LHS+=Expr }
|
||||||
|
|
||||||
TJSAddEqAssignStatement = Class(TJSAssignStatement)
|
TJSAddEqAssignStatement = Class(TJSAssignStatement)
|
||||||
|
Public
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSSubEqAssignStatement }
|
{ TJSSubEqAssignStatement - e.g. LHS-=Expr }
|
||||||
|
|
||||||
TJSSubEqAssignStatement = Class(TJSAssignStatement)
|
TJSSubEqAssignStatement = Class(TJSAssignStatement)
|
||||||
|
Public
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSLShiftEqAssignStatement }
|
{ TJSLShiftEqAssignStatement - e.g. LHS<<=Expr }
|
||||||
|
|
||||||
TJSLShiftEqAssignStatement = Class(TJSAssignStatement)
|
TJSLShiftEqAssignStatement = Class(TJSAssignStatement)
|
||||||
|
Public
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSRShiftEqAssignStatement }
|
{ TJSRShiftEqAssignStatement - e.g. LHS>>=Expr keep sign }
|
||||||
|
|
||||||
TJSRShiftEqAssignStatement = Class(TJSAssignStatement)
|
TJSRShiftEqAssignStatement = Class(TJSAssignStatement)
|
||||||
|
Public
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSURShiftEqAssignStatement }
|
{ TJSURShiftEqAssignStatement - e.g. LHS>>>=Expr unsigned, insert zeroes }
|
||||||
|
|
||||||
TJSURShiftEqAssignStatement = Class(TJSAssignStatement)
|
TJSURShiftEqAssignStatement = Class(TJSAssignStatement)
|
||||||
|
Public
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSANDEqAssignStatement }
|
{ TJSANDEqAssignStatement - e.g. LHS&=Expr }
|
||||||
|
|
||||||
TJSANDEqAssignStatement = Class(TJSAssignStatement)
|
TJSANDEqAssignStatement = Class(TJSAssignStatement)
|
||||||
|
Public
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSOREqAssignStatement }
|
{ TJSOREqAssignStatement - e.g. LHS|=Expr }
|
||||||
|
|
||||||
TJSOREqAssignStatement = Class(TJSAssignStatement)
|
TJSOREqAssignStatement = Class(TJSAssignStatement)
|
||||||
|
Public
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSXOREqAssignStatement }
|
{ TJSXOREqAssignStatement - e.g. LHS^=Expr }
|
||||||
|
|
||||||
TJSXOREqAssignStatement = Class(TJSAssignStatement)
|
TJSXOREqAssignStatement = Class(TJSAssignStatement)
|
||||||
|
Public
|
||||||
Class function OperatorToken : tjsToken; override;
|
Class function OperatorToken : tjsToken; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSVarDeclaration }
|
{ TJSVarDeclaration - e.g. Name=Init }
|
||||||
|
|
||||||
TJSVarDeclaration = Class(TJSElement)
|
TJSVarDeclaration = Class(TJSElement)
|
||||||
private
|
private
|
||||||
@ -706,7 +739,7 @@ Type
|
|||||||
Property Init : TJSElement Read FInit Write FInit;
|
Property Init : TJSElement Read FInit Write FInit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSIfStatement }
|
{ TJSIfStatement - e.g. if (Cond) btrue else bfalse }
|
||||||
|
|
||||||
TJSIfStatement = Class(TJSElement)
|
TJSIfStatement = Class(TJSElement)
|
||||||
private
|
private
|
||||||
@ -716,13 +749,13 @@ Type
|
|||||||
Public
|
Public
|
||||||
Destructor Destroy; override;
|
Destructor Destroy; override;
|
||||||
Property Cond : TJSElement Read FCond Write FCond;
|
Property Cond : TJSElement Read FCond Write FCond;
|
||||||
Property btrue : TJSElement Read FBTrue Write FBTrue;
|
Property BTrue : TJSElement Read FBTrue Write FBTrue;
|
||||||
Property bfalse : TJSElement Read FBFalse Write FBFalse;
|
Property BFalse : TJSElement Read FBFalse Write FBFalse;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSWhileStatement }
|
{ TJSTargetStatement
|
||||||
|
- base class for statements targetable by continue and break
|
||||||
{ TJSTargetStatement }
|
- TargetName can be empty }
|
||||||
|
|
||||||
TJSTargetStatement = Class(TJSElement)
|
TJSTargetStatement = Class(TJSElement)
|
||||||
private
|
private
|
||||||
@ -733,17 +766,17 @@ Type
|
|||||||
Property TargetName : TJSString Read FTargetName Write FTargetName;
|
Property TargetName : TJSString Read FTargetName Write FTargetName;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSBodyStatement }
|
{ TJSBodyStatement - base class }
|
||||||
|
|
||||||
TJSBodyStatement = Class(TJSTargetStatement)
|
TJSBodyStatement = Class(TJSTargetStatement)
|
||||||
private
|
private
|
||||||
FBody: TJSElement;
|
FBody: TJSElement;
|
||||||
Public
|
Public
|
||||||
Destructor Destroy; override;
|
Destructor Destroy; override;
|
||||||
Property body : TJSElement Read FBody Write FBody;
|
Property Body : TJSElement Read FBody Write FBody;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSCondLoopStatement }
|
{ TJSCondLoopStatement - base class for do..while and while..do }
|
||||||
|
|
||||||
TJSCondLoopStatement = Class(TJSBodyStatement)
|
TJSCondLoopStatement = Class(TJSBodyStatement)
|
||||||
private
|
private
|
||||||
@ -753,10 +786,15 @@ Type
|
|||||||
Property Cond : TJSElement Read FCond Write FCond;
|
Property Cond : TJSElement Read FCond Write FCond;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TJSWhileStatement - e.g. 'while(Cond) Body' }
|
||||||
|
|
||||||
TJSWhileStatement = Class(TJSCondLoopStatement);
|
TJSWhileStatement = Class(TJSCondLoopStatement);
|
||||||
|
|
||||||
|
{ TJSDoWhileStatement - e.g. 'do Body while(Cond)' }
|
||||||
|
|
||||||
TJSDoWhileStatement = Class(TJSWhileStatement);
|
TJSDoWhileStatement = Class(TJSWhileStatement);
|
||||||
|
|
||||||
{ TJSForStatement }
|
{ TJSForStatement - e.g. 'for(Init;Cond;Incr) Body' }
|
||||||
|
|
||||||
TJSForStatement = Class(TJSCondLoopStatement)
|
TJSForStatement = Class(TJSCondLoopStatement)
|
||||||
private
|
private
|
||||||
@ -768,7 +806,7 @@ Type
|
|||||||
Property Init : TJSElement Read FInit Write FInit;
|
Property Init : TJSElement Read FInit Write FInit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSForInStatement }
|
{ TJSForInStatement - e.g. 'for(LHS in List) Body' }
|
||||||
|
|
||||||
TJSForInStatement = Class(TJSBodyStatement)
|
TJSForInStatement = Class(TJSBodyStatement)
|
||||||
private
|
private
|
||||||
@ -780,11 +818,15 @@ Type
|
|||||||
Property List : TJSElement Read FList Write FList;
|
Property List : TJSElement Read FList Write FList;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TJSContinueStatement - e.g. 'continue'}
|
||||||
|
|
||||||
TJSContinueStatement = Class(TJSTargetStatement);
|
TJSContinueStatement = Class(TJSTargetStatement);
|
||||||
|
|
||||||
|
{ TJSBreakStatement - e.g. 'break' }
|
||||||
|
|
||||||
TJSBreakStatement = Class(TJSTargetStatement);
|
TJSBreakStatement = Class(TJSTargetStatement);
|
||||||
|
|
||||||
{ TJSReturn }
|
{ TJSReturn - e.g. 'return Expr'}
|
||||||
|
|
||||||
TJSReturnStatement = Class(TJSElement)
|
TJSReturnStatement = Class(TJSElement)
|
||||||
private
|
private
|
||||||
@ -794,7 +836,7 @@ Type
|
|||||||
Property Expr : TJSElement Read FExpr Write FExpr;
|
Property Expr : TJSElement Read FExpr Write FExpr;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSCaseElement }
|
{ TJSCaseElement - element of TJSCaseElements, e.g. 'case Expr: Body' }
|
||||||
|
|
||||||
TJSCaseElement = Class(TCollectionItem)
|
TJSCaseElement = Class(TCollectionItem)
|
||||||
private
|
private
|
||||||
@ -806,7 +848,7 @@ Type
|
|||||||
Property Body : TJSElement Read FBody Write FBody;
|
Property Body : TJSElement Read FBody Write FBody;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSCaseElements }
|
{ TJSCaseElements - Cases property of TJSSwitch }
|
||||||
|
|
||||||
TJSCaseElements = Class(TCollection)
|
TJSCaseElements = Class(TCollection)
|
||||||
private
|
private
|
||||||
@ -816,7 +858,7 @@ Type
|
|||||||
Property Cases[AIndex : Integer] : TJSCaseElement Read GetC ;default;
|
Property Cases[AIndex : Integer] : TJSCaseElement Read GetC ;default;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSSwitch }
|
{ TJSSwitch - e.g. switch(Cond) Cases }
|
||||||
|
|
||||||
TJSSwitchStatement = Class(TJSTargetStatement)
|
TJSSwitchStatement = Class(TJSTargetStatement)
|
||||||
private
|
private
|
||||||
@ -828,10 +870,10 @@ Type
|
|||||||
Destructor Destroy; override;
|
Destructor Destroy; override;
|
||||||
Property Cond : TJSelement Read FCond Write FCond;
|
Property Cond : TJSelement Read FCond Write FCond;
|
||||||
Property Cases : TJSCaseElements Read FCases;
|
Property Cases : TJSCaseElements Read FCases;
|
||||||
Property TheDefault : TJSCaseelement Read FDefault Write FDefault;
|
Property TheDefault : TJSCaseelement Read FDefault Write FDefault; // one of Cases
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSLabeledStatement }
|
{ TJSLabeledStatement - e.g. 'TheLabel : A' }
|
||||||
|
|
||||||
TJSLabeledStatement = Class(TJSUnary)
|
TJSLabeledStatement = Class(TJSUnary)
|
||||||
private
|
private
|
||||||
@ -839,11 +881,11 @@ Type
|
|||||||
FTarget: Integer;
|
FTarget: Integer;
|
||||||
Public
|
Public
|
||||||
Destructor Destroy; override;
|
Destructor Destroy; override;
|
||||||
Property target: Integer Read FTarget Write FTarget;
|
Property Target: Integer Read FTarget Write FTarget;
|
||||||
Property TheLabel : TJSLabel Read FLabel Write Flabel;
|
Property TheLabel : TJSLabel Read FLabel Write Flabel;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSTryStatement }
|
{ TJSTryStatement - e.g. 'try Block catch(Ident) BCatch finally BFinally' }
|
||||||
|
|
||||||
TJSTryStatement = Class(TJSElement)
|
TJSTryStatement = Class(TJSElement)
|
||||||
private
|
private
|
||||||
@ -864,9 +906,9 @@ Type
|
|||||||
TJSTryFinallyStatement = Class(TJSTryStatement);
|
TJSTryFinallyStatement = Class(TJSTryStatement);
|
||||||
|
|
||||||
|
|
||||||
{ TJSFunction }
|
{ TJSFunctionDeclarationStatement - as TJSFuncDef, except as a statement }
|
||||||
|
|
||||||
TJSFunctionDeclarationStatement = Class(TJSelement)
|
TJSFunctionDeclarationStatement = Class(TJSElement)
|
||||||
private
|
private
|
||||||
FFuncDef: TJSFuncDef;
|
FFuncDef: TJSFuncDef;
|
||||||
Public
|
Public
|
||||||
@ -874,16 +916,16 @@ Type
|
|||||||
Property AFunction : TJSFuncDef Read FFuncDef Write FFuncDef;
|
Property AFunction : TJSFuncDef Read FFuncDef Write FFuncDef;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSFunctionBody }
|
{ TJSFunctionBody - the statement block of a function }
|
||||||
|
|
||||||
TJSFunctionBody = Class(TJSUnary)
|
TJSFunctionBody = Class(TJSUnary)
|
||||||
private
|
private
|
||||||
FisProgram: Boolean;
|
FIsProgram: Boolean;
|
||||||
Public
|
Public
|
||||||
Property isProgram : Boolean Read FisProgram Write FIsProgram;
|
Property isProgram : Boolean Read FIsProgram Write FIsProgram;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSElementNode }
|
{ TJSElementNode - element of TJSElementNodes }
|
||||||
|
|
||||||
TJSElementNode = Class(TCollectionItem)
|
TJSElementNode = Class(TCollectionItem)
|
||||||
private
|
private
|
||||||
@ -893,7 +935,7 @@ Type
|
|||||||
Property Node : TJSElement Read FNode Write FNode;
|
Property Node : TJSElement Read FNode Write FNode;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSElementNodes }
|
{ TJSElementNodes - }
|
||||||
|
|
||||||
TJSElementNodes = Class(TCollection)
|
TJSElementNodes = Class(TCollection)
|
||||||
private
|
private
|
||||||
@ -904,6 +946,7 @@ Type
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSSourceElements }
|
{ TJSSourceElements }
|
||||||
|
|
||||||
TJSSourceElements = Class(TJSElement)
|
TJSSourceElements = Class(TJSElement)
|
||||||
private
|
private
|
||||||
FFunctions: TJSElementNodes;
|
FFunctions: TJSElementNodes;
|
||||||
@ -913,11 +956,10 @@ Type
|
|||||||
Constructor Create(ALine,ARow : Integer; const ASource : String = ''); override;
|
Constructor Create(ALine,ARow : Integer; const ASource : String = ''); override;
|
||||||
Destructor Destroy; override;
|
Destructor Destroy; override;
|
||||||
Property Statements : TJSElementNodes Read FStatements;
|
Property Statements : TJSElementNodes Read FStatements;
|
||||||
Property functions : TJSElementNodes Read FFunctions;
|
Property Functions : TJSElementNodes Read FFunctions;
|
||||||
Property Vars : TJSElementNodes Read FVars;
|
Property Vars : TJSElementNodes Read FVars;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
{$IFDEF NOCLASSES}
|
{$IFDEF NOCLASSES}
|
||||||
@ -1444,7 +1486,7 @@ end;
|
|||||||
|
|
||||||
{ TJSElement }
|
{ TJSElement }
|
||||||
|
|
||||||
constructor TJSElement.Create(ALine, ARow: Integer; Const ASource: String = '');
|
constructor TJSElement.Create(ALine, ARow: Integer; const ASource: String);
|
||||||
begin
|
begin
|
||||||
FLine:=ALine;
|
FLine:=ALine;
|
||||||
FRow:=ARow;
|
FRow:=ARow;
|
||||||
@ -1809,7 +1851,6 @@ begin
|
|||||||
Result:=TJSElementNode(Items[Aindex])
|
Result:=TJSElementNode(Items[Aindex])
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function TJSElementNodes.AddNode: TJSElementNode;
|
function TJSElementNodes.AddNode: TJSElementNode;
|
||||||
begin
|
begin
|
||||||
Result:=TJSElementNode(Add);
|
Result:=TJSElementNode(Add);
|
||||||
|
@ -622,13 +622,10 @@ end;
|
|||||||
|
|
||||||
Procedure TJSWriter.WriteMemberExpression(el : TJSMemberExpression);
|
Procedure TJSWriter.WriteMemberExpression(el : TJSMemberExpression);
|
||||||
|
|
||||||
Var
|
|
||||||
I : integer;
|
|
||||||
A : TJSArguments;
|
|
||||||
begin
|
begin
|
||||||
if el is TJSNewMemberExpression then
|
if el is TJSNewMemberExpression then
|
||||||
Write('new ');
|
Write('new ');
|
||||||
WriteJS(el.mexpr);
|
WriteJS(el.MExpr);
|
||||||
if el is TJSDotMemberExpression then
|
if el is TJSDotMemberExpression then
|
||||||
begin
|
begin
|
||||||
write('.');
|
write('.');
|
||||||
@ -651,9 +648,6 @@ end;
|
|||||||
|
|
||||||
Procedure TJSWriter.WriteCallExpression(El : TJSCallExpression);
|
Procedure TJSWriter.WriteCallExpression(El : TJSCallExpression);
|
||||||
|
|
||||||
Var
|
|
||||||
I : integer;
|
|
||||||
A : TJSArguments;
|
|
||||||
begin
|
begin
|
||||||
WriteJS(El.Expr);
|
WriteJS(El.Expr);
|
||||||
if Assigned(El.Args) then
|
if Assigned(El.Args) then
|
||||||
@ -743,21 +737,19 @@ Procedure TJSWriter.WriteBinary(El : TJSBinary);
|
|||||||
|
|
||||||
Var
|
Var
|
||||||
S : AnsiString;
|
S : AnsiString;
|
||||||
B : Boolean;
|
AllowCompact : Boolean;
|
||||||
T : TJSToken;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Write('(');
|
Write('(');
|
||||||
WriteJS(EL.A);
|
WriteJS(EL.A);
|
||||||
B:=False;
|
AllowCompact:=False;
|
||||||
if (el is TJSBinaryExpression) then
|
if (el is TJSBinaryExpression) then
|
||||||
begin
|
begin
|
||||||
S:=TJSBinaryExpression(El).OperatorString;
|
S:=TJSBinaryExpression(El).OperatorString;
|
||||||
B:=TJSBinaryExpression(El).AllowCompact;
|
AllowCompact:=TJSBinaryExpression(El).AllowCompact;
|
||||||
end;
|
end;
|
||||||
If Not (B and (woCompact in Options)) then
|
If Not (AllowCompact and (woCompact in Options)) then
|
||||||
S:=' '+S+' ';
|
S:=' '+S+' ';
|
||||||
Write(s);
|
Write(S);
|
||||||
WriteJS(EL.B);
|
WriteJS(EL.B);
|
||||||
Write(')');
|
Write(')');
|
||||||
end;
|
end;
|
||||||
@ -778,7 +770,6 @@ Procedure TJSWriter.WriteAssignStatement(El : TJSAssignStatement);
|
|||||||
|
|
||||||
Var
|
Var
|
||||||
S : AnsiString;
|
S : AnsiString;
|
||||||
T : TJSToken;
|
|
||||||
begin
|
begin
|
||||||
WriteJS(EL.LHS);
|
WriteJS(EL.LHS);
|
||||||
S:=El.OperatorString;
|
S:=El.OperatorString;
|
||||||
@ -823,7 +814,7 @@ begin
|
|||||||
if Assigned(El.List) then
|
if Assigned(El.List) then
|
||||||
WriteJS(El.List);
|
WriteJS(El.List);
|
||||||
Write(') ');
|
Write(') ');
|
||||||
if Assigned(El.body) then
|
if Assigned(El.Body) then
|
||||||
WriteJS(El.Body);
|
WriteJS(El.Body);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -840,7 +831,7 @@ begin
|
|||||||
if Assigned(El.Incr) then
|
if Assigned(El.Incr) then
|
||||||
WriteJS(El.Incr);
|
WriteJS(El.Incr);
|
||||||
Write(') ');
|
Write(') ');
|
||||||
if Assigned(El.body) then
|
if Assigned(El.Body) then
|
||||||
WriteJS(El.Body);
|
WriteJS(El.Body);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -851,7 +842,7 @@ begin
|
|||||||
if El is TJSDoWhileStatement then
|
if El is TJSDoWhileStatement then
|
||||||
begin
|
begin
|
||||||
Write('do ');
|
Write('do ');
|
||||||
if Assigned(El.body) then
|
if Assigned(El.Body) then
|
||||||
WriteJS(El.Body);
|
WriteJS(El.Body);
|
||||||
Write(' while (');
|
Write(' while (');
|
||||||
If Assigned(El.Cond) then
|
If Assigned(El.Cond) then
|
||||||
@ -864,7 +855,7 @@ begin
|
|||||||
If Assigned(El.Cond) then
|
If Assigned(El.Cond) then
|
||||||
WriteJS(EL.Cond);
|
WriteJS(EL.Cond);
|
||||||
Write(') ');
|
Write(') ');
|
||||||
if Assigned(El.body) then
|
if Assigned(El.Body) then
|
||||||
WriteJS(El.Body);
|
WriteJS(El.Body);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
@ -4,7 +4,7 @@ program testjs;
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
cwstring,Classes, consoletestrunner, tcscanner, jsparser, jsscanner, jstree, jsbase,
|
cwstring,Classes, consoletestrunner, tcscanner, jsparser, jsscanner, jstree, jsbase,
|
||||||
tcparser, jswriter, tctextwriter, tcwriter, jstoken;
|
tcparser, jswriter, tcwriter, jstoken;
|
||||||
|
|
||||||
var
|
var
|
||||||
Application: TTestRunner;
|
Application: TTestRunner;
|
||||||
|
Loading…
Reference in New Issue
Block a user