SymbolTable

Struct SymbolTable 

Source
pub struct SymbolTable {
    pub root: Symbol,
    pub stack: Stack,
    pub symbols: SymbolMap,
    pub diag_handler: DiagHandler,
    /* private fields */
}
Expand description

Symbol table holding global and local symbols.

The symbol table consists of the following members:

  • One root Symbol resolved from the initial source file.
  • A [SourceCache] of all loaded source files (accessible by qualified name, file path and source hash).
  • A Stack of StackFrames.
  • A SymbolMap of all global symbols.

All these internal structures can be accessed by several implemented traits.

Fields§

§root: Symbol

Symbol of the initial source file.

§stack: Stack

Stack of currently opened scopes with symbols while evaluation.

§symbols: SymbolMap

Global symbols (including root).

§diag_handler: DiagHandler

Source file diagnostics.

Implementations§

Source§

impl SymbolTable

Source

pub fn new( root: Identifier, symbols: SymbolMap, sources: Sources, ) -> ResolveResult<Self>

Root symbol (symbol node of initially read source file) List of all global symbols. Stack of currently opened scopes with local symbols while evaluation. Source file cache containing all source files loaded in the context and their syntax trees.

Source

pub fn lookup_global(&mut self, name: &QualifiedName) -> ResolveResult<Symbol>

Lookup a symbol from global symbols.

Source

pub fn search_paths(&self) -> &Vec<PathBuf>

Return search paths of this symbol table.

Source

pub fn is_code(&self) -> bool

Check if current stack frame is code

Source

pub fn is_module(&self) -> bool

Check if current stack frame is a module

Trait Implementations§

Source§

impl Default for SymbolTable

Source§

fn default() -> SymbolTable

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

impl Display for SymbolTable

Source§

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

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

impl GetSourceByHash for SymbolTable

Source§

fn get_by_hash(&self, hash: u64) -> ResolveResult<Rc<SourceFile>>

Find a project file by it’s hash value.
Source§

impl Locals for SymbolTable

Source§

fn set_local_value(&mut self, id: Identifier, value: Value) -> EvalResult<()>

Set/add a named local value to current locals.
Source§

fn get_local_value(&self, id: &Identifier) -> EvalResult<Value>

Get a named local value from locals.
Source§

fn open(&mut self, frame: StackFrame)

Don’t use this function directly.
Source§

fn close(&mut self)

Close scope (stack pop).
Source§

fn fetch(&self, id: &Identifier) -> EvalResult<Symbol>

Fetch a local variable from current stack frame.
Source§

fn get_model(&self) -> EvalResult<Model>

Get a property value from current model.
Source§

fn current_name(&self) -> QualifiedName

Return qualified name of current module or workbench.
Source§

impl Lookup for SymbolTable

Source§

fn lookup(&mut self, name: &QualifiedName) -> EvalResult<Symbol>

Lookup for local or global symbol by qualified name. Read more
Source§

impl UseSymbol for SymbolTable

Source§

fn use_symbol( &mut self, visibility: Visibility, name: &QualifiedName, id: Option<Identifier>, within: &QualifiedName, ) -> EvalResult<Symbol>

Find a symbol in the symbol table and copy it to the locals. Read more
Source§

fn use_symbols_of( &mut self, visibility: Visibility, name: &QualifiedName, within: &QualifiedName, ) -> EvalResult<Symbol>

Find a symbol in the symbol table and copy all it’s children to the locals and the target. Read more

Auto Trait Implementations§

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> 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<T> ToCompactString for T
where T: Display,

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