luaur_ast/methods/
ast_node_as_expr.rs1use 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}