From 2f0b5eeae09bd880e4552bb83e44d9cd32571c58 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Thu, 11 May 2023 11:27:00 +0200 Subject: More efficient introspection Switches from a mutable locator to one based on tracked chains and optimizes query performance. --- src/lib.rs | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index f54bf0ad..c8878466 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -54,7 +54,7 @@ pub mod syntax; use std::path::Path; -use comemo::{Prehashed, Track}; +use comemo::{Prehashed, Track, TrackedMut}; use crate::diag::{FileResult, SourceResult}; use crate::doc::Document; @@ -66,16 +66,24 @@ use crate::util::Buffer; /// Compile a source file into a fully layouted document. #[tracing::instrument(skip(world))] pub fn compile(world: &dyn World) -> SourceResult { - // Evaluate the source file into a module. let route = Route::default(); let mut tracer = Tracer::default(); - let module = - eval::eval(world.track(), route.track(), tracer.track_mut(), world.main())?; - tracing::info!("Evaluation successful"); + // Call `track` just once to keep comemo's ID stable. + let world = world.track(); + let mut tracer = tracer.track_mut(); + + // Evaluate the source file into a module. + tracing::info!("Starting evaluation"); + let module = eval::eval( + world, + route.track(), + TrackedMut::reborrow_mut(&mut tracer), + world.main(), + )?; // Typeset the module's contents. - model::typeset(world.track(), tracer.track_mut(), &module.content()) + model::typeset(world, tracer, &module.content()) } /// The environment in which typesetting occurs. -- cgit v1.2.3