From b34dc85e7e956d3443874fb1804d03f0a54b65ab Mon Sep 17 00:00:00 2001 From: LI Qing Date: Thu, 25 May 2023 10:36:18 +0800 Subject: [PATCH] Remove the as_any_ref() function for trait --- services/libs/jinux-std/src/fs/epoll/epoll_file.rs | 4 ---- services/libs/jinux-std/src/fs/file_handle.rs | 4 +--- .../libs/jinux-std/src/fs/inode_handle/dyn_cap.rs | 4 ---- services/libs/jinux-std/src/fs/pipe.rs | 8 -------- services/libs/jinux-std/src/fs/procfs/mod.rs | 6 ------ .../libs/jinux-std/src/fs/procfs/template/dir.rs | 6 ------ .../libs/jinux-std/src/fs/procfs/template/file.rs | 6 ------ .../libs/jinux-std/src/fs/procfs/template/sym.rs | 6 ------ services/libs/jinux-std/src/fs/ramfs/fs.rs | 9 --------- services/libs/jinux-std/src/fs/stdio.rs | 12 ------------ services/libs/jinux-std/src/fs/utils/fs.rs | 4 +--- services/libs/jinux-std/src/fs/utils/inode.rs | 4 +--- services/libs/jinux-std/src/lib.rs | 1 + services/libs/jinux-std/src/syscall/open.rs | 4 ---- services/libs/jinux-std/src/tty/mod.rs | 4 ---- 15 files changed, 4 insertions(+), 78 deletions(-) diff --git a/services/libs/jinux-std/src/fs/epoll/epoll_file.rs b/services/libs/jinux-std/src/fs/epoll/epoll_file.rs index 6df757ae9..76d8a7053 100644 --- a/services/libs/jinux-std/src/fs/epoll/epoll_file.rs +++ b/services/libs/jinux-std/src/fs/epoll/epoll_file.rs @@ -341,10 +341,6 @@ impl FileLike for EpollFile { .unregister_observer(observer) .ok_or_else(|| Error::with_message(Errno::ENOENT, "observer is not registered")) } - - fn as_any_ref(&self) -> &dyn Any { - self - } } /// An epoll entry contained in an epoll file. Each epoll entry is added, modified, diff --git a/services/libs/jinux-std/src/fs/file_handle.rs b/services/libs/jinux-std/src/fs/file_handle.rs index e08841e7c..01a2f3e79 100644 --- a/services/libs/jinux-std/src/fs/file_handle.rs +++ b/services/libs/jinux-std/src/fs/file_handle.rs @@ -63,12 +63,10 @@ pub trait FileLike: Send + Sync + Any { ) -> Result>> { return_errno_with_message!(Errno::EINVAL, "unregister_observer is not supported") } - - fn as_any_ref(&self) -> &dyn Any; } impl dyn FileLike { pub fn downcast_ref(&self) -> Option<&T> { - self.as_any_ref().downcast_ref::() + (self as &dyn Any).downcast_ref::() } } diff --git a/services/libs/jinux-std/src/fs/inode_handle/dyn_cap.rs b/services/libs/jinux-std/src/fs/inode_handle/dyn_cap.rs index 2634254d0..94afd08ef 100644 --- a/services/libs/jinux-std/src/fs/inode_handle/dyn_cap.rs +++ b/services/libs/jinux-std/src/fs/inode_handle/dyn_cap.rs @@ -88,8 +88,4 @@ impl FileLike for InodeHandle { // Close does not guarantee that the data has been successfully saved to disk. Ok(()) } - - fn as_any_ref(&self) -> &dyn Any { - self - } } diff --git a/services/libs/jinux-std/src/fs/pipe.rs b/services/libs/jinux-std/src/fs/pipe.rs index feedfc8cb..2bbc1126e 100644 --- a/services/libs/jinux-std/src/fs/pipe.rs +++ b/services/libs/jinux-std/src/fs/pipe.rs @@ -57,10 +57,6 @@ impl FileLike for PipeReader { ) -> Result>> { self.consumer.unregister_observer(observer) } - - fn as_any_ref(&self) -> &dyn Any { - self - } } pub struct PipeWriter { @@ -116,10 +112,6 @@ impl FileLike for PipeWriter { ) -> Result>> { self.producer.unregister_observer(observer) } - - fn as_any_ref(&self) -> &dyn Any { - self - } } fn should_io_return(res: &Result, is_nonblocking: bool) -> bool { diff --git a/services/libs/jinux-std/src/fs/procfs/mod.rs b/services/libs/jinux-std/src/fs/procfs/mod.rs index 4bd26cec0..b4caf4179 100644 --- a/services/libs/jinux-std/src/fs/procfs/mod.rs +++ b/services/libs/jinux-std/src/fs/procfs/mod.rs @@ -1,5 +1,3 @@ -use alloc::string::{String, ToString}; -use core::any::Any; use core::sync::atomic::{AtomicUsize, Ordering}; use crate::events::Observer; @@ -66,10 +64,6 @@ impl FileSystem for ProcFS { fn flags(&self) -> FsFlags { FsFlags::NO_PAGECACHE } - - fn as_any_ref(&self) -> &dyn Any { - self - } } /// Represents the inode at `/proc`. diff --git a/services/libs/jinux-std/src/fs/procfs/template/dir.rs b/services/libs/jinux-std/src/fs/procfs/template/dir.rs index 8659574f3..8e2cc3271 100644 --- a/services/libs/jinux-std/src/fs/procfs/template/dir.rs +++ b/services/libs/jinux-std/src/fs/procfs/template/dir.rs @@ -1,5 +1,3 @@ -use alloc::string::String; -use core::any::Any; use core::time::Duration; use jinux_frame::vm::VmFrame; use jinux_util::slot_vec::SlotVec; @@ -211,10 +209,6 @@ impl Inode for ProcDir { fn is_dentry_cacheable(&self) -> bool { !self.info.is_volatile() } - - fn as_any_ref(&self) -> &dyn Any { - self - } } pub trait DirOps: Sync + Send { diff --git a/services/libs/jinux-std/src/fs/procfs/template/file.rs b/services/libs/jinux-std/src/fs/procfs/template/file.rs index cc06fee22..bc88acfa9 100644 --- a/services/libs/jinux-std/src/fs/procfs/template/file.rs +++ b/services/libs/jinux-std/src/fs/procfs/template/file.rs @@ -1,5 +1,3 @@ -use alloc::string::String; -use core::any::Any; use core::time::Duration; use jinux_frame::vm::VmFrame; @@ -125,10 +123,6 @@ impl Inode for ProcFile { fn is_dentry_cacheable(&self) -> bool { !self.info.is_volatile() } - - fn as_any_ref(&self) -> &dyn Any { - self - } } pub trait FileOps: Sync + Send { diff --git a/services/libs/jinux-std/src/fs/procfs/template/sym.rs b/services/libs/jinux-std/src/fs/procfs/template/sym.rs index 8074b0791..17d279c98 100644 --- a/services/libs/jinux-std/src/fs/procfs/template/sym.rs +++ b/services/libs/jinux-std/src/fs/procfs/template/sym.rs @@ -1,5 +1,3 @@ -use alloc::string::String; -use core::any::Any; use core::time::Duration; use jinux_frame::vm::VmFrame; @@ -120,10 +118,6 @@ impl Inode for ProcSym { fn is_dentry_cacheable(&self) -> bool { !self.info.is_volatile() } - - fn as_any_ref(&self) -> &dyn Any { - self - } } pub trait SymOps: Sync + Send { diff --git a/services/libs/jinux-std/src/fs/ramfs/fs.rs b/services/libs/jinux-std/src/fs/ramfs/fs.rs index 03817be15..2d301194d 100644 --- a/services/libs/jinux-std/src/fs/ramfs/fs.rs +++ b/services/libs/jinux-std/src/fs/ramfs/fs.rs @@ -1,7 +1,6 @@ use crate::prelude::*; use alloc::str; use alloc::string::String; -use core::any::Any; use core::sync::atomic::{AtomicUsize, Ordering}; use core::time::Duration; use jinux_frame::vm::VmFrame; @@ -67,10 +66,6 @@ impl FileSystem for RamFS { fn flags(&self) -> FsFlags { FsFlags::DENTRY_UNEVICTABLE } - - fn as_any_ref(&self) -> &dyn Any { - self - } } struct RamInode(RwLock); @@ -643,10 +638,6 @@ impl Inode for RamInode { fn ioctl(&self, cmd: &IoctlCmd) -> Result<()> { return_errno!(Errno::ENOSYS); } - - fn as_any_ref(&self) -> &dyn Any { - self - } } fn write_lock_two_inodes<'a>( diff --git a/services/libs/jinux-std/src/fs/stdio.rs b/services/libs/jinux-std/src/fs/stdio.rs index f19de531b..16ece7905 100644 --- a/services/libs/jinux-std/src/fs/stdio.rs +++ b/services/libs/jinux-std/src/fs/stdio.rs @@ -69,10 +69,6 @@ impl FileLike for Stdin { rdev: 0, } } - - fn as_any_ref(&self) -> &dyn Any { - self - } } impl FileLike for Stdout { fn ioctl(&self, cmd: super::utils::IoctlCmd, arg: usize) -> Result { @@ -114,10 +110,6 @@ impl FileLike for Stdout { rdev: 0, } } - - fn as_any_ref(&self) -> &dyn Any { - self - } } impl FileLike for Stderr { @@ -160,10 +152,6 @@ impl FileLike for Stderr { rdev: 0, } } - - fn as_any_ref(&self) -> &dyn Any { - self - } } impl Stdin { diff --git a/services/libs/jinux-std/src/fs/utils/fs.rs b/services/libs/jinux-std/src/fs/utils/fs.rs index e5a9d79db..c2c2bd2bb 100644 --- a/services/libs/jinux-std/src/fs/utils/fs.rs +++ b/services/libs/jinux-std/src/fs/utils/fs.rs @@ -55,12 +55,10 @@ pub trait FileSystem: Any + Sync + Send { fn sb(&self) -> SuperBlock; fn flags(&self) -> FsFlags; - - fn as_any_ref(&self) -> &dyn Any; } impl dyn FileSystem { pub fn downcast_ref(&self) -> Option<&T> { - self.as_any_ref().downcast_ref::() + (self as &dyn Any).downcast_ref::() } } diff --git a/services/libs/jinux-std/src/fs/utils/inode.rs b/services/libs/jinux-std/src/fs/utils/inode.rs index fde7fdf41..814ce3094 100644 --- a/services/libs/jinux-std/src/fs/utils/inode.rs +++ b/services/libs/jinux-std/src/fs/utils/inode.rs @@ -204,8 +204,6 @@ pub trait Inode: Any + Sync + Send { fn fs(&self) -> Arc; - fn as_any_ref(&self) -> &dyn Any; - /// Returns whether a VFS dentry for this inode should be put into the dentry cache. /// /// The dentry cache in the VFS layer can accelerate the lookup of inodes. So usually, @@ -229,6 +227,6 @@ pub trait Inode: Any + Sync + Send { impl dyn Inode { pub fn downcast_ref(&self) -> Option<&T> { - self.as_any_ref().downcast_ref::() + (self as &dyn Any).downcast_ref::() } } diff --git a/services/libs/jinux-std/src/lib.rs b/services/libs/jinux-std/src/lib.rs index e65c42701..562eba47a 100644 --- a/services/libs/jinux-std/src/lib.rs +++ b/services/libs/jinux-std/src/lib.rs @@ -17,6 +17,7 @@ #![feature(fn_traits)] #![feature(linked_list_remove)] #![feature(register_tool)] +#![feature(trait_upcasting)] #![register_tool(component_access_control)] use crate::{ diff --git a/services/libs/jinux-std/src/syscall/open.rs b/services/libs/jinux-std/src/syscall/open.rs index b6ba1bb53..66f9daa66 100644 --- a/services/libs/jinux-std/src/syscall/open.rs +++ b/services/libs/jinux-std/src/syscall/open.rs @@ -79,8 +79,4 @@ impl FileLike for BusyBoxTraceFile { debug!("ASH TRACE: {}", core::str::from_utf8(buf)?); Ok(buf.len()) } - - fn as_any_ref(&self) -> &dyn Any { - self - } } diff --git a/services/libs/jinux-std/src/tty/mod.rs b/services/libs/jinux-std/src/tty/mod.rs index 5c7be6f20..8bc8573da 100644 --- a/services/libs/jinux-std/src/tty/mod.rs +++ b/services/libs/jinux-std/src/tty/mod.rs @@ -129,10 +129,6 @@ impl FileLike for Tty { rdev: 0, } } - - fn as_any_ref(&self) -> &dyn Any { - self - } } /// FIXME: should we maintain a static console?