Skip to content

Commit 9d47e4f

Browse files
committed
refactor: expose expression dependencies from hir
1 parent 1d89d2e commit 9d47e4f

2 files changed

Lines changed: 14 additions & 2 deletions

File tree

compiler/hir/hir_def/src/hir.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ impl<'db> LoweringCtx<'db> {
148148
value_definitions.insert(expression_id, value_definition);
149149
}
150150

151-
let dep_graph = dependency_graph::DependencyGraph::new(self.expression_deps);
151+
let dep_graph = dependency_graph::DependencyGraph::new(self.expression_deps.clone());
152152
let expression_groups = dep_graph.topological_order();
153153

154154
HirModule::new(
@@ -162,6 +162,7 @@ impl<'db> LoweringCtx<'db> {
162162
self.behaviors,
163163
value_definitions,
164164
expression_groups,
165+
self.expression_deps,
165166
self.scopes,
166167
warnings,
167168
self.errors,

compiler/hir/hir_def/src/hir_module.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use super::*;
22
use crate::index::{Index, IndexItem};
33
use alloy_scope::{ScopeIdx, Scopes};
4-
use rustc_hash::FxHashMap;
4+
use rustc_hash::{FxHashMap, FxHashSet};
55
use text_size::TextRange;
66

77
#[derive(Debug, Clone, PartialEq)]
@@ -23,6 +23,7 @@ pub struct HirModule {
2323
behaviors: Index<Behavior, (TypeIdx, TypeIdx)>,
2424
value_definitions: FxHashMap<ExpressionIdx, ValueDefinition>,
2525
expression_groups: Vec<Vec<ExpressionIdx>>,
26+
expression_dependencies: FxHashMap<ExpressionIdx, FxHashSet<ExpressionIdx>>,
2627
scopes: Scopes,
2728
warnings: Vec<LoweringWarning>,
2829
errors: Vec<LoweringError>,
@@ -76,6 +77,7 @@ impl HirModule {
7677
behaviors: Default::default(),
7778
value_definitions: Default::default(),
7879
expression_groups: Vec::new(),
80+
expression_dependencies: Default::default(),
7981
scopes: Default::default(),
8082
warnings: Vec::new(),
8183
errors: Vec::new(),
@@ -94,6 +96,7 @@ impl HirModule {
9496
behaviors: Index<Behavior, (TypeIdx, TypeIdx)>,
9597
value_definitions: FxHashMap<ExpressionIdx, ValueDefinition>,
9698
expression_groups: Vec<Vec<ExpressionIdx>>,
99+
expression_dependencies: FxHashMap<ExpressionIdx, FxHashSet<ExpressionIdx>>,
97100
scopes: Scopes,
98101
warnings: Vec<LoweringWarning>,
99102
errors: Vec<LoweringError>,
@@ -109,6 +112,7 @@ impl HirModule {
109112
behaviors,
110113
value_definitions,
111114
expression_groups,
115+
expression_dependencies,
112116
scopes,
113117
warnings,
114118
errors,
@@ -224,6 +228,13 @@ impl HirModule {
224228
self.expressions.get(idx)
225229
}
226230

231+
pub fn get_expression_dependencies(&self, idx: ExpressionIdx) -> FxHashSet<ExpressionIdx> {
232+
self.expression_dependencies
233+
.get(&idx)
234+
.cloned()
235+
.unwrap_or_default()
236+
}
237+
227238
pub fn get_expression_range(&self, idx: ExpressionIdx) -> TextRange {
228239
self.expressions.get_range(idx)
229240
}

0 commit comments

Comments
 (0)