Browse Source

Implement `std::error::Error` for `GcObject` borrow errors (#662)

pull/671/head
Halid Odat 4 years ago committed by GitHub
parent
commit
0fc8052f4e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 31
      boa/src/builtins/object/gcobject.rs

31
boa/src/builtins/object/gcobject.rs

@ -14,11 +14,12 @@ use crate::{
Executable, Interpreter, Result,
};
use gc::{Finalize, Gc, GcCell, GcCellRef, GcCellRefMut, Trace};
use std::result::Result as StdResult;
use std::{
cell::RefCell,
collections::HashSet,
error::Error,
fmt::{self, Debug, Display},
result::Result as StdResult,
};
/// Garbage collected `Object`.
@ -223,8 +224,23 @@ impl Display for BorrowError {
}
}
#[derive(Debug)]
impl Error for BorrowError {}
/// An error returned by [`GcObject::try_borrow_mut`](struct.GcObject.html#method.try_borrow_mut).
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct BorrowMutError;
impl Display for BorrowMutError {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
Display::fmt("Object already borrowed", f)
}
}
impl Error for BorrowMutError {}
/// Prevents infinite recursion during `Debug::fmt`.
#[derive(Debug)]
struct RecursionLimiter {
/// If this was the first `GcObject` in the tree.
free: bool,
@ -292,14 +308,3 @@ impl Debug for GcObject {
}
}
}
/// An error returned by [`GcObject::try_borrow_mut`](struct.GcObject.html#method.try_borrow_mut).
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct BorrowMutError;
impl Display for BorrowMutError {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
Display::fmt("Object already borrowed", f)
}
}

Loading…
Cancel
Save