Skip to content

Commit

Permalink
Simplify and generalize semicolon as statement ender implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
imteekay committed Jun 27, 2023
1 parent ddc6099 commit cad1fec
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 10 deletions.
2 changes: 1 addition & 1 deletion baselines/reference/terminator.js.baseline
Original file line number Diff line number Diff line change
@@ -1 +1 @@
"var x = 1;\nvar y = 2;\nvar z = 3;\nx;\ny;\nz"
"var x = 1;\nvar y = 2;\nvar z = 3;\nx;\ny;\nz;\n"
4 changes: 3 additions & 1 deletion src/emit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ const escapedCharsMap = new Map(
);

export function emit(statements: Statement[]) {
return statements.map(emitStatement).join(';\n');
return statements
.map((statement) => `${emitStatement(statement)};\n`)
.join('');
}

function emitStatement(statement: Statement): string {
Expand Down
13 changes: 5 additions & 8 deletions src/parse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export function parse(lexer: Lexer): Module {
statements: parseStatements(
parseStatement,
() => tryParseToken(Token.Semicolon),
() => lexer.token() === Token.Semicolon,
() => lexer.token() !== Token.EOF,
),
locals: new Map(),
};
Expand Down Expand Up @@ -110,13 +110,10 @@ export function parse(lexer: Lexer): Module {
terminator: () => boolean,
peek: () => boolean,
) {
const list = [element()];
while (lexer.token() !== Token.EOF) {
if (terminator()) {
if (peek()) list.push(element());
} else {
list.push(element());
}
const list = [];
while (peek()) {
list.push(element());
terminator();
}
return list;
}
Expand Down

0 comments on commit cad1fec

Please sign in to comment.