mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-09 01:26:42 +02:00
pastojs: fixed for e in set do
git-svn-id: trunk@40140 -
This commit is contained in:
parent
db4f11201a
commit
cc44f64920
@ -1563,6 +1563,7 @@ type
|
||||
Function CreateArgumentAccess(Arg: TPasArgument; AContext: TConvertContext;
|
||||
PosEl: TPasElement): TJSElement; virtual;
|
||||
Function CreateUnary(Members: array of string; E: TJSElement): TJSUnary;
|
||||
Function CreateUnaryPlus(Expr: TJSElement; El: TPasElement): TJSUnaryPlusExpression;
|
||||
Function CreateMemberExpression(Members: array of string): TJSDotMemberExpression;
|
||||
Function CreateCallExpression(El: TPasElement): TJSCallExpression;
|
||||
Function CreateCallCharCodeAt(Arg: TJSElement; aNumber: integer; El: TPasElement): TJSCallExpression; virtual;
|
||||
@ -4270,7 +4271,7 @@ var
|
||||
begin
|
||||
Result:='';
|
||||
{$IFDEF VerbosePas2JS}
|
||||
writeln('TPasToJSConverter.ExtractPasStringLiteral S="',S,'" ',RawStrToCaption(S,100),' ',length(S));
|
||||
writeln('TPasToJSConverter.ExtractPasStringLiteral S="',S,'" ',{$IFDEF pas2js}copy(s,100){$ELSE}RawStrToCaption(S,100){$ENDIF},' ',length(S));
|
||||
{$ENDIF}
|
||||
if S='' then
|
||||
RaiseInternalError(20170207154543);
|
||||
@ -5519,7 +5520,7 @@ begin
|
||||
eopAdd:
|
||||
begin
|
||||
E:=ConvertElement(El.Operand,AContext);
|
||||
U:=TJSUnaryPlusExpression(CreateElement(TJSUnaryPlusExpression,El));
|
||||
U:=CreateUnaryPlus(E,El);
|
||||
U.A:=E;
|
||||
end;
|
||||
eopSubtract:
|
||||
@ -7464,7 +7465,6 @@ var
|
||||
Param: TPasExpr;
|
||||
JSAdd: TJSAdditiveExpression;
|
||||
LowRg: TResEvalValue;
|
||||
JSUnaryPlus: TJSUnaryPlusExpression;
|
||||
IsRangeCheck, ok, NeedRangeCheck: Boolean;
|
||||
CallEx: TJSCallExpression;
|
||||
AssignContext: TAssignContext;
|
||||
@ -7525,9 +7525,7 @@ var
|
||||
else
|
||||
begin
|
||||
// -> convert bool to int with unary plus: +bool
|
||||
JSUnaryPlus:=TJSUnaryPlusExpression(CreateElement(TJSUnaryPlusExpression,Param));
|
||||
JSUnaryPlus.A:=Arg;
|
||||
Arg:=JSUnaryPlus;
|
||||
Arg:=CreateUnaryPlus(Arg,Param);
|
||||
end;
|
||||
end
|
||||
else
|
||||
@ -15770,7 +15768,6 @@ var
|
||||
function ConvExpr(Expr: TPasExpr): TJSElement; overload;
|
||||
var
|
||||
ResolvedEl: TPasResolverResult;
|
||||
JSUnaryPlus: TJSUnaryPlusExpression;
|
||||
begin
|
||||
Result:=ConvertElement(Expr,AContext);
|
||||
if Result is TJSLiteral then
|
||||
@ -15803,9 +15800,7 @@ var
|
||||
or ((ResolvedEl.BaseType=btRange) and (ResolvedEl.SubType in btAllJSBooleans)) then
|
||||
begin
|
||||
// convert bool variable to int: +expr
|
||||
JSUnaryPlus:=TJSUnaryPlusExpression(CreateElement(TJSUnaryPlusExpression,Expr));
|
||||
JSUnaryPlus.A:=Result;
|
||||
Result:=JSUnaryPlus;
|
||||
Result:=CreateUnaryPlus(Result,Expr);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -16040,7 +16035,7 @@ var
|
||||
else
|
||||
InKind:=ikSetInt;
|
||||
HasInVar:=false;
|
||||
HasLoopVar:=InKind<>ikSetInt;
|
||||
HasLoopVar:=true;
|
||||
HasEndVar:=false;
|
||||
exit;
|
||||
end
|
||||
@ -16324,7 +16319,10 @@ begin
|
||||
begin
|
||||
if InKind<>ikNone then
|
||||
case InKind of
|
||||
ikEnum,ikSetInt: ;
|
||||
ikEnum,ikSetInt:
|
||||
if ForSt.ClassType=TJSForInStatement then
|
||||
// $in=+$l
|
||||
SimpleAss.Expr:=CreateUnaryPlus(SimpleAss.Expr,PosEl);
|
||||
ikBool,ikSetBool:
|
||||
// $in!==0;
|
||||
SimpleAss.Expr:=CreateStrictNotEqual0(SimpleAss.Expr,PosEl);
|
||||
@ -16749,6 +16747,13 @@ begin
|
||||
Result := unary;
|
||||
end;
|
||||
|
||||
function TPasToJSConverter.CreateUnaryPlus(Expr: TJSElement; El: TPasElement
|
||||
): TJSUnaryPlusExpression;
|
||||
begin
|
||||
Result:=TJSUnaryPlusExpression(CreateElement(TJSUnaryPlusExpression,El));
|
||||
Result.A:=Expr;
|
||||
end;
|
||||
|
||||
function TPasToJSConverter.CreateMemberExpression(Members: array of string): TJSDotMemberExpression;
|
||||
var
|
||||
pex: TJSPrimaryExpressionIdent;
|
||||
|
@ -5021,7 +5021,7 @@ begin
|
||||
' for er in TSetOfEnumRg do ;',
|
||||
'']);
|
||||
ConvertProgram;
|
||||
CheckSource('TestEnumName',
|
||||
CheckSource('TestSet_ForIn',
|
||||
LinesToStr([ // statements
|
||||
'this.TEnum = {',
|
||||
' "0":"Red",',
|
||||
@ -5042,7 +5042,10 @@ begin
|
||||
'for ($mod.e = 0; $mod.e <= 1; $mod.e++) $mod.e2 = $mod.e;',
|
||||
'for ($mod.e = 1; $mod.e <= 2; $mod.e++) $mod.e2 = $mod.e;',
|
||||
'for ($mod.e in rtl.createSet($mod.TEnum.Red, $mod.TEnum.Blue)) $mod.e2 = $mod.e;',
|
||||
'for ($mod.e in $mod.s) $mod.e2 = $mod.e;',
|
||||
'for (var $l1 in $mod.s){',
|
||||
' $mod.e = +$l1;',
|
||||
' $mod.e2 = $mod.e;',
|
||||
'};',
|
||||
'for ($mod.er = 1; $mod.er <= 2; $mod.er++) ;',
|
||||
'']));
|
||||
end;
|
||||
@ -5757,12 +5760,15 @@ begin
|
||||
'for (var $l8 = 11; $l8 <= 13; $l8++) $mod.i = $l8;',
|
||||
'for (var $l9 = 0; $l9 <= 255; $l9++) $mod.i = $l9;',
|
||||
'for (var $l10 = 3; $l10 <= 7; $l10++) $mod.i = $l10;',
|
||||
'for ($mod.i in $mod.soi) $mod.i2 = $mod.i;',
|
||||
'for (var $l11 = 3; $l11 <= 7; $l11++) $mod.i = $l11;',
|
||||
'for ($mod.i in $mod.soir) ;',
|
||||
'for (var $l12 = 3; $l12 <= 7; $l12++) $mod.ir = $l12;',
|
||||
'for (var $l13 = 3; $l13 <= 7; $l13++) $mod.ir = $l13;',
|
||||
'for ($mod.ir in $mod.soir) ;',
|
||||
'for (var $l11 in $mod.soi) {',
|
||||
' $mod.i = +$l11;',
|
||||
' $mod.i2 = $mod.i;',
|
||||
'};',
|
||||
'for (var $l12 = 3; $l12 <= 7; $l12++) $mod.i = $l12;',
|
||||
'for (var $l13 in $mod.soir) $mod.i = +$l13;',
|
||||
'for (var $l14 = 3; $l14 <= 7; $l14++) $mod.ir = $l14;',
|
||||
'for (var $l15 = 3; $l15 <= 7; $l15++) $mod.ir = $l15;',
|
||||
'for (var $l16 in $mod.soir) $mod.ir = +$l16;',
|
||||
'']));
|
||||
end;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user