mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 04:09:11 +02:00
fcl-passrc, pastojs: fixed crash on evaluating ord(int), #39260
This commit is contained in:
parent
29adfc18ff
commit
7ec6d9e3c1
@ -19450,6 +19450,7 @@ begin
|
|||||||
try
|
try
|
||||||
Evaluated:=fExprEvaluator.OrdValue(Value,Params);
|
Evaluated:=fExprEvaluator.OrdValue(Value,Params);
|
||||||
finally
|
finally
|
||||||
|
if Evaluated<>Value then
|
||||||
ReleaseEvalValue(Value);
|
ReleaseEvalValue(Value);
|
||||||
end;
|
end;
|
||||||
if Proc=nil then ;
|
if Proc=nil then ;
|
||||||
|
@ -198,6 +198,7 @@ begin
|
|||||||
Inc(FErrorCount);
|
Inc(FErrorCount);
|
||||||
if aContext.Error is EParserError then
|
if aContext.Error is EParserError then
|
||||||
FLastErrorNumber:=EParserError(aContext.Error).ErrNo;
|
FLastErrorNumber:=EParserError(aContext.Error).ErrNo;
|
||||||
|
if Allow then ;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTestParser.SetupParser;
|
procedure TTestParser.SetupParser;
|
||||||
|
@ -637,8 +637,6 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTestConstParser.TestConstErrorRecovery;
|
procedure TTestConstParser.TestConstErrorRecovery;
|
||||||
Var
|
|
||||||
D : String;
|
|
||||||
begin
|
begin
|
||||||
Add('Const');
|
Add('Const');
|
||||||
Add(' A : 1;');
|
Add(' A : 1;');
|
||||||
|
@ -13640,17 +13640,17 @@ function TPasToJSConverter.ConvertBuiltIn_Ord(El: TParamsExpr;
|
|||||||
Result:=nil;
|
Result:=nil;
|
||||||
OrdValue:=nil;
|
OrdValue:=nil;
|
||||||
ParamValue:=aResolver.Eval(Param,[]);
|
ParamValue:=aResolver.Eval(Param,[]);
|
||||||
|
if ParamValue=nil then exit;
|
||||||
try
|
try
|
||||||
if ParamValue<>nil then
|
|
||||||
begin
|
|
||||||
OrdValue:=aResolver.ExprEvaluator.OrdValue(ParamValue,El);
|
OrdValue:=aResolver.ExprEvaluator.OrdValue(ParamValue,El);
|
||||||
|
if OrdValue=ParamValue then
|
||||||
|
ParamValue:=nil;
|
||||||
if OrdValue<>nil then
|
if OrdValue<>nil then
|
||||||
begin
|
begin
|
||||||
// ord(constant) -> constant
|
// ord(constant) -> constant
|
||||||
Result:=ConvertConstValue(OrdValue,AContext,El);
|
Result:=ConvertConstValue(OrdValue,AContext,El);
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
end;
|
|
||||||
finally
|
finally
|
||||||
ReleaseEvalValue(ParamValue);
|
ReleaseEvalValue(ParamValue);
|
||||||
ReleaseEvalValue(OrdValue);
|
ReleaseEvalValue(OrdValue);
|
||||||
|
@ -7191,6 +7191,7 @@ begin
|
|||||||
' Enum: byte;',
|
' Enum: byte;',
|
||||||
' Enums: tenums;',
|
' Enums: tenums;',
|
||||||
'begin',
|
'begin',
|
||||||
|
' Enum:=ord(1);',
|
||||||
' Enums:=[];',
|
' Enums:=[];',
|
||||||
' Enums:=[0];',
|
' Enums:=[0];',
|
||||||
' Enums:=[1..2];',
|
' Enums:=[1..2];',
|
||||||
@ -7206,6 +7207,7 @@ begin
|
|||||||
'this.Enums = {};',
|
'this.Enums = {};',
|
||||||
'']),
|
'']),
|
||||||
LinesToStr([
|
LinesToStr([
|
||||||
|
'$mod.Enum = 1;',
|
||||||
'$mod.Enums = {};',
|
'$mod.Enums = {};',
|
||||||
'$mod.Enums = rtl.createSet(0);',
|
'$mod.Enums = rtl.createSet(0);',
|
||||||
'$mod.Enums = rtl.createSet(null, 1, 2);',
|
'$mod.Enums = rtl.createSet(null, 1, 2);',
|
||||||
|
Loading…
Reference in New Issue
Block a user