aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe-external-packages/src/symfony/process/pipes/windows_pipes.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-24 03:09:17 +0900
committernsfisis <nsfisis@gmail.com>2026-06-24 03:09:17 +0900
commitc5fc34a106a706ac12925c4df273a926811d260b (patch)
tree24e798c4a00b32aa1a1f155b705d02fba9895875 /crates/shirabe-external-packages/src/symfony/process/pipes/windows_pipes.rs
parentb2b321a26f6a628ee8e6757eb8577613e2024e70 (diff)
downloadphp-shirabe-c5fc34a106a706ac12925c4df273a926811d260b.tar.gz
php-shirabe-c5fc34a106a706ac12925c4df273a926811d260b.tar.zst
php-shirabe-c5fc34a106a706ac12925c4df273a926811d260b.zip
feat(process): redesign proc_* on PhpResource process handles
proc_open/proc_close/proc_get_status/proc_terminate represented the process handle as a PhpMixed, which cannot hold a live child process or its pipes, so they were stubs or todo!(). Model the handle as a new PhpResource::Process variant and child pipes as a StreamBacking::Pipe, with a native Descriptor enum for descriptorspec; proc_open now returns io::Result and fills pipes as IndexMap<i64, PhpResource>. Rewire the Symfony Process pipes and the Console terminal/cursor onto the new types, removing the "PhpMixed cannot carry a PhpResource" todo!()s. The remaining todo!()s are genuine syscall leaves (proc_terminate signal delivery, stream_select, stream_set_blocking, posix_kill, pty, fd>=3) left unimplemented since no syscall crate is introduced. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe-external-packages/src/symfony/process/pipes/windows_pipes.rs')
-rw-r--r--crates/shirabe-external-packages/src/symfony/process/pipes/windows_pipes.rs14
1 files changed, 7 insertions, 7 deletions
diff --git a/crates/shirabe-external-packages/src/symfony/process/pipes/windows_pipes.rs b/crates/shirabe-external-packages/src/symfony/process/pipes/windows_pipes.rs
index 7602e7d..a31f184 100644
--- a/crates/shirabe-external-packages/src/symfony/process/pipes/windows_pipes.rs
+++ b/crates/shirabe-external-packages/src/symfony/process/pipes/windows_pipes.rs
@@ -1,7 +1,7 @@
//! ref: composer/vendor/symfony/process/Pipes/WindowsPipes.php
use indexmap::IndexMap;
-use shirabe_php_shim::PhpMixed;
+use shirabe_php_shim::{Descriptor, PhpMixed, PhpResource};
use crate::symfony::process::pipes::abstract_pipes::AbstractPipes;
use crate::symfony::process::pipes::pipes_interface::PipesInterface;
@@ -11,8 +11,8 @@ use crate::symfony::process::pipes::pipes_interface::PipesInterface;
pub struct WindowsPipes {
inner: AbstractPipes,
files: IndexMap<i64, String>,
- file_handles: IndexMap<i64, PhpMixed>,
- lock_handles: IndexMap<i64, PhpMixed>,
+ file_handles: IndexMap<i64, PhpResource>,
+ lock_handles: IndexMap<i64, PhpResource>,
read_bytes: IndexMap<i64, i64>,
have_read_support: bool,
}
@@ -25,7 +25,7 @@ impl WindowsPipes {
}
impl PipesInterface for WindowsPipes {
- fn get_descriptors(&mut self) -> Vec<PhpMixed> {
+ fn get_descriptors(&mut self) -> Vec<Descriptor> {
let _ = (
&self.files,
&self.file_handles,
@@ -48,7 +48,7 @@ impl PipesInterface for WindowsPipes {
}
fn are_open(&self) -> bool {
- shirabe_php_shim::php_truthy(&self.inner.pipes) && !self.file_handles.is_empty()
+ !self.inner.pipes.is_empty() && !self.file_handles.is_empty()
}
fn close(&mut self) {
@@ -56,11 +56,11 @@ impl PipesInterface for WindowsPipes {
todo!()
}
- fn pipes(&self) -> &PhpMixed {
+ fn pipes(&self) -> &IndexMap<i64, PhpResource> {
&self.inner.pipes
}
- fn pipes_mut(&mut self) -> &mut PhpMixed {
+ fn pipes_mut(&mut self) -> &mut IndexMap<i64, PhpResource> {
&mut self.inner.pipes
}
}