Symbol

Struct Symbol 

Source
pub struct Symbol { /* private fields */ }
Expand description

Symbol

Every Symbol has a SymbolDefinition, a parent and children stored within a Rc<RefCell<SymbolInner>. So Symbol is meant as a tree which is used by [SymbolTable] to store the resolved symbols by it’s original structure in the source code and by it’s id.

Symbol can be shared as mutable.

Implementations§

Source§

impl Symbol

Source

pub fn new(def: SymbolDefinition, parent: Option<Symbol>) -> Self

Create new symbol without children.

§Arguments
  • visibility: Visibility of the symbol
  • def: Symbol definition
  • parent: Symbol’s parent symbol or none for root
Source

pub fn new_builtin( id: Identifier, parameters: Option<ParameterValueList>, f: &'static BuiltinFn, ) -> Symbol

Create a symbol node for a built-in.

§Arguments
  • id: Name of the symbol
  • parameters: Optional parameter list
  • f: The builtin function
Source

pub fn new_call_argument(id: Identifier, value: Value) -> Symbol

Create a new argument (SymbolDefinition::Argument).

Source

pub fn print_symbol( &self, f: &mut impl Write, id: Option<&Identifier>, depth: usize, children: bool, ) -> Result

Print out symbols from that point.

§Arguments
  • f: Output formatter
  • id: Overwrite symbol’s internal id with this one if given (e.g. when using in a map).
  • depth: Indention depth to use
Source

pub fn add_child(parent: &Symbol, child: Symbol)

Insert child and change parent of child to new parent.

§Arguments
  • parent: New parent symbol (will be changed in child!).
  • child: Child to insert
Source

pub fn move_children(&self, from: &Symbol)

Move all children from another symbol into this one.

§Arguments
  • from: Append this symbol’s children

Technically, nothing will be moved here because of the Rc<RefCell<>>, but by resetting the parent of all moved children, those will see themselves as child of self (e.g when providing fully qualified name).

Source

pub fn clone_with_visibility(&self, visibility: Visibility) -> Self

Clone this symbol but give the clone another visibility.

Source

pub fn id(&self) -> Identifier

Return the internal id of this symbol.

Source

pub fn get(&self, id: &Identifier) -> Option<Symbol>

Get any child with the given id.

§Arguments
  • id: Anticipated id of the possible child.
Source

pub fn is_empty(&self) -> bool

True if symbol has any children

Source

pub fn visibility(&self) -> Visibility

Return true if symbol’s visibility is private

Source

pub fn is_public(&self) -> bool

Return true if symbol’s visibility set to is public.

Source

pub fn is_private(&self) -> bool

Return true if symbol’s visibility set to is non-public.

Source

pub fn search(&self, name: &QualifiedName) -> Option<Symbol>

Search down the symbol tree for a qualified name.

§Arguments
  • name: Name to search for.
Source

pub fn can_const(&self) -> bool

check if a private symbol may be declared within this symbol

Source

pub fn can_value(&self) -> bool

check if a value on the stack may be declared within this symbol

Source

pub fn can_prop(&self) -> bool

check if a property may be declared within this symbol

Source

pub fn can_pub(&self) -> bool

check if a public symbol may be declared within this symbol

Source

pub fn set_value(&self, new_value: Value) -> ResolveResult<()>

Overwrite any value in this symbol

Source

pub fn get_value(&self) -> ResolveResult<Value>

Get any value of this symbol

Trait Implementations§

Source§

impl Clone for Symbol

Source§

fn clone(&self) -> Symbol

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Symbol

Source§

fn fmt(&self, fmt: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Symbol

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl DerefMut for Symbol

Source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.
Source§

impl Display for Symbol

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromIterator<Symbol> for Symbols

Source§

fn from_iter<T: IntoIterator<Item = Symbol>>(iter: T) -> Self

Creates a value from an iterator. Read more
Source§

impl FullyQualify for Symbol

Source§

fn full_name(&self) -> QualifiedName

Get fully qualified name.

Source§

impl PartialEq for Symbol

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Deref for Symbol

Source§

type Target = RcMut<SymbolInner>

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.

Auto Trait Implementations§

§

impl Freeze for Symbol

§

impl !RefUnwindSafe for Symbol

§

impl !Send for Symbol

§

impl !Sync for Symbol

§

impl Unpin for Symbol

§

impl !UnwindSafe for Symbol

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> ToCompactString for T
where T: Display,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<G1, G2> Within<G2> for G1
where G2: Contains<G1>,

Source§

fn is_within(&self, b: &G2) -> bool