Function tagua_parser::rules::expressions::primaries::anonymous_function []

pub fn anonymous_function(i: &[u8]) -> IResult<&[u8]Expressionu32>

Recognize an anonymous function.

Examples

use tagua_parser::Result;
use tagua_parser::ast::{
    AnonymousFunction,
    Arity,
    Expression,
    Name,
    Parameter,
    Scope,
    Statement,
    Ty,
    Variable
};
use tagua_parser::rules::expressions::primaries::anonymous_function;

assert_eq!(
    anonymous_function(b"function &($x, \\I\\J $y, int &$z) use ($a, &$b): O { return; }"),
    Result::Done(
        &b""[..],
        Expression::AnonymousFunction(
            AnonymousFunction {
                declaration_scope: Scope::Dynamic,
                inputs           : Arity::Finite(vec![
                    Parameter {
                        ty   : Ty::Copy(None),
                        name : Variable(&b"x"[..]),
                        value: None
                    },
                    Parameter {
                        ty   : Ty::Copy(Some(Name::FullyQualified(vec![&b"I"[..], &b"J"[..]]))),
                        name : Variable(&b"y"[..]),
                        value: None
                    },
                    Parameter {
                        ty   : Ty::Reference(Some(Name::FullyQualified(vec![&b"int"[..]]))),
                        name : Variable(&b"z"[..]),
                        value: None
                    }
                ]),
                output         : Ty::Reference(Some(Name::Unqualified(&b"O"[..]))),
                enclosing_scope: Some(vec![
                    Expression::Variable(Variable(&b"a"[..])),
                    Expression::Reference(
                        Box::new(
                            Expression::Variable(Variable(&b"b"[..]))
                        )
                    )
                ]),
                body: vec![Statement::Return]
            }
        )
    )
);Run