Skip to main content

luaur_ast/methods/
ast_node_as_expr.rs

1use crate::records::ast_expr::AstExpr;
2use crate::records::ast_node::AstNode;
3use crate::rtti::AstNodeClass;
4
5impl AstNode {
6    #[inline]
7    pub fn as_expr(&self) -> *mut AstExpr {
8        let is_expr = self.class_index
9            == crate::records::ast_expr_binary::AstExprBinary::CLASS_INDEX
10            || self.class_index == crate::records::ast_expr_call::AstExprCall::CLASS_INDEX
11            || self.class_index
12                == crate::records::ast_expr_constant_bool::AstExprConstantBool::CLASS_INDEX
13            || self.class_index
14                == crate::records::ast_expr_constant_integer::AstExprConstantInteger::CLASS_INDEX
15            || self.class_index
16                == crate::records::ast_expr_constant_nil::AstExprConstantNil::CLASS_INDEX
17            || self.class_index
18                == crate::records::ast_expr_constant_number::AstExprConstantNumber::CLASS_INDEX
19            || self.class_index
20                == crate::records::ast_expr_constant_string::AstExprConstantString::CLASS_INDEX
21            || self.class_index == crate::records::ast_expr_error::AstExprError::CLASS_INDEX
22            || self.class_index == crate::records::ast_expr_function::AstExprFunction::CLASS_INDEX
23            || self.class_index == crate::records::ast_expr_global::AstExprGlobal::CLASS_INDEX
24            || self.class_index == crate::records::ast_expr_group::AstExprGroup::CLASS_INDEX
25            || self.class_index == crate::records::ast_expr_if_else::AstExprIfElse::CLASS_INDEX
26            || self.class_index
27                == crate::records::ast_expr_index_expr::AstExprIndexExpr::CLASS_INDEX
28            || self.class_index
29                == crate::records::ast_expr_index_name::AstExprIndexName::CLASS_INDEX
30            || self.class_index
31                == crate::records::ast_expr_instantiate::AstExprInstantiate::CLASS_INDEX
32            || self.class_index
33                == crate::records::ast_expr_interp_string::AstExprInterpString::CLASS_INDEX
34            || self.class_index == crate::records::ast_expr_local::AstExprLocal::CLASS_INDEX
35            || self.class_index == crate::records::ast_expr_table::AstExprTable::CLASS_INDEX
36            || self.class_index
37                == crate::records::ast_expr_type_assertion::AstExprTypeAssertion::CLASS_INDEX
38            || self.class_index == crate::records::ast_expr_unary::AstExprUnary::CLASS_INDEX
39            || self.class_index == crate::records::ast_expr_varargs::AstExprVarargs::CLASS_INDEX;
40
41        if is_expr {
42            self as *const AstNode as *mut AstExpr
43        } else {
44            core::ptr::null_mut()
45        }
46    }
47
48    #[inline]
49    pub fn as_expr_const(&self) -> *const AstExpr {
50        self.as_expr() as *const AstExpr
51    }
52}