diff options
author | Griffin Smith <grfn@gws.fyi> | 2021-03-20T00·46-0400 |
---|---|---|
committer | glittershark <grfn@gws.fyi> | 2021-03-20T20·20+0000 |
commit | 2c838ab845bc54c5ef6cb0561332c84f34249368 (patch) | |
tree | c54c95ebc7f503a1db255566b3e25494bbaa28b3 /users/glittershark/achilles/src/tc | |
parent | fec6595d211e7e3ea616d8335fe5d143a4a7507d (diff) |
feat(gs/achilles): Implement extern decls, for glibc functions r/2293
Implement extern decls, which codegen to LLVM as forward-declared functions, and use these as a hook into calling glibc functions. We can print to the terminal now! The integration tests can test this now. Change-Id: I70af4546b417b888ad9fbb18798db240f77f4e71 Reviewed-on: https://cl.tvl.fyi/c/depot/+/2614 Tested-by: BuildkiteCI Reviewed-by: glittershark <grfn@gws.fyi>
Diffstat (limited to 'users/glittershark/achilles/src/tc')
-rw-r--r-- | users/glittershark/achilles/src/tc/mod.rs | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/users/glittershark/achilles/src/tc/mod.rs b/users/glittershark/achilles/src/tc/mod.rs index 52c18e6d5329..4bca52733bc8 100644 --- a/users/glittershark/achilles/src/tc/mod.rs +++ b/users/glittershark/achilles/src/tc/mod.rs @@ -337,6 +337,19 @@ impl<'ast> Typechecker<'ast> { self.env.set(name.clone(), type_); Ok(None) } + ast::Decl::Extern { name, type_ } => { + let type_ = self.type_from_ast_type(ast::Type::Function(type_)); + self.env.set(name.clone(), type_.clone()); + let (arg_types, ret_type) = match type_ { + Type::Fun { args, ret } => (args, *ret), + _ => unreachable!(), + }; + Ok(Some(hir::Decl::Extern { + name, + arg_types, + ret_type, + })) + } } } |