Skip to content

Commit 607a888

Browse files
committed
fix: side effects panic
1 parent f510831 commit 607a888

File tree

4 files changed

+33
-27
lines changed

4 files changed

+33
-27
lines changed

crates/rspack_core/src/artifacts/side_effects_do_optimize_artifact.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ pub struct SideEffectsDoOptimizeMoveTarget {
1616
pub target_export: Option<Vec<Atom>>,
1717
}
1818

19-
pub type SideEffectsOptimizeArtifact = UkeyMap<DependencyId, Option<SideEffectsDoOptimize>>;
19+
pub type SideEffectsOptimizeArtifact = UkeyMap<DependencyId, SideEffectsDoOptimize>;

crates/rspack_core/src/exports/target.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ pub(crate) fn get_target_with_filter(
167167
}
168168
}
169169

170-
pub(crate) fn get_target_from_export_info(
170+
fn get_target_from_export_info(
171171
export_info: &ExportInfoData,
172172
mg: &ModuleGraph,
173173
resolve_filter: ResolveFilterFnTy,

crates/rspack_core/src/module_graph/mod.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -772,9 +772,10 @@ impl<'a> ModuleGraph<'a> {
772772
}
773773

774774
// set to origin module outgoing connection
775-
if let Some(identifier) = origin_module_id
776-
&& let Some(original_mgm) = self.module_graph_module_by_identifier_mut(&identifier)
777-
{
775+
if let Some(identifier) = origin_module_id {
776+
let original_mgm = self
777+
.module_graph_module_by_identifier_mut(&identifier)
778+
.expect("should mgm exist");
778779
original_mgm.add_outgoing_connection(dependency_id);
779780
};
780781
}

crates/rspack_plugin_javascript/src/plugin/side_effects_flag_plugin.rs

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ use rspack_core::{
66
BoxModule, Compilation, CompilationOptimizeDependencies, ConnectionState, DependencyExtraMeta,
77
DependencyId, FactoryMeta, Logger, MaybeDynamicTargetExportInfo, ModuleFactoryCreateData,
88
ModuleGraph, ModuleGraphConnection, ModuleIdentifier, NormalModuleCreateData,
9-
NormalModuleFactoryModule, Plugin, PrefetchExportsInfoMode, ResolvedExportInfoTarget,
10-
SideEffectsBailoutItemWithSpan, SideEffectsDoOptimize, SideEffectsDoOptimizeMoveTarget,
11-
SideEffectsOptimizeArtifact,
9+
NormalModuleFactoryModule, Plugin, PrefetchExportsInfoMode, RayonConsumer,
10+
ResolvedExportInfoTarget, SideEffectsBailoutItemWithSpan, SideEffectsDoOptimize,
11+
SideEffectsDoOptimizeMoveTarget,
1212
incremental::{self, IncrementalPasses, Mutation},
1313
};
1414
use rspack_error::Result;
@@ -644,8 +644,14 @@ async fn optimize_dependencies(&self, compilation: &mut Compilation) -> Result<O
644644
let logger = compilation.get_logger("rspack.SideEffectsFlagPlugin");
645645
let start = logger.time("update connections");
646646

647-
let mut side_effects_optimize_artifact =
648-
std::mem::take(&mut compilation.side_effects_optimize_artifact);
647+
let mut side_effects_optimize_artifact = if compilation
648+
.incremental
649+
.passes_enabled(IncrementalPasses::SIDE_EFFECTS)
650+
{
651+
std::mem::take(&mut compilation.side_effects_optimize_artifact)
652+
} else {
653+
Default::default()
654+
};
649655
let module_graph = compilation.get_module_graph();
650656

651657
let all_modules = module_graph.modules();
@@ -671,10 +677,14 @@ async fn optimize_dependencies(&self, compilation: &mut Compilation) -> Result<O
671677
.mutations_read(IncrementalPasses::SIDE_EFFECTS)
672678
&& !side_effects_optimize_artifact.is_empty()
673679
{
674-
side_effects_optimize_artifact.retain(|dependency_id, _| {
675-
module_graph
680+
side_effects_optimize_artifact.retain(|dependency_id, do_optimize| {
681+
let dep_exist = module_graph
676682
.connection_by_dependency_id(dependency_id)
677-
.is_some()
683+
.is_some();
684+
let target_module_exist = module_graph
685+
.module_by_identifier(&do_optimize.target_module)
686+
.is_some();
687+
dep_exist && target_module_exist
678688
});
679689

680690
fn affected_incoming_modules(
@@ -731,7 +741,7 @@ async fn optimize_dependencies(&self, compilation: &mut Compilation) -> Result<O
731741
logger.time_end(inner_start);
732742

733743
let inner_start = logger.time("find optimizable connections");
734-
let artifact: SideEffectsOptimizeArtifact = modules
744+
modules
735745
.par_iter()
736746
.filter(|module| side_effects_state_map[module] == ConnectionState::Active(false))
737747
.flat_map(|module| {
@@ -745,21 +755,16 @@ async fn optimize_dependencies(&self, compilation: &mut Compilation) -> Result<O
745755
can_optimize_connection(connection, &side_effects_state_map, &module_graph),
746756
)
747757
})
748-
.collect();
758+
.consume(|(dep_id, can_optimize)| {
759+
if let Some(do_optimize) = can_optimize {
760+
side_effects_optimize_artifact.insert(dep_id, do_optimize);
761+
} else {
762+
side_effects_optimize_artifact.remove(&dep_id);
763+
}
764+
});
749765
logger.time_end(inner_start);
750766

751-
let mut do_optimizes: Vec<(DependencyId, SideEffectsDoOptimize)> = if compilation
752-
.incremental
753-
.passes_enabled(IncrementalPasses::SIDE_EFFECTS)
754-
{
755-
side_effects_optimize_artifact.extend(artifact);
756-
side_effects_optimize_artifact.clone()
757-
} else {
758-
artifact
759-
}
760-
.into_iter()
761-
.filter_map(|(connection, do_optimize)| do_optimize.map(|i| (connection, i)))
762-
.collect();
767+
let mut do_optimizes = side_effects_optimize_artifact.clone();
763768

764769
let inner_start = logger.time("do optimize connections");
765770
let mut do_optimized_count = 0;

0 commit comments

Comments
 (0)