More flexible types

This commit is contained in:
2026-04-22 09:27:29 +02:00
parent 797eed173c
commit 53b87eb02e
2 changed files with 28 additions and 48 deletions
+4 -21
View File
@@ -15,7 +15,7 @@ pub enum TypeRef {
Struct(StructRef),
Function(FunctionRef),
Package(PackageRef),
Int,
Name(String),
}
#[derive(Clone, Debug)]
@@ -162,24 +162,16 @@ impl TopLevelHirScope {
if let Some(tlss_rf) = tlss.structs.get(&symbol.0) {
self.struct_ref(tlss, tlss_rf)
} else {
match symbol.0.as_str() {
"int" => {
let var_ref = Arc::new(VarRef {
export: false,
name: symbol.0.clone(),
var_type: Arc::new(TypeRef::Int),
var_type: Arc::new(TypeRef::Name(symbol.0.clone())),
});
self.variables.insert(symbol.0.clone(), var_ref.clone());
var_ref.var_type.clone()
}
_ => {
unimplemented!("{:?}", symbol)
}
}
}
}
}
@@ -202,7 +194,7 @@ impl TypeRef {
TypeRef::Function(f) => f.name.clone(),
TypeRef::Struct(s) => s.name.clone(),
TypeRef::Package(p) => p.name.clone(),
TypeRef::Int => "int".to_string(),
TypeRef::Name(n) => n.clone(),
}
}
}
@@ -302,25 +294,16 @@ impl PackageRef {
if let Some(json_scope_rf) = json_scope.structs.get(&symbol.0) {
self.struct_ref(json_scope, json_scope_rf)
} else {
match symbol.0.as_str() {
// TODO: This is a hack, we should have a better way to handle built-in types
"int" | "[]any" => {
let var_ref = Arc::new(VarRef {
export: false,
name: symbol.0.clone(),
var_type: Arc::new(TypeRef::Int),
var_type: Arc::new(TypeRef::Name(symbol.0.clone())),
});
self.variables.insert(symbol.0.clone(), var_ref.clone());
var_ref.var_type.clone()
}
_ => {
unimplemented!("{:?}", symbol)
}
}
}
}
}
+2 -5
View File
@@ -65,12 +65,11 @@ impl LocalScope {
match rf {
Some(v) => Some(v),
None => match name.as_str() {
"int" => {
None => {
let var_ref = Arc::new(VarRef {
export: false,
name: name.clone(),
var_type: Arc::new(TypeRef::Int),
var_type: Arc::new(TypeRef::Name(name.clone())),
});
self.variables
@@ -80,8 +79,6 @@ impl LocalScope {
Some(var_ref)
}
_ => None,
},
}
}