aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/package/handle.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-06 14:48:48 +0900
committernsfisis <nsfisis@gmail.com>2026-06-06 14:48:48 +0900
commitadba8b1969a3f40245324d7feb5905693ca65d5e (patch)
tree7146bcbfae65664cbc32019d34a8e2d49fa11703 /crates/shirabe/src/package/handle.rs
parente89e1785e3df047a869c48b91709289a3b145b49 (diff)
downloadphp-shirabe-adba8b1969a3f40245324d7feb5905693ca65d5e.tar.gz
php-shirabe-adba8b1969a3f40245324d7feb5905693ca65d5e.tar.zst
php-shirabe-adba8b1969a3f40245324d7feb5905693ca65d5e.zip
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 <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/package/handle.rs')
-rw-r--r--crates/shirabe/src/package/handle.rs14
1 files changed, 14 insertions, 0 deletions
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))))