Trait arithmetic_eval::CompilerExt[][src]

pub trait CompilerExt<'a> {
    fn undefined_variables(
        &self
    ) -> Result<HashMap<&'a str, Spanned<'a>>, Error<'a>>; }
Expand description

Compiler extensions defined for some AST nodes, most notably, Block.

Examples

use arithmetic_parser::grammars::{F32Grammar, Parse, Untyped};
use arithmetic_eval::CompilerExt;

let block = "x = sin(0.5) / PI; y = x * E; (x, y)";
let block = Untyped::<F32Grammar>::parse_statements(block)?;
let undefined_vars = block.undefined_variables()?;
assert_eq!(
    undefined_vars.keys().copied().collect::<HashSet<_>>(),
    HashSet::from_iter(vec!["sin", "PI", "E"])
);
assert_eq!(undefined_vars["PI"].location_offset(), 15);

Required methods

fn undefined_variables(
    &self
) -> Result<HashMap<&'a str, Spanned<'a>>, Error<'a>>
[src]

Returns variables not defined within the AST node, together with the span of their first occurrence.

Errors

  • Returns an error if the AST is intrinsically malformed. This may be the case if it contains destructuring with the same variable on left-hand side, such as (x, x) = ....

The fact that an error is not returned does not guarantee that the AST node will evaluate successfully if all variables are assigned.

Implementations on Foreign Types

impl<'a, T: Grammar<'a>> CompilerExt<'a> for Block<'a, T>[src]

fn undefined_variables(
    &self
) -> Result<HashMap<&'a str, Spanned<'a>>, Error<'a>>
[src]

impl<'a, T: Grammar<'a>> CompilerExt<'a> for FnDefinition<'a, T>[src]

fn undefined_variables(
    &self
) -> Result<HashMap<&'a str, Spanned<'a>>, Error<'a>>
[src]

Implementors