aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe-php-rpc/php/stubs/Composer/Installer
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-08-07 20:51:59 +0900
committernsfisis <nsfisis@gmail.com>2026-08-07 20:51:59 +0900
commit18a37a098157a98edbc8473e9c0d8dff3e8a88fa (patch)
tree471682a4493fc8ddc1577a6f1e3c3d9c203ebf2c /crates/shirabe-php-rpc/php/stubs/Composer/Installer
parentcd9e4a2b67cdea258e1daa2d9d830b7643bc19bb (diff)
downloadphp-shirabe-18a37a098157a98edbc8473e9c0d8dff3e8a88fa.tar.gz
php-shirabe-18a37a098157a98edbc8473e9c0d8dff3e8a88fa.tar.zst
php-shirabe-18a37a098157a98edbc8473e9c0d8dff3e8a88fa.zip
fix(plugin): make proxy stub property access an explicit error
A proxy stub declares none of the real class's instance properties, and the `__get`/`__set` forwarders were emitted only for classes that declare a public one. Every other property access therefore got PHP's own answer for an undeclared property — null on a read, a dynamic property on a write — so plugin code reading state the entity holds ran on with null and failed somewhere else entirely, or not at all. Emit the forwarders on every root stub, add `__isset`/`__unset` alongside them so `isset()` cannot answer false silently either, and serve all four from one dispatcher that answers the state the Rust-side entity exposes and rejects every other name. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe-php-rpc/php/stubs/Composer/Installer')
-rw-r--r--crates/shirabe-php-rpc/php/stubs/Composer/Installer/InstallationManager.php20
1 files changed, 20 insertions, 0 deletions
diff --git a/crates/shirabe-php-rpc/php/stubs/Composer/Installer/InstallationManager.php b/crates/shirabe-php-rpc/php/stubs/Composer/Installer/InstallationManager.php
index 7f41f6b9..6d3e9cf9 100644
--- a/crates/shirabe-php-rpc/php/stubs/Composer/Installer/InstallationManager.php
+++ b/crates/shirabe-php-rpc/php/stubs/Composer/Installer/InstallationManager.php
@@ -58,6 +58,26 @@ class InstallationManager implements \ShirabeRustStub
\ShirabeRustObjectRegistry::adopt($this->__rhandle, $this);
}
+ public function __get($name)
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, '__get', [$name]);
+ }
+
+ public function __set($name, $value): void
+ {
+ \ShirabeRpcRuntime::callRust($this->__rhandle, '__set', [$name, $value]);
+ }
+
+ public function __isset($name): bool
+ {
+ return \ShirabeRpcRuntime::callRust($this->__rhandle, '__isset', [$name]);
+ }
+
+ public function __unset($name): void
+ {
+ \ShirabeRpcRuntime::callRust($this->__rhandle, '__unset', [$name]);
+ }
+
public function __construct(Loop $loop, IOInterface $io, ?EventDispatcher $eventDispatcher = null)
{
[$this->__rhandle, $this->__epoch] = \ShirabeRpcRuntime::callRust(0, '__shirabeConstruct', [static::class, [$loop, $io, $eventDispatcher]]);