From c6346853a17f9f85e182acd620a83d93c9f272aa Mon Sep 17 00:00:00 2001 From: Canrad <1517807724@qq.com> Date: Thu, 29 Oct 2026 22:48:21 +0800 Subject: [PATCH] =?UTF-8?q?refactor(reference,asm):=20reflection=5Finterpr?= =?UTF-8?q?eter=20=E5=BD=92=E4=BD=8D=20asm/analyzer=EF=BC=8Casm=E2=87=84re?= =?UTF-8?q?ference=20=E6=A8=A1=E5=9D=97=E7=8E=AF=E6=96=AD=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #101 补记:彼时申报「终态零环」与事实不符——asm⇒reference (member_remapper 反射改写面)与 reference⇒asm 并存即环。本件按 #101 同款归位术收口:reflection_interpreter 本就是体级分析件(只吃 analysis/cp_refs + asm/analyzer 的别名/帧面),整迁 asm/analyzer/ (ns mjbase::reference → mjbase::asm_analyzer)。 - member_remapper:include 转模块内,相对限定 reference:: → asm_analyzer:: - reference_index / reflection_binding_analyzer:include 转指 + using-decl 对齐既有 aliasInterned 惯用法 - 终态:asm⇏reference,唯一方向 reference⇒asm,全仓 18 模块零环 套件 1919 用例 1916 绿 + 3 既有 POSIX 跳过(基线逐位一致)。 --- mjbase/dev_plan.md | 5 +++++ .../analyzer}/reflection_interpreter.cpp | 6 +++--- .../analyzer}/reflection_interpreter.hpp | 6 +++--- mjbase/src/mjbase/asm/remapper/member_remapper.cpp | 14 +++++++------- mjbase/src/mjbase/reference/reference_index.cpp | 10 +++++++++- .../reference/reflection_binding_analyzer.cpp | 5 ++++- 6 files changed, 31 insertions(+), 15 deletions(-) rename mjbase/src/mjbase/{reference => asm/analyzer}/reflection_interpreter.cpp (99%) rename mjbase/src/mjbase/{reference => asm/analyzer}/reflection_interpreter.hpp (98%) diff --git a/mjbase/dev_plan.md b/mjbase/dev_plan.md index 983b0b1..36ab9ad 100644 --- a/mjbase/dev_plan.md +++ b/mjbase/dev_plan.md @@ -919,3 +919,8 @@ mjt-deobf 侧尚在 mbase 栈消费的 opt pass 逐件裁决;"结构性吸收" 对 reflection_interpreter 的反射改写面消费保留为 asm⇒reference 单向。 终态零环:analysis⇏asm、spi⇏pass,全部跨模块边单向 (asm⇒{analysis,reference}、reference⇒asm、pass⇒spi)。 + → 补记(2026-10-29,reflection-interpreter 归位):上句申报与事实不 + 符——asm⇒reference 与 reference⇒asm 并存即模块环。reflection_interpreter + 本就是体级分析件(只吃 analysis/cp_refs + asm/analyzer 面),整迁 + asm/analyzer/(ns reference→asm_analyzer),member_remapper 消费转模 + 块内。终态真零环:asm⇏reference,唯一方向 reference⇒asm。 diff --git a/mjbase/src/mjbase/reference/reflection_interpreter.cpp b/mjbase/src/mjbase/asm/analyzer/reflection_interpreter.cpp similarity index 99% rename from mjbase/src/mjbase/reference/reflection_interpreter.cpp rename to mjbase/src/mjbase/asm/analyzer/reflection_interpreter.cpp index 12dc9e3..ec27ef9 100644 --- a/mjbase/src/mjbase/reference/reflection_interpreter.cpp +++ b/mjbase/src/mjbase/asm/analyzer/reflection_interpreter.cpp @@ -1,4 +1,4 @@ -#include "mjbase/reference/reflection_interpreter.hpp" +#include "mjbase/asm/analyzer/reflection_interpreter.hpp" #include #include @@ -9,7 +9,7 @@ #include "mjbase/analysis/cp_refs.hpp" #include "mjbase/asm/analyzer/frame_query.hpp" -namespace mjbase::reference { +namespace mjbase::asm_analyzer { using jbc::core::Op; using jbc::core::Shape; @@ -775,4 +775,4 @@ ReflectionSnapshot snapshotReflectionFacts(const ReflectionQueryContext& ctx) return ReflectionSnapshot{}; // 注入不收敛:保守 fail-open } -} // namespace mjbase::reference +} // namespace mjbase::asm_analyzer diff --git a/mjbase/src/mjbase/reference/reflection_interpreter.hpp b/mjbase/src/mjbase/asm/analyzer/reflection_interpreter.hpp similarity index 98% rename from mjbase/src/mjbase/reference/reflection_interpreter.hpp rename to mjbase/src/mjbase/asm/analyzer/reflection_interpreter.hpp index 44c60bd..e2f202f 100644 --- a/mjbase/src/mjbase/reference/reflection_interpreter.hpp +++ b/mjbase/src/mjbase/asm/analyzer/reflection_interpreter.hpp @@ -35,9 +35,9 @@ namespace mjbase::asm_analyzer { class AliasAnalysis; -} // namespace mjbase::analysis +} // namespace mjbase::asm_analyzer -namespace mjbase::reference { +namespace mjbase::asm_analyzer { /// @brief 类名归一化:`(Lfoo/Bar;)V` 描述符形态与点分名统一为 internal name。 /// @@ -161,4 +161,4 @@ struct ReflectionQueryContext /// @brief 计算方法内反射数据流快照(域引擎 + 迭代探测-注入 + FrameQuery 收口)。 ReflectionSnapshot snapshotReflectionFacts(const ReflectionQueryContext& ctx); -} // namespace mjbase::reference +} // namespace mjbase::asm_analyzer diff --git a/mjbase/src/mjbase/asm/remapper/member_remapper.cpp b/mjbase/src/mjbase/asm/remapper/member_remapper.cpp index 32916a6..153a401 100644 --- a/mjbase/src/mjbase/asm/remapper/member_remapper.cpp +++ b/mjbase/src/mjbase/asm/remapper/member_remapper.cpp @@ -12,7 +12,7 @@ #include "mjbase/asm/analyzer/alias_analysis.hpp" #include "mjbase/jasm/classfile_utf8.hpp" -#include "mjbase/reference/reflection_interpreter.hpp" +#include "mjbase/asm/analyzer/reflection_interpreter.hpp" namespace mjbase::asm_remapper { namespace { @@ -1166,7 +1166,7 @@ bool remapReflectionNames(const RemapCtx& ctx, CodeUnit& code, std::string_view } else if (c.kind == ClassSession::ConstSem::Kind::Class) { const std::string decoded = cpToUtf8(c.str); - const std::string_view tracking = reference::classLiteralTrackingName(decoded); + const std::string_view tracking = asm_analyzer::classLiteralTrackingName(decoded); if (!tracking.empty() && (!hasOwner || !hasLastString)) { reflectionOwner.assign(tracking); hasOwner = true; @@ -1226,7 +1226,7 @@ bool remapReflectionNames(const RemapCtx& ctx, CodeUnit& code, std::string_view // —— 数据流轨道(alias 快照;fail-open:引擎拒斥时保留线性轨道成果)—— if (aliases == nullptr) return changed; - reference::ReflectionQueryContext query; + asm_analyzer::ReflectionQueryContext query; query.code = &code; query.cp = &ctx.cf.cp; query.owner = className; @@ -1234,7 +1234,7 @@ bool remapReflectionNames(const RemapCtx& ctx, CodeUnit& code, std::string_view query.desc = methodDesc; query.isStatic = isStatic; query.aliases = aliases; - const reference::ReflectionSnapshot snapshot = reference::snapshotReflectionFacts(query); + const asm_analyzer::ReflectionSnapshot snapshot = asm_analyzer::snapshotReflectionFacts(query); if (!snapshot.ok) return changed; for (ca::usize pos = 0; pos < order.size(); ++pos) { @@ -1247,15 +1247,15 @@ bool remapReflectionNames(const RemapCtx& ctx, CodeUnit& code, std::string_view if (!methodLookup && !fieldLookup) continue; const auto it = snapshot.receivers.find(static_cast(pos)); if (it == snapshot.receivers.end()) continue; - reference::ReflectionValue receiver = it->second; + asm_analyzer::ReflectionValue receiver = it->second; if (const auto* alias = aliases->reflectionReceiverOf( className, methodName, methodDesc, static_cast(pos))) { if (alias->isKnown() && alias->identity.rfind("class:", 0) == 0) { - receiver.kind = reference::ReflectionValue::Kind::Class; + receiver.kind = asm_analyzer::ReflectionValue::Kind::Class; receiver.owner = alias->identity.substr(6); } } - if (receiver.kind != reference::ReflectionValue::Kind::Class) continue; + if (receiver.kind != asm_analyzer::ReflectionValue::Kind::Class) continue; for (ca::usize cursor = pos; cursor-- > 0;) { const Insn* cand = code.dom.peek(order[cursor]); diff --git a/mjbase/src/mjbase/reference/reference_index.cpp b/mjbase/src/mjbase/reference/reference_index.cpp index 64d398c..9f5ba40 100644 --- a/mjbase/src/mjbase/reference/reference_index.cpp +++ b/mjbase/src/mjbase/reference/reference_index.cpp @@ -16,7 +16,7 @@ #include "mjbase/analysis/class_scan.hpp" #include "mjbase/analysis/cp_refs.hpp" #include "mjbase/hierarchy/summary.hpp" -#include "mjbase/reference/reflection_interpreter.hpp" +#include "mjbase/asm/analyzer/reflection_interpreter.hpp" namespace mjbase::reference { @@ -28,6 +28,14 @@ using jbc::ir::SymbolId; using ConstSem = jbc::ir::ClassSession::ConstSem; using MemberRefSem = mjbase::analysis::MemberRefSem; using mjbase::asm_analyzer::aliasInterned; +using mjbase::asm_analyzer::ReflectionExecutionTarget; +using mjbase::asm_analyzer::ReflectionQueryContext; +using mjbase::asm_analyzer::ReflectionSnapshot; +using mjbase::asm_analyzer::ReflectionValue; +using mjbase::asm_analyzer::normalizeClassName; +using mjbase::asm_analyzer::reflectionArgumentDescriptor; +using mjbase::asm_analyzer::resolveReflectionExecution; +using mjbase::asm_analyzer::snapshotReflectionFacts; using mjbase::analysis::resolveClassName; using mjbase::analysis::resolveMemberRef; diff --git a/mjbase/src/mjbase/reference/reflection_binding_analyzer.cpp b/mjbase/src/mjbase/reference/reflection_binding_analyzer.cpp index 6b9ea4c..1638dc1 100644 --- a/mjbase/src/mjbase/reference/reflection_binding_analyzer.cpp +++ b/mjbase/src/mjbase/reference/reflection_binding_analyzer.cpp @@ -1,4 +1,5 @@ #include "mjbase/reference/reflection_binding_analyzer.hpp" +#include "mjbase/asm/analyzer/reflection_interpreter.hpp" #include #include @@ -14,7 +15,6 @@ #include "mjbase/analysis/cp_refs.hpp" #include "mjbase/asm/analyzer/frame_query.hpp" #include "mjbase/hierarchy/summary.hpp" -#include "mjbase/reference/reflection_interpreter.hpp" namespace mjbase::reference { @@ -27,6 +27,9 @@ using ConstSem = jbc::ir::ClassSession::ConstSem; using MemberRefSem = mjbase::analysis::MemberRefSem; using mjbase::analysis::resolveClassName; using mjbase::analysis::resolveMemberRef; +using mjbase::asm_analyzer::intConstantOf; +using mjbase::asm_analyzer::normalizeClassName; +using mjbase::asm_analyzer::regionHasIncomingBranches; namespace {