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