From 0fc8052f4ee8bc79ee3df265b855f66b421f641e Mon Sep 17 00:00:00 2001 From: Halid Odat Date: Thu, 27 Aug 2020 16:15:39 +0200 Subject: [PATCH] Implement `std::error::Error` for `GcObject` borrow errors (#662) --- boa/src/builtins/object/gcobject.rs | 31 +++++++++++++++++------------ 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/boa/src/builtins/object/gcobject.rs b/boa/src/builtins/object/gcobject.rs index 59dc448e65..836dd9b63f 100644 --- a/boa/src/builtins/object/gcobject.rs +++ b/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) - } -}