mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2026-02-04 08:34:49 +01:00
* More strict behaviour for identifiers, patch by Benito van der Zander (bug ID 37841)
git-svn-id: trunk@47006 -
This commit is contained in:
parent
130d9ccdc3
commit
218ce57b5b
@ -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]]);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user