pastojs: fixed str(currency)

git-svn-id: trunk@40302 -
This commit is contained in:
Mattias Gaertner 2018-11-13 14:03:32 +00:00
parent 04debba9de
commit a67f016603
2 changed files with 18 additions and 8 deletions

View File

@ -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

View File

@ -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;