Skip to content

Commit

Permalink
Implement std::error::Error for GcObject borrow errors (#662)
Browse files Browse the repository at this point in the history
  • Loading branch information
HalidOdat authored Aug 27, 2020
1 parent c7531af commit 0fc8052
Showing 1 changed file with 18 additions and 13 deletions.
31 changes: 18 additions & 13 deletions boa/src/builtins/object/gcobject.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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)
}
}

0 comments on commit 0fc8052

Please sign in to comment.