mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-21 09:42:00 +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;
|
procedure TTestResolver.TestString_Element;
|
||||||
begin
|
begin
|
||||||
StartProgram(false);
|
StartProgram(false);
|
||||||
Add('var');
|
Add([
|
||||||
Add(' s: string;');
|
'var',
|
||||||
Add(' c: char;');
|
' s: string;',
|
||||||
Add('begin');
|
' c: char;',
|
||||||
Add(' if s[1]=s then ;');
|
'begin',
|
||||||
Add(' if s=s[2] then ;');
|
' if s[1]=s then ;',
|
||||||
Add(' if s[3+4]=c then ;');
|
' if s=s[2] then ;',
|
||||||
Add(' if c=s[5] then ;');
|
' if s[3+4]=c then ;',
|
||||||
Add(' c:=s[6];');
|
' if c=s[5] then ;',
|
||||||
Add(' s[7]:=c;');
|
' c:=s[6];',
|
||||||
Add(' s[8]:=''a'';');
|
' s[7]:=c;',
|
||||||
Add(' s[9+1]:=''b'';');
|
' s[8]:=''a'';',
|
||||||
|
' s[9+1]:=''b'';',
|
||||||
|
' s[10]:='''''''';',
|
||||||
|
' s[11]:=^g;',
|
||||||
|
' s[12]:=^H;']);
|
||||||
ParseProgram;
|
ParseProgram;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|||||||
@ -7345,6 +7345,20 @@ var
|
|||||||
end;
|
end;
|
||||||
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);
|
procedure ConvertArray(ArrayEl: TPasArrayType);
|
||||||
var
|
var
|
||||||
BracketEx, Sub: TJSBracketMemberExpression;
|
BracketEx, Sub: TJSBracketMemberExpression;
|
||||||
@ -7455,22 +7469,16 @@ var
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
Int:=ord(TResEvalString(LowRg).S[1]);
|
Int:=ord(TResEvalString(LowRg).S[1]);
|
||||||
if (Arg is TJSLiteral) and (TJSLiteral(Arg).Value.ValueType=jstString) then
|
ConvCharToInt(Arg,Param);
|
||||||
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;
|
end;
|
||||||
revkUnicodeString:
|
revkUnicodeString:
|
||||||
|
begin
|
||||||
if length(TResEvalUTF16(LowRg).S)<>1 then
|
if length(TResEvalUTF16(LowRg).S)<>1 then
|
||||||
ArgContext.Resolver.RaiseXExpectedButYFound(20170910213247,'char','string',Param)
|
ArgContext.Resolver.RaiseXExpectedButYFound(20170910213247,'char','string',Param)
|
||||||
else
|
else
|
||||||
Int:=ord(TResEvalUTF16(LowRg).S[1]);
|
Int:=ord(TResEvalUTF16(LowRg).S[1]);
|
||||||
|
ConvCharToInt(Arg,Param);
|
||||||
|
end
|
||||||
else
|
else
|
||||||
RaiseNotSupported(Param,ArgContext,20170910170446);
|
RaiseNotSupported(Param,ArgContext,20170910170446);
|
||||||
end;
|
end;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user