about summary refs log tree commit diff
path: root/users/glittershark/achilles/src/compiler.rs
diff options
context:
space:
mode:
authorGriffin Smith <grfn@gws.fyi>2021-03-20T22·14-0400
committerglittershark <grfn@gws.fyi>2021-03-20T22·20+0000
commit8d5f3029e531d1163668f34e65b73cb6d639767f (patch)
tree48c511fc7eac8d1b46c98af7daa5708b78959449 /users/glittershark/achilles/src/compiler.rs
parente7033bd8b066c8f4163a4f6aa618a39d8110dc6c (diff)
feat(gs/achilles): Implement very basic monomorphization r/2296
Implement very basic monomorphization, by recording type variable
instantiations when typechecking Call nodes and then using those in a
new hir Visitor trait to copy the body of any generic decls for each
possible set of instantiation of the type variables.

Change-Id: Iab54030973e5d66e2b8bcd074b4cb6c001a90123
Reviewed-on: https://cl.tvl.fyi/c/depot/+/2617
Reviewed-by: glittershark <grfn@gws.fyi>
Tested-by: BuildkiteCI
Diffstat (limited to 'users/glittershark/achilles/src/compiler.rs')
-rw-r--r--users/glittershark/achilles/src/compiler.rs4
1 files changed, 3 insertions, 1 deletions
diff --git a/users/glittershark/achilles/src/compiler.rs b/users/glittershark/achilles/src/compiler.rs
index f925b267df57..7001e5a9a384 100644
--- a/users/glittershark/achilles/src/compiler.rs
+++ b/users/glittershark/achilles/src/compiler.rs
@@ -8,6 +8,7 @@ use test_strategy::Arbitrary;
 
 use crate::codegen::{self, Codegen};
 use crate::common::Result;
+use crate::passes::hir::monomorphize;
 use crate::{parser, tc};
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Arbitrary)]
@@ -55,7 +56,8 @@ 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 = tc::typecheck_toplevel(decls)?;
+    let mut decls = tc::typecheck_toplevel(decls)?;
+    monomorphize::run_toplevel(&mut decls);
 
     let context = codegen::Context::create();
     let mut codegen = Codegen::new(