Mono IR checker: check wanted function pointer layout

This commit is contained in:
Ayaz Hafiz 2023-07-06 15:44:09 -05:00
parent e1c88c6101
commit 13c45151a4
No known key found for this signature in database
GPG key ID: 0E2A37416A25EF58

View file

@ -511,14 +511,33 @@ impl<'a, 'r> Ctx<'a, 'r> {
}
&Expr::FunctionPointer { lambda_name } => {
let lambda_symbol = lambda_name.name();
if !self.procs.iter().any(|((name, proc), _)| {
let proc = self.procs.iter().find(|((name, proc), _)| {
*name == lambda_symbol && proc.niche == lambda_name.niche()
}) {
self.problem(ProblemKind::PtrToUndefinedProc {
symbol: lambda_symbol,
});
});
match proc {
None => {
self.problem(ProblemKind::PtrToUndefinedProc {
symbol: lambda_symbol,
});
Some(target_layout)
}
Some(((_, proc_layout), _)) => {
let ProcLayout {
arguments, result, ..
} = proc_layout;
let fn_ptr =
self.interner
.insert_direct_no_semantic(LayoutRepr::FunctionPointer(
FunctionPointer {
args: arguments,
ret: *result,
},
));
Some(fn_ptr)
}
}
Some(target_layout)
}
&Expr::Reset {
symbol,