main
rs 53 lines 2.25 KB
Raw
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;