Skip to content

Commit 8ae51f0

Browse files
author
jbontes
committed
RomanYankovsky#248 static + 249 assembler inline directive
1 parent 5c34b3d commit 8ae51f0

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

Source/SimpleParser/SimpleParser.pas

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ ESyntaxError = class(Exception)
193193
property PosXY: TTokenPoint read FPosXY write FPosXY;
194194
end;
195195

196+
TptTokenKinds = set of TptTokenKind;
196197
TmwSimplePasPar = class(TObject)
197198
private
198199
FOnMessage: TMessageEvent;
@@ -214,7 +215,7 @@ TmwSimplePasPar = class(TObject)
214215
protected
215216
procedure Expected(Sym: TptTokenKind); virtual;
216217
procedure ExpectedEx(Sym: TptTokenKind); overload; virtual;
217-
procedure ExpectedEx(Syms: array of TptTokenKind); overload; virtual;
218+
procedure ExpectedEx(const Syms: TptTokenKinds); overload; virtual;
218219
procedure ExpectedFatal(Sym: TptTokenKind); virtual;
219220
procedure HandlePtCompDirect(Sender: TmwBasePasLex); virtual;
220221
procedure HandlePtDefineDirect(Sender: TmwBasePasLex); virtual;
@@ -782,18 +783,24 @@ procedure TmwSimplePasPar.Expected(Sym: TptTokenKind);
782783
NextToken;
783784
end;
784785

785-
procedure TmwSimplePasPar.ExpectedEx(Syms: array of TptTokenKind);
786+
procedure TmwSimplePasPar.ExpectedEx(const Syms: TptTokenKinds);
786787
var
787-
Sym, S: TptTokenKind;
788-
Found: boolean;
789-
begin
790-
Found:= false;
791-
for S in Syms do begin
792-
Found:= (S = Lexer.ExID);
793-
if (Found) then break;
794-
end;
795-
FOnMessage(Self, meError, Format(rsExpected, ['EX:' + TokenName(Sym), FLexer.Token]),
788+
Sym: TptTokenKind;
789+
Symbols: string;
790+
Optional: string;
791+
begin
792+
if (Lexer.ExID in Syms) then NextToken
793+
else if (Lexer.TokenID = ptNull) or Assigned(FOnMessage) then begin
794+
for Sym in Syms do begin
795+
Symbols:= Symbols + Optional + TokenName(Sym);
796+
Optional:= ' or ';
797+
end;
798+
if (Lexer.TokenID = ptNull) then
799+
raise ESyntaxError.CreatePos(Format(rsExpected, [Symbols, rsEndOfFile]), FLexer.PosXY)
800+
else if Assigned(FOnMessage) then begin
801+
FOnMessage(Self, meError, Format(rsExpected, ['EX:' + Symbols, FLexer.Token]),
796802
FLexer.PosXY.X, FLexer.PosXY.Y);
803+
end;
797804
end;
798805
end;
799806

0 commit comments

Comments
 (0)