mimium_lang/ast/
operators.rs1use std::fmt;
2
3use crate::compiler::intrinsics;
4use crate::interner::{Symbol, ToSymbol};
5
6#[derive(Clone, Debug, PartialEq, Eq, Hash)]
7pub enum Op {
8 Sum, Minus, Product, Divide, Equal, NotEqual, LessThan, LessEqual, GreaterThan, GreaterEqual, Modulo, Exponent, And, Or, At, Pipe, Unknown(String),
31}
32
33impl Op {
34 pub fn get_associated_fn_name(&self) -> Symbol {
35 match self {
36 Op::Sum => intrinsics::ADD,
37 Op::Minus => intrinsics::SUB,
38 Op::Product => intrinsics::MULT,
39 Op::Divide => intrinsics::DIV,
40 Op::Equal => intrinsics::EQ,
41 Op::NotEqual => intrinsics::NE,
42 Op::LessThan => intrinsics::LT,
43 Op::LessEqual => intrinsics::LE,
44 Op::GreaterThan => intrinsics::GT,
45 Op::GreaterEqual => intrinsics::GE,
46 Op::Modulo => intrinsics::MODULO,
47 Op::Exponent => intrinsics::POW,
48 Op::And => intrinsics::AND,
49 Op::Or => intrinsics::OR,
50 Op::At => "_mimium_schedule_at",
51 Op::Pipe => unreachable!(), Op::Unknown(x) => x.as_str(),
53 }
54 .to_symbol()
55 }
56}
57
58impl fmt::Display for Op {
59 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
60 match self {
61 Op::Sum => write!(f, "+"),
62 Op::Minus => write!(f, "-"),
63 Op::Product => write!(f, "*"),
64 Op::Divide => write!(f, "/"),
65 Op::Equal => write!(f, "=="),
66 Op::NotEqual => write!(f, "!="),
67 Op::LessThan => write!(f, "<"),
68 Op::LessEqual => write!(f, "<="),
69 Op::GreaterThan => write!(f, ">"),
70 Op::GreaterEqual => write!(f, ">="),
71 Op::Modulo => write!(f, "%"),
72 Op::Exponent => write!(f, "^"),
73 Op::And => write!(f, "&&"),
74 Op::Or => write!(f, "||"),
75 Op::At => write!(f, "@"),
76 Op::Pipe => write!(f, "|>"),
77 Op::Unknown(x) => write!(f, "{x}"),
78 }
79 }
80}