Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions ristretto_classloader/src/value.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1100,8 +1100,8 @@ mod tests {
#[tokio::test]
async fn test_from_class_vec() -> Result<()> {
let original_class = load_class("[Ljava/lang/Object;").await?;
let original_value = vec![None];
let value = Value::from((original_class.clone(), original_value.clone()));
let original_value = vec![Value::Object(None)];
let value = Value::try_from((original_class.clone(), original_value.clone()))?;
assert!(matches!(value, Value::Object(Some(Reference::Array(_)))));
Ok(())
}
Expand Down
22 changes: 11 additions & 11 deletions ristretto_vm/src/instruction/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use crate::operand_stack::OperandStack;
use crate::thread::Thread;
use ristretto_classfile::BaseType;
use ristretto_classfile::attributes::ArrayType;
use ristretto_classloader::Reference;
use ristretto_classloader::{Reference, Value};

/// See: <https://docs.oracle.com/javase/specs/jvms/se24/html/jvms-6.html#jvms-6.5.newarray>
#[inline]
Expand All @@ -18,15 +18,15 @@ pub(crate) fn newarray(
let count = stack.pop_int()?;
let count = usize::try_from(count)?;
let array = match array_type {
ArrayType::Char => Reference::from(vec![0 as char; count]),
ArrayType::Float => Reference::from(vec![0.0f32; count]),
ArrayType::Double => Reference::from(vec![0.0f64; count]),
ArrayType::Boolean | ArrayType::Byte => Reference::from(vec![0i8; count]),
ArrayType::Short => Reference::from(vec![0i16; count]),
ArrayType::Int => Reference::from(vec![0i32; count]),
ArrayType::Long => Reference::from(vec![0i64; count]),
ArrayType::Char => Value::from(vec![0 as char; count]),
ArrayType::Float => Value::from(vec![0.0f32; count]),
ArrayType::Double => Value::from(vec![0.0f64; count]),
ArrayType::Boolean | ArrayType::Byte => Value::from(vec![0i8; count]),
ArrayType::Short => Value::from(vec![0i16; count]),
ArrayType::Int => Value::from(vec![0i32; count]),
ArrayType::Long => Value::from(vec![0i64; count]),
};
stack.push_object(Some(array))?;
stack.push(array)?;
Ok(Continue)
}

Expand All @@ -44,8 +44,8 @@ pub(crate) async fn anewarray(
let class = thread.class(array_class_name.as_str()).await?;
let count = stack.pop_int()?;
let count = usize::try_from(count)?;
let array = Reference::from((class, vec![None; count]));
stack.push_object(Some(array))?;
let array = Value::from((class, vec![None; count]));
stack.push(array)?;
Ok(Continue)
}

Expand Down
34 changes: 17 additions & 17 deletions ristretto_vm/src/instruction/branch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ pub(crate) fn ifnonnull(stack: &mut OperandStack, address: u16) -> Result<Execut
mod test {
use super::*;
use crate::java_object::JavaObject;
use ristretto_classloader::Reference;
use ristretto_classloader::Value;

#[test]
fn test_ifeq_equal() -> Result<()> {
Expand Down Expand Up @@ -565,9 +565,9 @@ mod test {
#[test]
fn test_if_acmpeq_equal() -> Result<()> {
let stack = &mut OperandStack::with_max_size(2);
let object = Reference::from(vec![42i8]);
stack.push_object(Some(object.clone()))?;
stack.push_object(Some(object.clone()))?;
let object = Value::from(vec![42i8]);
stack.push(object.clone())?;
stack.push(object.clone())?;
let result = if_acmpeq(stack, 3)?;
assert_eq!(ContinueAtPosition(3), result);
Ok(())
Expand All @@ -576,13 +576,13 @@ mod test {
#[test]
fn test_if_acmpeq_not_equal() -> Result<()> {
let stack = &mut OperandStack::with_max_size(2);
let object = Reference::from(vec![42i8]);
let object = Value::from(vec![42i8]);
stack.push_object(None)?;
stack.push_object(Some(object.clone()))?;
stack.push(object.clone())?;
let result = if_acmpeq(stack, 3)?;
assert_eq!(Continue, result);
stack.push_object(Some(object.clone()))?;
stack.push_object(Some(object.clone()))?;
stack.push(object.clone())?;
stack.push(object.clone())?;
let result = if_acmpeq(stack, 3)?;
assert_eq!(ContinueAtPosition(3), result);
Ok(())
Expand Down Expand Up @@ -632,9 +632,9 @@ mod test {
#[test]
fn test_if_acmpne_equal() -> Result<()> {
let stack = &mut OperandStack::with_max_size(2);
let object = Reference::from(vec![42i8]);
stack.push_object(Some(object.clone()))?;
stack.push_object(Some(object.clone()))?;
let object = Value::from(vec![42i8]);
stack.push(object.clone())?;
stack.push(object.clone())?;
let result = if_acmpne(stack, 3)?;
assert_eq!(Continue, result);
Ok(())
Expand All @@ -643,9 +643,9 @@ mod test {
#[test]
fn test_if_acmpne_not_equal() -> Result<()> {
let stack = &mut OperandStack::with_max_size(2);
let object = Reference::from(vec![42i8]);
let object = Value::from(vec![42i8]);
stack.push_object(None)?;
stack.push_object(Some(object.clone()))?;
stack.push(object.clone())?;
let result = if_acmpne(stack, 3)?;
assert_eq!(ContinueAtPosition(3), result);
Ok(())
Expand Down Expand Up @@ -802,8 +802,8 @@ mod test {
#[test]
fn test_ifnull_not_null() -> Result<()> {
let stack = &mut OperandStack::with_max_size(1);
let object = Reference::from(vec![42i8]);
stack.push_object(Some(object))?;
let object = Value::from(vec![42i8]);
stack.push(object)?;
let result = ifnull(stack, 3)?;
assert_eq!(Continue, result);
Ok(())
Expand All @@ -821,8 +821,8 @@ mod test {
#[test]
fn test_ifnonnull_not_null() -> Result<()> {
let stack = &mut OperandStack::with_max_size(1);
let object = Reference::from(vec![42i8]);
stack.push_object(Some(object))?;
let object = Value::from(vec![42i8]);
stack.push(object)?;
let result = ifnonnull(stack, 3)?;
assert_eq!(ContinueAtPosition(3), result);
Ok(())
Expand Down
33 changes: 17 additions & 16 deletions ristretto_vm/src/instruction/byte.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,12 +71,13 @@ pub(crate) fn bastore(stack: &mut OperandStack) -> Result<ExecutionResult> {
mod test {
use super::*;
use crate::Error::JavaError;
use ristretto_classloader::Value;

#[test]
fn test_baload() -> Result<()> {
let stack = &mut OperandStack::with_max_size(2);
let array = Reference::from(vec![42i8]);
stack.push_object(Some(array))?;
let array = Value::from(vec![42i8]);
stack.push(array)?;
stack.push_int(0)?;
let result = baload(stack)?;
assert_eq!(Continue, result);
Expand All @@ -87,8 +88,8 @@ mod test {
#[test]
fn test_baload_invalid_value() -> Result<()> {
let stack = &mut OperandStack::with_max_size(2);
let object = Reference::from(vec![42i32]);
stack.push_object(Some(object))?;
let object = Value::from(vec![42i32]);
stack.push(object)?;
stack.push_int(2)?;
let result = baload(stack);
assert!(matches!(
Expand All @@ -104,8 +105,8 @@ mod test {
#[test]
fn test_baload_invalid_index_negative() -> Result<()> {
let stack = &mut OperandStack::with_max_size(2);
let array = Reference::from(vec![42i8]);
stack.push_object(Some(array))?;
let array = Value::from(vec![42i8]);
stack.push(array)?;
stack.push_int(-1)?;
let result = baload(stack);
assert!(matches!(
Expand All @@ -119,8 +120,8 @@ mod test {
#[test]
fn test_baload_invalid_index() -> Result<()> {
let stack = &mut OperandStack::with_max_size(2);
let array = Reference::from(vec![42i8]);
stack.push_object(Some(array))?;
let array = Value::from(vec![42i8]);
stack.push(array)?;
stack.push_int(2)?;
let result = baload(stack);
assert!(matches!(
Expand All @@ -144,8 +145,8 @@ mod test {
#[test]
fn test_bastore() -> Result<()> {
let stack = &mut OperandStack::with_max_size(3);
let array = Reference::from(vec![3i8]);
stack.push_object(Some(array))?;
let array = Value::from(vec![3i8]);
stack.push(array)?;
stack.push_int(0)?;
stack.push_int(42)?;
let result = bastore(stack)?;
Expand All @@ -156,8 +157,8 @@ mod test {
#[test]
fn test_bastore_invalid_value() -> Result<()> {
let stack = &mut OperandStack::with_max_size(3);
let object = Reference::from(vec![42i32]);
stack.push_object(Some(object))?;
let object = Value::from(vec![42i32]);
stack.push(object)?;
stack.push_int(2)?;
stack.push_int(42)?;
let result = bastore(stack);
Expand All @@ -174,8 +175,8 @@ mod test {
#[test]
fn test_bastore_invalid_index_negative() -> Result<()> {
let stack = &mut OperandStack::with_max_size(3);
let array = Reference::from(vec![3i8]);
stack.push_object(Some(array))?;
let array = Value::from(vec![3i8]);
stack.push(array)?;
stack.push_int(-1)?;
stack.push_int(42)?;
let result = bastore(stack);
Expand All @@ -190,8 +191,8 @@ mod test {
#[test]
fn test_bastore_invalid_index() -> Result<()> {
let stack = &mut OperandStack::with_max_size(3);
let array = Reference::from(vec![3i8]);
stack.push_object(Some(array))?;
let array = Value::from(vec![3i8]);
stack.push(array)?;
stack.push_int(2)?;
stack.push_int(42)?;
let result = bastore(stack);
Expand Down
33 changes: 17 additions & 16 deletions ristretto_vm/src/instruction/char.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,12 +71,13 @@ pub(crate) fn castore(stack: &mut OperandStack) -> Result<ExecutionResult> {
mod test {
use super::*;
use crate::Error::JavaError;
use ristretto_classloader::Value;

#[test]
fn test_caload() -> Result<()> {
let stack = &mut OperandStack::with_max_size(2);
let array = Reference::from(vec![42 as char]);
stack.push_object(Some(array))?;
let array = Value::from(vec![42 as char]);
stack.push(array)?;
stack.push_int(0)?;
let result = caload(stack)?;
assert_eq!(Continue, result);
Expand All @@ -87,8 +88,8 @@ mod test {
#[test]
fn test_caload_invalid_value() -> Result<()> {
let stack = &mut OperandStack::with_max_size(2);
let object = Reference::from(vec![42i32]);
stack.push_object(Some(object))?;
let object = Value::from(vec![42i32]);
stack.push(object)?;
stack.push_int(2)?;
let result = caload(stack);
assert!(matches!(
Expand All @@ -104,8 +105,8 @@ mod test {
#[test]
fn test_caload_invalid_index_negative() -> Result<()> {
let stack = &mut OperandStack::with_max_size(2);
let array = Reference::from(vec![42 as char]);
stack.push_object(Some(array))?;
let array = Value::from(vec![42 as char]);
stack.push(array)?;
stack.push_int(-1)?;
let result = caload(stack);
assert!(matches!(
Expand All @@ -119,8 +120,8 @@ mod test {
#[test]
fn test_caload_invalid_index() -> Result<()> {
let stack = &mut OperandStack::with_max_size(2);
let array = Reference::from(vec![42 as char]);
stack.push_object(Some(array))?;
let array = Value::from(vec![42 as char]);
stack.push(array)?;
stack.push_int(2)?;
let result = caload(stack);
assert!(matches!(
Expand All @@ -144,8 +145,8 @@ mod test {
#[test]
fn test_castore() -> Result<()> {
let stack = &mut OperandStack::with_max_size(3);
let array = Reference::from(vec![3 as char]);
stack.push_object(Some(array))?;
let array = Value::from(vec![3 as char]);
stack.push(array)?;
stack.push_int(0)?;
stack.push_int(42)?;
let result = castore(stack)?;
Expand All @@ -156,8 +157,8 @@ mod test {
#[test]
fn test_castore_invalid_value() -> Result<()> {
let stack = &mut OperandStack::with_max_size(3);
let object = Reference::from(vec![42i32]);
stack.push_object(Some(object))?;
let object = Value::from(vec![42i32]);
stack.push(object)?;
stack.push_int(2)?;
stack.push_int(42)?;
let result = castore(stack);
Expand All @@ -174,8 +175,8 @@ mod test {
#[test]
fn test_castore_invalid_index_negative() -> Result<()> {
let stack = &mut OperandStack::with_max_size(3);
let array = Reference::from(vec![3 as char]);
stack.push_object(Some(array))?;
let array = Value::from(vec![3 as char]);
stack.push(array)?;
stack.push_int(-1)?;
stack.push_int(42)?;
let result = castore(stack);
Expand All @@ -190,8 +191,8 @@ mod test {
#[test]
fn test_castore_invalid_index() -> Result<()> {
let stack = &mut OperandStack::with_max_size(3);
let array = Reference::from(vec![3 as char]);
stack.push_object(Some(array))?;
let array = Value::from(vec![3 as char]);
stack.push(array)?;
stack.push_int(2)?;
stack.push_int(42)?;
let result = castore(stack);
Expand Down
Loading
Loading