luau-bytecode 0.732.0

Luau bytecode model, builder, serializer, and dumper
Documentation
use luau_bytecode::builder::{BytecodeBuilder, BytecodeDumpFlags};
use luau_bytecode::opcodes::Opcode;
use luau_common::BString;

fn debug_remarks_dump() -> BString {
    let mut builder = BytecodeBuilder::new();
    let mut dump_flags = BytecodeDumpFlags::default();
    dump_flags.set_code(true);
    dump_flags.set_remarks(true);
    builder.set_dump_flags(dump_flags);

    let fid = builder.begin_function(0, false);
    builder.add_debug_remark(format!("test remark #{}", 1));
    builder.emit_abc(Opcode::LoadNil, 0, 0, 0);
    builder.add_debug_remark(format!("test remark #{}", 2));
    builder.add_debug_remark(format!("test remark #{}", 3));
    builder.emit_abc(Opcode::Return, 0, 1, 0);
    builder.end_function(1, 0, 0, 0);

    builder.set_main_function(fid);
    builder.finalize();
    let _ = builder.get_bytecode();
    builder.dump_function(0)
}

// Compiler.test.cpp: DebugRemarks
#[test]
fn debug_remark_dump_preserves_remark_order() {
    assert_eq!(
        debug_remarks_dump(),
        b"\
REMARK test remark #1
LOADNIL R0
REMARK test remark #2
REMARK test remark #3
RETURN R0 0
"
    );
}