From 6128388c19f39affb1c14e406a6ae85422a2e500 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 15 Aug 2025 02:24:34 +0000 Subject: [PATCH] Fix FutureBox Arc duplicate definitions and cleanup imports Co-authored-by: moe-charm <217100418+moe-charm@users.noreply.github.com> --- libtest_syntax.rlib | Bin 0 -> 5592 bytes src/box_trait.rs | 134 +---------------------------------------- src/boxes/http/mod.rs | 1 - src/boxes/regex/mod.rs | 2 +- 4 files changed, 4 insertions(+), 133 deletions(-) create mode 100644 libtest_syntax.rlib diff --git a/libtest_syntax.rlib b/libtest_syntax.rlib new file mode 100644 index 0000000000000000000000000000000000000000..101bc938c5368995c2bb9262cd8e2c5f17cd3ad0 GIT binary patch literal 5592 zcmcII4RljwmM<@9UTEt}z$&dI@r6REb8P$a^7mfTYTKZ8v^o*+9Ark@_g-FTrD@Y7 zZPUt(DPblcWh_o-ryi7P7j_u;I8Jp~#gVhyG=K#n7KYuaBeL!ABRUnTu%j-_u=h)o z5-O~C_Uza5ec!$J-M{bN`~5VAGTtZF-;-HFUEAn1bQ(?{DTUYCg_TghxCGd$M^ zEY=jgE;Atc1GWB+rT`x-PKRBzXb}ZYa?uvv%+ux~adm4kUF<_sb4g}qV}nra^GE?c zY5PWgTg~Q#F~&kq15{n+GxycpkIQ5!_c0lE5A?6MYSmR*MFOnAlvoC)09XS(1NsAx zJci*IHiT$$=&1Qx{Q;OV3zP{I%SQx}G8VIJF-;X(1)3H_6U$Nz%~*d2Uc+O}QO*}^%O;H(^n^;M$Kj5luZ}zS6 zdwEf+6`Orh^o|A1k(_M}&ve}O-dj0OH*ZA>7^912jYi&Nv{?lgD8TUZszoRho5`t5@IydJi`e* z&+^7QRZeY*y zG&D7I);0$lTvF5%dGgTb`5r^`m93SRe)af6NJg?)T?|i~Sjp(N**F%N;9ZT9kBN3W zwnm@%&lg5o-_gc*!;7BS`SQQ~;*l$3|GgYZaIA?ox+II+MzdD4$qEt~s~bFx4bdkSzxqY^ z*_VFVM!r|DT>FE!5jO-vFj=9S7%SLF1iM*y3a#St`@fivJC|4vybwM3)MiZ)VrQU4 zL{>60yo}FozER5C6a;(I-&2&_T z@63Aa%ERrYM@n_wi#eU3TD>2WLC&q5*(9=pjkVAgn}r9x7@P=l=ozpt5h#NhwzCZW zFd2^F_&>?YZU<2IJb@^%`7b6mJFuyjT+62}OlQMoY8=Po3QT>kp|Et#eRuulOXUk2mz=FYn$|EpZ5xKojjP8!UhC{TPQ zkIDDT56X|gxsz}h&LK>_15@vu#uNU`8WJq;VCsW18GbS=`BCxUs?lwS_KkM`UhmmS zG@Jl3KBQ<>v?w|hTNRrWgNhLTy`|MFWGV%funr99{7W|cO(gMuXsI|L6{#2?N55@L z#SsPLMlBWF)LEV4yMo#ZI~rA2u5f6+2FI{lO9CEmN%|e-^G7ji@}9PhTaW!}$+qvD zdtl`5=WHp3GxMD?8RiXrs`+G>aeVT~{(YYuc~!u$V;NX(khRuY%|)$EYntG&D1trJ z8Z27f)EYfjT5{I_eOB?*z^eMUH2*M#Wu=*og63!{Wl1ZyewNDRjM)ps45&g$qh`=q zfEsfi`;|ArVcIakjnLc+L&v=O*PXNLgB&EnkxU=%Xkq9Zi3=&b$F_w&ct6=HGy0 zsYQby6$xJ|APzFD$}x1p0t+C4CS=pv%6BqfsmuBeMR>=RE#u18QRU}O^@R$xM?*A) zh~T)=JE{b9f+8oKWK|Be9OMky7&ZWl%EAqaJmdk5=*r(xIimQkQp0f1%hqQv&QRs) z6`O>R>OQ>c`K+p?8YYKTs9MEYL>y!(=zO=&YV+F zwLhb3VS#FWSBS%DIQ8hYLvs6<8TS6L_18rEN}@d&dD#hnB9YMn1*OGk(Q-7)LE|23fe>!>W)YC!gUq%P7P zB!Yd9)?DmSqX_7q(jVltXAQa&QQePZdgQP{H^nPg{5Z_UWA;HuIRxbLaM>w`eFLDe z?tPiC(nve_qar#B3145=4^C>x$szKzle|FZM~_zOPfg4po6wyA2deYzgW>XB;RWks zY`24p$I5m`xse#Gu`FJ_t3^eCS1l00m65y;_LGx!>QBd^WYwo>^=V4|S0~w|Ay3jI zpclrKACHr#oaC2u{+}m#?QoZFY-0YTL3hTW+iTE42G1JqbW<x1V5`I?cPYaX(mz$>e_6SGkeeJ}4Cw;lL=QvTJ=MHy(q~ zl|!cD6?^-22M2WHmHHD=t$UG3lM^VvYEW{Tb{N8~xrDzuQrjO{8v@zadSzwZv9jJ6 zJL)Kfa*9L5va1cZRq=Xo^>9?TtSiS|vzjK)Q|j~M%JWY3MWl*6J+3@MsV7EZvD+)c zZS_QlDw4PCj@>ak)Zq>X8;2Omxt?%YTwVsj>`ff~9TbLr2lk9lUrjkSWarKCG1XLl zSNE1JN0#<$3SDJJrs}6XhV86oJ9gl8CFcCDgQ}6*q{d}|ng-!9zx2TORwVurq1q&$ zzoEJ5fB!cb%U8+hbs9y!s*8?QDE4JL47nynxLZ+Bm~XYdZT-a?w%1GFVCI|N82sH^ zk19@9|9JDeufDr@^DFVqO}*$6dl~k45%`;x=_`c2Lv*h6_CdZ-sJYSDx-;7S1Gk*5 zL|YqTHC>apn@`q}A35RdR-Zxzul~qMUK|W{5gmnzofwQj6`?v@>3uQA?vmMegv)zl z_!`*M+T#=2I-nhyE*|(dLwykf4)G6>SsSL4nDHJ9DI0^08G{nC zL&d^*G9tHw%h(Zkbffc&h?ngM+h2qYD=+U4m%--kiJ`l3fSSI~w=3dKgtsJdhSV%X z2i&G-x6J=^*ZlFXj@9ny<+ns0WPbWkaOjY4(PuJDg1ZRaKl9|hyJ4ES*Q)@ofsXX8 zgpS(m8Sy|^u~pC)LSG9VwG`hpc6EFLY#~0dbs13^y4YB3DM~!prhg!E7>d63a6;dP%1}n~Sgii&Da?Z&QE?fg2B% z@JWGvcI9gv@atAEfEA0)9*@)nK;p#-zaF8bifgdq#>O^}=y6R0g7~#p=S?oB>>>, - pub is_ready: Arc>, - base: BoxBase, -} - -impl Clone for FutureBox { - fn clone(&self) -> Self { - Self { - result: Arc::clone(&self.result), - is_ready: Arc::clone(&self.is_ready), - base: BoxBase::new(), // 新しいIDを生成 - } - } -} - -impl FutureBox { - pub fn new() -> Self { - Self { - result: Arc::new(Mutex::new(None)), - is_ready: Arc::new(Mutex::new(false)), - base: BoxBase::new(), - } - } - - /// Set the result of the future - pub fn set_result(&self, value: Box) { - let mut result = self.result.lock().unwrap(); - *result = Some(value); - let mut ready = self.is_ready.lock().unwrap(); - *ready = true; - } - - /// Get the result (blocks until ready) - pub fn get(&self) -> Box { - // 簡易実装: ビジーウェイト(後でcondvarに改善) - loop { - let ready = self.is_ready.lock().unwrap(); - if *ready { - break; - } - drop(ready); - std::thread::yield_now(); - } - - let result = self.result.lock().unwrap(); - result.as_ref().unwrap().clone_box() - } - - /// Check if the future is ready - pub fn ready(&self) -> Box { - Box::new(BoolBox::new(*self.is_ready.lock().unwrap())) - } - - /// Wait and get the result (for await implementation) - pub fn wait_and_get(&self) -> Result, String> { - // 結果が準備できるまで待機 - while !*self.is_ready.lock().unwrap() { - std::thread::yield_now(); - } - - let result = self.result.lock().unwrap(); - result.as_ref() - .map(|v| v.clone_box()) - .ok_or_else(|| "Future has no result".to_string()) - } -} - -impl NyashBox for FutureBox { - fn to_string_box(&self) -> StringBox { - let ready = *self.is_ready.lock().unwrap(); - if ready { - let result = self.result.lock().unwrap(); - if let Some(value) = result.as_ref() { - StringBox::new(format!("Future(ready: {})", value.to_string_box().value)) - } else { - StringBox::new("Future(ready: void)".to_string()) - } - } else { - StringBox::new("Future(pending)".to_string()) - } - } - - fn equals(&self, other: &dyn NyashBox) -> BoolBox { - if let Some(other_future) = other.as_any().downcast_ref::() { - BoolBox::new(self.base.id == other_future.base.id) - } else { - BoolBox::new(false) - } - } - - fn type_name(&self) -> &'static str { - "FutureBox" - } - - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } - -} - -impl BoxCore for FutureBox { - fn box_id(&self) -> u64 { - self.base.id - } - - fn parent_type_id(&self) -> Option { - self.base.parent_type_id - } - - fn fmt_box(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(f, "{}", self.to_string_box().value) - } - - fn as_any(&self) -> &dyn Any { - self - } - - fn as_any_mut(&mut self) -> &mut dyn Any { - self - } -} - -impl Display for FutureBox { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - self.fmt_box(f) - } -} +// FutureBox is now implemented in src/boxes/future/mod.rs using RwLock pattern +// and re-exported from src/boxes/mod.rs as both NyashFutureBox and FutureBox // Re-export operation boxes from the dedicated operations module pub use crate::box_arithmetic::{AddBox, SubtractBox, MultiplyBox, DivideBox, CompareBox}; diff --git a/src/boxes/http/mod.rs b/src/boxes/http/mod.rs index af680311..3b065a05 100644 --- a/src/boxes/http/mod.rs +++ b/src/boxes/http/mod.rs @@ -8,7 +8,6 @@ use crate::box_trait::{NyashBox, StringBox, BoolBox, BoxCore, BoxBase}; use crate::boxes::map_box::MapBox; use std::any::Any; -use std::sync::{Arc, Mutex}; #[derive(Debug, Clone)] pub struct HttpClientBox { diff --git a/src/boxes/regex/mod.rs b/src/boxes/regex/mod.rs index ed13c480..8b186df7 100644 --- a/src/boxes/regex/mod.rs +++ b/src/boxes/regex/mod.rs @@ -6,7 +6,7 @@ use regex::Regex; use crate::box_trait::{NyashBox, StringBox, BoolBox, BoxCore, BoxBase}; use crate::boxes::array::ArrayBox; use std::any::Any; -use std::sync::{Arc, Mutex}; +use std::sync::Arc; use std::fmt::Debug; #[derive(Debug, Clone)]