* More strict behaviour for identifiers, patch by Benito van der Zander (bug ID 37841)

git-svn-id: trunk@47006 -
This commit is contained in:
michael 2020-09-29 15:45:27 +00:00
parent 130d9ccdc3
commit 218ce57b5b

View File

@ -373,8 +373,9 @@ begin
end
else if u1<>0 then
MaybeAppendUnicode;
if FTokenStr^ = #0 then
Error(SErrOpenString,[FCurRow]);
if FTokenStr^ < #$20 then
if FTokenStr^ = #0 then Error(SErrOpenString,[FCurRow])
else if joStrict in Options then Error(SErrInvalidCharacter, [CurRow,CurColumn,FTokenStr[0]]);
Inc(FTokenStr);
end;
if FTokenStr^ = #0 then
@ -530,23 +531,33 @@ begin
tstart:=CurRow;
Tcol:=CurColumn;
TokenStart := FTokenStr;
Result:=tkIdentifier;
case TokenStart^ of
't': if (TokenStart[1] = 'r') and (TokenStart[2] = 'u') and (TokenStart[3] = 'e') then
Result:=tkTrue;
'f': if (TokenStart[1] = 'a') and (TokenStart[2] = 'l') and (TokenStart[3] = 's') and (TokenStart[4] = 'e') then
Result:=tkFalse;
'n': if (TokenStart[1] = 'u') and (TokenStart[2] = 'l') and (TokenStart[3] = 'l') then
Result:=tkNull;
end;
if result <> tkIdentifier then inc(FTokenStr, length(TokenInfos[result]) - 1);
repeat
Inc(FTokenStr);
until not (FTokenStr^ in ['A'..'Z', 'a'..'z', '0'..'9', '_']);
SectionLength := FTokenStr - TokenStart;
FCurTokenString:='';
SetString(FCurTokenString, TokenStart, SectionLength);
for it := tkTrue to tkNull do
if CompareText(CurTokenString, TokenInfos[it]) = 0 then
begin
Result := it;
FCurToken := Result;
exit;
end;
if (joStrict in Options) then
Error(SErrInvalidCharacter, [tStart,tcol,TokenStart[0]])
else
Result:=tkIdentifier;
if (result = tkIdentifier) or (SectionLength <> length(TokenInfos[result])) then begin
if (joStrict in Options) then
Error(SErrInvalidCharacter, [tStart,tcol,TokenStart[0]]);
for it := tkTrue to tkNull do
if CompareText(CurTokenString, TokenInfos[it]) = 0 then
begin
Result := it;
FCurToken := Result;
exit;
end;
end;
end;
else
Error(SErrInvalidCharacter, [CurRow,CurColumn,FTokenStr[0]]);