1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use sway_error::handler::{ErrorEmitted, Handler};
use sway_ir::Function;

use crate::asm_lang::Label;

use super::{
    evm::EvmAsmBuilderResult, fuel::fuel_asm_builder::FuelAsmBuilderResult,
    miden_vm::MidenVMAsmBuilderResult,
};

pub enum AsmBuilderResult {
    Fuel(FuelAsmBuilderResult),
    Evm(EvmAsmBuilderResult),
    MidenVM(MidenVMAsmBuilderResult),
}

pub trait AsmBuilder {
    fn func_to_labels(&mut self, func: &Function) -> (Label, Label);
    fn compile_function(
        &mut self,
        handler: &Handler,
        function: Function,
    ) -> Result<(), ErrorEmitted>;
    fn finalize(&self) -> AsmBuilderResult;
}