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, Executable, Interpreter, Result,
}; };
use gc::{Finalize, Gc, GcCell, GcCellRef, GcCellRefMut, Trace}; use gc::{Finalize, Gc, GcCell, GcCellRef, GcCellRefMut, Trace};
use std::result::Result as StdResult;
use std::{ use std::{
cell::RefCell, cell::RefCell,
collections::HashSet, collections::HashSet,
error::Error,
fmt::{self, Debug, Display}, fmt::{self, Debug, Display},
result::Result as StdResult,
}; };
/// Garbage collected `Object`. /// 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`. /// Prevents infinite recursion during `Debug::fmt`.
#[derive(Debug)]
struct RecursionLimiter { struct RecursionLimiter {
/// If this was the first `GcObject` in the tree. /// If this was the first `GcObject` in the tree.
free: bool, 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