mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 01:39:26 +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_WriteStr(El: TParamsExpr; AContext: TConvertContext): TJSElement; virtual;
|
||||||
Function ConvertBuiltIn_Val(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_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_CopyArray(El: TParamsExpr; AContext: TConvertContext): TJSElement; virtual;
|
||||||
Function ConvertBuiltIn_InsertArray(El: TParamsExpr; AContext: TConvertContext): TJSElement; virtual;
|
Function ConvertBuiltIn_InsertArray(El: TParamsExpr; AContext: TConvertContext): TJSElement; virtual;
|
||||||
Function ConvertBuiltIn_DeleteArray(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
|
if RHS.IdentEl.ClassType=TPasClassType then
|
||||||
Result:=cJSValueConversion; // RHS is a class type
|
Result:=cJSValueConversion; // RHS is a class type
|
||||||
end;
|
end;
|
||||||
end
|
end;
|
||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
else if (LHS.BaseType=btContext) then
|
else if (LHS.BaseType=btContext) then
|
||||||
@ -8522,6 +8523,7 @@ begin
|
|||||||
bfWriteStr: Result:=ConvertBuiltIn_WriteStr(El,AContext);
|
bfWriteStr: Result:=ConvertBuiltIn_WriteStr(El,AContext);
|
||||||
bfVal: Result:=ConvertBuiltIn_Val(El,AContext);
|
bfVal: Result:=ConvertBuiltIn_Val(El,AContext);
|
||||||
bfConcatArray: Result:=ConvertBuiltIn_ConcatArray(El,AContext);
|
bfConcatArray: Result:=ConvertBuiltIn_ConcatArray(El,AContext);
|
||||||
|
bfConcatString: Result:=ConvertBuiltIn_ConcatString(El,AContext);
|
||||||
bfCopyArray: Result:=ConvertBuiltIn_CopyArray(El,AContext);
|
bfCopyArray: Result:=ConvertBuiltIn_CopyArray(El,AContext);
|
||||||
bfInsertArray: Result:=ConvertBuiltIn_InsertArray(El,AContext);
|
bfInsertArray: Result:=ConvertBuiltIn_InsertArray(El,AContext);
|
||||||
bfDeleteArray: Result:=ConvertBuiltIn_DeleteArray(El,AContext);
|
bfDeleteArray: Result:=ConvertBuiltIn_DeleteArray(El,AContext);
|
||||||
@ -10743,6 +10745,40 @@ begin
|
|||||||
end;
|
end;
|
||||||
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;
|
function TPasToJSConverter.ConvertBuiltIn_CopyArray(El: TParamsExpr;
|
||||||
AContext: TConvertContext): TJSElement;
|
AContext: TConvertContext): TJSElement;
|
||||||
var
|
var
|
||||||
|
@ -6379,6 +6379,8 @@ begin
|
|||||||
' s:=#$20AC;', // euro
|
' s:=#$20AC;', // euro
|
||||||
' s:=#$10437;', // outside BMP
|
' s:=#$10437;', // outside BMP
|
||||||
' s:=default(string);',
|
' s:=default(string);',
|
||||||
|
' s:=concat(s);',
|
||||||
|
' s:=concat(s,''a'',s)',
|
||||||
'']);
|
'']);
|
||||||
ConvertProgram;
|
ConvertProgram;
|
||||||
CheckSource('TestStringConst',
|
CheckSource('TestStringConst',
|
||||||
@ -6395,8 +6397,10 @@ begin
|
|||||||
'$mod.s=''"\''"'';',
|
'$mod.s=''"\''"'';',
|
||||||
'$mod.s="€";',
|
'$mod.s="€";',
|
||||||
'$mod.s="'#$F0#$90#$90#$B7'";',
|
'$mod.s="'#$F0#$90#$90#$B7'";',
|
||||||
'$mod.s="";'
|
'$mod.s="";',
|
||||||
]));
|
'$mod.s = $mod.s;',
|
||||||
|
'$mod.s = $mod.s.concat("a", $mod.s);',
|
||||||
|
'']));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTestModule.TestStringConstSurrogate;
|
procedure TTestModule.TestStringConstSurrogate;
|
||||||
|
@ -2940,6 +2940,7 @@ End.
|
|||||||
<li>Intrinsic procedure WriteStr(out s: string; params...)</li>
|
<li>Intrinsic procedure WriteStr(out s: string; params...)</li>
|
||||||
<li><i>Debugger;</i> converts to <i>debugger;</i>. If a debugger is running
|
<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>
|
it will break on this line just like a break point.</li>
|
||||||
|
<li><i>concat(string1,string2,...)</i> since 1.3</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user