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/compiler.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'users/glittershark/achilles/src/compiler.rs') diff --git a/users/glittershark/achilles/src/compiler.rs b/users/glittershark/achilles/src/compiler.rs index 7001e5a9a384..45b215473d7f 100644 --- a/users/glittershark/achilles/src/compiler.rs +++ b/users/glittershark/achilles/src/compiler.rs @@ -8,7 +8,7 @@ use test_strategy::Arbitrary; use crate::codegen::{self, Codegen}; use crate::common::Result; -use crate::passes::hir::monomorphize; +use crate::passes::hir::{monomorphize, strip_positive_units}; use crate::{parser, tc}; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Arbitrary)] @@ -55,9 +55,10 @@ pub struct CompilerOptions { pub fn compile_file(input: &Path, output: &Path, options: &CompilerOptions) -> Result<()> { let src = fs::read_to_string(input)?; - let (_, decls) = parser::toplevel(&src)?; // TODO: statements + let (_, decls) = parser::toplevel(&src)?; let mut decls = tc::typecheck_toplevel(decls)?; monomorphize::run_toplevel(&mut decls); + strip_positive_units::run_toplevel(&mut decls); let context = codegen::Context::create(); let mut codegen = Codegen::new( -- cgit 1.4.1