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); + }); });