From 2fa9543584f413560f4e6e7570613c07d5607336 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Mon, 8 Jun 2026 12:23:16 +0200 Subject: [PATCH 1/6] feat: remove read module chore: add new dependency chore: format feat: error module feat: introduce hashql_eval interner chore: checkpoint feat: checkpoint feat: checkpoint chore: remove old value module feat: checkpoint feat: checkpoint feat: checkpoint feat: checkpoint feat: checkpoint chore: checkpoint feat: move entity query into its own modul fix: query request feat: checkpoint (it compiles!) feat: checkpoint feat: checkpoint feat: checkpoint fix: issue around cached thunking feat: covariance for opaque inners fix: cfgattr serde chore: remove graph module --- .../@local/hashql/compiletest/src/pipeline.rs | 50 ++------ .../compiletest/src/suite/eval_postgres.rs | 7 +- .../mir_pass_analysis_data_dependency.rs | 3 +- .../suite/mir_pass_transform_cfg_simplify.rs | 4 +- .../suite/mir_pass_transform_pre_inline.rs | 2 +- .../hashql/compiletest/src/suite/mir_reify.rs | 10 +- libs/@local/hashql/mir/src/body/operand.rs | 2 + .../src/pass/analysis/data_dependency/mod.rs | 1 + .../hashql/mir/src/pass/execution/cost/mod.rs | 1 + .../src/pass/execution/island/graph/mod.rs | 11 ++ .../mir/src/pass/execution/island/mod.rs | 2 + .../hashql/mir/src/pass/execution/mod.rs | 11 +- .../mir/src/pass/execution/splitting/mod.rs | 1 + .../execution/terminator_placement/mod.rs | 1 + .../mir/src/pass/execution/traversal/mod.rs | 1 + libs/@local/hashql/mir/src/pass/mod.rs | 110 +++++++++++++++++- .../src/pass/transform/canonicalization.rs | 1 + .../src/pass/transform/cfg_simplify/mod.rs | 1 + .../pass/transform/copy_propagation/mod.rs | 1 + .../hashql/mir/src/pass/transform/dse/mod.rs | 1 + .../pass/transform/forward_substitution.rs | 1 + .../src/pass/transform/inst_simplify/mod.rs | 1 + .../mir/src/pass/transform/ssa_repair/mod.rs | 1 + libs/@local/hashql/mir/src/reify/atom.rs | 4 +- libs/@local/hashql/mir/src/reify/current.rs | 2 + libs/@local/hashql/mir/src/reify/mod.rs | 39 ++++--- libs/@local/hashql/mir/src/reify/rvalue.rs | 21 ++-- .../@local/hashql/mir/src/reify/terminator.rs | 4 +- libs/@local/hashql/mir/src/reify/transform.rs | 4 +- .../tests/ui/reify/ctor-cached-closure.jsonc | 15 +++ .../tests/ui/reify/ctor-cached-closure.stdout | 101 ++++++++++++++++ 31 files changed, 334 insertions(+), 80 deletions(-) create mode 100644 libs/@local/hashql/mir/tests/ui/reify/ctor-cached-closure.jsonc create mode 100644 libs/@local/hashql/mir/tests/ui/reify/ctor-cached-closure.stdout diff --git a/libs/@local/hashql/compiletest/src/pipeline.rs b/libs/@local/hashql/compiletest/src/pipeline.rs index 8b18e299072..1e0696810b7 100644 --- a/libs/@local/hashql/compiletest/src/pipeline.rs +++ b/libs/@local/hashql/compiletest/src/pipeline.rs @@ -17,7 +17,7 @@ //! individual crate APIs. use hashql_core::{ - heap::{Heap, ResetAllocator as _, Scratch}, + heap::{Heap, Scratch}, module::ModuleRegistry, span::{SpanId, SpanTable}, r#type::environment::Environment, @@ -31,12 +31,7 @@ use hashql_mir::{ body::Body, context::MirContext, def::{DefId, DefIdSlice, DefIdVec}, - pass::{ - Changed, GlobalAnalysisPass as _, GlobalTransformPass as _, GlobalTransformState, - analysis::SizeEstimationAnalysis, - execution::{ExecutionAnalysis, ExecutionAnalysisResidual}, - transform::{Inline, InlineConfig, PostInline, PreInline}, - }, + pass::{self, LowerConfig, execution::ExecutionAnalysisResidual}, reify::ReifyContext, }; use hashql_syntax_jexpr::span::Span; @@ -189,6 +184,7 @@ impl<'heap> Pipeline<'heap> { bodies: &mut bodies, mir: &mut mir_context, hir: &hir_context, + scratch: &self.scratch, }; let entry = tri!(hashql_mir::reify::from_hir(node, &mut reify_context)); @@ -218,24 +214,14 @@ impl<'heap> Pipeline<'heap> { bodies: &mut DefIdSlice
>, ) -> Result<(), BoxedDiagnostic<'static, SpanId>> { let mut context = MirContext::new(&self.env, interner); - let mut state = GlobalTransformState::new_in(&*bodies, self.heap); - self.scratch.reset(); - - let mut pass = PreInline::new_in(&mut self.scratch); - let _: Changed = pass.run(&mut context, &mut state, bodies); - self.scratch.reset(); - - let mut pass = Inline::new_in(InlineConfig::default(), &mut self.scratch); - let _: Changed = pass.run(&mut context, &mut state, bodies); - self.scratch.reset(); - - let mut pass = PostInline::new_in(&mut self.scratch); - let _: Changed = pass.run(&mut context, &mut state, bodies); - self.scratch.reset(); - - let status = context.diagnostics.generalize().boxed().into_status(()); - process_status(&mut self.diagnostics, status)?; + let result = pass::lower( + &mut context, + &mut self.scratch, + bodies, + &LowerConfig::default(), + ); + process_status(&mut self.diagnostics, result)?; Ok(()) } @@ -262,20 +248,8 @@ impl<'heap> Pipeline<'heap> { > { let mut context = MirContext::new(&self.env, interner); - let mut pass = SizeEstimationAnalysis::new_in(&self.scratch); - pass.run(&mut context, bodies); - let footprints = pass.finish(); - self.scratch.reset(); - - let pass = ExecutionAnalysis { - footprints: &footprints, - scratch: &mut self.scratch, - }; - let analysis = pass.run_all_in(&mut context, bodies, self.heap); - self.scratch.reset(); - - let status = context.diagnostics.generalize().boxed().into_status(()); - process_status(&mut self.diagnostics, status)?; + let status = pass::place(&mut context, &mut self.scratch, bodies); + let analysis = process_status(&mut self.diagnostics, status)?; Ok(analysis) } diff --git a/libs/@local/hashql/compiletest/src/suite/eval_postgres.rs b/libs/@local/hashql/compiletest/src/suite/eval_postgres.rs index 721796be1e9..f38539e2592 100644 --- a/libs/@local/hashql/compiletest/src/suite/eval_postgres.rs +++ b/libs/@local/hashql/compiletest/src/suite/eval_postgres.rs @@ -7,7 +7,7 @@ use hashql_core::{ r#type::{TypeFormatter, TypeFormatterOptions, environment::Environment}, }; use hashql_diagnostics::DiagnosticIssues; -use hashql_eval::{context::EvalContext, postgres::PostgresCompiler}; +use hashql_eval::{context::CodeGenerationContext, postgres::PostgresCompiler}; use hashql_mir::{ body::{Body, basic_block::BasicBlockId, terminator::TerminatorKind}, context::MirContext, @@ -117,12 +117,13 @@ impl Suite for EvalPostgres { let mir_buf = format_mir_with_placement(heap, &environment, &bodies, &analysis); secondary_outputs.insert("mir", mir_buf); - let mut context = EvalContext::new_in( + let interner = interner.into(); + let mut context = CodeGenerationContext::new_in( &environment, &interner, &bodies, &analysis, - context.heap, + heap, &mut scratch, ); scratch.reset(); diff --git a/libs/@local/hashql/compiletest/src/suite/mir_pass_analysis_data_dependency.rs b/libs/@local/hashql/compiletest/src/suite/mir_pass_analysis_data_dependency.rs index d249c5cbc15..8d10d49f139 100644 --- a/libs/@local/hashql/compiletest/src/suite/mir_pass_analysis_data_dependency.rs +++ b/libs/@local/hashql/compiletest/src/suite/mir_pass_analysis_data_dependency.rs @@ -38,7 +38,8 @@ impl Suite for MirPassAnalysisDataDependency { let mut buffer = Vec::new(); - let (root, mut bodies) = mir_reify(heap, expr, &interner, &mut environment, diagnostics)?; + let (root, mut bodies, _) = + mir_reify(heap, expr, &interner, &mut environment, diagnostics)?; writeln!(buffer, "{}\n", Header::new("MIR")).expect("should be able to write to buffer"); mir_format_text(heap, &environment, &mut buffer, root, &bodies); diff --git a/libs/@local/hashql/compiletest/src/suite/mir_pass_transform_cfg_simplify.rs b/libs/@local/hashql/compiletest/src/suite/mir_pass_transform_cfg_simplify.rs index fa54cc8f4f7..a4e19a5d7cf 100644 --- a/libs/@local/hashql/compiletest/src/suite/mir_pass_transform_cfg_simplify.rs +++ b/libs/@local/hashql/compiletest/src/suite/mir_pass_transform_cfg_simplify.rs @@ -49,7 +49,8 @@ pub(crate) fn mir_pass_transform_cfg_simplify<'heap>( environment: &mut Environment<'heap>, diagnostics: &mut Vec