Skip to content

Commit 37eaba6

Browse files
committed
Change SpanValue to Spanned<T>
1 parent a64d9fa commit 37eaba6

File tree

5 files changed

+312
-219
lines changed

5 files changed

+312
-219
lines changed

fathom/src/core/binary.rs

Lines changed: 40 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use std::fmt::Debug;
77
use std::slice::SliceIndex;
88
use std::sync::Arc;
99

10-
use crate::core::semantics::{self, ArcValue, Elim, Head, SpanValue, Value};
10+
use crate::core::semantics::{self, ArcValue, Elim, Head, Spanned, Value};
1111
use crate::core::{Const, Prim, UIntStyle};
1212
use crate::env::{EnvLen, SliceEnv};
1313
use crate::source::Span;
@@ -307,7 +307,10 @@ impl<'arena, 'env, 'data> Context<'arena, 'env, 'data> {
307307
reader: &mut BufferReader<'data>,
308308
format: &ArcValue<'arena>,
309309
) -> Result<ArcValue<'arena>, ReadError<'arena>> {
310-
let SpanValue(format_span, val) = self.elim_context().force(format);
310+
let Spanned {
311+
span: format_span,
312+
inner: val,
313+
} = self.elim_context().force(format);
311314
match val.as_ref() {
312315
Value::Stuck(Head::Prim(prim), slice) => {
313316
self.read_prim(reader, *prim, slice, format_span)
@@ -324,14 +327,17 @@ impl<'arena, 'env, 'data> Context<'arena, 'env, 'data> {
324327
formats = next_formats(expr);
325328
}
326329

327-
Ok(SpanValue(
328-
format_span,
329-
Arc::new(Value::RecordLit(labels, exprs)),
330-
))
330+
Ok(Spanned {
331+
span: format_span,
332+
inner: Arc::new(Value::RecordLit(labels, exprs)),
333+
})
331334
}
332335
Value::FormatCond(_label, format, cond) => {
333336
let value = self.read_format(reader, &format)?;
334-
let SpanValue(_, cond_res) = self.elim_context().apply_closure(cond, value.clone());
337+
let Spanned {
338+
span: _,
339+
inner: cond_res,
340+
} = self.elim_context().apply_closure(cond, value.clone());
335341

336342
match *cond_res {
337343
Value::ConstLit(Const::Bool(true)) => Ok(value),
@@ -367,10 +373,10 @@ impl<'arena, 'env, 'data> Context<'arena, 'env, 'data> {
367373
// reached in loop above.
368374
reader.set_relative_offset(max_relative_offset).unwrap();
369375

370-
Ok(SpanValue(
371-
format_span,
372-
Arc::new(Value::RecordLit(labels, exprs)),
373-
))
376+
Ok(Spanned {
377+
span: format_span,
378+
inner: Arc::new(Value::RecordLit(labels, exprs)),
379+
})
374380
}
375381

376382
Value::Stuck(Head::RigidVar(_), _)
@@ -444,7 +450,7 @@ impl<'arena, 'env, 'data> Context<'arena, 'env, 'data> {
444450
len: &ArcValue<'arena>,
445451
elem_format: &ArcValue<'arena>,
446452
) -> Result<ArcValue<'arena>, ReadError<'arena>> {
447-
let len = match self.elim_context().force(len).1.as_ref() {
453+
let len = match self.elim_context().force(len).inner.as_ref() {
448454
Value::ConstLit(Const::U8(len, _)) => u64::from(*len),
449455
Value::ConstLit(Const::U16(len, _)) => u64::from(*len),
450456
Value::ConstLit(Const::U32(len, _)) => u64::from(*len),
@@ -456,7 +462,10 @@ impl<'arena, 'env, 'data> Context<'arena, 'env, 'data> {
456462
.map(|_| self.read_format(reader, elem_format))
457463
.collect::<Result<_, _>>()?;
458464

459-
Ok(SpanValue(span, Arc::new(Value::ArrayLit(elem_exprs))))
465+
Ok(Spanned {
466+
span,
467+
inner: Arc::new(Value::ArrayLit(elem_exprs)),
468+
})
460469
}
461470

462471
fn read_repeat_until_end(
@@ -477,10 +486,10 @@ impl<'arena, 'env, 'data> Context<'arena, 'env, 'data> {
477486
// unwrap shouldn't panic as we're rewinding to a known good offset
478487
// Should this be set to the end of the current buffer?
479488
reader.set_relative_offset(current_offset).unwrap();
480-
return Ok(SpanValue(
481-
elem_format.span(),
482-
Arc::new(Value::ArrayLit(elems)),
483-
));
489+
return Ok(Spanned {
490+
span: elem_format.span(),
491+
inner: Arc::new(Value::ArrayLit(elems)),
492+
});
484493
}
485494
Err(err) => return Err(err),
486495
};
@@ -494,7 +503,7 @@ impl<'arena, 'env, 'data> Context<'arena, 'env, 'data> {
494503
elem_format: &ArcValue<'arena>,
495504
) -> Result<ArcValue<'arena>, ReadError<'arena>> {
496505
let len_span = len.span();
497-
let len = match self.elim_context().force(len).1.as_ref() {
506+
let len = match self.elim_context().force(len).inner.as_ref() {
498507
Value::ConstLit(Const::U8(len, _)) => Some(usize::from(*len)),
499508
Value::ConstLit(Const::U16(len, _)) => Some(usize::from(*len)),
500509
Value::ConstLit(Const::U32(len, _)) => usize::try_from(*len).ok(),
@@ -517,22 +526,25 @@ impl<'arena, 'env, 'data> Context<'arena, 'env, 'data> {
517526
pos_value: &ArcValue<'arena>,
518527
elem_format: &ArcValue<'arena>,
519528
) -> Result<ArcValue<'arena>, ReadError<'arena>> {
520-
let pos = match self.elim_context().force(pos_value).1.as_ref() {
529+
let pos = match self.elim_context().force(pos_value).inner.as_ref() {
521530
Value::ConstLit(Const::Pos(pos)) => *pos,
522531
_ => return Err(ReadError::InvalidValue(pos_value.span())),
523532
};
524533

525534
self.pending_formats.push((pos, elem_format.clone()));
526535

527-
Ok(SpanValue(span, Arc::new(Value::ConstLit(Const::Ref(pos)))))
536+
Ok(Spanned {
537+
span,
538+
inner: Arc::new(Value::ConstLit(Const::Ref(pos))),
539+
})
528540
}
529541

530542
fn read_deref(
531543
&mut self,
532544
format: &ArcValue<'arena>,
533545
r#ref: &ArcValue<'arena>,
534546
) -> Result<ArcValue<'arena>, ReadError<'arena>> {
535-
let pos = match self.elim_context().force(r#ref).1.as_ref() {
547+
let pos = match self.elim_context().force(r#ref).inner.as_ref() {
536548
Value::ConstLit(Const::Ref(pos)) => *pos,
537549
_ => return Err(ReadError::InvalidValue(r#ref.span())),
538550
};
@@ -593,12 +605,12 @@ fn read_stream_pos<'arena, 'data>(
593605
reader: &mut BufferReader<'data>,
594606
span: Span,
595607
) -> Result<ArcValue<'arena>, ReadError<'arena>> {
596-
Ok(SpanValue(
608+
Ok(Spanned {
597609
span,
598-
Arc::new(Value::ConstLit(Const::Pos(
610+
inner: Arc::new(Value::ConstLit(Const::Pos(
599611
reader.offset().map_err(|err| err.with_span(span))?,
600612
))),
601-
))
613+
})
602614
}
603615

604616
fn read_const<'arena, 'data, T>(
@@ -608,7 +620,10 @@ fn read_const<'arena, 'data, T>(
608620
wrap_const: fn(T) -> Const,
609621
) -> Result<ArcValue<'arena>, ReadError<'arena>> {
610622
let data = read(reader).map_err(|err| err.with_span(span))?;
611-
Ok(SpanValue(span, Arc::new(Value::ConstLit(wrap_const(data)))))
623+
Ok(Spanned {
624+
span,
625+
inner: Arc::new(Value::ConstLit(wrap_const(data))),
626+
})
612627
}
613628

614629
fn read_u8<'data>(reader: &mut BufferReader<'data>) -> Result<u8, BufferError> {

0 commit comments

Comments
 (0)