Include stdlib in executable
This commit is contained in:
parent
fa4df50a04
commit
3f90b46dc8
@ -15,6 +15,8 @@ use super::{
|
|||||||
Context, FunctionDefinition, Import, Metadata, Module,
|
Context, FunctionDefinition, Import, Metadata, Module,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pub static STD_SOURCE: &str = include_str!("../lib/std.reid");
|
||||||
|
|
||||||
#[derive(thiserror::Error, Debug, Clone)]
|
#[derive(thiserror::Error, Debug, Clone)]
|
||||||
pub enum ErrorKind {
|
pub enum ErrorKind {
|
||||||
#[error("Unable to import inner modules, not yet supported: {0}")]
|
#[error("Unable to import inner modules, not yet supported: {0}")]
|
||||||
@ -39,6 +41,19 @@ pub enum ErrorKind {
|
|||||||
FunctionIsPrivate(String, String),
|
FunctionIsPrivate(String, String),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn compile_main() -> super::Module {
|
||||||
|
let module = compile_module(STD_SOURCE, "standard_library".to_owned(), None, false).unwrap();
|
||||||
|
|
||||||
|
let mut mir_context = super::Context::from(vec![module], Default::default());
|
||||||
|
|
||||||
|
let mut refs = super::typerefs::TypeRefs::default();
|
||||||
|
mir_context.pass(&mut super::typeinference::TypeInference { refs: &mut refs });
|
||||||
|
mir_context.pass(&mut super::typecheck::TypeCheck { refs: &mut refs });
|
||||||
|
|
||||||
|
let std_compiled = mir_context.modules.remove(0);
|
||||||
|
std_compiled
|
||||||
|
}
|
||||||
|
|
||||||
/// Struct used to implement a type-checking pass that can be performed on the
|
/// Struct used to implement a type-checking pass that can be performed on the
|
||||||
/// MIR.
|
/// MIR.
|
||||||
pub struct LinkerPass;
|
pub struct LinkerPass;
|
||||||
@ -71,6 +86,8 @@ impl Pass for LinkerPass {
|
|||||||
modules.insert(module.name.clone(), Rc::new(RefCell::new(module)));
|
modules.insert(module.name.clone(), Rc::new(RefCell::new(module)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
modules.insert("std".to_owned(), Rc::new(RefCell::new(compile_main())));
|
||||||
|
|
||||||
let mut modules_to_process: Vec<Rc<RefCell<Module>>> = modules.values().cloned().collect();
|
let mut modules_to_process: Vec<Rc<RefCell<Module>>> = modules.values().cloned().collect();
|
||||||
|
|
||||||
while let Some(module) = modules_to_process.pop() {
|
while let Some(module) = modules_to_process.pop() {
|
||||||
|
Loading…
Reference in New Issue
Block a user