wagon_codegen/nodes/
factor.rs

1use crate::SpannableIdent;
2
3use super::{Rc, ToTokensState};
4use proc_macro2::{TokenStream, Ident};
5use quote::quote;
6
7use wagon_parser::parser::factor::Factor;
8
9impl<U> ToTokensState<U> for Factor {
10    fn to_tokens(&self, state: &mut U, label: Rc<Ident>, attr_fun: fn(&mut U, Rc<Ident>, SpannableIdent)) -> TokenStream {
11        match self {
12            Self::Primary(p) => p.to_tokens(state, label, attr_fun),
13            Self::Power { left, right } => {
14                let left_stream = left.to_tokens(state, label.clone(), attr_fun);
15                let right_stream = right.to_tokens(state, label, attr_fun);
16                quote!(wagon_value::Pow::pow(#left_stream, #right_stream)?)
17            },
18        }
19    }
20}