forked from M-Labs/nac3
nac3embedded: compilation demo
This commit is contained in:
parent
75bd9b9a15
commit
dd29ae251a
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -459,6 +459,8 @@ dependencies = [
|
|||||||
name = "nac3embedded"
|
name = "nac3embedded"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"inkwell",
|
||||||
|
"nac3core",
|
||||||
"pyo3",
|
"pyo3",
|
||||||
"rustpython-parser",
|
"rustpython-parser",
|
||||||
]
|
]
|
||||||
|
@ -10,4 +10,6 @@ crate-type = ["cdylib"]
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
pyo3 = { version = "0.12.4", features = ["extension-module"] }
|
pyo3 = { version = "0.12.4", features = ["extension-module"] }
|
||||||
|
inkwell = { git = "https://github.com/TheDan64/inkwell", branch = "master", features = ["llvm10-0"] }
|
||||||
rustpython-parser = { git = "https://github.com/RustPython/RustPython", branch = "master" }
|
rustpython-parser = { git = "https://github.com/RustPython/RustPython", branch = "master" }
|
||||||
|
nac3core = { path = "../nac3core" }
|
||||||
|
@ -3,8 +3,8 @@ from language import *
|
|||||||
|
|
||||||
class Demo:
|
class Demo:
|
||||||
@kernel
|
@kernel
|
||||||
def run(self):
|
def run(self: bool) -> bool:
|
||||||
pass
|
return False
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
@ -4,6 +4,10 @@ use std::collections::hash_map::Entry;
|
|||||||
use pyo3::prelude::*;
|
use pyo3::prelude::*;
|
||||||
use pyo3::exceptions;
|
use pyo3::exceptions;
|
||||||
use rustpython_parser::{ast, parser};
|
use rustpython_parser::{ast, parser};
|
||||||
|
use inkwell::context::Context;
|
||||||
|
use inkwell::targets::*;
|
||||||
|
|
||||||
|
use nac3core::CodeGen;
|
||||||
|
|
||||||
fn runs_on_core(decorator_list: &[ast::Expression]) -> bool {
|
fn runs_on_core(decorator_list: &[ast::Expression]) -> bool {
|
||||||
for decorator in decorator_list.iter() {
|
for decorator in decorator_list.iter() {
|
||||||
@ -87,7 +91,11 @@ impl Nac3 {
|
|||||||
decorator_list,
|
decorator_list,
|
||||||
returns: _ } = &statement.node {
|
returns: _ } = &statement.node {
|
||||||
if runs_on_core(decorator_list) && funcdef_name == &name {
|
if runs_on_core(decorator_list) && funcdef_name == &name {
|
||||||
println!("found: {:?}", &statement.node);
|
let context = Context::create();
|
||||||
|
let mut codegen = CodeGen::new(&context);
|
||||||
|
codegen.compile_toplevel(&body[0]).map_err(|e|
|
||||||
|
exceptions::PyRuntimeError::new_err(format!("compilation failed: {}", e)))?;
|
||||||
|
codegen.print_ir();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -102,6 +110,7 @@ impl Nac3 {
|
|||||||
|
|
||||||
#[pymodule]
|
#[pymodule]
|
||||||
fn nac3embedded(_py: Python, m: &PyModule) -> PyResult<()> {
|
fn nac3embedded(_py: Python, m: &PyModule) -> PyResult<()> {
|
||||||
|
Target::initialize_all(&InitializationConfig::default());
|
||||||
m.add_class::<Nac3>()?;
|
m.add_class::<Nac3>()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user