use super::LibfuncHelper;
use crate::{
error::Result,
metadata::{drop_overrides::DropOverridesMeta, MetadataStorage},
utils::ProgramRegistryExt,
};
use cairo_lang_sierra::{
extensions::{
core::{CoreLibfunc, CoreType},
lib_func::SignatureOnlyConcreteLibfunc,
},
program_registry::ProgramRegistry,
};
use melior::{
helpers::BuiltinBlockExt,
ir::{Block, Location},
Context,
};
pub fn build<'ctx, 'this>(
context: &'ctx Context,
registry: &ProgramRegistry<CoreType, CoreLibfunc>,
entry: &'this Block<'ctx>,
location: Location<'ctx>,
helper: &LibfuncHelper<'ctx, 'this>,
metadata: &mut MetadataStorage,
info: &SignatureOnlyConcreteLibfunc,
) -> Result<()> {
registry.build_type(
context,
helper,
metadata,
&info.signature.param_signatures[0].ty,
)?;
DropOverridesMeta::invoke_override(
context,
registry,
helper,
helper.init_block(),
entry,
location,
metadata,
&info.signature.param_signatures[0].ty,
entry.arg(0)?,
)?;
helper.br(entry, 0, &[], location)
}