throw error(resource_error(memory), []) when the list length exceeds usize.
This commit is contained in:
@@ -76,7 +76,6 @@ impl ValidType {
|
|||||||
|
|
||||||
#[derive(Debug, Clone, Copy)]
|
#[derive(Debug, Clone, Copy)]
|
||||||
pub(crate) enum ResourceError {
|
pub(crate) enum ResourceError {
|
||||||
FiniteMemory(HeapCellValue),
|
|
||||||
OutOfFiles,
|
OutOfFiles,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -330,12 +329,6 @@ impl MachineState {
|
|||||||
|
|
||||||
pub(super) fn resource_error(err: ResourceError) -> MachineError {
|
pub(super) fn resource_error(err: ResourceError) -> MachineError {
|
||||||
let stub = match err {
|
let stub = match err {
|
||||||
ResourceError::FiniteMemory(size_requested) => {
|
|
||||||
functor!(
|
|
||||||
atom!("resource_error"),
|
|
||||||
[atom_as_cell((atom!("finite_memory"))), cell(size_requested)]
|
|
||||||
)
|
|
||||||
}
|
|
||||||
ResourceError::OutOfFiles => {
|
ResourceError::OutOfFiles => {
|
||||||
functor!(
|
functor!(
|
||||||
atom!("resource_error"),
|
atom!("resource_error"),
|
||||||
|
|||||||
@@ -4371,7 +4371,6 @@ impl Machine {
|
|||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub(crate) fn det_length_rundown(&mut self) -> CallResult {
|
pub(crate) fn det_length_rundown(&mut self) -> CallResult {
|
||||||
let stub_gen = || functor_stub(atom!("length"), 2);
|
|
||||||
let len = self.deref_register(2);
|
let len = self.deref_register(2);
|
||||||
|
|
||||||
let n = match Number::try_from((len, &self.machine_st.arena.f64_tbl)) {
|
let n = match Number::try_from((len, &self.machine_st.arena.f64_tbl)) {
|
||||||
@@ -4379,8 +4378,8 @@ impl Machine {
|
|||||||
Ok(Number::Integer(n)) => match (&*n).try_into() as Result<usize, _> {
|
Ok(Number::Integer(n)) => match (&*n).try_into() as Result<usize, _> {
|
||||||
Ok(n) => n,
|
Ok(n) => n,
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
let err = MachineState::resource_error(ResourceError::FiniteMemory(len));
|
self.machine_st.throw_resource_error(AllocError);
|
||||||
return Err(self.machine_st.error_form(err, stub_gen()));
|
return Ok(());
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
_ => {
|
_ => {
|
||||||
|
|||||||
Reference in New Issue
Block a user