| 1 | pub mod build_hir; |
| 2 | pub mod find_context_identifiers; |
| 3 | pub mod hir_builder; |
| 4 | pub mod identifier_loc_index; |
| 5 | |
| 6 | use react_compiler_ast::expressions::ArrowFunctionExpression; |
| 7 | use react_compiler_ast::expressions::FunctionExpression; |
| 8 | use react_compiler_ast::statements::FunctionDeclaration; |
| 9 | use react_compiler_hir::BindingKind; |
| 10 | |
| 11 | /// Convert AST binding kind to HIR binding kind. |
| 12 | pub fn convert_binding_kind(kind: &react_compiler_ast::scope::BindingKind) -> BindingKind { |
| 13 | match kind { |
| 14 | react_compiler_ast::scope::BindingKind::Var => BindingKind::Var, |
| 15 | react_compiler_ast::scope::BindingKind::Let => BindingKind::Let, |
| 16 | react_compiler_ast::scope::BindingKind::Const => BindingKind::Const, |
| 17 | react_compiler_ast::scope::BindingKind::Param => BindingKind::Param, |
| 18 | react_compiler_ast::scope::BindingKind::Module => BindingKind::Module, |
| 19 | react_compiler_ast::scope::BindingKind::Hoisted => BindingKind::Hoisted, |
| 20 | react_compiler_ast::scope::BindingKind::Local => BindingKind::Local, |
| 21 | react_compiler_ast::scope::BindingKind::Unknown => BindingKind::Unknown, |
| 22 | } |
| 23 | } |
| 24 | |
| 25 | /// Represents a reference to a function AST node for lowering. |
| 26 | /// Analogous to TS's `NodePath<t.Function>` / `BabelFn`. |
| 27 | pub enum FunctionNode<'a> { |
| 28 | FunctionDeclaration(&'a FunctionDeclaration), |
| 29 | FunctionExpression(&'a FunctionExpression), |
| 30 | ArrowFunctionExpression(&'a ArrowFunctionExpression), |
| 31 | } |
| 32 | |
| 33 | impl<'a> FunctionNode<'a> { |
| 34 | /// Get the node_id of the function node. Panics if not set. |
| 35 | pub fn node_id(&self) -> Option<u32> { |
| 36 | match self { |
| 37 | FunctionNode::FunctionDeclaration(d) => d.base.node_id, |
| 38 | FunctionNode::FunctionExpression(e) => e.base.node_id, |
| 39 | FunctionNode::ArrowFunctionExpression(a) => a.base.node_id, |
| 40 | } |
| 41 | } |
| 42 | } |
| 43 | |
| 44 | // The main lower() function - delegates to build_hir |
| 45 | pub use build_hir::lower; |
| 46 | // Re-export post-build helper functions used by optimization passes |
| 47 | pub use hir_builder::{ |
| 48 | create_temporary_place, get_reverse_postordered_blocks, mark_instruction_ids, |
| 49 | mark_predecessors, remove_dead_do_while_statements, remove_unnecessary_try_catch, |
| 50 | remove_unreachable_for_updates, |
| 51 | }; |
| 52 | pub use react_compiler_hir::visitors::each_terminal_successor; |
| 53 | pub use react_compiler_hir::visitors::terminal_fallthrough; |