mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-20 19:49:30 +01:00
fcl-passrc: resolver adapted for pas2js
git-svn-id: trunk@39985 -
This commit is contained in:
parent
edd72ca6d2
commit
d3bdbfe5f2
File diff suppressed because it is too large
Load Diff
@ -3185,18 +3185,22 @@ end;
|
||||
procedure TTestResolver.TestString_Element;
|
||||
begin
|
||||
StartProgram(false);
|
||||
Add('var');
|
||||
Add(' s: string;');
|
||||
Add(' c: char;');
|
||||
Add('begin');
|
||||
Add(' if s[1]=s then ;');
|
||||
Add(' if s=s[2] then ;');
|
||||
Add(' if s[3+4]=c then ;');
|
||||
Add(' if c=s[5] then ;');
|
||||
Add(' c:=s[6];');
|
||||
Add(' s[7]:=c;');
|
||||
Add(' s[8]:=''a'';');
|
||||
Add(' s[9+1]:=''b'';');
|
||||
Add([
|
||||
'var',
|
||||
' s: string;',
|
||||
' c: char;',
|
||||
'begin',
|
||||
' if s[1]=s then ;',
|
||||
' if s=s[2] then ;',
|
||||
' if s[3+4]=c then ;',
|
||||
' if c=s[5] then ;',
|
||||
' c:=s[6];',
|
||||
' s[7]:=c;',
|
||||
' s[8]:=''a'';',
|
||||
' s[9+1]:=''b'';',
|
||||
' s[10]:='''''''';',
|
||||
' s[11]:=^g;',
|
||||
' s[12]:=^H;']);
|
||||
ParseProgram;
|
||||
end;
|
||||
|
||||
|
||||
@ -7345,6 +7345,20 @@ var
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure ConvCharToInt(var Arg: TJSElement; Param: TPasElement);
|
||||
begin
|
||||
if (Arg is TJSLiteral) and (TJSLiteral(Arg).Value.ValueType=jstString) then
|
||||
begin
|
||||
// convert char literal to int
|
||||
ConvertCharLiteralToInt(TJSLiteral(Arg),Param,ArgContext);
|
||||
end
|
||||
else
|
||||
begin
|
||||
// convert char to int -> Arg.charCodeAt(0)
|
||||
Arg:=CreateCallCharCodeAt(Arg,0,Param);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure ConvertArray(ArrayEl: TPasArrayType);
|
||||
var
|
||||
BracketEx, Sub: TJSBracketMemberExpression;
|
||||
@ -7455,22 +7469,16 @@ var
|
||||
end
|
||||
else
|
||||
Int:=ord(TResEvalString(LowRg).S[1]);
|
||||
if (Arg is TJSLiteral) and (TJSLiteral(Arg).Value.ValueType=jstString) then
|
||||
begin
|
||||
// convert char literal to int
|
||||
ConvertCharLiteralToInt(TJSLiteral(Arg),Param,ArgContext);
|
||||
end
|
||||
else
|
||||
begin
|
||||
// convert char to int -> Arg.charCodeAt(0)
|
||||
Arg:=CreateCallCharCodeAt(Arg,0,Param);
|
||||
end;
|
||||
ConvCharToInt(Arg,Param);
|
||||
end;
|
||||
revkUnicodeString:
|
||||
begin
|
||||
if length(TResEvalUTF16(LowRg).S)<>1 then
|
||||
ArgContext.Resolver.RaiseXExpectedButYFound(20170910213247,'char','string',Param)
|
||||
else
|
||||
Int:=ord(TResEvalUTF16(LowRg).S[1]);
|
||||
ConvCharToInt(Arg,Param);
|
||||
end
|
||||
else
|
||||
RaiseNotSupported(Param,ArgContext,20170910170446);
|
||||
end;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user