rename llvm-context crate

Signed-off-by: xermicus <cyrill@parity.io>
This commit is contained in:
xermicus
2024-05-01 15:45:09 +02:00
parent 9b341853b4
commit 72515254fe
55 changed files with 529 additions and 529 deletions
@@ -6,12 +6,12 @@
/// Translates the contract hash copying.
///
pub fn contract_hash<'ctx, D>(
context: &mut era_compiler_llvm_context::EraVMContext<'ctx, D>,
context: &mut revive_llvm_context::EraVMContext<'ctx, D>,
offset: inkwell::values::IntValue<'ctx>,
value: inkwell::values::IntValue<'ctx>,
) -> anyhow::Result<()>
where
D: era_compiler_llvm_context::EraVMDependency + Clone,
D: revive_llvm_context::EraVMDependency + Clone,
{
let offset = context.builder().build_int_add(
offset,
@@ -21,7 +21,7 @@ where
"datacopy_contract_hash_offset",
)?;
era_compiler_llvm_context::eravm_evm_memory::store(context, offset, value)?;
revive_llvm_context::eravm_evm_memory::store(context, offset, value)?;
Ok(())
}
@@ -30,14 +30,14 @@ where
/// Translates the library marker copying.
///
pub fn library_marker<D>(
context: &mut era_compiler_llvm_context::EraVMContext<D>,
context: &mut revive_llvm_context::EraVMContext<D>,
offset: u64,
value: u64,
) -> anyhow::Result<()>
where
D: era_compiler_llvm_context::EraVMDependency + Clone,
D: revive_llvm_context::EraVMDependency + Clone,
{
era_compiler_llvm_context::eravm_evm_memory::store_byte(
revive_llvm_context::eravm_evm_memory::store_byte(
context,
context.field_const(offset),
context.field_const(value),
@@ -50,12 +50,12 @@ where
/// Translates the static data copying.
///
pub fn static_data<'ctx, D>(
context: &mut era_compiler_llvm_context::EraVMContext<'ctx, D>,
context: &mut revive_llvm_context::EraVMContext<'ctx, D>,
destination: inkwell::values::IntValue<'ctx>,
source: &str,
) -> anyhow::Result<()>
where
D: era_compiler_llvm_context::EraVMDependency + Clone,
D: revive_llvm_context::EraVMDependency + Clone,
{
let mut offset = 0;
for (index, chunk) in source
@@ -76,7 +76,7 @@ where
format!("datacopy_destination_index_{index}").as_str(),
)?;
let datacopy_value = context.field_const_str_hex(value_string.as_str());
era_compiler_llvm_context::eravm_evm_memory::store(
revive_llvm_context::eravm_evm_memory::store(
context,
datacopy_destination,
datacopy_value,
@@ -6,17 +6,17 @@
/// Translates the unconditional jump.
///
pub fn unconditional<D>(
context: &mut era_compiler_llvm_context::EraVMContext<D>,
context: &mut revive_llvm_context::EraVMContext<D>,
destination: num::BigUint,
stack_hash: md5::Digest,
) -> anyhow::Result<()>
where
D: era_compiler_llvm_context::EraVMDependency + Clone,
D: revive_llvm_context::EraVMDependency + Clone,
{
let code_type = context
.code_type()
.ok_or_else(|| anyhow::anyhow!("The contract code part type is undefined"))?;
let block_key = era_compiler_llvm_context::EraVMFunctionBlockKey::new(code_type, destination);
let block_key = revive_llvm_context::EraVMFunctionBlockKey::new(code_type, destination);
let block = context
.current_function()
@@ -32,24 +32,24 @@ where
/// Translates the conditional jump.
///
pub fn conditional<D>(
context: &mut era_compiler_llvm_context::EraVMContext<D>,
context: &mut revive_llvm_context::EraVMContext<D>,
destination: num::BigUint,
stack_hash: md5::Digest,
stack_height: usize,
) -> anyhow::Result<()>
where
D: era_compiler_llvm_context::EraVMDependency + Clone,
D: revive_llvm_context::EraVMDependency + Clone,
{
let code_type = context
.code_type()
.ok_or_else(|| anyhow::anyhow!("The contract code part type is undefined"))?;
let block_key = era_compiler_llvm_context::EraVMFunctionBlockKey::new(code_type, destination);
let block_key = revive_llvm_context::EraVMFunctionBlockKey::new(code_type, destination);
let condition_pointer = context.evmla().stack[stack_height]
.to_llvm()
.into_pointer_value();
let condition = context.build_load(
era_compiler_llvm_context::EraVMPointer::new_stack_field(context, condition_pointer),
revive_llvm_context::EraVMPointer::new_stack_field(context, condition_pointer),
format!("conditional_{block_key}_condition").as_str(),
)?;
let condition = context.builder().build_int_compare(
@@ -342,11 +342,11 @@ impl Instruction {
///
pub fn recursive_call(
name: String,
entry_key: era_compiler_llvm_context::EraVMFunctionBlockKey,
entry_key: revive_llvm_context::EraVMFunctionBlockKey,
stack_hash: md5::Digest,
input_size: usize,
output_size: usize,
return_address: era_compiler_llvm_context::EraVMFunctionBlockKey,
return_address: revive_llvm_context::EraVMFunctionBlockKey,
previous: &Self,
) -> Self {
Self {
@@ -374,7 +374,7 @@ pub enum Name {
/// The called function name.
name: String,
/// The called function key.
entry_key: era_compiler_llvm_context::EraVMFunctionBlockKey,
entry_key: revive_llvm_context::EraVMFunctionBlockKey,
/// The stack state hash after return.
stack_hash: md5::Digest,
/// The input size.
@@ -382,7 +382,7 @@ pub enum Name {
/// The output size.
output_size: usize,
/// The return address.
return_address: era_compiler_llvm_context::EraVMFunctionBlockKey,
return_address: revive_llvm_context::EraVMFunctionBlockKey,
},
/// The recursive function return instruction.
#[serde(skip)]
@@ -8,11 +8,11 @@ use inkwell::values::BasicValue;
/// Translates the ordinar value push.
///
pub fn push<'ctx, D>(
context: &mut era_compiler_llvm_context::EraVMContext<'ctx, D>,
context: &mut revive_llvm_context::EraVMContext<'ctx, D>,
value: String,
) -> anyhow::Result<inkwell::values::BasicValueEnum<'ctx>>
where
D: era_compiler_llvm_context::EraVMDependency + Clone,
D: revive_llvm_context::EraVMDependency + Clone,
{
let result = context
.field_type()
@@ -29,11 +29,11 @@ where
/// Translates the block tag label push.
///
pub fn push_tag<'ctx, D>(
context: &mut era_compiler_llvm_context::EraVMContext<'ctx, D>,
context: &mut revive_llvm_context::EraVMContext<'ctx, D>,
value: String,
) -> anyhow::Result<inkwell::values::BasicValueEnum<'ctx>>
where
D: era_compiler_llvm_context::EraVMDependency + Clone,
D: revive_llvm_context::EraVMDependency + Clone,
{
let result = context
.field_type()
@@ -46,17 +46,17 @@ where
/// Translates the stack memory duplicate.
///
pub fn dup<'ctx, D>(
context: &mut era_compiler_llvm_context::EraVMContext<'ctx, D>,
context: &mut revive_llvm_context::EraVMContext<'ctx, D>,
offset: usize,
height: usize,
original: &mut Option<String>,
) -> anyhow::Result<inkwell::values::BasicValueEnum<'ctx>>
where
D: era_compiler_llvm_context::EraVMDependency + Clone,
D: revive_llvm_context::EraVMDependency + Clone,
{
let element = &context.evmla().stack[height - offset - 1];
let value = context.build_load(
era_compiler_llvm_context::EraVMPointer::new_stack_field(
revive_llvm_context::EraVMPointer::new_stack_field(
context,
element.to_llvm().into_pointer_value(),
),
@@ -72,22 +72,22 @@ where
/// Translates the stack memory swap.
///
pub fn swap<D>(
context: &mut era_compiler_llvm_context::EraVMContext<D>,
context: &mut revive_llvm_context::EraVMContext<D>,
offset: usize,
height: usize,
) -> anyhow::Result<()>
where
D: era_compiler_llvm_context::EraVMDependency + Clone,
D: revive_llvm_context::EraVMDependency + Clone,
{
let top_element = context.evmla().stack[height - 1].to_owned();
let top_pointer = era_compiler_llvm_context::EraVMPointer::new_stack_field(
let top_pointer = revive_llvm_context::EraVMPointer::new_stack_field(
context,
top_element.to_llvm().into_pointer_value(),
);
let top_value = context.build_load(top_pointer, format!("swap{offset}_top_value").as_str())?;
let swap_element = context.evmla().stack[height - offset - 1].to_owned();
let swap_pointer = era_compiler_llvm_context::EraVMPointer::new_stack_field(
let swap_pointer = revive_llvm_context::EraVMPointer::new_stack_field(
context,
swap_element.to_llvm().into_pointer_value(),
);
@@ -106,9 +106,9 @@ where
///
/// Translates the stack memory pop.
///
pub fn pop<D>(_context: &mut era_compiler_llvm_context::EraVMContext<D>) -> anyhow::Result<()>
pub fn pop<D>(_context: &mut revive_llvm_context::EraVMContext<D>) -> anyhow::Result<()>
where
D: era_compiler_llvm_context::EraVMDependency + Clone,
D: revive_llvm_context::EraVMDependency + Clone,
{
Ok(())
}
+18 -18
View File
@@ -51,7 +51,7 @@ impl Assembly {
///
pub fn keccak256(&self) -> String {
let json = serde_json::to_vec(self).expect("Always valid");
era_compiler_llvm_context::eravm_utils::keccak256(json.as_slice())
revive_llvm_context::eravm_utils::keccak256(json.as_slice())
}
///
@@ -197,28 +197,28 @@ impl Assembly {
}
}
impl<D> era_compiler_llvm_context::EraVMWriteLLVM<D> for Assembly
impl<D> revive_llvm_context::EraVMWriteLLVM<D> for Assembly
where
D: era_compiler_llvm_context::EraVMDependency + Clone,
D: revive_llvm_context::EraVMDependency + Clone,
{
fn declare(
&mut self,
context: &mut era_compiler_llvm_context::EraVMContext<D>,
context: &mut revive_llvm_context::EraVMContext<D>,
) -> anyhow::Result<()> {
let mut entry = era_compiler_llvm_context::EraVMEntryFunction::default();
let mut entry = revive_llvm_context::EraVMEntryFunction::default();
entry.declare(context)?;
let mut runtime = era_compiler_llvm_context::EraVMRuntime::new(
era_compiler_llvm_context::EraVMAddressSpace::Heap,
let mut runtime = revive_llvm_context::EraVMRuntime::new(
revive_llvm_context::EraVMAddressSpace::Heap,
);
runtime.declare(context)?;
era_compiler_llvm_context::EraVMDeployCodeFunction::new(
era_compiler_llvm_context::EraVMDummyLLVMWritable::default(),
revive_llvm_context::EraVMDeployCodeFunction::new(
revive_llvm_context::EraVMDummyLLVMWritable::default(),
)
.declare(context)?;
era_compiler_llvm_context::EraVMRuntimeCodeFunction::new(
era_compiler_llvm_context::EraVMDummyLLVMWritable::default(),
revive_llvm_context::EraVMRuntimeCodeFunction::new(
revive_llvm_context::EraVMDummyLLVMWritable::default(),
)
.declare(context)?;
@@ -231,7 +231,7 @@ where
fn into_llvm(
mut self,
context: &mut era_compiler_llvm_context::EraVMContext<D>,
context: &mut revive_llvm_context::EraVMContext<D>,
) -> anyhow::Result<()> {
let full_path = self.full_path().to_owned();
@@ -240,7 +240,7 @@ where
}
let deploy_code_blocks = EtherealIR::get_blocks(
context.evmla().version.to_owned(),
era_compiler_llvm_context::EraVMCodeType::Deploy,
revive_llvm_context::EraVMCodeType::Deploy,
self.code
.as_deref()
.ok_or_else(|| anyhow::anyhow!("Deploy code instructions not found"))?,
@@ -267,7 +267,7 @@ where
};
let runtime_code_blocks = EtherealIR::get_blocks(
context.evmla().version.to_owned(),
era_compiler_llvm_context::EraVMCodeType::Runtime,
revive_llvm_context::EraVMCodeType::Runtime,
runtime_code_instructions.as_slice(),
)?;
@@ -282,12 +282,12 @@ where
ethereal_ir.declare(context)?;
ethereal_ir.into_llvm(context)?;
era_compiler_llvm_context::EraVMDeployCodeFunction::new(EntryLink::new(
era_compiler_llvm_context::EraVMCodeType::Deploy,
revive_llvm_context::EraVMDeployCodeFunction::new(EntryLink::new(
revive_llvm_context::EraVMCodeType::Deploy,
))
.into_llvm(context)?;
era_compiler_llvm_context::EraVMRuntimeCodeFunction::new(EntryLink::new(
era_compiler_llvm_context::EraVMCodeType::Runtime,
revive_llvm_context::EraVMRuntimeCodeFunction::new(EntryLink::new(
revive_llvm_context::EraVMCodeType::Runtime,
))
.into_llvm(context)?;
@@ -14,25 +14,25 @@ use crate::evmla::ethereal_ir::EtherealIR;
#[derive(Debug, Clone)]
pub struct EntryLink {
/// The code part type.
pub code_type: era_compiler_llvm_context::EraVMCodeType,
pub code_type: revive_llvm_context::EraVMCodeType,
}
impl EntryLink {
///
/// A shortcut constructor.
///
pub fn new(code_type: era_compiler_llvm_context::EraVMCodeType) -> Self {
pub fn new(code_type: revive_llvm_context::EraVMCodeType) -> Self {
Self { code_type }
}
}
impl<D> era_compiler_llvm_context::EraVMWriteLLVM<D> for EntryLink
impl<D> revive_llvm_context::EraVMWriteLLVM<D> for EntryLink
where
D: era_compiler_llvm_context::EraVMDependency + Clone,
D: revive_llvm_context::EraVMDependency + Clone,
{
fn into_llvm(
self,
context: &mut era_compiler_llvm_context::EraVMContext<D>,
context: &mut revive_llvm_context::EraVMContext<D>,
) -> anyhow::Result<()> {
let target = context
.get_function(EtherealIR::DEFAULT_ENTRY_FUNCTION_NAME)
@@ -40,10 +40,10 @@ where
.borrow()
.declaration();
let is_deploy_code = match self.code_type {
era_compiler_llvm_context::EraVMCodeType::Deploy => context
revive_llvm_context::EraVMCodeType::Deploy => context
.integer_type(revive_common::BIT_LENGTH_BOOLEAN)
.const_int(1, false),
era_compiler_llvm_context::EraVMCodeType::Runtime => context
revive_llvm_context::EraVMCodeType::Runtime => context
.integer_type(revive_common::BIT_LENGTH_BOOLEAN)
.const_int(0, false),
};
@@ -52,10 +52,10 @@ impl Element {
///
fn pop_arguments_llvm<'ctx, D>(
&mut self,
context: &mut era_compiler_llvm_context::EraVMContext<'ctx, D>,
context: &mut revive_llvm_context::EraVMContext<'ctx, D>,
) -> Vec<inkwell::values::BasicValueEnum<'ctx>>
where
D: era_compiler_llvm_context::EraVMDependency + Clone,
D: revive_llvm_context::EraVMDependency + Clone,
{
let input_size = self.instruction.input_size(&context.evmla().version);
let output_size = self.instruction.output_size();
@@ -67,7 +67,7 @@ impl Element {
.into_pointer_value();
let value = context
.build_load(
era_compiler_llvm_context::EraVMPointer::new_stack_field(context, pointer),
revive_llvm_context::EraVMPointer::new_stack_field(context, pointer),
format!("argument_{index}").as_str(),
)
.unwrap();
@@ -77,13 +77,13 @@ impl Element {
}
}
impl<D> era_compiler_llvm_context::EraVMWriteLLVM<D> for Element
impl<D> revive_llvm_context::EraVMWriteLLVM<D> for Element
where
D: era_compiler_llvm_context::EraVMDependency + Clone,
D: revive_llvm_context::EraVMDependency + Clone,
{
fn into_llvm(
mut self,
context: &mut era_compiler_llvm_context::EraVMContext<'_, D>,
context: &mut revive_llvm_context::EraVMContext<'_, D>,
) -> anyhow::Result<()> {
let mut original = self.instruction.value.clone();
@@ -135,7 +135,7 @@ where
)
.map(Some),
InstructionName::PUSH_ContractHash => {
era_compiler_llvm_context::eravm_evm_create::contract_hash(
revive_llvm_context::eravm_evm_create::contract_hash(
context,
self.instruction
.value
@@ -144,7 +144,7 @@ where
.map(|argument| Some(argument.value))
}
InstructionName::PUSH_ContractHashSize => {
era_compiler_llvm_context::eravm_evm_create::header_size(
revive_llvm_context::eravm_evm_create::header_size(
context,
self.instruction
.value
@@ -433,7 +433,7 @@ where
InstructionName::ADD => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_arithmetic::addition(
revive_llvm_context::eravm_evm_arithmetic::addition(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -442,7 +442,7 @@ where
}
InstructionName::SUB => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_arithmetic::subtraction(
revive_llvm_context::eravm_evm_arithmetic::subtraction(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -451,7 +451,7 @@ where
}
InstructionName::MUL => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_arithmetic::multiplication(
revive_llvm_context::eravm_evm_arithmetic::multiplication(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -460,7 +460,7 @@ where
}
InstructionName::DIV => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_arithmetic::division(
revive_llvm_context::eravm_evm_arithmetic::division(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -469,7 +469,7 @@ where
}
InstructionName::MOD => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_arithmetic::remainder(
revive_llvm_context::eravm_evm_arithmetic::remainder(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -478,7 +478,7 @@ where
}
InstructionName::SDIV => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_arithmetic::division_signed(
revive_llvm_context::eravm_evm_arithmetic::division_signed(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -487,7 +487,7 @@ where
}
InstructionName::SMOD => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_arithmetic::remainder_signed(
revive_llvm_context::eravm_evm_arithmetic::remainder_signed(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -497,7 +497,7 @@ where
InstructionName::LT => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_comparison::compare(
revive_llvm_context::eravm_evm_comparison::compare(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -507,7 +507,7 @@ where
}
InstructionName::GT => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_comparison::compare(
revive_llvm_context::eravm_evm_comparison::compare(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -517,7 +517,7 @@ where
}
InstructionName::EQ => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_comparison::compare(
revive_llvm_context::eravm_evm_comparison::compare(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -527,7 +527,7 @@ where
}
InstructionName::ISZERO => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_comparison::compare(
revive_llvm_context::eravm_evm_comparison::compare(
context,
arguments[0].into_int_value(),
context.field_const(0),
@@ -537,7 +537,7 @@ where
}
InstructionName::SLT => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_comparison::compare(
revive_llvm_context::eravm_evm_comparison::compare(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -547,7 +547,7 @@ where
}
InstructionName::SGT => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_comparison::compare(
revive_llvm_context::eravm_evm_comparison::compare(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -558,7 +558,7 @@ where
InstructionName::OR => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_bitwise::or(
revive_llvm_context::eravm_evm_bitwise::or(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -567,7 +567,7 @@ where
}
InstructionName::XOR => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_bitwise::xor(
revive_llvm_context::eravm_evm_bitwise::xor(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -576,7 +576,7 @@ where
}
InstructionName::NOT => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_bitwise::xor(
revive_llvm_context::eravm_evm_bitwise::xor(
context,
arguments[0].into_int_value(),
context.field_type().const_all_ones(),
@@ -585,7 +585,7 @@ where
}
InstructionName::AND => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_bitwise::and(
revive_llvm_context::eravm_evm_bitwise::and(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -594,7 +594,7 @@ where
}
InstructionName::SHL => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_bitwise::shift_left(
revive_llvm_context::eravm_evm_bitwise::shift_left(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -603,7 +603,7 @@ where
}
InstructionName::SHR => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_bitwise::shift_right(
revive_llvm_context::eravm_evm_bitwise::shift_right(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -612,7 +612,7 @@ where
}
InstructionName::SAR => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_bitwise::shift_right_arithmetic(
revive_llvm_context::eravm_evm_bitwise::shift_right_arithmetic(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -621,7 +621,7 @@ where
}
InstructionName::BYTE => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_bitwise::byte(
revive_llvm_context::eravm_evm_bitwise::byte(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -631,7 +631,7 @@ where
InstructionName::ADDMOD => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_math::add_mod(
revive_llvm_context::eravm_evm_math::add_mod(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -641,7 +641,7 @@ where
}
InstructionName::MULMOD => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_math::mul_mod(
revive_llvm_context::eravm_evm_math::mul_mod(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -651,7 +651,7 @@ where
}
InstructionName::EXP => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_math::exponent(
revive_llvm_context::eravm_evm_math::exponent(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -660,7 +660,7 @@ where
}
InstructionName::SIGNEXTEND => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_math::sign_extend(
revive_llvm_context::eravm_evm_math::sign_extend(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -670,7 +670,7 @@ where
InstructionName::SHA3 | InstructionName::KECCAK256 => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_crypto::sha3(
revive_llvm_context::eravm_evm_crypto::sha3(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -680,7 +680,7 @@ where
InstructionName::MLOAD => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_memory::load(
revive_llvm_context::eravm_evm_memory::load(
context,
arguments[0].into_int_value(),
)
@@ -688,7 +688,7 @@ where
}
InstructionName::MSTORE => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_memory::store(
revive_llvm_context::eravm_evm_memory::store(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -697,7 +697,7 @@ where
}
InstructionName::MSTORE8 => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_memory::store_byte(
revive_llvm_context::eravm_evm_memory::store_byte(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -706,16 +706,16 @@ where
}
InstructionName::MCOPY => {
let arguments = self.pop_arguments_llvm(context);
let destination = era_compiler_llvm_context::EraVMPointer::new_with_offset(
let destination = revive_llvm_context::EraVMPointer::new_with_offset(
context,
era_compiler_llvm_context::EraVMAddressSpace::Heap,
revive_llvm_context::EraVMAddressSpace::Heap,
context.byte_type(),
arguments[0].into_int_value(),
"mcopy_destination",
);
let source = era_compiler_llvm_context::EraVMPointer::new_with_offset(
let source = revive_llvm_context::EraVMPointer::new_with_offset(
context,
era_compiler_llvm_context::EraVMAddressSpace::Heap,
revive_llvm_context::EraVMAddressSpace::Heap,
context.byte_type(),
arguments[1].into_int_value(),
"mcopy_source",
@@ -733,7 +733,7 @@ where
InstructionName::SLOAD => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_storage::load(
revive_llvm_context::eravm_evm_storage::load(
context,
arguments[0].into_int_value(),
)
@@ -741,7 +741,7 @@ where
}
InstructionName::SSTORE => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_storage::store(
revive_llvm_context::eravm_evm_storage::store(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -767,7 +767,7 @@ where
.get_or_allocate_immutable(key.as_str());
let index = context.field_const(offset as u64);
era_compiler_llvm_context::eravm_evm_immutable::load(context, index).map(Some)
revive_llvm_context::eravm_evm_immutable::load(context, index).map(Some)
}
InstructionName::ASSIGNIMMUTABLE => {
let mut arguments = self.pop_arguments_llvm(context);
@@ -781,7 +781,7 @@ where
let index = context.field_const(offset as u64);
let value = arguments.pop().expect("Always exists").into_int_value();
era_compiler_llvm_context::eravm_evm_immutable::store(context, index, value)
revive_llvm_context::eravm_evm_immutable::store(context, index, value)
.map(|_| None)
}
@@ -790,12 +790,12 @@ where
.code_type()
.ok_or_else(|| anyhow::anyhow!("The contract code part type is undefined"))?
{
era_compiler_llvm_context::EraVMCodeType::Deploy => {
revive_llvm_context::EraVMCodeType::Deploy => {
Ok(Some(context.field_const(0).as_basic_value_enum()))
}
era_compiler_llvm_context::EraVMCodeType::Runtime => {
revive_llvm_context::EraVMCodeType::Runtime => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_calldata::load(
revive_llvm_context::eravm_evm_calldata::load(
context,
arguments[0].into_int_value(),
)
@@ -808,11 +808,11 @@ where
.code_type()
.ok_or_else(|| anyhow::anyhow!("The contract code part type is undefined"))?
{
era_compiler_llvm_context::EraVMCodeType::Deploy => {
revive_llvm_context::EraVMCodeType::Deploy => {
Ok(Some(context.field_const(0).as_basic_value_enum()))
}
era_compiler_llvm_context::EraVMCodeType::Runtime => {
era_compiler_llvm_context::eravm_evm_calldata::size(context).map(Some)
revive_llvm_context::EraVMCodeType::Runtime => {
revive_llvm_context::eravm_evm_calldata::size(context).map(Some)
}
}
}
@@ -823,11 +823,11 @@ where
.code_type()
.ok_or_else(|| anyhow::anyhow!("The contract code part type is undefined"))?
{
era_compiler_llvm_context::EraVMCodeType::Deploy => {
revive_llvm_context::EraVMCodeType::Deploy => {
let calldata_size =
era_compiler_llvm_context::eravm_evm_calldata::size(context)?;
revive_llvm_context::eravm_evm_calldata::size(context)?;
era_compiler_llvm_context::eravm_evm_calldata::copy(
revive_llvm_context::eravm_evm_calldata::copy(
context,
arguments[0].into_int_value(),
calldata_size.into_int_value(),
@@ -835,8 +835,8 @@ where
)
.map(|_| None)
}
era_compiler_llvm_context::EraVMCodeType::Runtime => {
era_compiler_llvm_context::eravm_evm_calldata::copy(
revive_llvm_context::EraVMCodeType::Runtime => {
revive_llvm_context::eravm_evm_calldata::copy(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -851,10 +851,10 @@ where
.code_type()
.ok_or_else(|| anyhow::anyhow!("The contract code part type is undefined"))?
{
era_compiler_llvm_context::EraVMCodeType::Deploy => {
era_compiler_llvm_context::eravm_evm_calldata::size(context).map(Some)
revive_llvm_context::EraVMCodeType::Deploy => {
revive_llvm_context::eravm_evm_calldata::size(context).map(Some)
}
era_compiler_llvm_context::EraVMCodeType::Runtime => {
revive_llvm_context::EraVMCodeType::Runtime => {
todo!()
}
}
@@ -887,18 +887,18 @@ where
match context.code_type().ok_or_else(|| {
anyhow::anyhow!("The contract code part type is undefined")
})? {
era_compiler_llvm_context::EraVMCodeType::Deploy => {
era_compiler_llvm_context::eravm_evm_calldata::copy(
revive_llvm_context::EraVMCodeType::Deploy => {
revive_llvm_context::eravm_evm_calldata::copy(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
arguments[2].into_int_value(),
)
}
era_compiler_llvm_context::EraVMCodeType::Runtime => {
revive_llvm_context::EraVMCodeType::Runtime => {
let calldata_size =
era_compiler_llvm_context::eravm_evm_calldata::size(context)?;
era_compiler_llvm_context::eravm_evm_calldata::copy(
revive_llvm_context::eravm_evm_calldata::size(context)?;
revive_llvm_context::eravm_evm_calldata::copy(
context,
arguments[0].into_int_value(),
calldata_size.into_int_value(),
@@ -912,11 +912,11 @@ where
}
InstructionName::PUSHSIZE => Ok(Some(context.field_const(0).as_basic_value_enum())),
InstructionName::RETURNDATASIZE => {
era_compiler_llvm_context::eravm_evm_return_data::size(context).map(Some)
revive_llvm_context::eravm_evm_return_data::size(context).map(Some)
}
InstructionName::RETURNDATACOPY => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_return_data::copy(
revive_llvm_context::eravm_evm_return_data::copy(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -926,7 +926,7 @@ where
}
InstructionName::EXTCODESIZE => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_ext_code::size(
revive_llvm_context::eravm_evm_ext_code::size(
context,
arguments[0].into_int_value(),
)
@@ -934,7 +934,7 @@ where
}
InstructionName::EXTCODEHASH => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_ext_code::hash(
revive_llvm_context::eravm_evm_ext_code::hash(
context,
arguments[0].into_int_value(),
)
@@ -943,7 +943,7 @@ where
InstructionName::RETURN => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_return::r#return(
revive_llvm_context::eravm_evm_return::r#return(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -952,7 +952,7 @@ where
}
InstructionName::REVERT => {
let arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_return::revert(
revive_llvm_context::eravm_evm_return::revert(
context,
arguments[0].into_int_value(),
arguments[1].into_int_value(),
@@ -960,15 +960,15 @@ where
.map(|_| None)
}
InstructionName::STOP => {
era_compiler_llvm_context::eravm_evm_return::stop(context).map(|_| None)
revive_llvm_context::eravm_evm_return::stop(context).map(|_| None)
}
InstructionName::INVALID => {
era_compiler_llvm_context::eravm_evm_return::invalid(context).map(|_| None)
revive_llvm_context::eravm_evm_return::invalid(context).map(|_| None)
}
InstructionName::LOG0 => {
let mut arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_event::log(
revive_llvm_context::eravm_evm_event::log(
context,
arguments.remove(0).into_int_value(),
arguments.remove(0).into_int_value(),
@@ -981,7 +981,7 @@ where
}
InstructionName::LOG1 => {
let mut arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_event::log(
revive_llvm_context::eravm_evm_event::log(
context,
arguments.remove(0).into_int_value(),
arguments.remove(0).into_int_value(),
@@ -994,7 +994,7 @@ where
}
InstructionName::LOG2 => {
let mut arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_event::log(
revive_llvm_context::eravm_evm_event::log(
context,
arguments.remove(0).into_int_value(),
arguments.remove(0).into_int_value(),
@@ -1007,7 +1007,7 @@ where
}
InstructionName::LOG3 => {
let mut arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_event::log(
revive_llvm_context::eravm_evm_event::log(
context,
arguments.remove(0).into_int_value(),
arguments.remove(0).into_int_value(),
@@ -1020,7 +1020,7 @@ where
}
InstructionName::LOG4 => {
let mut arguments = self.pop_arguments_llvm(context);
era_compiler_llvm_context::eravm_evm_event::log(
revive_llvm_context::eravm_evm_event::log(
context,
arguments.remove(0).into_int_value(),
arguments.remove(0).into_int_value(),
@@ -1045,7 +1045,7 @@ where
todo!()
/*
era_compiler_llvm_context::eravm_evm_call::default(
revive_llvm_context::eravm_evm_call::default(
context,
context.llvm_runtime().far_call,
gas,
@@ -1070,7 +1070,7 @@ where
let output_offset = arguments.remove(0).into_int_value();
let output_size = arguments.remove(0).into_int_value();
era_compiler_llvm_context::eravm_evm_call::default(
revive_llvm_context::eravm_evm_call::default(
context,
context.llvm_runtime().static_call,
gas,
@@ -1094,7 +1094,7 @@ where
let output_offset = arguments.remove(0).into_int_value();
let output_size = arguments.remove(0).into_int_value();
era_compiler_llvm_context::eravm_evm_call::default(
revive_llvm_context::eravm_evm_call::default(
context,
context.llvm_runtime().delegate_call,
gas,
@@ -1116,7 +1116,7 @@ where
let input_offset = arguments[1].into_int_value();
let input_length = arguments[2].into_int_value();
era_compiler_llvm_context::eravm_evm_create::create(
revive_llvm_context::eravm_evm_create::create(
context,
value,
input_offset,
@@ -1132,7 +1132,7 @@ where
let input_length = arguments[2].into_int_value();
let salt = arguments[3].into_int_value();
era_compiler_llvm_context::eravm_evm_create::create2(
revive_llvm_context::eravm_evm_create::create2(
context,
value,
input_offset,
@@ -1146,44 +1146,44 @@ where
InstructionName::CALLER => todo!(),
InstructionName::CALLVALUE => {
era_compiler_llvm_context::eravm_evm_ether_gas::value(context).map(Some)
revive_llvm_context::eravm_evm_ether_gas::value(context).map(Some)
}
InstructionName::GAS => {
era_compiler_llvm_context::eravm_evm_ether_gas::gas(context).map(Some)
revive_llvm_context::eravm_evm_ether_gas::gas(context).map(Some)
}
InstructionName::BALANCE => {
let arguments = self.pop_arguments_llvm(context);
let address = arguments[0].into_int_value();
era_compiler_llvm_context::eravm_evm_ether_gas::balance(context, address).map(Some)
revive_llvm_context::eravm_evm_ether_gas::balance(context, address).map(Some)
}
InstructionName::SELFBALANCE => todo!(),
InstructionName::GASLIMIT => {
era_compiler_llvm_context::eravm_evm_contract_context::gas_limit(context).map(Some)
revive_llvm_context::eravm_evm_contract_context::gas_limit(context).map(Some)
}
InstructionName::GASPRICE => {
era_compiler_llvm_context::eravm_evm_contract_context::gas_price(context).map(Some)
revive_llvm_context::eravm_evm_contract_context::gas_price(context).map(Some)
}
InstructionName::ORIGIN => {
era_compiler_llvm_context::eravm_evm_contract_context::origin(context).map(Some)
revive_llvm_context::eravm_evm_contract_context::origin(context).map(Some)
}
InstructionName::CHAINID => {
era_compiler_llvm_context::eravm_evm_contract_context::chain_id(context).map(Some)
revive_llvm_context::eravm_evm_contract_context::chain_id(context).map(Some)
}
InstructionName::TIMESTAMP => {
era_compiler_llvm_context::eravm_evm_contract_context::block_timestamp(context)
revive_llvm_context::eravm_evm_contract_context::block_timestamp(context)
.map(Some)
}
InstructionName::NUMBER => {
era_compiler_llvm_context::eravm_evm_contract_context::block_number(context)
revive_llvm_context::eravm_evm_contract_context::block_number(context)
.map(Some)
}
InstructionName::BLOCKHASH => {
let arguments = self.pop_arguments_llvm(context);
let index = arguments[0].into_int_value();
era_compiler_llvm_context::eravm_evm_contract_context::block_hash(context, index)
revive_llvm_context::eravm_evm_contract_context::block_hash(context, index)
.map(Some)
}
InstructionName::BLOBHASH => {
@@ -1191,19 +1191,19 @@ where
anyhow::bail!("The `BLOBHASH` instruction is not supported until zkVM v1.5.0");
}
InstructionName::DIFFICULTY | InstructionName::PREVRANDAO => {
era_compiler_llvm_context::eravm_evm_contract_context::difficulty(context).map(Some)
revive_llvm_context::eravm_evm_contract_context::difficulty(context).map(Some)
}
InstructionName::COINBASE => {
era_compiler_llvm_context::eravm_evm_contract_context::coinbase(context).map(Some)
revive_llvm_context::eravm_evm_contract_context::coinbase(context).map(Some)
}
InstructionName::BASEFEE => {
era_compiler_llvm_context::eravm_evm_contract_context::basefee(context).map(Some)
revive_llvm_context::eravm_evm_contract_context::basefee(context).map(Some)
}
InstructionName::BLOBBASEFEE => {
anyhow::bail!("The `BLOBBASEFEE` instruction is not supported until zkVM v1.5.0");
}
InstructionName::MSIZE => {
era_compiler_llvm_context::eravm_evm_contract_context::msize(context).map(Some)
revive_llvm_context::eravm_evm_contract_context::msize(context).map(Some)
}
InstructionName::CALLCODE => {
@@ -1252,7 +1252,7 @@ where
.to_llvm()
.into_pointer_value();
context.build_store(
era_compiler_llvm_context::EraVMPointer::new_stack_field(
revive_llvm_context::EraVMPointer::new_stack_field(
context, pointer,
),
value,
@@ -1269,9 +1269,9 @@ where
format!("return_value_element_{}", index).as_str(),
)
.expect("Always exists");
let pointer = era_compiler_llvm_context::EraVMPointer::new(
let pointer = revive_llvm_context::EraVMPointer::new(
context.field_type(),
era_compiler_llvm_context::EraVMAddressSpace::Stack,
revive_llvm_context::EraVMAddressSpace::Stack,
context.evmla().stack
[self.stack.elements.len() - output_size + index]
.to_llvm()
@@ -1300,12 +1300,12 @@ where
arguments.pop();
match context.current_function().borrow().r#return() {
era_compiler_llvm_context::EraVMFunctionReturn::None => {}
era_compiler_llvm_context::EraVMFunctionReturn::Primitive { pointer } => {
revive_llvm_context::EraVMFunctionReturn::None => {}
revive_llvm_context::EraVMFunctionReturn::Primitive { pointer } => {
assert_eq!(arguments.len(), 1);
context.build_store(pointer, arguments.remove(0))?;
}
era_compiler_llvm_context::EraVMFunctionReturn::Compound {
revive_llvm_context::EraVMFunctionReturn::Compound {
pointer, ..
} => {
for (index, argument) in arguments.into_iter().enumerate() {
@@ -1335,7 +1335,7 @@ where
.to_llvm()
.into_pointer_value();
context.build_store(
era_compiler_llvm_context::EraVMPointer::new_stack_field(context, pointer),
revive_llvm_context::EraVMPointer::new_stack_field(context, pointer),
result,
)?;
context.evmla_mut().stack[self.stack.elements.len() - 1].original = original;
@@ -22,13 +22,13 @@ pub struct Block {
/// The Solidity compiler version.
pub solc_version: semver::Version,
/// The block key.
pub key: era_compiler_llvm_context::EraVMFunctionBlockKey,
pub key: revive_llvm_context::EraVMFunctionBlockKey,
/// The block instance.
pub instance: Option<usize>,
/// The block elements relevant to the stack consistency.
pub elements: Vec<Element>,
/// The block predecessors.
pub predecessors: HashSet<(era_compiler_llvm_context::EraVMFunctionBlockKey, usize)>,
pub predecessors: HashSet<(revive_llvm_context::EraVMFunctionBlockKey, usize)>,
/// The initial stack state.
pub initial_stack: ElementStack,
/// The stack.
@@ -48,7 +48,7 @@ impl Block {
///
pub fn try_from_instructions(
solc_version: semver::Version,
code_type: era_compiler_llvm_context::EraVMCodeType,
code_type: revive_llvm_context::EraVMCodeType,
slice: &[Instruction],
) -> anyhow::Result<(Self, usize)> {
let mut cursor = 0;
@@ -69,7 +69,7 @@ impl Block {
let mut block = Self {
solc_version: solc_version.clone(),
key: era_compiler_llvm_context::EraVMFunctionBlockKey::new(code_type, tag),
key: revive_llvm_context::EraVMFunctionBlockKey::new(code_type, tag),
instance: None,
elements: Vec::with_capacity(Self::ELEMENTS_VECTOR_DEFAULT_CAPACITY),
predecessors: HashSet::with_capacity(Self::PREDECESSORS_HASHSET_DEFAULT_CAPACITY),
@@ -114,20 +114,20 @@ impl Block {
///
pub fn insert_predecessor(
&mut self,
key: era_compiler_llvm_context::EraVMFunctionBlockKey,
key: revive_llvm_context::EraVMFunctionBlockKey,
instance: usize,
) {
self.predecessors.insert((key, instance));
}
}
impl<D> era_compiler_llvm_context::EraVMWriteLLVM<D> for Block
impl<D> revive_llvm_context::EraVMWriteLLVM<D> for Block
where
D: era_compiler_llvm_context::EraVMDependency + Clone,
D: revive_llvm_context::EraVMDependency + Clone,
{
fn into_llvm(
self,
context: &mut era_compiler_llvm_context::EraVMContext<D>,
context: &mut revive_llvm_context::EraVMContext<D>,
) -> anyhow::Result<()> {
context.set_code_type(self.key.code_type);
@@ -47,7 +47,7 @@ pub struct Function {
/// The function name.
pub name: String,
/// The separately labelled blocks.
pub blocks: BTreeMap<era_compiler_llvm_context::EraVMFunctionBlockKey, Vec<Block>>,
pub blocks: BTreeMap<revive_llvm_context::EraVMFunctionBlockKey, Vec<Block>>,
/// The function type.
pub r#type: Type,
/// The function stack size.
@@ -82,8 +82,8 @@ impl Function {
///
pub fn traverse(
&mut self,
blocks: &HashMap<era_compiler_llvm_context::EraVMFunctionBlockKey, Block>,
functions: &mut BTreeMap<era_compiler_llvm_context::EraVMFunctionBlockKey, Self>,
blocks: &HashMap<revive_llvm_context::EraVMFunctionBlockKey, Block>,
functions: &mut BTreeMap<revive_llvm_context::EraVMFunctionBlockKey, Self>,
extra_metadata: &ExtraMetadata,
visited_functions: &mut BTreeSet<VisitedElement>,
) -> anyhow::Result<()> {
@@ -92,8 +92,8 @@ impl Function {
match self.r#type {
Type::Initial => {
for code_type in [
era_compiler_llvm_context::EraVMCodeType::Deploy,
era_compiler_llvm_context::EraVMCodeType::Runtime,
revive_llvm_context::EraVMCodeType::Deploy,
revive_llvm_context::EraVMCodeType::Runtime,
] {
self.consume_block(
blocks,
@@ -102,7 +102,7 @@ impl Function {
visited_functions,
&mut visited_blocks,
QueueElement::new(
era_compiler_llvm_context::EraVMFunctionBlockKey::new(
revive_llvm_context::EraVMFunctionBlockKey::new(
code_type,
num::BigUint::zero(),
),
@@ -148,8 +148,8 @@ impl Function {
///
fn consume_block(
&mut self,
blocks: &HashMap<era_compiler_llvm_context::EraVMFunctionBlockKey, Block>,
functions: &mut BTreeMap<era_compiler_llvm_context::EraVMFunctionBlockKey, Self>,
blocks: &HashMap<revive_llvm_context::EraVMFunctionBlockKey, Block>,
functions: &mut BTreeMap<revive_llvm_context::EraVMFunctionBlockKey, Self>,
extra_metadata: &ExtraMetadata,
visited_functions: &mut BTreeSet<VisitedElement>,
visited_blocks: &mut BTreeSet<VisitedElement>,
@@ -227,11 +227,11 @@ impl Function {
///
#[allow(clippy::too_many_arguments)]
fn handle_instruction(
blocks: &HashMap<era_compiler_llvm_context::EraVMFunctionBlockKey, Block>,
functions: &mut BTreeMap<era_compiler_llvm_context::EraVMFunctionBlockKey, Self>,
blocks: &HashMap<revive_llvm_context::EraVMFunctionBlockKey, Block>,
functions: &mut BTreeMap<revive_llvm_context::EraVMFunctionBlockKey, Self>,
extra_metadata: &ExtraMetadata,
visited_functions: &mut BTreeSet<VisitedElement>,
code_type: era_compiler_llvm_context::EraVMCodeType,
code_type: revive_llvm_context::EraVMCodeType,
instance: usize,
block_stack: &mut Stack,
block_element: &mut BlockElement,
@@ -260,13 +260,13 @@ impl Function {
.ok_or_else(|| anyhow::anyhow!("Destination tag is missing"))?
{
Element::Tag(destination) if destination > &num::BigUint::from(u32::MAX) => {
era_compiler_llvm_context::EraVMFunctionBlockKey::new(
era_compiler_llvm_context::EraVMCodeType::Runtime,
revive_llvm_context::EraVMFunctionBlockKey::new(
revive_llvm_context::EraVMCodeType::Runtime,
destination.to_owned() - num::BigUint::from(1u64 << 32),
)
}
Element::Tag(destination) => {
era_compiler_llvm_context::EraVMFunctionBlockKey::new(
revive_llvm_context::EraVMFunctionBlockKey::new(
code_type,
destination.to_owned(),
)
@@ -324,13 +324,13 @@ impl Function {
.ok_or_else(|| anyhow::anyhow!("Destination tag is missing"))?
{
Element::Tag(destination) if destination > &num::BigUint::from(u32::MAX) => {
era_compiler_llvm_context::EraVMFunctionBlockKey::new(
era_compiler_llvm_context::EraVMCodeType::Runtime,
revive_llvm_context::EraVMFunctionBlockKey::new(
revive_llvm_context::EraVMCodeType::Runtime,
destination.to_owned() - num::BigUint::from(1u64 << 32),
)
}
Element::Tag(destination) => {
era_compiler_llvm_context::EraVMFunctionBlockKey::new(
revive_llvm_context::EraVMFunctionBlockKey::new(
code_type,
destination.to_owned(),
)
@@ -360,7 +360,7 @@ impl Function {
} => {
let tag: num::BigUint = tag.parse().expect("Always valid");
let block_key =
era_compiler_llvm_context::EraVMFunctionBlockKey::new(code_type, tag);
revive_llvm_context::EraVMFunctionBlockKey::new(code_type, tag);
queue_element.predecessor = Some((queue_element.block_key.clone(), instance));
queue_element.block_key = block_key.clone();
@@ -1023,16 +1023,16 @@ impl Function {
#[allow(clippy::too_many_arguments)]
fn handle_recursive_function_call(
recursive_function: &RecursiveFunction,
blocks: &HashMap<era_compiler_llvm_context::EraVMFunctionBlockKey, Block>,
functions: &mut BTreeMap<era_compiler_llvm_context::EraVMFunctionBlockKey, Self>,
blocks: &HashMap<revive_llvm_context::EraVMFunctionBlockKey, Block>,
functions: &mut BTreeMap<revive_llvm_context::EraVMFunctionBlockKey, Self>,
extra_metadata: &ExtraMetadata,
visited_functions: &mut BTreeSet<VisitedElement>,
block_key: era_compiler_llvm_context::EraVMFunctionBlockKey,
block_key: revive_llvm_context::EraVMFunctionBlockKey,
block_stack: &mut Stack,
block_element: &mut BlockElement,
version: &semver::Version,
) -> anyhow::Result<(
era_compiler_llvm_context::EraVMFunctionBlockKey,
revive_llvm_context::EraVMFunctionBlockKey,
Vec<Element>,
)> {
let return_address_offset = block_stack.elements.len() - 2 - recursive_function.input_size;
@@ -1041,7 +1041,7 @@ impl Function {
let return_address = match block_stack.elements[return_address_offset] {
Element::Tag(ref return_address) => {
era_compiler_llvm_context::EraVMFunctionBlockKey::new(
revive_llvm_context::EraVMFunctionBlockKey::new(
block_key.code_type,
return_address.to_owned(),
)
@@ -1126,14 +1126,14 @@ impl Function {
/// Checks both deploy and runtime code.
///
fn is_tag_value_valid(
blocks: &HashMap<era_compiler_llvm_context::EraVMFunctionBlockKey, Block>,
blocks: &HashMap<revive_llvm_context::EraVMFunctionBlockKey, Block>,
tag: &num::BigUint,
) -> bool {
blocks.contains_key(&era_compiler_llvm_context::EraVMFunctionBlockKey::new(
era_compiler_llvm_context::EraVMCodeType::Deploy,
blocks.contains_key(&revive_llvm_context::EraVMFunctionBlockKey::new(
revive_llvm_context::EraVMCodeType::Deploy,
tag & num::BigUint::from(u32::MAX),
)) || blocks.contains_key(&era_compiler_llvm_context::EraVMFunctionBlockKey::new(
era_compiler_llvm_context::EraVMCodeType::Runtime,
)) || blocks.contains_key(&revive_llvm_context::EraVMFunctionBlockKey::new(
revive_llvm_context::EraVMCodeType::Runtime,
tag & num::BigUint::from(u32::MAX),
))
}
@@ -1157,13 +1157,13 @@ impl Function {
}
}
impl<D> era_compiler_llvm_context::EraVMWriteLLVM<D> for Function
impl<D> revive_llvm_context::EraVMWriteLLVM<D> for Function
where
D: era_compiler_llvm_context::EraVMDependency + Clone,
D: revive_llvm_context::EraVMDependency + Clone,
{
fn declare(
&mut self,
context: &mut era_compiler_llvm_context::EraVMContext<D>,
context: &mut revive_llvm_context::EraVMContext<D>,
) -> anyhow::Result<()> {
let (function_type, output_size) = match self.r#type {
Type::Initial => {
@@ -1202,7 +1202,7 @@ where
Some(inkwell::module::Linkage::Private),
)?;
function.borrow_mut().set_evmla_data(
era_compiler_llvm_context::EraVMFunctionEVMLAData::new(self.stack_size),
revive_llvm_context::EraVMFunctionEVMLAData::new(self.stack_size),
);
Ok(())
@@ -1210,7 +1210,7 @@ where
fn into_llvm(
self,
context: &mut era_compiler_llvm_context::EraVMContext<D>,
context: &mut revive_llvm_context::EraVMContext<D>,
) -> anyhow::Result<()> {
context.set_current_function(self.name.as_str())?;
@@ -1220,8 +1220,8 @@ where
let mut stack_hashes = vec![block.initial_stack.hash()];
stack_hashes.extend_from_slice(block.extra_hashes.as_slice());
let evmla_data =
era_compiler_llvm_context::EraVMFunctionBlockEVMLAData::new(stack_hashes);
let mut block = era_compiler_llvm_context::EraVMFunctionBlock::new(inner);
revive_llvm_context::EraVMFunctionBlockEVMLAData::new(stack_hashes);
let mut block = revive_llvm_context::EraVMFunctionBlock::new(inner);
block.set_evmla_data(evmla_data);
context
.current_function()
@@ -1253,7 +1253,7 @@ where
_ => context.field_const(0).as_basic_value_enum(),
};
context.build_store(pointer, value)?;
stack_variables.push(era_compiler_llvm_context::EraVMArgument::new(
stack_variables.push(revive_llvm_context::EraVMArgument::new(
pointer.value.as_basic_value_enum(),
));
}
@@ -1267,15 +1267,15 @@ where
.get_nth_param(0)
.into_int_value();
let deploy_code_block = context.current_function().borrow().evmla().find_block(
&era_compiler_llvm_context::EraVMFunctionBlockKey::new(
era_compiler_llvm_context::EraVMCodeType::Deploy,
&revive_llvm_context::EraVMFunctionBlockKey::new(
revive_llvm_context::EraVMCodeType::Deploy,
num::BigUint::zero(),
),
&Stack::default().hash(),
)?;
let runtime_code_block = context.current_function().borrow().evmla().find_block(
&era_compiler_llvm_context::EraVMFunctionBlockKey::new(
era_compiler_llvm_context::EraVMCodeType::Runtime,
&revive_llvm_context::EraVMFunctionBlockKey::new(
revive_llvm_context::EraVMCodeType::Runtime,
num::BigUint::zero(),
),
&Stack::default().hash(),
@@ -1321,14 +1321,14 @@ where
context.set_basic_block(context.current_function().borrow().return_block());
match context.current_function().borrow().r#return() {
era_compiler_llvm_context::EraVMFunctionReturn::None => {
revive_llvm_context::EraVMFunctionReturn::None => {
context.build_return(None);
}
era_compiler_llvm_context::EraVMFunctionReturn::Primitive { pointer } => {
revive_llvm_context::EraVMFunctionReturn::Primitive { pointer } => {
let return_value = context.build_load(pointer, "return_value")?;
context.build_return(Some(&return_value));
}
era_compiler_llvm_context::EraVMFunctionReturn::Compound { pointer, .. } => {
revive_llvm_context::EraVMFunctionReturn::Compound { pointer, .. } => {
let return_value = context.build_load(pointer, "return_value")?;
context.build_return(Some(&return_value));
}
@@ -10,9 +10,9 @@ use crate::evmla::ethereal_ir::function::block::element::stack::Stack;
#[derive(Debug, Clone)]
pub struct QueueElement {
/// The block key.
pub block_key: era_compiler_llvm_context::EraVMFunctionBlockKey,
pub block_key: revive_llvm_context::EraVMFunctionBlockKey,
/// The block predecessor.
pub predecessor: Option<(era_compiler_llvm_context::EraVMFunctionBlockKey, usize)>,
pub predecessor: Option<(revive_llvm_context::EraVMFunctionBlockKey, usize)>,
/// The predecessor's last stack state.
pub stack: Stack,
}
@@ -22,8 +22,8 @@ impl QueueElement {
/// A shortcut constructor.
///
pub fn new(
block_key: era_compiler_llvm_context::EraVMFunctionBlockKey,
predecessor: Option<(era_compiler_llvm_context::EraVMFunctionBlockKey, usize)>,
block_key: revive_llvm_context::EraVMFunctionBlockKey,
predecessor: Option<(revive_llvm_context::EraVMFunctionBlockKey, usize)>,
stack: Stack,
) -> Self {
Self {
@@ -14,7 +14,7 @@ pub enum Type {
/// The function name.
name: String,
/// The function initial block key.
block_key: era_compiler_llvm_context::EraVMFunctionBlockKey,
block_key: revive_llvm_context::EraVMFunctionBlockKey,
/// The size of stack input (in cells or 256-bit words).
input_size: usize,
/// The size of stack output (in cells or 256-bit words).
@@ -35,7 +35,7 @@ impl Type {
///
pub fn new_recursive(
name: String,
block_key: era_compiler_llvm_context::EraVMFunctionBlockKey,
block_key: revive_llvm_context::EraVMFunctionBlockKey,
input_size: usize,
output_size: usize,
) -> Self {
@@ -10,7 +10,7 @@ use std::cmp::Ordering;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct VisitedElement {
/// The block key.
pub block_key: era_compiler_llvm_context::EraVMFunctionBlockKey,
pub block_key: revive_llvm_context::EraVMFunctionBlockKey,
/// The initial stack state hash.
pub stack_hash: md5::Digest,
}
@@ -20,7 +20,7 @@ impl VisitedElement {
/// A shortcut constructor.
///
pub fn new(
block_key: era_compiler_llvm_context::EraVMFunctionBlockKey,
block_key: revive_llvm_context::EraVMFunctionBlockKey,
stack_hash: md5::Digest,
) -> Self {
Self {
@@ -40,20 +40,20 @@ impl Ord for VisitedElement {
fn cmp(&self, other: &Self) -> Ordering {
match (self.block_key.code_type, other.block_key.code_type) {
(
era_compiler_llvm_context::EraVMCodeType::Deploy,
era_compiler_llvm_context::EraVMCodeType::Runtime,
revive_llvm_context::EraVMCodeType::Deploy,
revive_llvm_context::EraVMCodeType::Runtime,
) => Ordering::Less,
(
era_compiler_llvm_context::EraVMCodeType::Runtime,
era_compiler_llvm_context::EraVMCodeType::Deploy,
revive_llvm_context::EraVMCodeType::Runtime,
revive_llvm_context::EraVMCodeType::Deploy,
) => Ordering::Greater,
(
era_compiler_llvm_context::EraVMCodeType::Deploy,
era_compiler_llvm_context::EraVMCodeType::Deploy,
revive_llvm_context::EraVMCodeType::Deploy,
revive_llvm_context::EraVMCodeType::Deploy,
)
| (
era_compiler_llvm_context::EraVMCodeType::Runtime,
era_compiler_llvm_context::EraVMCodeType::Runtime,
revive_llvm_context::EraVMCodeType::Runtime,
revive_llvm_context::EraVMCodeType::Runtime,
) => {
let tag_comparison = self.block_key.tag.cmp(&other.block_key.tag);
if tag_comparison == Ordering::Equal {
+9 -9
View File
@@ -37,7 +37,7 @@ pub struct EtherealIR {
/// The all-inlined function.
pub entry_function: Function,
/// The recursive functions.
pub recursive_functions: BTreeMap<era_compiler_llvm_context::EraVMFunctionBlockKey, Function>,
pub recursive_functions: BTreeMap<revive_llvm_context::EraVMFunctionBlockKey, Function>,
}
impl EtherealIR {
@@ -53,7 +53,7 @@ impl EtherealIR {
pub fn new(
solc_version: semver::Version,
extra_metadata: ExtraMetadata,
blocks: HashMap<era_compiler_llvm_context::EraVMFunctionBlockKey, Block>,
blocks: HashMap<revive_llvm_context::EraVMFunctionBlockKey, Block>,
) -> anyhow::Result<Self> {
let mut entry_function = Function::new(solc_version.clone(), FunctionType::new_initial());
let mut recursive_functions = BTreeMap::new();
@@ -78,9 +78,9 @@ impl EtherealIR {
///
pub fn get_blocks(
solc_version: semver::Version,
code_type: era_compiler_llvm_context::EraVMCodeType,
code_type: revive_llvm_context::EraVMCodeType,
instructions: &[Instruction],
) -> anyhow::Result<HashMap<era_compiler_llvm_context::EraVMFunctionBlockKey, Block>> {
) -> anyhow::Result<HashMap<revive_llvm_context::EraVMFunctionBlockKey, Block>> {
let mut blocks = HashMap::with_capacity(Self::BLOCKS_HASHMAP_DEFAULT_CAPACITY);
let mut offset = 0;
@@ -91,7 +91,7 @@ impl EtherealIR {
&instructions[offset..],
)?;
blocks.insert(
era_compiler_llvm_context::EraVMFunctionBlockKey::new(
revive_llvm_context::EraVMFunctionBlockKey::new(
code_type,
block.key.tag.clone(),
),
@@ -104,13 +104,13 @@ impl EtherealIR {
}
}
impl<D> era_compiler_llvm_context::EraVMWriteLLVM<D> for EtherealIR
impl<D> revive_llvm_context::EraVMWriteLLVM<D> for EtherealIR
where
D: era_compiler_llvm_context::EraVMDependency + Clone,
D: revive_llvm_context::EraVMDependency + Clone,
{
fn declare(
&mut self,
context: &mut era_compiler_llvm_context::EraVMContext<D>,
context: &mut revive_llvm_context::EraVMContext<D>,
) -> anyhow::Result<()> {
self.entry_function.declare(context)?;
@@ -123,7 +123,7 @@ where
fn into_llvm(
self,
context: &mut era_compiler_llvm_context::EraVMContext<D>,
context: &mut revive_llvm_context::EraVMContext<D>,
) -> anyhow::Result<()> {
context.evmla_mut().stack = vec![];