summaryrefslogtreecommitdiff
path: root/src/eval/mod.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2023-06-12 15:40:43 +0200
committerLaurenz <laurmaedje@gmail.com>2023-06-12 15:42:01 +0200
commit378ebe5f5601f11c3f428c17bed492012feb251e (patch)
tree4530bf009844faca40ca4fd6d0b9251fd51ef587 /src/eval/mod.rs
parent19bf1f58944a42f17903869c162a33aba22b80b0 (diff)
Delayed errors
Fixes #785. Thanks to @Dherse for the idea!
Diffstat (limited to 'src/eval/mod.rs')
-rw-r--r--src/eval/mod.rs19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/eval/mod.rs b/src/eval/mod.rs
index e6016218..fe11606a 100644
--- a/src/eval/mod.rs
+++ b/src/eval/mod.rs
@@ -62,9 +62,6 @@ use ecow::{EcoString, EcoVec};
use unicode_segmentation::UnicodeSegmentation;
use self::func::{CapturesVisitor, Closure};
-use crate::diag::{
- bail, error, At, SourceError, SourceResult, StrResult, Trace, Tracepoint,
-};
use crate::model::{
Content, Introspector, Label, Locator, Recipe, ShowableSelector, Styles, Transform,
Unlabellable, Vt,
@@ -75,6 +72,10 @@ use crate::syntax::{
};
use crate::util::PathExt;
use crate::World;
+use crate::{
+ diag::{bail, error, At, SourceError, SourceResult, StrResult, Trace, Tracepoint},
+ model::DelayedErrors,
+};
const MAX_ITERATIONS: usize = 10_000;
const MAX_CALL_DEPTH: usize = 64;
@@ -102,11 +103,13 @@ pub fn eval(
// Prepare VT.
let mut locator = Locator::default();
let introspector = Introspector::default();
+ let mut delayed = DelayedErrors::default();
let vt = Vt {
world,
- tracer,
- locator: &mut locator,
introspector: introspector.track(),
+ locator: &mut locator,
+ delayed: delayed.track_mut(),
+ tracer,
};
// Prepare VM.
@@ -151,12 +154,14 @@ pub fn eval_string(
// Prepare VT.
let mut tracer = Tracer::default();
let mut locator = Locator::default();
+ let mut delayed = DelayedErrors::default();
let introspector = Introspector::default();
let vt = Vt {
world,
- tracer: tracer.track_mut(),
- locator: &mut locator,
introspector: introspector.track(),
+ locator: &mut locator,
+ delayed: delayed.track_mut(),
+ tracer: tracer.track_mut(),
};
// Prepare VM.