parse_js/parse/
operator.rs1use crate::operator::Operator;
2use crate::operator::OperatorName;
3use crate::operator::OPERATORS;
4use crate::token::TokenType;
5use ahash::AHashMap;
6use once_cell::sync::Lazy;
7
8#[rustfmt::skip]
9pub static MULTARY_OPERATOR_MAPPING: Lazy<AHashMap<TokenType, &'static Operator>> = Lazy::new(|| {
10 let mut map = AHashMap::<TokenType, &'static Operator>::new();
11 map.insert(TokenType::Plus, &OPERATORS[&OperatorName::Addition]);
12 map.insert(TokenType::Equals, &OPERATORS[&OperatorName::Assignment]);
13 map.insert(TokenType::PlusEquals, &OPERATORS[&OperatorName::AssignmentAddition]);
14 map.insert(TokenType::AmpersandEquals, &OPERATORS[&OperatorName::AssignmentBitwiseAnd]);
15 map.insert(TokenType::ChevronLeftChevronLeftEquals, &OPERATORS[&OperatorName::AssignmentBitwiseLeftShift]);
16 map.insert(TokenType::BarEquals, &OPERATORS[&OperatorName::AssignmentBitwiseOr]);
17 map.insert(TokenType::ChevronRightChevronRightEquals, &OPERATORS[&OperatorName::AssignmentBitwiseRightShift]);
18 map.insert(TokenType::ChevronRightChevronRightChevronRightEquals, &OPERATORS[&OperatorName::AssignmentBitwiseUnsignedRightShift]);
19 map.insert(TokenType::CaretEquals, &OPERATORS[&OperatorName::AssignmentBitwiseXor]);
20 map.insert(TokenType::SlashEquals, &OPERATORS[&OperatorName::AssignmentDivision]);
21 map.insert(TokenType::AsteriskAsteriskEquals, &OPERATORS[&OperatorName::AssignmentExponentiation]);
22 map.insert(TokenType::AmpersandAmpersandEquals, &OPERATORS[&OperatorName::AssignmentLogicalAnd]);
23 map.insert(TokenType::BarBarEquals, &OPERATORS[&OperatorName::AssignmentLogicalOr]);
24 map.insert(TokenType::AsteriskEquals, &OPERATORS[&OperatorName::AssignmentMultiplication]);
25 map.insert(TokenType::QuestionQuestionEquals, &OPERATORS[&OperatorName::AssignmentNullishCoalescing]);
26 map.insert(TokenType::PercentEquals, &OPERATORS[&OperatorName::AssignmentRemainder]);
27 map.insert(TokenType::HyphenEquals, &OPERATORS[&OperatorName::AssignmentSubtraction]);
28 map.insert(TokenType::Ampersand, &OPERATORS[&OperatorName::BitwiseAnd]);
29 map.insert(TokenType::ChevronLeftChevronLeft, &OPERATORS[&OperatorName::BitwiseLeftShift]);
30 map.insert(TokenType::Bar, &OPERATORS[&OperatorName::BitwiseOr]);
31 map.insert(TokenType::ChevronRightChevronRight, &OPERATORS[&OperatorName::BitwiseRightShift]);
32 map.insert(TokenType::ChevronRightChevronRightChevronRight, &OPERATORS[&OperatorName::BitwiseUnsignedRightShift]);
33 map.insert(TokenType::Caret, &OPERATORS[&OperatorName::BitwiseXor]);
34 map.insert(TokenType::ParenthesisOpen, &OPERATORS[&OperatorName::Call]);
35 map.insert(TokenType::Comma, &OPERATORS[&OperatorName::Comma]);
36 map.insert(TokenType::BracketOpen, &OPERATORS[&OperatorName::ComputedMemberAccess]);
37 map.insert(TokenType::Question, &OPERATORS[&OperatorName::Conditional]);
38 map.insert(TokenType::Slash, &OPERATORS[&OperatorName::Division]);
39 map.insert(TokenType::EqualsEquals, &OPERATORS[&OperatorName::Equality]);
40 map.insert(TokenType::AsteriskAsterisk, &OPERATORS[&OperatorName::Exponentiation]);
41 map.insert(TokenType::ChevronRight, &OPERATORS[&OperatorName::GreaterThan]);
42 map.insert(TokenType::ChevronRightEquals, &OPERATORS[&OperatorName::GreaterThanOrEqual]);
43 map.insert(TokenType::KeywordIn, &OPERATORS[&OperatorName::In]);
44 map.insert(TokenType::ExclamationEquals, &OPERATORS[&OperatorName::Inequality]);
45 map.insert(TokenType::KeywordInstanceof, &OPERATORS[&OperatorName::Instanceof]);
46 map.insert(TokenType::ChevronLeft, &OPERATORS[&OperatorName::LessThan]);
47 map.insert(TokenType::ChevronLeftEquals, &OPERATORS[&OperatorName::LessThanOrEqual]);
48 map.insert(TokenType::AmpersandAmpersand, &OPERATORS[&OperatorName::LogicalAnd]);
49 map.insert(TokenType::BarBar, &OPERATORS[&OperatorName::LogicalOr]);
50 map.insert(TokenType::Dot, &OPERATORS[&OperatorName::MemberAccess]);
51 map.insert(TokenType::Asterisk, &OPERATORS[&OperatorName::Multiplication]);
52 map.insert(TokenType::QuestionQuestion, &OPERATORS[&OperatorName::NullishCoalescing]);
53 map.insert(TokenType::QuestionDot, &OPERATORS[&OperatorName::OptionalChainingMemberAccess]);
54 map.insert(TokenType::QuestionDotBracketOpen, &OPERATORS[&OperatorName::OptionalChainingComputedMemberAccess]);
55 map.insert(TokenType::QuestionDotParenthesisOpen, &OPERATORS[&OperatorName::OptionalChainingCall]);
56 map.insert(TokenType::Percent, &OPERATORS[&OperatorName::Remainder]);
57 map.insert(TokenType::EqualsEqualsEquals, &OPERATORS[&OperatorName::StrictEquality]);
58 map.insert(TokenType::ExclamationEqualsEquals, &OPERATORS[&OperatorName::StrictInequality]);
59 map.insert(TokenType::Hyphen, &OPERATORS[&OperatorName::Subtraction]);
60 map.insert(TokenType::KeywordTypeof, &OPERATORS[&OperatorName::Typeof]);
61 map
62});
63
64#[rustfmt::skip]
65pub static UNARY_OPERATOR_MAPPING: Lazy<AHashMap<TokenType, &'static Operator>> = Lazy::new(|| {
66 let mut map = AHashMap::<TokenType, &'static Operator>::new();
67 map.insert(TokenType::KeywordAwait, &OPERATORS[&OperatorName::Await]);
69 map.insert(TokenType::Tilde, &OPERATORS[&OperatorName::BitwiseNot]);
70 map.insert(TokenType::KeywordDelete, &OPERATORS[&OperatorName::Delete]);
71 map.insert(TokenType::Exclamation, &OPERATORS[&OperatorName::LogicalNot]);
72 map.insert(TokenType::KeywordNew, &OPERATORS[&OperatorName::New]);
73 map.insert(TokenType::HyphenHyphen, &OPERATORS[&OperatorName::PrefixDecrement]);
74 map.insert(TokenType::PlusPlus, &OPERATORS[&OperatorName::PrefixIncrement]);
75 map.insert(TokenType::Hyphen, &OPERATORS[&OperatorName::UnaryNegation]);
76 map.insert(TokenType::Plus, &OPERATORS[&OperatorName::UnaryPlus]);
77 map.insert(TokenType::KeywordTypeof, &OPERATORS[&OperatorName::Typeof]);
78 map.insert(TokenType::KeywordVoid, &OPERATORS[&OperatorName::Void]);
79 map.insert(TokenType::KeywordYield, &OPERATORS[&OperatorName::Yield]);
80 map
81});