Skip to content

Commit d0b6a6b

Browse files
committed
refactor(fe): move Lexer::diag_memory_ into caller
Currently, Lexer owns the diag_memory_ allocator. This ties the lifetime of Diag_List to Lexer, preventing a refactor I want to perform. Have users of Lexer pass their own diag_memory allocator into the Lexer.
1 parent c48a8fa commit d0b6a6b

File tree

6 files changed

+94
-90
lines changed

6 files changed

+94
-90
lines changed

benchmark/benchmark-lex.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ namespace {
1212
void benchmark_lex(::benchmark::State &state, String8_View raw_source) {
1313
Padded_String source(raw_source);
1414
for (auto _ : state) {
15-
Lexer l(&source);
15+
Monotonic_Allocator diag_memory("benchmark_lex diag_memory");
16+
Lexer l(&source, &diag_memory);
1617
while (l.peek().type != Token_Type::end_of_file) {
1718
l.skip();
1819
}

src/quick-lint-js/fe/lex.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -224,13 +224,14 @@ bool look_up_in_unicode_table(const std::uint8_t* table, std::size_t table_size,
224224
}
225225
}
226226

227-
Lexer::Lexer(Padded_String_View input)
228-
: Lexer(input, Lexer_Options()) {}
227+
Lexer::Lexer(Padded_String_View input, Monotonic_Allocator* diag_memory)
228+
: Lexer(input, diag_memory, Lexer_Options()) {}
229229

230-
Lexer::Lexer(Padded_String_View input, Lexer_Options options)
230+
Lexer::Lexer(Padded_String_View input, Monotonic_Allocator* diag_memory, Lexer_Options options)
231231
: input_(input.data()),
232232
original_input_(input),
233-
options_(options) {
233+
options_(options),
234+
diag_memory_(*diag_memory) {
234235
this->last_token_.end = this->input_;
235236
this->parse_bom_before_shebang();
236237
this->parse_current_token();

src/quick-lint-js/fe/lex.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,9 @@ class Lexer {
4242
jsx, // Allows '-'.
4343
};
4444

45-
explicit Lexer(Padded_String_View input);
46-
explicit Lexer(Padded_String_View input, Lexer_Options);
45+
explicit Lexer(Padded_String_View input, Monotonic_Allocator* diag_memory);
46+
explicit Lexer(Padded_String_View input, Monotonic_Allocator* diag_memory,
47+
Lexer_Options);
4748

4849
// Return information about the current token.
4950
const Token& peek() const { return this->last_token_; }
@@ -343,7 +344,7 @@ class Lexer {
343344

344345
// Allocator for diagnostic-related memory, including Diag_List and temporary
345346
// strings.
346-
Monotonic_Allocator diag_memory_{"Lexer::diag_memory_"};
347+
Monotonic_Allocator& diag_memory_;
347348

348349
Diag_List diags_ = Diag_List(&this->diag_memory_);
349350

src/quick-lint-js/fe/parse.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ Parser_Transaction::Parser_Transaction(Lexer* l)
4040
: lex_transaction(l->begin_transaction()) {}
4141

4242
Parser::Parser(Padded_String_View input, Parser_Options options)
43-
: lexer_(input,
43+
: lexer_(input, &this->diagnostic_memory_,
4444
Lexer_Options{
4545
.typescript = options.typescript,
4646
}),

src/quick-lint-js/fe/parse.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1092,16 +1092,17 @@ class Parser {
10921092
Parse_Expression_Cache_Key parse_expression_cache_key_for_current_state()
10931093
const;
10941094

1095+
// Memory used for strings in diagnostic messages.
1096+
// Must be initialized before lexer_.
1097+
Monotonic_Allocator diagnostic_memory_{"parser::diagnostic_memory_"};
1098+
10951099
quick_lint_js::Lexer lexer_;
10961100
Parser_Options options_;
10971101
Expression_Arena expressions_;
10981102

10991103
// Memory used for temporary memory allocations (e.g. vectors on the stack).
11001104
Monotonic_Allocator temporary_memory_{"parser::temporary_memory_"};
11011105

1102-
// Memory used for strings in diagnostic messages.
1103-
Monotonic_Allocator diagnostic_memory_{"parser::diagnostic_memory_"};
1104-
11051106
Diag_List &diags_ = this->lexer_.diags();
11061107

11071108
// Memory used for TypeScript type expressions.

0 commit comments

Comments
 (0)