Fix assert_known
This commit is contained in:
parent
8bbee5eb41
commit
2f56f148cb
@ -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(()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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() {}
|
Loading…
Reference in New Issue
Block a user