Skip to main content

factorio_codegen/generator/
operator.rs

1use factorio_ir::operator::Operator;
2
3use crate::LuaGenerator;
4
5impl LuaGenerator {
6    /// Generate the lua equivalent for an [`Operator`].
7    pub(crate) const fn generate_operator(operator: Operator) -> &'static str {
8        match operator {
9            Operator::Add => "+",
10            Operator::Sub => "-",
11            Operator::Mul => "*",
12            Operator::Div => "/",
13            Operator::Mod => "%",
14            Operator::Eq => "==",
15            Operator::Ne => "~=",
16            Operator::Lt => "<",
17            Operator::Le => "<=",
18            Operator::Gt => ">",
19            Operator::Ge => ">=",
20            Operator::And => "and",
21            Operator::Or => "or",
22        }
23    }
24
25    /// Get the precedence for an [`Operator`].
26    pub(crate) const fn operator_precedence(operator: Operator) -> u8 {
27        match operator {
28            Operator::Mul | Operator::Div | Operator::Mod => 20,
29            Operator::Add | Operator::Sub => 19,
30            Operator::Eq
31            | Operator::Ne
32            | Operator::Lt
33            | Operator::Le
34            | Operator::Gt
35            | Operator::Ge => 10,
36            Operator::And => 5,
37            Operator::Or => 4,
38        }
39    }
40}