🤔 Add a type inference engine, along with typed literals. #4
3
.gitignore
vendored
3
.gitignore
vendored
@@ -2,6 +2,9 @@
|
|||||||
Cargo.lock
|
Cargo.lock
|
||||||
**/*.o
|
**/*.o
|
||||||
test
|
test
|
||||||
|
test.exe
|
||||||
|
test.ilk
|
||||||
|
test.pdb
|
||||||
*.dSYM
|
*.dSYM
|
||||||
.vscode
|
.vscode
|
||||||
proptest-regressions/
|
proptest-regressions/
|
||||||
12
Cargo.toml
12
Cargo.toml
@@ -12,12 +12,12 @@ path = "src/lib.rs"
|
|||||||
clap = { version = "^3.0.14", features = ["derive"] }
|
clap = { version = "^3.0.14", features = ["derive"] }
|
||||||
codespan = "0.11.1"
|
codespan = "0.11.1"
|
||||||
codespan-reporting = "0.11.1"
|
codespan-reporting = "0.11.1"
|
||||||
cranelift-codegen = "0.99.1"
|
cranelift-codegen = "0.99.2"
|
||||||
cranelift-jit = "0.99.1"
|
cranelift-jit = "0.99.2"
|
||||||
cranelift-frontend = "0.99.1"
|
cranelift-frontend = "0.99.2"
|
||||||
cranelift-module = "0.99.1"
|
cranelift-module = "0.99.2"
|
||||||
cranelift-native = "0.99.1"
|
cranelift-native = "0.99.2"
|
||||||
cranelift-object = "0.99.1"
|
cranelift-object = "0.99.2"
|
||||||
internment = { version = "0.7.0", default-features = false, features = ["arc"] }
|
internment = { version = "0.7.0", default-features = false, features = ["arc"] }
|
||||||
lalrpop-util = "^0.20.0"
|
lalrpop-util = "^0.20.0"
|
||||||
lazy_static = "^1.4.0"
|
lazy_static = "^1.4.0"
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ pub struct Backend<M: Module> {
|
|||||||
defined_strings: HashMap<String, DataId>,
|
defined_strings: HashMap<String, DataId>,
|
||||||
defined_symbols: HashMap<String, (DataId, ConstantType)>,
|
defined_symbols: HashMap<String, (DataId, ConstantType)>,
|
||||||
output_buffer: Option<String>,
|
output_buffer: Option<String>,
|
||||||
|
platform: Triple,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Backend<JITModule> {
|
impl Backend<JITModule> {
|
||||||
@@ -90,6 +91,7 @@ impl Backend<JITModule> {
|
|||||||
defined_strings: HashMap::new(),
|
defined_strings: HashMap::new(),
|
||||||
defined_symbols: HashMap::new(),
|
defined_symbols: HashMap::new(),
|
||||||
output_buffer,
|
output_buffer,
|
||||||
|
platform: Triple::host(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,6 +130,7 @@ impl Backend<ObjectModule> {
|
|||||||
defined_strings: HashMap::new(),
|
defined_strings: HashMap::new(),
|
||||||
defined_symbols: HashMap::new(),
|
defined_symbols: HashMap::new(),
|
||||||
output_buffer: None,
|
output_buffer: None,
|
||||||
|
platform,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,8 @@ impl Backend<JITModule> {
|
|||||||
let compiled_bytes = jitter.bytes(function_id);
|
let compiled_bytes = jitter.bytes(function_id);
|
||||||
let compiled_function = unsafe { std::mem::transmute::<_, fn() -> ()>(compiled_bytes) };
|
let compiled_function = unsafe { std::mem::transmute::<_, fn() -> ()>(compiled_bytes) };
|
||||||
compiled_function();
|
compiled_function();
|
||||||
Ok(jitter.output())
|
let output = jitter.output();
|
||||||
|
Ok(output)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ impl<M: Module> Backend<M> {
|
|||||||
let basic_signature = Signature {
|
let basic_signature = Signature {
|
||||||
params: vec![],
|
params: vec![],
|
||||||
returns: vec![],
|
returns: vec![],
|
||||||
call_conv: CallConv::SystemV,
|
call_conv: CallConv::triple_default(&self.platform),
|
||||||
};
|
};
|
||||||
|
|
||||||
// this generates the handle for the function that we'll eventually want to
|
// this generates the handle for the function that we'll eventually want to
|
||||||
@@ -211,7 +211,7 @@ impl<M: Module> Backend<M> {
|
|||||||
// so we register it using the function ID and our builder context. However, the
|
// so we register it using the function ID and our builder context. However, the
|
||||||
// result of this function isn't actually super helpful. So we ignore it, unless
|
// result of this function isn't actually super helpful. So we ignore it, unless
|
||||||
// it's an error.
|
// it's an error.
|
||||||
let _ = self.module.define_function(func_id, &mut ctx)?;
|
self.module.define_function(func_id, &mut ctx)?;
|
||||||
|
|
||||||
// done!
|
// done!
|
||||||
Ok(func_id)
|
Ok(func_id)
|
||||||
|
|||||||
Reference in New Issue
Block a user