From 9a27b59e5fb12cba0c7a4a2f3b4ceaae769d406a Mon Sep 17 00:00:00 2001 From: fumer-fubotv <89787347+fumer-fubotv@users.noreply.github.com> Date: Wed, 28 Feb 2024 12:05:03 -0800 Subject: [PATCH] TBD-204: Empty interfaces break the parser --- src/parser/Parser.ts | 9 +++++---- src/parser/tests/statement/InterfaceStatement.spec.ts | 9 +++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/parser/Parser.ts b/src/parser/Parser.ts index b3f956726..75bff4cf9 100644 --- a/src/parser/Parser.ts +++ b/src/parser/Parser.ts @@ -489,6 +489,11 @@ export class Parser { let body = [] as Statement[]; while (this.checkAny(TokenKind.Comment, TokenKind.Identifier, TokenKind.At, ...AllowedProperties)) { try { + //break out of this loop if we encountered the `EndInterface` token not followed by `as` + if (this.check(TokenKind.EndInterface) && !this.checkNext(TokenKind.As)) { + break; + } + let decl: Statement; //collect leading annotations @@ -528,10 +533,6 @@ export class Parser { //ensure statement separator this.consumeStatementSeparators(); - //break out of this loop if we encountered the `EndInterface` token not followed by `as` - if (this.check(TokenKind.EndInterface) && !this.checkNext(TokenKind.As)) { - break; - } } //consume the final `end interface` token diff --git a/src/parser/tests/statement/InterfaceStatement.spec.ts b/src/parser/tests/statement/InterfaceStatement.spec.ts index 7d952d100..7aae48e90 100644 --- a/src/parser/tests/statement/InterfaceStatement.spec.ts +++ b/src/parser/tests/statement/InterfaceStatement.spec.ts @@ -96,4 +96,13 @@ describe('InterfaceStatement', () => { end interface `, undefined, undefined, undefined, true); }); + + it('supports empty interfaces', () => { + const file = program.setFile('source/main.bs', ` + interface SomeInterface + end interface + `); + program.validate(); + expectZeroDiagnostics(file); + }); });