pub mod builder;
pub mod reader;
pub mod writer;
use std::collections::HashMap;
use crate::hermes::big_int_table::BigIntTableEntry;
use crate::hermes::cjs_module::CJSModule;
use crate::hermes::debug_info::DebugInfo;
use crate::hermes::function_header::FunctionHeader;
use crate::hermes::function_sources::FunctionSourceEntry;
use crate::hermes::header::HermesHeader;
use crate::hermes::regexp_table::RegExpTableEntry;
use crate::hermes::string_kind::StringKindEntry;
use crate::hermes::string_table::{OverflowStringTableEntry, SmallStringTableEntry};
use super::{HermesInstruction, HermesStructReader};
#[allow(dead_code)]
#[cfg_attr(feature = "specta", derive(specta::Type))]
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
#[derive(Debug)]
pub struct HermesOffsets {
small_string_table_offsets: HashMap<u32, u32>, overflow_string_table_offsets: HashMap<u32, u32>, bytecode_offsets: HashMap<u32, u32>, debug_info_offset: u32, file_length: u32, }
#[cfg_attr(feature = "specta", derive(specta::Type))]
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
#[derive(Debug)]
pub struct FunctionBytecode {
pub func_index: u32,
pub bytecode: Vec<u8>,
}
#[cfg_attr(feature = "specta", derive(specta::Type))]
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
#[derive(Debug, Clone)]
pub struct FunctionInstructions {
pub func_index: u32,
pub bytecode: Vec<HermesInstruction>,
}
#[cfg_attr(feature = "specta", derive(specta::Type))]
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
#[derive(Debug)]
pub struct HermesFile<R> {
_reader: R,
offsets: HermesOffsets,
pub function_bytecode: Vec<FunctionInstructions>,
pub header: HermesHeader,
pub function_headers: Vec<FunctionHeader>,
pub string_kinds: Vec<StringKindEntry>,
pub identifier_hashes: Vec<u32>,
pub string_storage: Vec<SmallStringTableEntry>,
pub string_storage_bytes: Vec<u8>,
pub overflow_string_storage: Vec<OverflowStringTableEntry>,
pub bytecode_storage: Vec<u8>,
pub array_buffer_storage: Vec<u8>,
pub object_key_buffer: Vec<u8>,
pub object_val_buffer: Vec<u8>,
pub cjs_module_offset: u32,
pub big_int_table: Vec<BigIntTableEntry>,
pub big_int_storage: Vec<u8>,
pub reg_exp_table: Vec<RegExpTableEntry>,
pub reg_exp_storage: Vec<u8>,
pub cjs_modules: Vec<CJSModule>,
pub function_source_entries: Vec<FunctionSourceEntry>,
pub debug_info: DebugInfo,
pub footer: [u8; 20],
}