fcl-passrc: resolver adapted for pas2js

git-svn-id: trunk@39985 -
This commit is contained in:
Mattias Gaertner 2018-10-18 19:40:37 +00:00
parent edd72ca6d2
commit d3bdbfe5f2
3 changed files with 340 additions and 112 deletions

File diff suppressed because it is too large Load Diff

View File

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

View File

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