Skip to main content

luaur_ast/methods/
ast_node_as_stat.rs

1use crate::records::ast_node::AstNode;
2use crate::records::ast_stat::AstStat;
3use crate::rtti::AstNodeClass;
4
5impl AstNode {
6    #[inline]
7    pub fn as_stat(&mut self) -> *mut AstStat {
8        let is_stat = self.class_index == crate::records::ast_stat_assign::AstStatAssign::CLASS_INDEX
9            || self.class_index == crate::records::ast_stat_block::AstStatBlock::CLASS_INDEX
10            || self.class_index == crate::records::ast_stat_break::AstStatBreak::CLASS_INDEX
11            || self.class_index == crate::records::ast_stat_class::AstStatClass::CLASS_INDEX
12            || self.class_index == crate::records::ast_stat_compound_assign::AstStatCompoundAssign::CLASS_INDEX
13            || self.class_index == crate::records::ast_stat_continue::AstStatContinue::CLASS_INDEX
14            || self.class_index == crate::records::ast_stat_declare_extern_type::AstStatDeclareExternType::CLASS_INDEX
15            || self.class_index == crate::records::ast_stat_declare_function::AstStatDeclareFunction::CLASS_INDEX
16            || self.class_index == crate::records::ast_stat_declare_global::AstStatDeclareGlobal::CLASS_INDEX
17            || self.class_index == crate::records::ast_stat_error::AstStatError::CLASS_INDEX
18            || self.class_index == crate::records::ast_stat_expr::AstStatExpr::CLASS_INDEX
19            || self.class_index == crate::records::ast_stat_for::AstStatFor::CLASS_INDEX
20            || self.class_index == crate::records::ast_stat_for_in::AstStatForIn::CLASS_INDEX
21            || self.class_index == crate::records::ast_stat_function::AstStatFunction::CLASS_INDEX
22            || self.class_index == crate::records::ast_stat_if::AstStatIf::CLASS_INDEX
23            || self.class_index == crate::records::ast_stat_local::AstStatLocal::CLASS_INDEX
24            || self.class_index == crate::records::ast_stat_local_function::AstStatLocalFunction::CLASS_INDEX
25            || self.class_index == crate::records::ast_stat_repeat::AstStatRepeat::CLASS_INDEX
26            || self.class_index == crate::records::ast_stat_return::AstStatReturn::CLASS_INDEX
27            || self.class_index == crate::records::ast_stat_type_alias::AstStatTypeAlias::CLASS_INDEX
28            || self.class_index == crate::records::ast_stat_type_function::AstStatTypeFunction::CLASS_INDEX
29            || self.class_index == crate::records::ast_stat_while::AstStatWhile::CLASS_INDEX;
30
31        if is_stat {
32            self as *mut AstNode as *mut AstStat
33        } else {
34            core::ptr::null_mut()
35        }
36    }
37
38    #[inline]
39    pub fn as_stat_const(&self) -> *const AstStat {
40        let node = self as *const AstNode as *mut AstNode;
41        unsafe { (*node).as_stat() as *const AstStat }
42    }
43}