Fix assert_known

This commit is contained in:
Sofia 2025-07-22 22:41:20 +03:00
parent 8bbee5eb41
commit 2f56f148cb
2 changed files with 20 additions and 11 deletions

View File

@ -762,22 +762,26 @@ impl TypeKind {
refs: &TypeRefs,
state: &TypecheckPassState,
) -> Result<TypeKind, ErrorKind> {
self.is_known(refs, state).map(|_| self.clone())
}
fn is_known(&self, refs: &TypeRefs, state: &TypecheckPassState) -> Result<(), ErrorKind> {
match &self {
TypeKind::Array(type_kind, _) => type_kind.as_ref().assert_known(refs, state),
TypeKind::Array(type_kind, _) => type_kind.as_ref().is_known(refs, state),
TypeKind::CustomType(custom_type_key) => state
.scope
.types
.get(custom_type_key)
.map(|_| self.clone())
.map(|_| ())
.ok_or(ErrorKind::NoSuchType(
custom_type_key.0.clone(),
state.module_id.unwrap(),
)),
TypeKind::Borrow(type_kind, _) => type_kind.assert_known(refs, state),
TypeKind::UserPtr(type_kind) => type_kind.assert_known(refs, state),
TypeKind::CodegenPtr(type_kind) => type_kind.assert_known(refs, state),
TypeKind::Borrow(type_kind, _) => type_kind.is_known(refs, state),
TypeKind::UserPtr(type_kind) => type_kind.is_known(refs, state),
TypeKind::CodegenPtr(type_kind) => type_kind.is_known(refs, state),
TypeKind::Vague(vague_type) => Err(ErrorKind::TypeIsVague(*vague_type)),
_ => Ok(self.clone()),
_ => Ok(()),
}
}
}

View File

@ -1,7 +1,12 @@
struct SDL_Thing {}
fn vec_sub(l: [f32; 3], r: [f32; 3]) -> [f32; 3] {
return [l[0]-r[0], l[1]-r[1], l[2]-r[2]];
}
extern fn SDL_malloc(size: u64) -> *SDL_Thing;
fn foo(x: f32) {
let a = [x, x, 0.0];
let b = [x, x, x]; // works
// let b = [x * 0.5, x * 0.5, x]; // does not work
vec_sub(a, b);
}
fn main() {
let pixels = SDL_malloc(4 * 320 * 240);
}
fn main() {}