use crate::analyzer::FunctionSignature;
use crate::codegen::rust::call_signature_resolution::{self, ResolutionMethod};
use crate::parser::Expression;
use crate::codegen::rust::CodeGenerator;
impl<'ast> CodeGenerator<'ast> {
pub(in crate::codegen::rust) fn mc_resolve_method_call_signature(
&self,
object: &Expression<'ast>,
method: &str,
arguments: &[(Option<String>, &'ast Expression<'ast>)],
) -> Option<FunctionSignature> {
let type_name = self.infer_type_name(object);
if let Some(ref tn) = type_name {
let qualified_name = format!("{}::{}", tn, method);
let resolved = call_signature_resolution::resolve_call_signature(
&self.signature_registry,
&qualified_name,
Some(tn.as_str()),
arguments.len(),
&self.module_alias_map,
);
let result = resolved
.filter(|r| !matches!(r.resolution_method, ResolutionMethod::ArgCountValidated))
.map(|r| r.sig);
return result;
}
if method == "remove" {
return None;
}
self.signature_registry
.find_signature_by_name_and_arg_count(method, arguments.len())
.cloned()
}
}