artiq: Pass artiq builtins to NAC3 constructor
This commit is contained in:
parent
d4c109b6ef
commit
beee3e1f7e
@ -86,7 +86,13 @@ def ceil64(x):
|
|||||||
import device_db
|
import device_db
|
||||||
core_arguments = device_db.device_db["core"]["arguments"]
|
core_arguments = device_db.device_db["core"]["arguments"]
|
||||||
|
|
||||||
compiler = nac3artiq.NAC3(core_arguments["target"])
|
artiq_builtins = {
|
||||||
|
"none": none,
|
||||||
|
"virtual": virtual,
|
||||||
|
"_ConstGenericMarker": _ConstGenericMarker,
|
||||||
|
"Option": Option,
|
||||||
|
}
|
||||||
|
compiler = nac3artiq.NAC3(core_arguments["target"], artiq_builtins)
|
||||||
allow_registration = True
|
allow_registration = True
|
||||||
# Delay NAC3 analysis until all referenced variables are supposed to exist on the CPython side.
|
# Delay NAC3 analysis until all referenced variables are supposed to exist on the CPython side.
|
||||||
registered_functions = set()
|
registered_functions = set()
|
||||||
|
@ -776,7 +776,7 @@ fn add_exceptions(
|
|||||||
#[pymethods]
|
#[pymethods]
|
||||||
impl Nac3 {
|
impl Nac3 {
|
||||||
#[new]
|
#[new]
|
||||||
fn new(isa: &str, py: Python) -> PyResult<Self> {
|
fn new(isa: &str, artiq_builtins: &PyDict, py: Python) -> PyResult<Self> {
|
||||||
let isa = match isa {
|
let isa = match isa {
|
||||||
"host" => Isa::Host,
|
"host" => Isa::Host,
|
||||||
"rv32g" => Isa::RiscV32G,
|
"rv32g" => Isa::RiscV32G,
|
||||||
@ -842,44 +842,18 @@ impl Nac3 {
|
|||||||
let typing_mod = PyModule::import(py, "typing").unwrap();
|
let typing_mod = PyModule::import(py, "typing").unwrap();
|
||||||
let types_mod = PyModule::import(py, "types").unwrap();
|
let types_mod = PyModule::import(py, "types").unwrap();
|
||||||
|
|
||||||
let get_id = |x| id_fn.call1((x,)).unwrap().extract().unwrap();
|
let get_id = |x: &PyAny| id_fn.call1((x,)).and_then(PyAny::extract).unwrap();
|
||||||
let get_attr_id = |obj: &PyModule, attr| id_fn.call1((obj.getattr(attr).unwrap(),))
|
let get_attr_id = |obj: &PyModule, attr| id_fn.call1((obj.getattr(attr).unwrap(),))
|
||||||
.unwrap().extract().unwrap();
|
.unwrap().extract().unwrap();
|
||||||
let primitive_ids = PrimitivePythonId {
|
let primitive_ids = PrimitivePythonId {
|
||||||
virtual_id: get_id(
|
virtual_id: get_id(artiq_builtins.get_item("virtual").ok().flatten().unwrap()),
|
||||||
builtins_mod
|
|
||||||
.getattr("globals")
|
|
||||||
.unwrap()
|
|
||||||
.call0()
|
|
||||||
.unwrap()
|
|
||||||
.get_item("virtual")
|
|
||||||
.unwrap(
|
|
||||||
)),
|
|
||||||
generic_alias: (
|
generic_alias: (
|
||||||
get_attr_id(typing_mod, "_GenericAlias"),
|
get_attr_id(typing_mod, "_GenericAlias"),
|
||||||
get_attr_id(types_mod, "GenericAlias"),
|
get_attr_id(types_mod, "GenericAlias"),
|
||||||
),
|
),
|
||||||
none: id_fn
|
none: get_id(artiq_builtins.get_item("none").ok().flatten().unwrap()),
|
||||||
.call1((builtins_mod
|
|
||||||
.getattr("globals")
|
|
||||||
.unwrap()
|
|
||||||
.call0()
|
|
||||||
.unwrap()
|
|
||||||
.get_item("none")
|
|
||||||
.unwrap(),))
|
|
||||||
.unwrap()
|
|
||||||
.extract()
|
|
||||||
.unwrap(),
|
|
||||||
typevar: get_attr_id(typing_mod, "TypeVar"),
|
typevar: get_attr_id(typing_mod, "TypeVar"),
|
||||||
const_generic_marker: id_fn
|
const_generic_marker: get_id(artiq_builtins.get_item("_ConstGenericMarker").ok().flatten().unwrap()),
|
||||||
.call1((
|
|
||||||
builtins_mod.getattr("globals")
|
|
||||||
.and_then(|v| v.call0())
|
|
||||||
.and_then(|v| v.get_item("_ConstGenericMarker"))
|
|
||||||
.unwrap(),
|
|
||||||
))
|
|
||||||
.and_then(PyAny::extract)
|
|
||||||
.unwrap(),
|
|
||||||
int: get_attr_id(builtins_mod, "int"),
|
int: get_attr_id(builtins_mod, "int"),
|
||||||
int32: get_attr_id(numpy_mod, "int32"),
|
int32: get_attr_id(numpy_mod, "int32"),
|
||||||
int64: get_attr_id(numpy_mod, "int64"),
|
int64: get_attr_id(numpy_mod, "int64"),
|
||||||
@ -891,17 +865,7 @@ impl Nac3 {
|
|||||||
list: get_attr_id(builtins_mod, "list"),
|
list: get_attr_id(builtins_mod, "list"),
|
||||||
tuple: get_attr_id(builtins_mod, "tuple"),
|
tuple: get_attr_id(builtins_mod, "tuple"),
|
||||||
exception: get_attr_id(builtins_mod, "Exception"),
|
exception: get_attr_id(builtins_mod, "Exception"),
|
||||||
option: id_fn
|
option: get_id(artiq_builtins.get_item("Option").ok().flatten().unwrap()),
|
||||||
.call1((builtins_mod
|
|
||||||
.getattr("globals")
|
|
||||||
.unwrap()
|
|
||||||
.call0()
|
|
||||||
.unwrap()
|
|
||||||
.get_item("Option")
|
|
||||||
.unwrap(),))
|
|
||||||
.unwrap()
|
|
||||||
.extract()
|
|
||||||
.unwrap(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let working_directory = tempfile::Builder::new().prefix("nac3-").tempdir().unwrap();
|
let working_directory = tempfile::Builder::new().prefix("nac3-").tempdir().unwrap();
|
||||||
|
Loading…
Reference in New Issue
Block a user