mod common;
mod debug;
mod dialect;
mod error;
mod operands;
pub use common::{
AccessBase, AccessKey, BinaryOpInstr, BinaryOpKind, BranchCond, BranchInstr, BranchOperands,
BranchPredicate, CallInstr, CallKind, Capture, CaptureSource, CloseInstr, ClosureInstr,
ConcatInstr, CondOperand, ConstRef, DialectCaptureExtra, ErrNilInstr, GenericForCallInstr,
GenericForLoopInstr, GetTableInstr, GetUpvalueInstr, InstrRef, JumpInstr, LoadBoolInstr,
LoadConstInstr, LoadIntegerInstr, LoadNilInstr, LoadNumberInstr, LowInstr, LoweredChunk,
LoweredProto, LoweringMap, MethodNameHint, MoveInstr, NewTableInstr, NumberLiteral,
NumericForInitInstr, NumericForLoopInstr, ProtoRef, RawInstrRef, Reg, RegRange, ResultPack,
ReturnInstr, SetListInstr, SetTableInstr, SetUpvalueInstr, TailCallInstr, TbcInstr,
UnaryOpInstr, UnaryOpKind, UpvalueRef, ValueOperand, ValuePack, VarArgInstr,
};
pub use debug::{dump_lir, format_low_instr};
pub use error::TransformError;
use crate::parser::{DialectVersion, RawChunk};
pub fn lower_chunk(chunk: &RawChunk) -> Result<LoweredChunk, TransformError> {
match chunk.header.version {
DialectVersion::Lua51 => dialect::lua51::lower_chunk(chunk),
DialectVersion::Lua52 => dialect::lua52::lower_chunk(chunk),
DialectVersion::Lua53 => dialect::lua53::lower_chunk(chunk),
DialectVersion::Lua54 => dialect::lua54::lower_chunk(chunk),
DialectVersion::Lua55 => dialect::lua55::lower_chunk(chunk),
DialectVersion::LuaJit => dialect::luajit::lower_chunk(chunk),
DialectVersion::Luau => dialect::luau::lower_chunk(chunk),
}
}