Skip to content

Commit

Permalink
perf: Trivial symbol_occurrence structure
Browse files Browse the repository at this point in the history
  • Loading branch information
slavek-kucera authored Dec 12, 2023
1 parent febdcb8 commit 8c85623
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 17 deletions.
2 changes: 1 addition & 1 deletion parser_library/src/lsp/completion_list_source.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ struct completion_list_instructions
{
std::string_view completed_text;
size_t completed_text_start_column;
const std::unordered_map<std::shared_ptr<context::macro_definition>, std::shared_ptr<macro_info>>* macros;
const std::unordered_map<const context::macro_definition*, std::shared_ptr<macro_info>>* macros;
const lsp_context* lsp_ctx;

std::vector<std::string> additional_instructions;
Expand Down
9 changes: 5 additions & 4 deletions parser_library/src/lsp/lsp_context.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -534,7 +534,8 @@ void lsp_context::add_macro(macro_info_ptr macro_i, text_data_view text_data)
if (macro_i->external)
add_file(file_info(macro_i->macro_definition, std::move(text_data)));

m_macros[macro_i->macro_definition] = macro_i;
auto [_, inserted] = m_macros.try_emplace(macro_i->macro_definition.get(), std::move(macro_i));
assert(inserted);
}

void lsp_context::add_opencode(
Expand Down Expand Up @@ -569,7 +570,7 @@ macro_info_ptr lsp_context::get_macro_info(context::id_index macro_name, context
if (auto it = m_hlasm_ctx->find_macro(macro_name, gen); !it)
return nullptr;
else
return m_macros.at(*it);
return m_macros.at(it->get());
}

const file_info* lsp_context::get_file_info(const utils::resource::resource_location& file_loc) const
Expand Down Expand Up @@ -772,7 +773,7 @@ completion_list_source lsp_context::completion(const utils::resource::resource_l

auto reachable_symbols = compute_reachable_symbol_set(reachable_sections, m_hlasm_ctx->ord_ctx, is_using);

return std::pair(instr ? instr->opcode.get() : nullptr, std::move(reachable_symbols));
return std::pair(instr ? instr->opcode : nullptr, std::move(reachable_symbols));
}
}

Expand Down Expand Up @@ -1057,7 +1058,7 @@ std::string lsp_context::find_hover(const symbol_occurrence& occ,
{
if (std::holds_alternative<context::macro_def_ptr>(op->opcode_detail))
return prefix_using(
hover_for_macro(*m_macros.at(std::get<context::macro_def_ptr>(op->opcode_detail))));
hover_for_macro(*m_macros.at(std::get<context::macro_def_ptr>(op->opcode_detail).get())));
else
return prefix_using(hover_for_instruction(op->opcode));
}
Expand Down
4 changes: 2 additions & 2 deletions parser_library/src/lsp/lsp_context.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class lsp_context final
opencode_info_ptr m_opencode;
std::unordered_map<utils::resource::resource_location, file_info_ptr, utils::resource::resource_location_hasher>
m_files;
std::unordered_map<context::macro_def_ptr, macro_info_ptr> m_macros;
std::unordered_map<const context::macro_definition*, macro_info_ptr> m_macros;

std::shared_ptr<context::hlasm_context> m_hlasm_ctx;

Expand Down Expand Up @@ -91,7 +91,7 @@ class lsp_context final

const context::hlasm_context& get_related_hlasm_context() const { return *m_hlasm_ctx; }

const std::unordered_map<context::macro_def_ptr, macro_info_ptr>& macros() const { return m_macros; };
const std::unordered_map<const context::macro_definition*, macro_info_ptr>& macros() const { return m_macros; };

std::vector<branch_info> get_opencode_branch_info() const;

Expand Down
6 changes: 3 additions & 3 deletions parser_library/src/lsp/symbol_occurrence.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ struct symbol_occurrence
range occurrence_range;

// in case of INSTR kind, holds potential macro opcode
context::macro_def_ptr opcode = nullptr;
const context::macro_definition* opcode = nullptr;

symbol_occurrence(occurrence_kind kind, context::id_index name, const range& occurrence_range, bool evaluated_model)
: kind(kind)
Expand All @@ -50,11 +50,11 @@ struct symbol_occurrence
, occurrence_range(occurrence_range)
{}

symbol_occurrence(context::id_index name, context::macro_def_ptr opcode, const range& occurrence_range)
symbol_occurrence(context::id_index name, const context::macro_definition* opcode, const range& occurrence_range)
: kind(occurrence_kind::INSTR)
, name(name)
, occurrence_range(occurrence_range)
, opcode(std::move(opcode))
, opcode(opcode)
{}

// returns true, if this occurrence kind depends on a scope
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -198,16 +198,17 @@ void lsp_analyzer::macrodef_finished(context::macro_def_ptr macrodef, macrodef_p
{
if (!result.invalid)
{
const auto* md = macrodef.get();
// add instruction occurrence of macro name
const auto& macro_file = macrodef->definition_location.resource_loc;
macro_occurrences_[macro_file].first.emplace_back(macrodef->id, macrodef, result.prototype.macro_name_range);
const auto& macro_file = md->definition_location.resource_loc;

auto m_i = std::make_shared<lsp::macro_info>(result.external,
location(result.prototype.macro_name_range.start, macro_file),
std::move(macrodef),
std::move(result.variable_symbols),
std::move(result.file_scopes),
std::move(macro_occurrences_));
m_i->file_occurrences_[macro_file].first.emplace_back(md->id, md, result.prototype.macro_name_range);

if (result.external)
lsp_ctx_.add_macro(std::move(m_i), lsp::text_data_view(file_text_));
Expand Down Expand Up @@ -319,7 +320,7 @@ void lsp_analyzer::collect_occurrence(const semantics::instruction_si& instructi
auto* macro_def = std::get_if<context::macro_def_ptr>(&opcode.opcode_detail);
if (!opcode.opcode.empty() || macro_def)
collector.occurrences.emplace_back(
opcode.opcode, macro_def ? std::move(*macro_def) : context::macro_def_ptr {}, instruction.field_range);
opcode.opcode, macro_def ? macro_def->get() : nullptr, instruction.field_range);
}
else if (instruction.type == semantics::instruction_si_type::ORD
&& collector.collector_kind == lsp::occurrence_kind::INSTR_LIKE)
Expand Down
8 changes: 4 additions & 4 deletions parser_library/test/lsp/lsp_completion_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ TEST(lsp_completion, completion_list_instr)

auto aaaa = a.context().lsp_ctx->get_macro_info(context::id_index("AAAA"));
ASSERT_TRUE(aaaa);
std::unordered_map<context::macro_def_ptr, lsp::macro_info_ptr> m;
m.try_emplace(aaaa->macro_definition, aaaa);
std::unordered_map<const context::macro_definition*, lsp::macro_info_ptr> m;
m.try_emplace(aaaa->macro_definition.get(), aaaa);

auto result = lsp::generate_completion(lsp::completion_list_source(
lsp::completion_list_instructions { "AAAAA", 1, &m, a.context().lsp_ctx.get(), { "AAAA", "ADATA" } }));
Expand All @@ -59,8 +59,8 @@ TEST(lsp_completion, completion_list_instr_exact)

auto aaaa = a.context().lsp_ctx->get_macro_info(context::id_index("AAAA"));
ASSERT_TRUE(aaaa);
std::unordered_map<context::macro_def_ptr, lsp::macro_info_ptr> m;
m.try_emplace(aaaa->macro_definition, aaaa);
std::unordered_map<const context::macro_definition*, lsp::macro_info_ptr> m;
m.try_emplace(aaaa->macro_definition.get(), aaaa);

auto result = lsp::generate_completion(lsp::completion_list_source(
lsp::completion_list_instructions { "AAA", 1, &m, a.context().lsp_ctx.get(), { "AAAA", "ADATA" } }));
Expand Down

0 comments on commit 8c85623

Please sign in to comment.