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; 'A'..'F': u:=u*16+ord(c)-ord('A')+10;
else break; else break;
end; end;
if u>$ffff then if u>$10FFFF then
RangeError(20170523115712); RangeError(20170523115712);
inc(p); inc(p);
until false; until false;
if p=StartP then if p=StartP then
RaiseInternalError(20170207164956); 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 end
else else
begin begin

View File

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

View File

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