diff --git a/lib/external/pattern_language b/lib/external/pattern_language index a81154b73..f97999d4d 160000 --- a/lib/external/pattern_language +++ b/lib/external/pattern_language @@ -1 +1 @@ -Subproject commit a81154b73d6774a085d44d6836c17f5daf634063 +Subproject commit f97999d4da8f64df0706227f8b5a6a861e5a95ff diff --git a/plugins/builtin/source/content/views/view_pattern_data.cpp b/plugins/builtin/source/content/views/view_pattern_data.cpp index c04372a22..7a777a28a 100644 --- a/plugins/builtin/source/content/views/view_pattern_data.cpp +++ b/plugins/builtin/source/content/views/view_pattern_data.cpp @@ -74,7 +74,7 @@ namespace hex::plugin::builtin { const auto §ions = ContentRegistry::PatternLanguage::getRuntime().getSections(); (*m_patternDrawer)[0] = createDefaultDrawer(); - for (const auto &id : sections | std::views::keys) { + for (const auto &[id, section] : sections) { (*m_patternDrawer)[id] = createDefaultDrawer(); } }); @@ -143,9 +143,11 @@ namespace hex::plugin::builtin { if (ImGui::BeginPopup("##PatternDataContextMenu")) { if (ImGui::MenuItemEx("hex.builtin.view.pattern_data.section.view_raw"_lang, ICON_VS_OPEN_PREVIEW)) { - if (auto it = sections.find(selectedSection); it != sections.end()) { - const auto &[sectionId, section] = *it; - ImHexApi::Provider::add(section.data, section.name); + if (TRY_LOCK(ContentRegistry::PatternLanguage::getRuntimeLock())) { + if (auto it = sections.find(selectedSection); it != sections.end()) { + const auto &[sectionId, section] = *it; + ImHexApi::Provider::add(section.data, section.name); + } } } ImGui::EndPopup(); diff --git a/plugins/decompress/source/content/pl_functions.cpp b/plugins/decompress/source/content/pl_functions.cpp index 862bdf23f..a373cc5fb 100644 --- a/plugins/decompress/source/content/pl_functions.cpp +++ b/plugins/decompress/source/content/pl_functions.cpp @@ -54,7 +54,7 @@ namespace hex::plugin::decompress { ContentRegistry::PatternLanguage::addFunction(nsHexDec, "zlib_decompress", FunctionParameterCount::exactly(3), [](Evaluator *evaluator, auto params) -> std::optional { #if IMHEX_FEATURE_ENABLED(ZLIB) auto compressedData = getCompressedData(evaluator, params[0]); - auto §ion = evaluator->getRuntime().getSection(u64(params[1].toUnsigned())); + auto §ion = evaluator->getSection(u64(params[1].toUnsigned())); auto windowSize = u64(params[2].toUnsigned()); z_stream stream = { }; @@ -105,7 +105,7 @@ namespace hex::plugin::decompress { ContentRegistry::PatternLanguage::addFunction(nsHexDec, "bzip_decompress", FunctionParameterCount::exactly(2), [](Evaluator *evaluator, auto params) -> std::optional { #if IMHEX_FEATURE_ENABLED(BZIP2) auto compressedData = getCompressedData(evaluator, params[0]); - auto §ion = evaluator->getRuntime().getSection(u64(params[1].toUnsigned())); + auto §ion = evaluator->getSection(u64(params[1].toUnsigned())); bz_stream stream = { }; if (BZ2_bzDecompressInit(&stream, 0, 1) != Z_OK) { @@ -156,7 +156,7 @@ namespace hex::plugin::decompress { ContentRegistry::PatternLanguage::addFunction(nsHexDec, "lzma_decompress", FunctionParameterCount::exactly(2), [](Evaluator *evaluator, auto params) -> std::optional { #if IMHEX_FEATURE_ENABLED(LIBLZMA) auto compressedData = getCompressedData(evaluator, params[0]); - auto §ion = evaluator->getRuntime().getSection(u64(params[1].toUnsigned())); + auto §ion = evaluator->getSection(u64(params[1].toUnsigned())); lzma_stream stream = LZMA_STREAM_INIT; constexpr static i64 MemoryLimit = 0x40000000; // 1GiB @@ -216,7 +216,7 @@ namespace hex::plugin::decompress { ContentRegistry::PatternLanguage::addFunction(nsHexDec, "zstd_decompress", FunctionParameterCount::exactly(2), [](Evaluator *evaluator, auto params) -> std::optional { #if IMHEX_FEATURE_ENABLED(ZSTD) auto compressedData = getCompressedData(evaluator, params[0]); - auto §ion = evaluator->getRuntime().getSection(i64(params[1].toUnsigned())); + auto §ion = evaluator->getSection(i64(params[1].toUnsigned())); ZSTD_DCtx* dctx = ZSTD_createDCtx(); if (dctx == nullptr) { @@ -286,7 +286,7 @@ namespace hex::plugin::decompress { ContentRegistry::PatternLanguage::addFunction(nsHexDec, "lz4_decompress", FunctionParameterCount::exactly(3), [](Evaluator *evaluator, auto params) -> std::optional { #if IMHEX_FEATURE_ENABLED(LZ4) auto compressedData = getCompressedData(evaluator, params[0]); - auto §ion = evaluator->getRuntime().getSection(u64(params[1].toUnsigned())); + auto §ion = evaluator->getSection(u64(params[1].toUnsigned())); bool frame = params[2].toBoolean(); if (frame) { diff --git a/plugins/disassembler/source/content/pl_builtin_types.cpp b/plugins/disassembler/source/content/pl_builtin_types.cpp index c45c29e79..fa98b07d5 100644 --- a/plugins/disassembler/source/content/pl_builtin_types.cpp +++ b/plugins/disassembler/source/content/pl_builtin_types.cpp @@ -105,7 +105,7 @@ namespace hex::plugin::disasm { cs_option(capstone, CS_OPT_SKIPDATA, CS_OPT_ON); const auto sectionId = evaluator->getSectionId(); - std::vector data(std::min(32, evaluator->getRuntime().getSectionSize(sectionId) - address)); + std::vector data(std::min(32, evaluator->getSectionSize(sectionId) - address)); evaluator->readData(address, data.data(), data.size(), sectionId); auto *instruction = cs_malloc(capstone);