[WIP] Merge Globals into Module

This commit is contained in:
abdul124 2025-01-14 13:25:38 +08:00
parent 3a7cd82b99
commit 472b76a411
4 changed files with 17 additions and 2 deletions

View File

@ -180,9 +180,12 @@
clippy clippy
pre-commit pre-commit
rustfmt rustfmt
rust-analyzer
]; ];
RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}";
shellHook = shellHook =
'' ''
export PYTHONPATH=/home/abdul/nac3/pyo3:$PYTHONPATH
export DEMO_LINALG_STUB=${packages.x86_64-linux.demo-linalg-stub}/lib/liblinalg.a export DEMO_LINALG_STUB=${packages.x86_64-linux.demo-linalg-stub}/lib/liblinalg.a
export DEMO_LINALG_STUB32=${packages.x86_64-linux.demo-linalg-stub32}/lib/liblinalg.a export DEMO_LINALG_STUB32=${packages.x86_64-linux.demo-linalg-stub32}/lib/liblinalg.a
''; '';

View File

@ -997,16 +997,24 @@ pub fn attributes_writeback<'ctx>(
let ty = ty.unwrap(); let ty = ty.unwrap();
if let Some(def_id) = inner_resolver.pyid_to_def.read().get(gloabl_id) { if let Some(def_id) = inner_resolver.pyid_to_def.read().get(gloabl_id) {
if let TopLevelDef::Variable { name, .. } = &*top_levels[def_id.0].read() { if let TopLevelDef::Variable { name, simple_name, .. } = &*top_levels[def_id.0].read() {
// println!("[+] Varaible with type: {:?}\n{:?}\n", ctx.unifier.stringify(*ty), ctx.unifier.get_ty(*ty)); // println!("[+] Varaible with type: {:?}\n{:?}\n", ctx.unifier.stringify(*ty), ctx.unifier.get_ty(*ty));
println!("Sending Value of {:?}", val.to_string()); println!("Sending Value of {:?}", val.to_string());
if gen_rpc_tag(ctx, ty, &mut scratch_buffer).is_ok() { if gen_rpc_tag(ctx, ty, &mut scratch_buffer).is_ok() {
// let Some(val) = ctx.module.get_global(simple_name.to_string().as_str()) else {continue;};
// let val = val.as_pointer_value();
let pydict = PyDict::new(py); let pydict = PyDict::new(py);
pydict.set_item("global", val)?; pydict.set_item("global", val)?;
pydict.set_item("name", name)?; pydict.set_item("name", name)?;
host_attributes.append(pydict)?; host_attributes.append(pydict)?;
values.push(( values.push((
ty, ty,
// ctx.build_gep_and_load(
// val,
// &[zero, int32.const_int(0, false)],
// None,
// ),
inner_resolver.get_obj_value(py, val, ctx, generator, ty)?.unwrap(), inner_resolver.get_obj_value(py, val, ctx, generator, ty)?.unwrap(),
)); ));
} }

View File

@ -557,9 +557,12 @@ impl Nac3 {
} }
if let StmtKind::AnnAssign { target, .. } = &stmt.node { if let StmtKind::AnnAssign { target, .. } = &stmt.node {
let ExprKind::Name { id: name, .. } = target.node else { unreachable!() }; let ExprKind::Name { id: name, .. } = target.node else { unreachable!() };
global_value_ids global_value_ids
.write() .write()
.insert(id, py_module.getattr(name.to_string().as_str()).unwrap().into()); // .insert(id, py_module.getattr(name.to_string().as_str()).unwrap().into());
.insert(id, module.as_ref(py).into());
} }
} }

View File

@ -1579,6 +1579,7 @@ impl SymbolResolver for Resolver {
let init_val = ctx.gen_symbol_val(generator, &v, ty); let init_val = ctx.gen_symbol_val(generator, &v, ty);
let llvm_ty = init_val.get_type(); let llvm_ty = init_val.get_type();
println!("Adding {id}");
let global = ctx.module.add_global(llvm_ty, None, &id.to_string()); let global = ctx.module.add_global(llvm_ty, None, &id.to_string());
global.set_linkage(Linkage::LinkOnceAny); global.set_linkage(Linkage::LinkOnceAny);
global.set_initializer(&init_val); global.set_initializer(&init_val);