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 <grfn@gws.fyi> Tested-by: BuildkiteCI
This commit is contained in:
parent
db62866d82
commit
8e13b1303a
16 changed files with 447 additions and 88 deletions
1
users/glittershark/achilles/ach/.gitignore
vendored
1
users/glittershark/achilles/ach/.gitignore
vendored
|
|
@ -4,3 +4,4 @@
|
|||
functions
|
||||
simple
|
||||
externs
|
||||
units
|
||||
|
|
|
|||
7
users/glittershark/achilles/ach/units.ach
Normal file
7
users/glittershark/achilles/ach/units.ach
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
extern puts : fn cstring -> int
|
||||
|
||||
ty print : fn cstring -> ()
|
||||
fn print x = let _ = puts x in ()
|
||||
|
||||
ty main : fn -> int
|
||||
fn main = let _ = print "hi" in 0
|
||||
Loading…
Add table
Add a link
Reference in a new issue