Skip to content
Merged
33 changes: 15 additions & 18 deletions compiler/noirc_evaluator/src/ssa/interpreter/intrinsics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,11 @@ use iter_extended::{try_vecmap, vecmap};
use noirc_printable_type::{PrintableType, PrintableValueDisplay, decode_printable_value};
use num_bigint::BigUint;

use crate::ssa::{
interpreter::NumericValue,
ir::{
dfg,
instruction::{Endian, Intrinsic},
types::{NumericType, Type},
value::ValueId,
},
use crate::ssa::ir::{
dfg,
instruction::{Endian, Intrinsic},
types::{NumericType, Type},
value::ValueId,
};

use super::{ArrayValue, IResult, IResults, InternalError, Interpreter, InterpreterError, Value};
Expand All @@ -30,7 +27,7 @@ impl<W: Write> Interpreter<'_, W> {
check_argument_count(args, 1, intrinsic)?;
let array = self.lookup_array_or_slice(args[0], "call to array_len")?;
let length = array.elements.borrow().len();
Ok(vec![Value::Numeric(NumericValue::U32(length as u32))])
Ok(vec![Value::u32(length as u32)])
}
Intrinsic::ArrayAsStrUnchecked => {
check_argument_count(args, 1, intrinsic)?;
Expand All @@ -40,7 +37,7 @@ impl<W: Write> Interpreter<'_, W> {
check_argument_count(args, 1, intrinsic)?;
let array = self.lookup_array_or_slice(args[0], "call to as_slice")?;
let length = array.elements.borrow().len();
let length = Value::Numeric(NumericValue::U32(length as u32));
let length = Value::u32(length as u32);

let elements = array.elements.borrow().to_vec();
let slice = Value::slice(elements, array.element_types.clone());
Expand Down Expand Up @@ -537,7 +534,7 @@ impl<W: Write> Interpreter<'_, W> {
new_elements.push(self.lookup(*arg)?);
}

let new_length = Value::Numeric(NumericValue::U32(length + 1));
let new_length = Value::u32(length + 1);
let new_slice = Value::slice(new_elements, element_types);
Ok(vec![new_length, new_slice])
}
Expand All @@ -552,7 +549,7 @@ impl<W: Write> Interpreter<'_, W> {
let mut new_elements = try_vecmap(args.iter().skip(2), |arg| self.lookup(*arg))?;
new_elements.extend_from_slice(&slice_elements.borrow());

let new_length = Value::Numeric(NumericValue::U32(length + 1));
let new_length = Value::u32(length + 1);
let new_slice = Value::slice(new_elements, element_types);
Ok(vec![new_length, new_slice])
}
Expand All @@ -578,7 +575,7 @@ impl<W: Write> Interpreter<'_, W> {
let mut popped_elements = vecmap(0..element_types.len(), |_| slice_elements.pop().unwrap());
popped_elements.reverse();

let new_length = Value::Numeric(NumericValue::U32(length - 1));
let new_length = Value::u32(length - 1);
let new_slice = Value::slice(slice_elements, element_types);
let mut results = vec![new_length, new_slice];
results.extend(popped_elements);
Expand All @@ -601,7 +598,7 @@ impl<W: Write> Interpreter<'_, W> {

let mut results = slice_elements.drain(0..element_types.len()).collect::<Vec<_>>();

let new_length = Value::Numeric(NumericValue::U32(length - 1));
let new_length = Value::u32(length - 1);
let new_slice = Value::slice(slice_elements, element_types);
results.push(new_length);
results.push(new_slice);
Expand All @@ -623,7 +620,7 @@ impl<W: Write> Interpreter<'_, W> {
index += 1;
}

let new_length = Value::Numeric(NumericValue::U32(length + 1));
let new_length = Value::u32(length + 1);
let new_slice = Value::slice(slice_elements, element_types);
Ok(vec![new_length, new_slice])
}
Expand All @@ -646,7 +643,7 @@ impl<W: Write> Interpreter<'_, W> {
let index = index as usize * element_types.len();
let removed: Vec<_> = slice_elements.drain(index..index + element_types.len()).collect();

let new_length = Value::Numeric(NumericValue::U32(length - 1));
let new_length = Value::u32(length - 1);
let new_slice = Value::slice(slice_elements, element_types);
let mut results = vec![new_length, new_slice];
results.extend(removed);
Expand Down Expand Up @@ -842,8 +839,8 @@ fn values_to_fields(values: &[Value]) -> Vec<FieldElement> {
}
}
// Chamber the length for a potential vector following it.
if let Value::Numeric(NumericValue::U32(length)) = value {
vector_length = Some(*length as usize);
if let Some(length) = value.as_u32() {
vector_length = Some(length as usize);
} else {
vector_length = None;
}
Expand Down
Loading
Loading