Refactored scoping

This commit is contained in:
2026-04-16 09:59:07 +02:00
parent 8ed8eed5de
commit 819441bc29
2 changed files with 45 additions and 84 deletions
+19 -25
View File
@@ -124,31 +124,25 @@ impl TopLevelHirScope {
if let Some(tlss_rf) = tlss.structs.get(&symbol.0) {
let struct_ref = self.struct_ref(tlss, tlss_rf);
self.variables
.insert(
symbol.0.clone(),
Arc::new(VarRef {
name: symbol.0.clone(),
var_type: struct_ref,
}),
)
.unwrap()
.var_type
.clone()
let var_ref = Arc::new(VarRef {
name: symbol.0.clone(),
var_type: struct_ref,
});
self.variables.insert(symbol.0.clone(), var_ref.clone());
var_ref.var_type.clone()
} else {
match symbol.0.as_str() {
"int" => self
.variables
.insert(
symbol.0.clone(),
Arc::new(VarRef {
name: symbol.0.clone(),
var_type: Arc::new(TypeRef::Int),
}),
)
.unwrap()
.var_type
.clone(),
"int" => {
let var_ref = Arc::new(VarRef {
name: symbol.0.clone(),
var_type: Arc::new(TypeRef::Int),
});
self.variables.insert(symbol.0.clone(), var_ref.clone());
var_ref.var_type.clone()
}
_ => {
unimplemented!("{:?}", symbol)
@@ -158,7 +152,7 @@ impl TopLevelHirScope {
}
}
pub fn get_reference(&self, name: &String) -> Option<&Arc<VarRef>> {
self.variables.get(name)
pub fn get_reference(&self, name: &String) -> Option<Arc<VarRef>> {
self.variables.get(name).cloned()
}
}