From 8e13b1303a0d152c2f3b68f2421163e94fdf226c Mon Sep 17 00:00:00 2001 From: Griffin Smith Date: Sun, 28 Mar 2021 13:28:49 -0400 Subject: feat(achilles): Implement a Unit type Add support for a zero-sized Unit type. This requires some special at the codegen level because LLVM (unsurprisingly) only allows Void types in function return position - to make that a little easier to handle there's a new pass that strips any unit-only expressions and pulls unit-only function arguments up to new `let` bindings, so we never have to actually pass around unit values. Change-Id: I0fc18a516821f2d69172c42a6a5d246b23471e38 Reviewed-on: https://cl.tvl.fyi/c/depot/+/2695 Reviewed-by: glittershark Tested-by: BuildkiteCI --- users/glittershark/achilles/src/interpreter/mod.rs | 1 + 1 file changed, 1 insertion(+) (limited to 'users/glittershark/achilles/src/interpreter/mod.rs') diff --git a/users/glittershark/achilles/src/interpreter/mod.rs b/users/glittershark/achilles/src/interpreter/mod.rs index bcd474b3abe1..a8ba2dd3acdc 100644 --- a/users/glittershark/achilles/src/interpreter/mod.rs +++ b/users/glittershark/achilles/src/interpreter/mod.rs @@ -30,6 +30,7 @@ impl<'a> Interpreter<'a> { Expr::Literal(Literal::Int(i), _) => Ok((*i).into()), Expr::Literal(Literal::Bool(b), _) => Ok((*b).into()), Expr::Literal(Literal::String(s), _) => Ok(s.clone().into()), + Expr::Literal(Literal::Unit, _) => unreachable!(), Expr::UnaryOp { op, rhs, .. } => { let rhs = self.eval(rhs)?; match op { -- cgit 1.4.1