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