From d4569cb5046882dd5d4c8f3b187d167119186fa5 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Sat, 22 Oct 2022 23:55:21 +0300 Subject: feat(tvix/eval): initial attempt at setting lambda names When compiling a lambda, take the name of the outer slot (if available) and store it as the name on the lambda. These names are then shown in the observer, and nowhere else (so far). It is of course common for these things to thread through many different context levels (e.g. `f = a: b: c: ...`), in this setup only the outermost closure or thunk gains the name, but it's better than nothing. Change-Id: I681ba74e624f2b9e7a147144a27acf364fe6ccc7 Reviewed-on: https://cl.tvl.fyi/c/depot/+/7065 Reviewed-by: grfn Autosubmit: tazjin Tested-by: BuildkiteCI --- tvix/eval/src/compiler/mod.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'tvix/eval/src/compiler/mod.rs') diff --git a/tvix/eval/src/compiler/mod.rs b/tvix/eval/src/compiler/mod.rs index 2ab76623864b..2985c7e90e0b 100644 --- a/tvix/eval/src/compiler/mod.rs +++ b/tvix/eval/src/compiler/mod.rs @@ -54,7 +54,7 @@ struct LambdaCtx { impl LambdaCtx { fn new() -> Self { LambdaCtx { - lambda: Lambda::new_anonymous(), + lambda: Lambda::default(), scope: Default::default(), captures_with_stack: false, } @@ -62,7 +62,7 @@ impl LambdaCtx { fn inherit(&self) -> Self { LambdaCtx { - lambda: Lambda::new_anonymous(), + lambda: Lambda::default(), scope: self.scope.inherit(), captures_with_stack: false, } @@ -897,7 +897,13 @@ impl Compiler<'_> { N: ToSpan, F: FnOnce(&mut Compiler, LocalIdx), { + let name = self.scope()[outer_slot].name(); self.new_context(); + + // Set the (optional) name of the current slot on the lambda that is + // being compiled. + self.context_mut().lambda.name = name; + let span = self.span_for(node); let slot = self.scope_mut().declare_phantom(span, false); self.scope_mut().begin_scope(); -- cgit 1.4.1