mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 17:09:09 +02:00
pastojs: fixed assert to raise on false, bug #34643
git-svn-id: trunk@40479 -
This commit is contained in:
parent
148cc6e157
commit
29e0fef792
@ -290,8 +290,8 @@ Works:
|
|||||||
- for key in JSObject do
|
- for key in JSObject do
|
||||||
- for value in JSArray do
|
- for value in JSArray do
|
||||||
- Assert(bool[,string])
|
- Assert(bool[,string])
|
||||||
- without sysutils: if(bool) throw string
|
- without sysutils: if(!bool) throw string
|
||||||
- with sysutils: if(bool) throw pas.sysutils.EAssertionFailed.$create("Create",[string])
|
- with sysutils: if(!bool) throw pas.sysutils.EAssertionFailed.$create("Create",[string])
|
||||||
- Object checks:
|
- Object checks:
|
||||||
- Method call EInvalidCast, rtl.checkMethodCall
|
- Method call EInvalidCast, rtl.checkMethodCall
|
||||||
- type cast to class-type and class-of-type, rtl.asExt, EInvalidCast
|
- type cast to class-type and class-of-type, rtl.asExt, EInvalidCast
|
||||||
@ -1617,6 +1617,7 @@ type
|
|||||||
Function CreateLiteralUndefined(El: TPasElement): TJSLiteral; virtual;
|
Function CreateLiteralUndefined(El: TPasElement): TJSLiteral; virtual;
|
||||||
Function CreateLiteralCustomValue(El: TPasElement; const s: TJSString): TJSLiteral; virtual;
|
Function CreateLiteralCustomValue(El: TPasElement; const s: TJSString): TJSLiteral; virtual;
|
||||||
Function CreateSetLiteralElement(Expr: TPasExpr; AContext: TConvertContext): TJSElement; virtual;
|
Function CreateSetLiteralElement(Expr: TPasExpr; AContext: TConvertContext): TJSElement; virtual;
|
||||||
|
Function CreateUnaryNot(El: TJSElement; Src: TPasElement): TJSUnaryNotExpression; virtual;
|
||||||
Procedure ConvertCharLiteralToInt(Lit: TJSLiteral; ErrorEl: TPasElement; AContext: TConvertContext); virtual;
|
Procedure ConvertCharLiteralToInt(Lit: TJSLiteral; ErrorEl: TPasElement; AContext: TConvertContext); virtual;
|
||||||
Function ClonePrimaryExpression(El: TJSPrimaryExpression; Src: TPasElement): TJSPrimaryExpression;
|
Function ClonePrimaryExpression(El: TJSPrimaryExpression; Src: TPasElement): TJSPrimaryExpression;
|
||||||
// simple JS expressions
|
// simple JS expressions
|
||||||
@ -5822,10 +5823,12 @@ begin
|
|||||||
BitwiseNot:=ResolvedOp.BaseType in btAllJSInteger;
|
BitwiseNot:=ResolvedOp.BaseType in btAllJSInteger;
|
||||||
end;
|
end;
|
||||||
if BitwiseNot then
|
if BitwiseNot then
|
||||||
U:=TJSUnaryInvExpression(CreateElement(TJSUnaryInvExpression,El))
|
begin
|
||||||
|
U:=TJSUnaryInvExpression(CreateElement(TJSUnaryInvExpression,El));
|
||||||
|
U.A:=E;
|
||||||
|
end
|
||||||
else
|
else
|
||||||
U:=TJSUnaryNotExpression(CreateElement(TJSUnaryNotExpression,El));
|
U:=CreateUnaryNot(E,El);
|
||||||
U.A:=E;
|
|
||||||
end;
|
end;
|
||||||
eopAddress:
|
eopAddress:
|
||||||
begin
|
begin
|
||||||
@ -6294,7 +6297,6 @@ function TPasToJSConverter.ConvertBinaryExpressionRes(El: TBinaryExpr;
|
|||||||
function CreateEqualCallback: TJSElement;
|
function CreateEqualCallback: TJSElement;
|
||||||
var
|
var
|
||||||
Call: TJSCallExpression;
|
Call: TJSCallExpression;
|
||||||
NotEl: TJSUnaryNotExpression;
|
|
||||||
begin
|
begin
|
||||||
// convert "proctypeA = proctypeB" to "rtl.eqCallback(proctypeA,proctypeB)"
|
// convert "proctypeA = proctypeB" to "rtl.eqCallback(proctypeA,proctypeB)"
|
||||||
Call:=CreateCallExpression(El);
|
Call:=CreateCallExpression(El);
|
||||||
@ -6306,9 +6308,7 @@ function TPasToJSConverter.ConvertBinaryExpressionRes(El: TBinaryExpr;
|
|||||||
if El.OpCode=eopNotEqual then
|
if El.OpCode=eopNotEqual then
|
||||||
begin
|
begin
|
||||||
// convert "proctypeA <> proctypeB" to "!rtl.eqCallback(proctypeA,proctypeB)"
|
// convert "proctypeA <> proctypeB" to "!rtl.eqCallback(proctypeA,proctypeB)"
|
||||||
NotEl:=TJSUnaryNotExpression(CreateElement(TJSUnaryNotExpression,El));
|
Result:=CreateUnaryNot(Call,El);
|
||||||
NotEl.A:=Call;
|
|
||||||
Result:=NotEl;
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
Result:=Call;
|
Result:=Call;
|
||||||
@ -6329,7 +6329,6 @@ var
|
|||||||
FunName: String;
|
FunName: String;
|
||||||
Call: TJSCallExpression;
|
Call: TJSCallExpression;
|
||||||
DotExpr: TJSDotMemberExpression;
|
DotExpr: TJSDotMemberExpression;
|
||||||
NotEl: TJSUnaryNotExpression;
|
|
||||||
InOp: TJSRelationalExpressionIn;
|
InOp: TJSRelationalExpressionIn;
|
||||||
TypeEl, LeftTypeEl, RightTypeEl: TPasType;
|
TypeEl, LeftTypeEl, RightTypeEl: TPasType;
|
||||||
SNE: TJSEqualityExpressionSNE;
|
SNE: TJSEqualityExpressionSNE;
|
||||||
@ -6652,11 +6651,7 @@ begin
|
|||||||
Call.AddArg(A);
|
Call.AddArg(A);
|
||||||
A:=nil;
|
A:=nil;
|
||||||
if El.OpCode=eopNotEqual then
|
if El.OpCode=eopNotEqual then
|
||||||
begin
|
Result:=CreateUnaryNot(Call,El)
|
||||||
NotEl:=TJSUnaryNotExpression(CreateElement(TJSUnaryNotExpression,El));
|
|
||||||
NotEl.A:=Call;
|
|
||||||
Result:=NotEl;
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result:=Call;
|
Result:=Call;
|
||||||
exit;
|
exit;
|
||||||
@ -6692,9 +6687,7 @@ begin
|
|||||||
if El.OpCode=eopNotEqual then
|
if El.OpCode=eopNotEqual then
|
||||||
begin
|
begin
|
||||||
// convert "recordA <> recordB" to "!recordA.$equal(recordB)"
|
// convert "recordA <> recordB" to "!recordA.$equal(recordB)"
|
||||||
NotEl:=TJSUnaryNotExpression(CreateElement(TJSUnaryNotExpression,El));
|
Result:=CreateUnaryNot(Call,El);
|
||||||
NotEl.A:=Call;
|
|
||||||
Result:=NotEl;
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
Result:=Call;
|
Result:=Call;
|
||||||
@ -6715,11 +6708,7 @@ begin
|
|||||||
Call.AddArg(B);
|
Call.AddArg(B);
|
||||||
B:=nil;
|
B:=nil;
|
||||||
if El.OpCode=eopNotEqual then
|
if El.OpCode=eopNotEqual then
|
||||||
begin
|
Result:=CreateUnaryNot(Call,El)
|
||||||
NotEl:=TJSUnaryNotExpression(CreateElement(TJSUnaryNotExpression,El));
|
|
||||||
NotEl.A:=Call;
|
|
||||||
Result:=NotEl;
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result:=Call;
|
Result:=Call;
|
||||||
exit;
|
exit;
|
||||||
@ -6739,11 +6728,7 @@ begin
|
|||||||
Call.AddArg(B);
|
Call.AddArg(B);
|
||||||
B:=nil;
|
B:=nil;
|
||||||
if El.OpCode=eopNotEqual then
|
if El.OpCode=eopNotEqual then
|
||||||
begin
|
Result:=CreateUnaryNot(Call,El)
|
||||||
NotEl:=TJSUnaryNotExpression(CreateElement(TJSUnaryNotExpression,El));
|
|
||||||
NotEl.A:=Call;
|
|
||||||
Result:=NotEl;
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result:=Call;
|
Result:=Call;
|
||||||
exit;
|
exit;
|
||||||
@ -6778,11 +6763,7 @@ begin
|
|||||||
Call.AddArg(A);
|
Call.AddArg(A);
|
||||||
A:=nil;
|
A:=nil;
|
||||||
if El.OpCode=eopNotEqual then
|
if El.OpCode=eopNotEqual then
|
||||||
begin
|
Result:=CreateUnaryNot(Call,El)
|
||||||
NotEl:=TJSUnaryNotExpression(CreateElement(TJSUnaryNotExpression,El));
|
|
||||||
NotEl.A:=Call;
|
|
||||||
Result:=NotEl;
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result:=Call;
|
Result:=Call;
|
||||||
exit;
|
exit;
|
||||||
@ -10702,7 +10683,8 @@ begin
|
|||||||
IfSt:=TJSIfStatement(CreateElement(TJSIfStatement,El));
|
IfSt:=TJSIfStatement(CreateElement(TJSIfStatement,El));
|
||||||
try
|
try
|
||||||
PosEl:=El.Params[0];
|
PosEl:=El.Params[0];
|
||||||
IfSt.Cond:=ConvertExpression(El.Params[0],AContext);
|
IfSt.Cond:=CreateUnaryNot(ConvertExpression(PosEl,AContext),PosEl);
|
||||||
|
|
||||||
ThrowSt:=TJSThrowStatement(CreateElement(TJSThrowStatement,PosEl));
|
ThrowSt:=TJSThrowStatement(CreateElement(TJSThrowStatement,PosEl));
|
||||||
IfSt.BTrue:=ThrowSt;
|
IfSt.BTrue:=ThrowSt;
|
||||||
|
|
||||||
@ -11425,8 +11407,8 @@ Var
|
|||||||
IfSt:=TJSIfStatement(CreateElement(TJSIfStatement,ProcBody));
|
IfSt:=TJSIfStatement(CreateElement(TJSIfStatement,ProcBody));
|
||||||
AddFunctionFinallySt(IfSt,ProcBody,FuncContext);
|
AddFunctionFinallySt(IfSt,ProcBody,FuncContext);
|
||||||
// !$ok
|
// !$ok
|
||||||
IfSt.Cond:=TJSUnaryNotExpression(CreateElement(TJSUnaryNotExpression,ProcBody));
|
IfSt.Cond:=CreateUnaryNot(
|
||||||
TJSUnaryNotExpression(IfSt.Cond).A:=CreatePrimitiveDotExpr(FBuiltInNames[pbivnProcOk],ProcBody);
|
CreatePrimitiveDotExpr(FBuiltInNames[pbivnProcOk],ProcBody),ProcBody);
|
||||||
// rtl._Release(Result)
|
// rtl._Release(Result)
|
||||||
Call:=CreateCallExpression(ProcBody);
|
Call:=CreateCallExpression(ProcBody);
|
||||||
IfSt.BTrue:=Call;
|
IfSt.BTrue:=Call;
|
||||||
@ -16057,7 +16039,6 @@ function TPasToJSConverter.ConvertRepeatStatement(El: TPasImplRepeatUntil;
|
|||||||
// do{implblock}while(!untilcondition);
|
// do{implblock}while(!untilcondition);
|
||||||
var
|
var
|
||||||
C : TJSElement;
|
C : TJSElement;
|
||||||
N : TJSUnaryNotExpression;
|
|
||||||
W : TJSDoWhileStatement;
|
W : TJSDoWhileStatement;
|
||||||
B : TJSElement;
|
B : TJSElement;
|
||||||
begin
|
begin
|
||||||
@ -16077,11 +16058,7 @@ begin
|
|||||||
B:=nil;
|
B:=nil;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
C:=CreateUnaryNot(C,El.ConditionExpr);
|
||||||
N:=TJSUnaryNotExpression(CreateElement(TJSUnaryNotExpression,El.ConditionExpr));
|
|
||||||
N.A:=C;
|
|
||||||
C:=N;
|
|
||||||
end;
|
|
||||||
B:=ConvertImplBlockElements(El,AContext,false);
|
B:=ConvertImplBlockElements(El,AContext,false);
|
||||||
W:=TJSDoWhileStatement(CreateElement(TJSDoWhileStatement,El));
|
W:=TJSDoWhileStatement(CreateElement(TJSDoWhileStatement,El));
|
||||||
W.Cond:=C;
|
W.Cond:=C;
|
||||||
@ -17599,6 +17576,13 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TPasToJSConverter.CreateUnaryNot(El: TJSElement; Src: TPasElement
|
||||||
|
): TJSUnaryNotExpression;
|
||||||
|
begin
|
||||||
|
Result:=TJSUnaryNotExpression(CreateElement(TJSUnaryNotExpression,Src));
|
||||||
|
Result.A:=El;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TPasToJSConverter.ConvertCharLiteralToInt(Lit: TJSLiteral;
|
procedure TPasToJSConverter.ConvertCharLiteralToInt(Lit: TJSLiteral;
|
||||||
ErrorEl: TPasElement; AContext: TConvertContext);
|
ErrorEl: TPasElement; AContext: TConvertContext);
|
||||||
var
|
var
|
||||||
|
@ -22253,7 +22253,7 @@ begin
|
|||||||
'this.DoIt = function () {',
|
'this.DoIt = function () {',
|
||||||
' var b = false;',
|
' var b = false;',
|
||||||
' var s = "";',
|
' var s = "";',
|
||||||
' if (b) throw "assert failed";',
|
' if (!b) throw "assert failed";',
|
||||||
'};',
|
'};',
|
||||||
'']),
|
'']),
|
||||||
LinesToStr([ // $mod.$main
|
LinesToStr([ // $mod.$main
|
||||||
@ -22301,8 +22301,8 @@ begin
|
|||||||
'this.DoIt = function () {',
|
'this.DoIt = function () {',
|
||||||
' var b = false;',
|
' var b = false;',
|
||||||
' var s = "";',
|
' var s = "";',
|
||||||
' if (b) throw pas.SysUtils.EAssertionFailed.$create("Create");',
|
' if (!b) throw pas.SysUtils.EAssertionFailed.$create("Create");',
|
||||||
' if (b) throw pas.SysUtils.EAssertionFailed.$create("Create$1", ["msg"]);',
|
' if (!b) throw pas.SysUtils.EAssertionFailed.$create("Create$1", ["msg"]);',
|
||||||
'};',
|
'};',
|
||||||
'']),
|
'']),
|
||||||
LinesToStr([ // $mod.$main
|
LinesToStr([ // $mod.$main
|
||||||
|
Loading…
Reference in New Issue
Block a user