Skip to content

Commit dac2792

Browse files
committed
Pretty print letrec
1 parent e007327 commit dac2792

File tree

3 files changed

+12
-10
lines changed

3 files changed

+12
-10
lines changed

fathom/src/surface.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -542,8 +542,8 @@ mod tests {
542542
#[cfg(target_pointer_width = "64")]
543543
fn term_size() {
544544
assert_eq!(std::mem::size_of::<Term<()>>(), 32);
545-
assert_eq!(std::mem::size_of::<Term<ByteRange>>(), 56);
546-
assert_eq!(std::mem::size_of::<Term<FileRange>>(), 64);
545+
assert_eq!(std::mem::size_of::<Term<ByteRange>>(), 40);
546+
assert_eq!(std::mem::size_of::<Term<FileRange>>(), 48);
547547
}
548548

549549
#[test]

fathom/src/surface/distillation.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -446,11 +446,11 @@ impl<'interner, 'arena, 'env> Context<'interner, 'arena, 'env> {
446446
match core_term {
447447
core::Term::ItemVar(_span, var) => match self.get_item_name(*var) {
448448
Some(name) => Term::Name((), name),
449-
None => todo!("misbound variable"), // TODO: error?
449+
None => todo!("unbound item variable: `{var:?}`"), // TODO: error?
450450
},
451451
core::Term::LocalVar(_span, var) => match self.get_local_name(*var) {
452452
Some(name) => Term::Name((), name),
453-
None => todo!("misbound variable"), // TODO: error?
453+
None => todo!("unbound local variable: `{var:?}`"), // TODO: error?
454454
},
455455
core::Term::MetaVar(_span, var) => match self.get_hole_name(*var) {
456456
Some(name) => Term::Hole((), name),

fathom/src/surface/pretty.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -160,18 +160,20 @@ impl<'interner, 'arena> Context<'interner, 'arena> {
160160
self.concat([
161161
self.text("let"),
162162
self.space(),
163-
self.ann_pattern(&def.pattern, def.r#type.as_ref()),
164-
self.space(),
165-
self.text("="),
166-
self.softline(),
167-
self.term(&def.expr),
163+
self.let_def(def),
168164
self.text(";"),
169165
])
170166
.group(),
171167
self.line(),
172168
self.term(body_expr),
173169
]),
174-
Term::Letrec(_, _, _) => todo!(),
170+
Term::Letrec(_, defs, body_expr) => self.sequence(
171+
false,
172+
self.concat([self.text("letrec"), self.space()]),
173+
defs.iter().map(|def| self.let_def(def)),
174+
self.text(","),
175+
self.concat([self.text(";"), self.line(), self.term(body_expr)]),
176+
),
175177
Term::If(_, cond_expr, then_expr, mut else_expr) => {
176178
let mut branches = Vec::new();
177179

0 commit comments

Comments
 (0)