Skip to content

Commit 4e6122e

Browse files
committed
Add async to instantiate
1 parent b4f3bba commit 4e6122e

File tree

5 files changed

+9
-7
lines changed

5 files changed

+9
-7
lines changed

jvm/src/array_class_definition.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ use java_constants::ClassAccessFlags;
99

1010
use crate::{Result, class_definition::ClassDefinition, class_instance::ClassInstance, field::Field, method::Method, value::JavaValue};
1111

12+
#[async_trait::async_trait]
1213
pub trait ArrayClassDefinition: ClassDefinition {
1314
fn element_type_name(&self) -> String;
14-
fn instantiate_array(&self, length: usize) -> Result<Box<dyn ClassInstance>>;
15+
async fn instantiate_array(&self, length: usize) -> Result<Box<dyn ClassInstance>>;
1516
}
1617

1718
clone_trait_object!(ArrayClassDefinition);
@@ -30,7 +31,7 @@ impl<T: ArrayClassDefinition> ClassDefinition for T {
3031
ClassAccessFlags::PUBLIC | ClassAccessFlags::FINAL
3132
}
3233

33-
fn instantiate(&self) -> Result<Box<dyn ClassInstance>> {
34+
async fn instantiate(&self) -> Result<Box<dyn ClassInstance>> {
3435
panic!("Cannot instantiate array class")
3536
}
3637

jvm/src/class_definition.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ pub trait ClassDefinition: Sync + Send + AsAny + Debug + DynClone {
1212
fn name(&self) -> String;
1313
fn super_class_name(&self) -> Option<String>;
1414
fn access_flags(&self) -> ClassAccessFlags;
15-
fn instantiate(&self) -> Result<Box<dyn ClassInstance>>;
15+
async fn instantiate(&self) -> Result<Box<dyn ClassInstance>>;
1616
fn method(&self, name: &str, descriptor: &str, is_static: bool) -> Option<Box<dyn Method>>;
1717
fn field(&self, name: &str, descriptor: &str, is_static: bool) -> Option<Box<dyn Field>>;
1818
fn fields(&self) -> Vec<Box<dyn Field>>;

jvm/src/jvm.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ impl Jvm {
121121
.await);
122122
}
123123

124-
let instance = class.definition.instantiate()?;
124+
let instance = class.definition.instantiate().await?;
125125

126126
let thread_id = (self.inner.get_current_thread_id)();
127127
let mut threads = self.inner.threads.write();
@@ -152,7 +152,7 @@ impl Jvm {
152152
let class = self.resolve_class(&class_name).await?.definition;
153153
let array_class = class.as_array_class_definition().unwrap();
154154

155-
let instance = array_class.instantiate_array(length)?;
155+
let instance = array_class.instantiate_array(length).await?;
156156

157157
let thread_id = (self.inner.get_current_thread_id)();
158158
let mut threads = self.inner.threads.write();

jvm_rust/src/array_class_definition.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,13 @@ impl ArrayClassDefinitionImpl {
2828
}
2929
}
3030

31+
#[async_trait::async_trait]
3132
impl ArrayClassDefinition for ArrayClassDefinitionImpl {
3233
fn element_type_name(&self) -> String {
3334
self.inner.element_type_name.clone()
3435
}
3536

36-
fn instantiate_array(&self, length: usize) -> Result<Box<dyn ClassInstance>> {
37+
async fn instantiate_array(&self, length: usize) -> Result<Box<dyn ClassInstance>> {
3738
Ok(Box::new(ArrayClassInstanceImpl::new(self, length)))
3839
}
3940
}

jvm_rust/src/class_definition.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ impl ClassDefinition for ClassDefinitionImpl {
105105
self.inner.access_flags
106106
}
107107

108-
fn instantiate(&self) -> Result<Box<dyn ClassInstance>> {
108+
async fn instantiate(&self) -> Result<Box<dyn ClassInstance>> {
109109
Ok(Box::new(ClassInstanceImpl::new(self)))
110110
}
111111

0 commit comments

Comments
 (0)