mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 12:09:30 +02:00
pastojs: fixed str(currency)
git-svn-id: trunk@40302 -
This commit is contained in:
parent
04debba9de
commit
a67f016603
@ -10282,14 +10282,11 @@ end;
|
|||||||
function TPasToJSConverter.ConvertBuiltInStrParam(El: TPasExpr;
|
function TPasToJSConverter.ConvertBuiltInStrParam(El: TPasExpr;
|
||||||
AContext: TConvertContext; IsStrFunc, IsFirst: boolean): TJSElement;
|
AContext: TConvertContext; IsStrFunc, IsFirst: boolean): TJSElement;
|
||||||
var
|
var
|
||||||
ResolvedEl: TPasResolverResult;
|
|
||||||
NeedStrLit: Boolean;
|
|
||||||
Add: TJSElement;
|
Add: TJSElement;
|
||||||
Call: TJSCallExpression;
|
|
||||||
PlusEl: TJSAdditiveExpressionPlus;
|
|
||||||
Bracket: TJSBracketMemberExpression;
|
|
||||||
|
|
||||||
procedure PrependStrLit;
|
procedure PrependStrLit;
|
||||||
|
var
|
||||||
|
PlusEl: TJSAdditiveExpressionPlus;
|
||||||
begin
|
begin
|
||||||
PlusEl:=TJSAdditiveExpressionPlus(CreateElement(TJSAdditiveExpressionPlus,El));
|
PlusEl:=TJSAdditiveExpressionPlus(CreateElement(TJSAdditiveExpressionPlus,El));
|
||||||
PlusEl.A:=CreateLiteralString(El,'');
|
PlusEl.A:=CreateLiteralString(El,'');
|
||||||
@ -10297,6 +10294,12 @@ var
|
|||||||
Add:=PlusEl;
|
Add:=PlusEl;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
ResolvedEl: TPasResolverResult;
|
||||||
|
NeedStrLit: Boolean;
|
||||||
|
Call: TJSCallExpression;
|
||||||
|
Bracket: TJSBracketMemberExpression;
|
||||||
|
Arg: TJSElement;
|
||||||
begin
|
begin
|
||||||
Result:=nil;
|
Result:=nil;
|
||||||
AContext.Resolver.ComputeElement(El,ResolvedEl,[]);
|
AContext.Resolver.ComputeElement(El,ResolvedEl,[]);
|
||||||
@ -10305,17 +10308,20 @@ begin
|
|||||||
Bracket:=nil;
|
Bracket:=nil;
|
||||||
try
|
try
|
||||||
NeedStrLit:=false;
|
NeedStrLit:=false;
|
||||||
if ResolvedEl.BaseType in (btAllJSBooleans+btAllJSInteger) then
|
if ResolvedEl.BaseType in (btAllJSBooleans+btAllJSInteger-[btCurrency]) then
|
||||||
begin
|
begin
|
||||||
NeedStrLit:=true;
|
NeedStrLit:=true;
|
||||||
Add:=ConvertElement(El,AContext);
|
Add:=ConvertElement(El,AContext);
|
||||||
end
|
end
|
||||||
else if ResolvedEl.BaseType in btAllJSFloats then
|
else if ResolvedEl.BaseType in (btAllJSFloats+[btCurrency]) then
|
||||||
begin
|
begin
|
||||||
// convert to rtl.floatToStr(El,width,precision)
|
// convert to rtl.floatToStr(El,width,precision)
|
||||||
Call:=CreateCallExpression(El);
|
Call:=CreateCallExpression(El);
|
||||||
Call.Expr:=CreateMemberExpression([FBuiltInNames[pbivnRTL],FBuiltInNames[pbifnFloatToStr]]);
|
Call.Expr:=CreateMemberExpression([FBuiltInNames[pbivnRTL],FBuiltInNames[pbifnFloatToStr]]);
|
||||||
Call.AddArg(ConvertElement(El,AContext));
|
Arg:=ConvertElement(El,AContext);
|
||||||
|
if ResolvedEl.BaseType=btCurrency then
|
||||||
|
Arg:=CreateDivideNumber(El,Arg,10000);
|
||||||
|
Call.AddArg(Arg);
|
||||||
if El.format1<>nil then
|
if El.format1<>nil then
|
||||||
Call.AddArg(ConvertElement(El.format1,AContext));
|
Call.AddArg(ConvertElement(El.format1,AContext));
|
||||||
if El.format2<>nil then
|
if El.format2<>nil then
|
||||||
|
@ -5617,6 +5617,8 @@ begin
|
|||||||
' j:=c;',
|
' j:=c;',
|
||||||
' Write(c);',
|
' Write(c);',
|
||||||
' c:=default(currency);',
|
' c:=default(currency);',
|
||||||
|
' j:=str(c);',
|
||||||
|
' j:=str(c:0:3);',
|
||||||
'']);
|
'']);
|
||||||
ConvertProgram;
|
ConvertProgram;
|
||||||
CheckSource('TestCurrency',
|
CheckSource('TestCurrency',
|
||||||
@ -5684,6 +5686,8 @@ begin
|
|||||||
'$mod.j = $mod.c / 10000;',
|
'$mod.j = $mod.c / 10000;',
|
||||||
'$mod.Write($mod.c / 10000);',
|
'$mod.Write($mod.c / 10000);',
|
||||||
'$mod.c = 0;',
|
'$mod.c = 0;',
|
||||||
|
'$mod.j = rtl.floatToStr($mod.c / 10000);',
|
||||||
|
'$mod.j = rtl.floatToStr($mod.c / 10000, 0, 3);',
|
||||||
'']));
|
'']));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user