mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-05 19:58:46 +02:00
pastojs: concat(string1,string2,...)
git-svn-id: trunk@40597 -
This commit is contained in:
parent
ee61fc2102
commit
e108d9c5eb
@ -1765,6 +1765,7 @@ type
|
||||
Function ConvertBuiltIn_WriteStr(El: TParamsExpr; AContext: TConvertContext): TJSElement; virtual;
|
||||
Function ConvertBuiltIn_Val(El: TParamsExpr; AContext: TConvertContext): TJSElement; virtual;
|
||||
Function ConvertBuiltIn_ConcatArray(El: TParamsExpr; AContext: TConvertContext): TJSElement; virtual;
|
||||
Function ConvertBuiltIn_ConcatString(El: TParamsExpr; AContext: TConvertContext): TJSElement; virtual;
|
||||
Function ConvertBuiltIn_CopyArray(El: TParamsExpr; AContext: TConvertContext): TJSElement; virtual;
|
||||
Function ConvertBuiltIn_InsertArray(El: TParamsExpr; AContext: TConvertContext): TJSElement; virtual;
|
||||
Function ConvertBuiltIn_DeleteArray(El: TParamsExpr; AContext: TConvertContext): TJSElement; virtual;
|
||||
@ -3989,7 +3990,7 @@ begin
|
||||
if RHS.IdentEl.ClassType=TPasClassType then
|
||||
Result:=cJSValueConversion; // RHS is a class type
|
||||
end;
|
||||
end
|
||||
end;
|
||||
end;
|
||||
end
|
||||
else if (LHS.BaseType=btContext) then
|
||||
@ -8522,6 +8523,7 @@ begin
|
||||
bfWriteStr: Result:=ConvertBuiltIn_WriteStr(El,AContext);
|
||||
bfVal: Result:=ConvertBuiltIn_Val(El,AContext);
|
||||
bfConcatArray: Result:=ConvertBuiltIn_ConcatArray(El,AContext);
|
||||
bfConcatString: Result:=ConvertBuiltIn_ConcatString(El,AContext);
|
||||
bfCopyArray: Result:=ConvertBuiltIn_CopyArray(El,AContext);
|
||||
bfInsertArray: Result:=ConvertBuiltIn_InsertArray(El,AContext);
|
||||
bfDeleteArray: Result:=ConvertBuiltIn_DeleteArray(El,AContext);
|
||||
@ -10743,6 +10745,40 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TPasToJSConverter.ConvertBuiltIn_ConcatString(El: TParamsExpr;
|
||||
AContext: TConvertContext): TJSElement;
|
||||
var
|
||||
Params: TPasExprArray;
|
||||
A: TJSElement;
|
||||
Call: TJSCallExpression;
|
||||
i: Integer;
|
||||
DotEx: TJSDotMemberExpression;
|
||||
begin
|
||||
Params:=El.Params;
|
||||
if Length(Params)=1 then
|
||||
// concat(a) -> a
|
||||
Result:=ConvertElement(Params[0],AContext)
|
||||
else
|
||||
begin
|
||||
// concat(a,b,c) -> a.concat(b,c)
|
||||
Result:=nil;
|
||||
A:=ConvertElement(Params[0],AContext); // beware: might fail
|
||||
Call:=CreateCallExpression(El);
|
||||
try
|
||||
DotEx:=TJSDotMemberExpression(CreateElement(TJSDotMemberExpression,Params[0]));
|
||||
DotEx.MExpr:=A;
|
||||
DotEx.Name:='concat';
|
||||
Call.Expr:=DotEx;
|
||||
for i:=1 to length(Params)-1 do
|
||||
Call.AddArg(ConvertElement(Params[i],AContext));
|
||||
Result:=Call;
|
||||
finally
|
||||
if Result=nil then
|
||||
Call.Free;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TPasToJSConverter.ConvertBuiltIn_CopyArray(El: TParamsExpr;
|
||||
AContext: TConvertContext): TJSElement;
|
||||
var
|
||||
|
@ -6379,6 +6379,8 @@ begin
|
||||
' s:=#$20AC;', // euro
|
||||
' s:=#$10437;', // outside BMP
|
||||
' s:=default(string);',
|
||||
' s:=concat(s);',
|
||||
' s:=concat(s,''a'',s)',
|
||||
'']);
|
||||
ConvertProgram;
|
||||
CheckSource('TestStringConst',
|
||||
@ -6395,8 +6397,10 @@ begin
|
||||
'$mod.s=''"\''"'';',
|
||||
'$mod.s="€";',
|
||||
'$mod.s="'#$F0#$90#$90#$B7'";',
|
||||
'$mod.s="";'
|
||||
]));
|
||||
'$mod.s="";',
|
||||
'$mod.s = $mod.s;',
|
||||
'$mod.s = $mod.s.concat("a", $mod.s);',
|
||||
'']));
|
||||
end;
|
||||
|
||||
procedure TTestModule.TestStringConstSurrogate;
|
||||
|
@ -2940,6 +2940,7 @@ End.
|
||||
<li>Intrinsic procedure WriteStr(out s: string; params...)</li>
|
||||
<li><i>Debugger;</i> converts to <i>debugger;</i>. If a debugger is running
|
||||
it will break on this line just like a break point.</li>
|
||||
<li><i>concat(string1,string2,...)</i> since 1.3</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user