diff options
| author | Laurenz <laurmaedje@gmail.com> | 2023-05-11 11:27:00 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2023-05-11 11:27:00 +0200 |
| commit | 2f0b5eeae09bd880e4552bb83e44d9cd32571c58 (patch) | |
| tree | 6989d423e6bb614b3224be53140e4d649033aeac /src/lib.rs | |
| parent | 47dff3765de863554ca296448555599fc50d4a8a (diff) | |
More efficient introspection
Switches from a mutable locator to one based on tracked chains and optimizes query performance.
Diffstat (limited to 'src/lib.rs')
| -rw-r--r-- | src/lib.rs | 20 |
1 files changed, 14 insertions, 6 deletions
@@ -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<Document> { - // 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. |
