From adba8b1969a3f40245324d7feb5905693ca65d5e Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 6 Jun 2026 14:48:48 +0900 Subject: fix(base-package): move equals to PackageInterfaceHandle for reference identity PHP BasePackage::equals uses === (reference identity), unwrapping AliasPackage on both sides first. A plain &self / &dyn PackageInterface cannot express this, so implement it on the shared handle where the Rc-based identity infrastructure (as_alias, get_alias_of, ptr_eq) already lives, and drop the unimplementable trait stub. Co-Authored-By: Claude Opus 4.8 --- crates/shirabe/src/package/handle.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'crates/shirabe/src/package/handle.rs') diff --git a/crates/shirabe/src/package/handle.rs b/crates/shirabe/src/package/handle.rs index 2e723b3..5df4fc0 100644 --- a/crates/shirabe/src/package/handle.rs +++ b/crates/shirabe/src/package/handle.rs @@ -1359,6 +1359,20 @@ macro_rules! impl_handle_downcasts { impl_handle_downcasts!(PackageInterfaceHandle); +impl PackageInterfaceHandle { + pub fn equals(&self, package: &PackageInterfaceHandle) -> bool { + let self_real = match self.as_alias() { + Some(alias) => PackageInterfaceHandle::from(alias.get_alias_of()), + None => self.clone(), + }; + let other_real = match package.as_alias() { + Some(alias) => PackageInterfaceHandle::from(alias.get_alias_of()), + None => package.clone(), + }; + self_real.ptr_eq(&other_real) + } +} + impl PackageHandle { pub fn from_package(package: Package) -> Self { Self(Rc::new(RefCell::new(AnyPackage::Package(package)))) -- cgit v1.3.1