diff options
Diffstat (limited to 'tvix/eval/src/compiler')
-rw-r--r-- | tvix/eval/src/compiler/attrs.rs | 6 | ||||
-rw-r--r-- | tvix/eval/src/compiler/mod.rs | 21 |
2 files changed, 23 insertions, 4 deletions
diff --git a/tvix/eval/src/compiler/attrs.rs b/tvix/eval/src/compiler/attrs.rs index d6bcfa5109b4..864cc2cb3da0 100644 --- a/tvix/eval/src/compiler/attrs.rs +++ b/tvix/eval/src/compiler/attrs.rs @@ -30,7 +30,11 @@ impl Compiler<'_, '_> { /// 3. Attribute sets can (optionally) be recursive. pub(super) fn compile_attr_set(&mut self, slot: LocalIdx, node: ast::AttrSet) { if node.rec_token().is_some() { - todo!("recursive attribute sets are not yet implemented") + let span = self.span_for(&node); + self.emit_warning( + span, + WarningKind::NotImplemented("recursive attribute sets are not yet implemented"), + ); } // Open a scope to track the positions of the temporaries used diff --git a/tvix/eval/src/compiler/mod.rs b/tvix/eval/src/compiler/mod.rs index 3e8a6aefd792..627994eaf44b 100644 --- a/tvix/eval/src/compiler/mod.rs +++ b/tvix/eval/src/compiler/mod.rs @@ -187,7 +187,10 @@ impl Compiler<'_, '_> { // their value on the stack. ast::Expr::Paren(paren) => self.compile(slot, paren.expr().unwrap()), - ast::Expr::LegacyLet(_) => todo!("legacy let"), + ast::Expr::LegacyLet(_) => { + let span = self.span_for(&expr); + self.emit_error(span, ErrorKind::NotImplemented("legacy let syntax")); + } ast::Expr::Root(_) => unreachable!("there cannot be more than one root"), ast::Expr::Error(_) => unreachable!("compile is only called on validated trees"), @@ -238,7 +241,14 @@ impl Compiler<'_, '_> { buf } else { // TODO: decide what to do with findFile - todo!("other path types (e.g. <...> lookups) not yet implemented") + let span = self.span_for(&node); + self.emit_error( + span, + ErrorKind::NotImplemented( + "other path types (e.g. <...> lookups) not yet implemented", + ), + ); + return; }; // TODO: Use https://github.com/rust-lang/rfcs/issues/2208 @@ -622,7 +632,12 @@ impl Compiler<'_, '_> { }; if path.len() != 1 { - todo!("nested bindings in let expressions :(") + let span = self.span_for(&entry); + self.emit_error( + span, + ErrorKind::NotImplemented("nested bindings in let expressions :("), + ); + continue; } let idx = self.declare_local(&entry.attrpath().unwrap(), path.pop().unwrap()); |