mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 23:33:54 -06:00
rust: qom: add ObjectImpl::CLASS_INIT
As shown in the PL011 device, the orphan rules required a manual implementation of ClassInitImpl for anything not in the qemu_api crate; this gets in the way of moving system emulation-specific code (including DeviceClass, which as a blanket ClassInitImpl<DeviceClass> implementation) into its own crate. Make ClassInitImpl optional, at the cost of having to specify the CLASS_INIT member by hand in every implementation of ObjectImpl. The next commits will get rid of it, replacing all the "impl<T> ClassInitImpl<Class> for T" blocks with a generic class_init<T> method on Class. Right now the definition is always the same, but do not provide a default as that will not be true once ClassInitImpl goes away. Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
3212da0033
commit
4551f342fe
4 changed files with 19 additions and 4 deletions
|
@ -60,6 +60,7 @@ unsafe impl ObjectType for DummyState {
|
|||
impl ObjectImpl for DummyState {
|
||||
type ParentType = DeviceState;
|
||||
const ABSTRACT: bool = false;
|
||||
const CLASS_INIT: fn(&mut DummyClass) = <Self as ClassInitImpl<DummyClass>>::class_init;
|
||||
}
|
||||
|
||||
impl ResettablePhasesImpl for DummyState {}
|
||||
|
@ -102,6 +103,8 @@ unsafe impl ObjectType for DummyChildState {
|
|||
impl ObjectImpl for DummyChildState {
|
||||
type ParentType = DummyState;
|
||||
const ABSTRACT: bool = false;
|
||||
const CLASS_INIT: fn(&mut DummyChildClass) =
|
||||
<Self as ClassInitImpl<DummyChildClass>>::class_init;
|
||||
}
|
||||
|
||||
impl ResettablePhasesImpl for DummyChildState {}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue