use super::LibfuncHelper;
use crate::{
error::Result,
metadata::{dup_overrides::DupOverridesMeta, MetadataStorage},
};
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<()> {
let values = DupOverridesMeta::invoke_override(
context,
registry,
helper,
helper.init_block(),
entry,
location,
metadata,
&info.signature.param_signatures[0].ty,
entry.arg(0)?,
)?;
helper.br(entry, 0, &[values.0, values.1], location)
}