pastojs: convert str(float:w:p) to rtl.floatToStr(d,w,p)

git-svn-id: trunk@37301 -
This commit is contained in:
Mattias Gaertner 2017-09-22 15:04:52 +00:00
parent 58aaf2a545
commit f1055a32b9
2 changed files with 21 additions and 15 deletions

View File

@ -406,6 +406,7 @@ type
pbifnGetObject, pbifnGetObject,
pbifnIs, pbifnIs,
pbifnIsExt, pbifnIsExt,
pbifnFloatToStr,
pbifnFreeLocalVar, pbifnFreeLocalVar,
pbifnFreeVar, pbifnFreeVar,
pbifnProcType_Create, pbifnProcType_Create,
@ -506,6 +507,7 @@ const
'getObject', // rtl.getObject 'getObject', // rtl.getObject
'is', // rtl.is 'is', // rtl.is
'isExt', // rtl.isExt 'isExt', // rtl.isExt
'floatToStr', // rtl.floatToStr
'freeLoc', // rtl.freeLoc 'freeLoc', // rtl.freeLoc
'free', // rtl.free 'free', // rtl.free
'createCallback', // rtl.createCallback 'createCallback', // rtl.createCallback
@ -7010,7 +7012,7 @@ end;
function TPasToJSConverter.ConvertBuiltIn_StrProc(El: TParamsExpr; function TPasToJSConverter.ConvertBuiltIn_StrProc(El: TParamsExpr;
AContext: TConvertContext): TJSElement; AContext: TConvertContext): TJSElement;
// convert 'str(value,aString)' to 'aString = <string>' // convert 'str(value,aString)' to 'aString = <string>'
// for the conversion see ConvertBuiltInStrFunc // for the conversion see ConvertBuiltInStrParam
var var
AssignContext: TAssignContext; AssignContext: TAssignContext;
StrVar: TPasExpr; StrVar: TPasExpr;
@ -7086,6 +7088,7 @@ var
Call: TJSCallExpression; Call: TJSCallExpression;
PlusEl: TJSAdditiveExpressionPlus; PlusEl: TJSAdditiveExpressionPlus;
Bracket: TJSBracketMemberExpression; Bracket: TJSBracketMemberExpression;
procedure PrependStrLit; procedure PrependStrLit;
begin begin
PlusEl:=TJSAdditiveExpressionPlus(CreateElement(TJSAdditiveExpressionPlus,El)); PlusEl:=TJSAdditiveExpressionPlus(CreateElement(TJSAdditiveExpressionPlus,El));
@ -7109,18 +7112,17 @@ begin
end end
else if ResolvedEl.BaseType in btAllJSFloats then else if ResolvedEl.BaseType in btAllJSFloats then
begin begin
NeedStrLit:=true; // convert to rtl.floatToStr(El,width,precision)
Add:=ConvertElement(El,AContext); Call:=CreateCallExpression(El);
Call.Expr:=CreateMemberExpression([FBuiltInNames[pbivnRTL],FBuiltInNames[pbifnFloatToStr]]);
Call.AddArg(ConvertElement(El,AContext));
if El.format1<>nil then
Call.AddArg(ConvertElement(El.format1,AContext));
if El.format2<>nil then if El.format2<>nil then
begin
// precision -> rtl El.toFixed(precision);
NeedStrLit:=false;
Call:=CreateCallExpression(El);
Call.Expr:=CreateDotExpression(El,Add,CreatePrimitiveDotExpr('toFixed',El));
Call.AddArg(ConvertElement(El.format2,AContext)); Call.AddArg(ConvertElement(El.format2,AContext));
Add:=Call; Result:=Call;
Call:=nil; Call:=nil;
end; exit;
end end
else if IsStrFunc and (ResolvedEl.BaseType in btAllJSStringAndChars) then else if IsStrFunc and (ResolvedEl.BaseType in btAllJSStringAndChars) then
Add:=ConvertElement(El,AContext) Add:=ConvertElement(El,AContext)

View File

@ -4253,6 +4253,8 @@ begin
Add(' str(d,s);'); Add(' str(d,s);');
Add(' str(i:3,s);'); Add(' str(i:3,s);');
Add(' str(d:3:2,s);'); Add(' str(d:3:2,s);');
Add(' Str(12.456:12:1,s);');
Add(' Str(12.456:12,s);');
Add(' s:=str(b);'); Add(' s:=str(b);');
Add(' s:=str(i);'); Add(' s:=str(i);');
Add(' s:=str(d);'); Add(' s:=str(d);');
@ -4275,15 +4277,17 @@ begin
LinesToStr([ // this.$main LinesToStr([ // this.$main
'$mod.s = ""+$mod.b;', '$mod.s = ""+$mod.b;',
'$mod.s = ""+$mod.i;', '$mod.s = ""+$mod.i;',
'$mod.s = ""+$mod.d;', '$mod.s = rtl.floatToStr($mod.d);',
'$mod.s = rtl.spaceLeft(""+$mod.i,3);', '$mod.s = rtl.spaceLeft(""+$mod.i,3);',
'$mod.s = rtl.spaceLeft($mod.d.toFixed(2),3);', '$mod.s = rtl.floatToStr($mod.d,3,2);',
'$mod.s = rtl.floatToStr(12.456,12,1);',
'$mod.s = rtl.floatToStr(12.456,12);',
'$mod.s = ""+$mod.b;', '$mod.s = ""+$mod.b;',
'$mod.s = ""+$mod.i;', '$mod.s = ""+$mod.i;',
'$mod.s = ""+$mod.d;', '$mod.s = rtl.floatToStr($mod.d);',
'$mod.s = (""+$mod.i)+$mod.i;', '$mod.s = (""+$mod.i)+$mod.i;',
'$mod.s = rtl.spaceLeft(""+$mod.i,3);', '$mod.s = rtl.spaceLeft(""+$mod.i,3);',
'$mod.s = rtl.spaceLeft($mod.d.toFixed(2),3);', '$mod.s = rtl.floatToStr($mod.d,3,2);',
'$mod.s = rtl.spaceLeft("" + $mod.i, 4) + $mod.i;', '$mod.s = rtl.spaceLeft("" + $mod.i, 4) + $mod.i;',
'$mod.s = ("" + $mod.i) + rtl.spaceLeft("" + $mod.i, 5);', '$mod.s = ("" + $mod.i) + rtl.spaceLeft("" + $mod.i, 5);',
'$mod.s = rtl.spaceLeft("" + $mod.i, 4) + rtl.spaceLeft("" + $mod.i, 5);', '$mod.s = rtl.spaceLeft("" + $mod.i, 4) + rtl.spaceLeft("" + $mod.i, 5);',