1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//! Expose the global context, called [_top self_][topself], to the interpreter.
//!
//! [topself]: https://www.sitepoint.com/rubys-top-self-object/

use crate::value::Value;

/// Return a `Value`-wrapped reference to [_top self_][topself].
///
/// Top self is the root object that evaled code is executed within. Global
/// methods, classes, and modules are defined in top self.
///
/// [topself]: https://www.sitepoint.com/rubys-top-self-object/
pub trait TopSelf {
    /// Concrete [`Value`] type.
    type Value: Value;

    /// Return a [`Value`]-wrapped reference to "top self".
    ///
    /// Top self is the root object that evaled code is executed within. Global
    /// methods, classes, and modules are defined in top self.
    fn top_self(&mut self) -> Self::Value;
}