//! Rust 测试框架调用的属性存储回归,不执行源码指令。
//! Proxy 让字段存储与名义身份分开;ReflectiveType 触发类型查询对自身属性的重入。
//! 断言覆盖托管边生命周期、失败不修改版本、能力方法不得被实例属性遮蔽。
use objects::{ObjectPayload, ObjectRef, ObjectStore, TypeConstructor, Value, VmError};
#[derive(Debug)]
/// 一个拥有后端存储引用的门面,type_target 保持默认 None。
struct Proxy(ObjectRef);
impl ObjectPayload for Proxy {
/// Store 下转型测试载荷,不进行语言类型判定。
fn as_any(&self) -> &dyn std::any::Any {
self
}
/// 测试错误/诊断使用的类别标签。
fn kind_name(&self) -> &'static str {
"proxy"
}
/// Heap 分配/替换时记录一条拥有边,确保被代理存储或自引用 Cell 存活。
fn trace(&self, visit: &mut dyn FnMut(ObjectRef)) {
visit(self.0);
}
/// Store::attribute_path 追踪实际字段存储,不改变代理对象头部类型。
fn attribute_target(&self, _: &ObjectStore) -> Result