pastojs: Unicode character constants outside of BMP

git-svn-id: trunk@39126 -
This commit is contained in:
Mattias Gaertner 2018-05-27 22:39:10 +00:00
parent df71ab3ecf
commit a452e2dd5f
3 changed files with 35 additions and 21 deletions

View File

@ -3944,13 +3944,21 @@ begin
'A'..'F': u:=u*16+ord(c)-ord('A')+10;
else break;
end;
if u>$ffff then
if u>$10FFFF then
RangeError(20170523115712);
inc(p);
until false;
if p=StartP then
RaiseInternalError(20170207164956);
AddHash(u);
if u>$ffff then
begin
// split into two
dec(u,$10000);
AddHash($D800+(u shr 10));
AddHash($DC00+(u and $3ff));
end
else
AddHash(u);
end
else
begin

View File

@ -4083,25 +4083,27 @@ end;
procedure TTestResolver.TestStringOperators;
begin
StartProgram(false);
Add('var');
Add(' i,j:string;');
Add(' k:char;');
Add(' w:widechar;');
Add('begin');
Add(' i:='''';');
Add(' i:=''''+'''';');
Add(' i:=k+'''';');
Add(' i:=''''+k;');
Add(' i:=''a''+j;');
Add(' i:=''abc''+j;');
Add(' k:=#65;');
Add(' k:=#$42;');
Add(' k:=''a'';');
Add(' k:='''''''';');
Add(' k:=j[1];');
Add(' w:=k;');
Add(' w:=#66;');
Add(' w:=#6666;');
Add([
'var',
' i,j:string;',
' k:char;',
' w:widechar;',
'begin',
' i:='''';',
' i:=''''+'''';',
' i:=k+'''';',
' i:=''''+k;',
' i:=''a''+j;',
' i:=''abc''+j;',
' k:=#65;',
' k:=#$42;',
' k:=''a'';',
' k:='''''''';',
' k:=j[1];',
' w:=k;',
' w:=#66;',
' w:=#6666;',
'']);
ParseProgram;
end;

View File

@ -5597,6 +5597,8 @@ begin
' s:=''foo''#13''bar'';',
' s:=''"'';',
' s:=''"''''"'';',
' s:=#$20AC;', // euro
' s:=#$10437;', //
' s:=default(string);',
'']);
ConvertProgram;
@ -5612,6 +5614,8 @@ begin
'$mod.s="foo\rbar";',
'$mod.s=''"'';',
'$mod.s=''"\''"'';',
'$mod.s="€";',
'$mod.s="'#$F0#$90#$90#$B7'";',
'$mod.s="";'
]));
end;