Fix the compiler ns to have a very basic Compiler struct

This commit is contained in:
Sameer Rahmani 2020-09-09 21:21:04 +01:00
parent 72fb1f1a2c
commit 03c15c5f25
4 changed files with 23 additions and 9 deletions

11
.gitignore vendored
View File

@ -1,3 +1,10 @@
/target # will have compiled files and executables
*~ debug/
target/
# These are backup files generated by rustfmt
**/*.rs.bk
\#*#
.\#*
*~

View File

@ -0,0 +1,2 @@
(defn hello! (name)
(println "Hello %s" name))

View File

@ -36,7 +36,7 @@ use std::collections::HashMap;
// } // }
pub struct Compiler<'ctx> { pub struct Compiler<'ctx> {
pub context: Context, pub context: &'ctx Context,
pub builder: Builder<'ctx>, pub builder: Builder<'ctx>,
// /// This hashmap contains all the namespaces that has to be compiled and // /// This hashmap contains all the namespaces that has to be compiled and
// /// maps two different keys to the same namespace. Since namespace names // /// maps two different keys to the same namespace. Since namespace names
@ -54,10 +54,10 @@ pub struct Compiler<'ctx> {
} }
impl<'ctx> Compiler<'ctx> { impl<'ctx> Compiler<'ctx> {
pub fn new() -> Compiler<'ctx> { pub fn new(context: &'ctx Context) -> Compiler<'ctx> {
let default_ns_name = "user"; //let default_ns_name = "user";
// let builder = context.create_builder(); // let builder = context.create_builder();
let context = Context::create(); //let context = Context::create();
//let user_ns = Namespace::new(&context, default_ns_name); //let user_ns = Namespace::new(&context, default_ns_name);
//namespaces.insert(default_ns_name, &user_ns); //namespaces.insert(default_ns_name, &user_ns);
// let fpm = PassManager::create(&user_ns.module); // let fpm = PassManager::create(&user_ns.module);
@ -74,9 +74,9 @@ impl<'ctx> Compiler<'ctx> {
// fpm.initialize(); // fpm.initialize();
//, builder, fpm, namespaces, Some(&default_ns_name) //, builder, fpm, namespaces, Some(&default_ns_name)
//Compiler::new(context) //Compiler::new(context)
let builder = context.create_builder(); //let builder = context.create_builder();
Compiler { Compiler {
builder: builder, builder: context.create_builder(),
context: context, context: context,
namespaces: HashMap::new(), namespaces: HashMap::new(),
} }
@ -126,3 +126,7 @@ impl<'ctx> Compiler<'ctx> {
// generated_code // generated_code
// } // }
} }
pub fn create_context() -> Context {
return Context::create();
}

View File

@ -16,7 +16,8 @@ pub mod types;
fn main() -> io::Result<()> { fn main() -> io::Result<()> {
let yaml = load_yaml!("cli.yml"); let yaml = load_yaml!("cli.yml");
let args = App::from(yaml).get_matches(); let args = App::from(yaml).get_matches();
//let compiler = create_compiler(); let context = compiler::create_context();
let compiler = compiler::Compiler::new(&context);
if let Some(input) = args.value_of("INPUT") { if let Some(input) = args.value_of("INPUT") {
let mut f = File::open(input)?; let mut f = File::open(input)?;