summaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs20
1 files changed, 14 insertions, 6 deletions
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<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.