Skip to content

Commit b4733a4

Browse files
Merge pull request #282 from theseus-rs/encapsulate-concurrentvec
refactor: encapsulate use of ConcurrentVec
2 parents a37ee46 + 1a7e7c4 commit b4733a4

File tree

17 files changed

+92
-122
lines changed

17 files changed

+92
-122
lines changed

Cargo.lock

Lines changed: 30 additions & 31 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ sys-locale = "0.3.1"
4949
tar = "0.4.44"
5050
tempfile = "3.17.1"
5151
thiserror = "2.0.12"
52-
tokio = { version = "1.43.0", default-features = false, features = ["macros", "rt", "sync"] }
52+
tokio = { version = "1.44.0", default-features = false, features = ["macros", "rt", "sync"] }
5353
tracing = "0.1.41"
5454
tracing-subscriber = "0.3.19"
5555
walkdir = "2.5.0"

ristretto_classloader/src/concurrent_vec.rs

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,7 @@ impl<T: Clone + Debug + PartialEq> ConcurrentVec<T> {
1313
/// Create a new concurrent vector.
1414
#[must_use]
1515
pub fn new() -> Self {
16-
Self::with_capacity(0)
17-
}
18-
19-
/// Create a new concurrent vector with the defined capacity.
20-
#[must_use]
21-
pub fn with_capacity(capacity: usize) -> Self {
22-
Self::from(Vec::with_capacity(capacity))
16+
Self::from(Vec::new())
2317
}
2418

2519
/// Create a new concurrent vector from a vector.
@@ -291,15 +285,6 @@ mod tests {
291285
Ok(())
292286
}
293287

294-
#[test]
295-
fn test_capacity() -> Result<()> {
296-
let vec: ConcurrentVec<u8> = ConcurrentVec::new();
297-
assert_eq!(vec.capacity()?, 0);
298-
let vec: ConcurrentVec<u8> = ConcurrentVec::with_capacity(10);
299-
assert_eq!(vec.capacity()?, 10);
300-
Ok(())
301-
}
302-
303288
#[test]
304289
fn test_remove() -> Result<()> {
305290
let vec = ConcurrentVec::new();

ristretto_classloader/src/object.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -506,8 +506,7 @@ impl TryInto<Arc<Class>> for Object {
506506
#[cfg(test)]
507507
mod tests {
508508
use super::*;
509-
use crate::Reference::IntArray;
510-
use crate::{ConcurrentVec, runtime};
509+
use crate::runtime;
511510

512511
async fn java8_string_class() -> Result<Arc<Class>> {
513512
let (_java_home, _java_version, class_loader) =
@@ -940,7 +939,7 @@ mod tests {
940939
async fn test_try_into_string_java8_invalid_byte_array_value() -> Result<()> {
941940
let class = java8_string_class().await?;
942941
let object = Object::new(class)?;
943-
let string_value = Value::Object(Some(IntArray(ConcurrentVec::from(vec![]))));
942+
let string_value = Value::from(Vec::<i32>::new());
944943
object.set_value("value", string_value)?;
945944
let result: Result<String> = object.try_into();
946945
assert!(matches!(result, Err(InvalidValueType(_))));
@@ -981,7 +980,7 @@ mod tests {
981980
async fn test_try_into_string_invalid_char_array_value() -> Result<()> {
982981
let class = string_class().await?;
983982
let object = Object::new(class)?;
984-
let string_value = Value::Object(Some(IntArray(ConcurrentVec::from(vec![]))));
983+
let string_value = Value::from(Vec::<i32>::new());
985984
object.set_value("value", string_value)?;
986985
let result: Result<String> = object.try_into();
987986
assert!(matches!(result, Err(InvalidValueType(_))));

ristretto_classloader/src/reference.rs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -174,16 +174,15 @@ impl Reference {
174174
Reference::DoubleArray(value) => Reference::DoubleArray(value.deep_clone()?),
175175
Reference::Array(class, value) => {
176176
let values = value.to_vec()?;
177-
let array: ConcurrentVec<Option<Reference>> =
178-
ConcurrentVec::with_capacity(values.len());
177+
let mut cloned_values = Vec::with_capacity(values.len());
179178
for value in values {
180179
if let Some(reference) = value {
181-
array.push(Some(reference.deep_clone()?))?;
180+
cloned_values.push(Value::from(reference.deep_clone()?));
182181
} else {
183-
array.push(None)?;
182+
cloned_values.push(Value::Object(None));
184183
}
185184
}
186-
Reference::Array(class.clone(), array)
185+
Reference::try_from((class.clone(), cloned_values))?
187186
}
188187
Reference::Object(value) => Reference::Object(value.deep_clone()?),
189188
};
@@ -871,7 +870,7 @@ mod tests {
871870
#[test]
872871
fn test_display_reference_array() -> Result<()> {
873872
let class = Class::new_named("[Ljava/lang/Object;")?;
874-
let reference = Reference::Array(class, ConcurrentVec::from(vec![None]));
873+
let reference = Reference::from((class, vec![None]));
875874
assert_eq!(reference.class_name(), "[Ljava/lang/Object;");
876875
assert_eq!(reference.class()?.name(), "[Ljava/lang/Object;");
877876
assert_eq!(reference.to_string(), "java/lang/Object[1]");
@@ -1125,7 +1124,7 @@ mod tests {
11251124
#[test]
11261125
fn test_clone_reference_array() -> Result<()> {
11271126
let class = minimum_class()?;
1128-
let reference = Reference::Array(class.clone(), ConcurrentVec::from(vec![None]));
1127+
let reference = Reference::from((class.clone(), vec![None]));
11291128
let clone = reference.clone();
11301129
assert_eq!(reference, clone);
11311130

@@ -1140,7 +1139,7 @@ mod tests {
11401139
#[test]
11411140
fn test_deep_clone_reference_array() -> Result<()> {
11421141
let class = minimum_class()?;
1143-
let reference = Reference::Array(class.clone(), ConcurrentVec::from(vec![None]));
1142+
let reference = Reference::from((class.clone(), vec![None]));
11441143
let clone = reference.deep_clone()?;
11451144
assert_eq!(reference, clone);
11461145

@@ -1191,27 +1190,27 @@ mod tests {
11911190
#[test]
11921191
fn test_array_eq() -> Result<()> {
11931192
let class = minimum_class()?;
1194-
let ref1 = Reference::Array(class.clone(), ConcurrentVec::from(vec![]));
1195-
let ref2 = Reference::Array(class, ConcurrentVec::from(vec![]));
1193+
let ref1 = Reference::from((class.clone(), vec![]));
1194+
let ref2 = Reference::from((class, vec![]));
11961195
assert_eq!(ref1, ref2);
11971196
Ok(())
11981197
}
11991198

12001199
#[test]
12011200
fn test_array_eq_class_ne() -> Result<()> {
12021201
let minimum_class = minimum_class()?;
1203-
let ref1 = Reference::Array(minimum_class, ConcurrentVec::from(vec![]));
1202+
let ref1 = Reference::from((minimum_class, vec![]));
12041203
let simple_class = simple_class()?;
1205-
let ref2 = Reference::Array(simple_class, ConcurrentVec::from(vec![]));
1204+
let ref2 = Reference::from((simple_class, vec![]));
12061205
assert_ne!(ref1, ref2);
12071206
Ok(())
12081207
}
12091208

12101209
#[test]
12111210
fn test_array_eq_value_ne() -> Result<()> {
12121211
let minimum_class = minimum_class()?;
1213-
let ref1 = Reference::Array(minimum_class.clone(), ConcurrentVec::from(vec![]));
1214-
let ref2 = Reference::Array(minimum_class, ConcurrentVec::from(vec![None]));
1212+
let ref1 = Reference::from((minimum_class.clone(), vec![]));
1213+
let ref2 = Reference::from((minimum_class, vec![None]));
12151214
assert_ne!(ref1, ref2);
12161215
Ok(())
12171216
}

ristretto_vm/src/instruction/array.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use crate::frame::{ExecutionResult, Frame};
66
use crate::operand_stack::OperandStack;
77
use ristretto_classfile::BaseType;
88
use ristretto_classfile::attributes::ArrayType;
9-
use ristretto_classloader::{ConcurrentVec, Reference};
9+
use ristretto_classloader::Reference;
1010

1111
/// See: <https://docs.oracle.com/javase/specs/jvms/se23/html/jvms-6.html#jvms-6.5.newarray>
1212
#[inline]
@@ -43,7 +43,7 @@ pub(crate) async fn anewarray(
4343
let class = thread.class(array_class_name.as_str()).await?;
4444
let count = stack.pop_int()?;
4545
let count = usize::try_from(count)?;
46-
let array = Reference::Array(class, ConcurrentVec::from(vec![None; count]));
46+
let array = Reference::from((class, vec![None; count]));
4747
stack.push_object(Some(array))?;
4848
Ok(Continue)
4949
}
@@ -105,7 +105,7 @@ pub(crate) async fn multianewarray(
105105
} else {
106106
type_class_name = format!("[L{type_class_name};");
107107
let type_class = thread.class(type_class_name.as_str()).await?;
108-
Reference::Array(type_class, ConcurrentVec::from(vec![None; count]))
108+
Reference::from((type_class, vec![None; count]))
109109
};
110110

111111
for _ in 1..dimensions {
@@ -117,7 +117,7 @@ pub(crate) async fn multianewarray(
117117
for _ in 0..count {
118118
array_values.push(Some(array.clone()));
119119
}
120-
array = Reference::Array(type_class, ConcurrentVec::from(array_values));
120+
array = Reference::from((type_class, array_values));
121121
}
122122

123123
stack.push_object(Some(array))?;

0 commit comments

Comments
 (0)