use crate::{
opcode::{self, ext_opcode, opcode},
parser::{choice, comment_scope, id, Parser},
DebugVerbosity,
};
pub fn debug_obj<'a, 'c>() -> impl Parser<'a, 'c, ()>
where
'c: 'a,
{
ext_opcode(opcode::EXT_DEBUG_OP)
}
pub type LocalNum = u8;
pub fn local_obj<'a, 'c>() -> impl Parser<'a, 'c, LocalNum>
where
'c: 'a,
{
let local_parser = |i, local_opcode| {
opcode(local_opcode)
.then(comment_scope(DebugVerbosity::AllScopes, "LocalObj", id()))
.map(move |((), _)| Ok(i))
};
choice!(
local_parser(0, opcode::LOCAL0_OP),
local_parser(1, opcode::LOCAL1_OP),
local_parser(2, opcode::LOCAL2_OP),
local_parser(3, opcode::LOCAL3_OP),
local_parser(4, opcode::LOCAL4_OP),
local_parser(5, opcode::LOCAL5_OP),
local_parser(6, opcode::LOCAL6_OP),
local_parser(7, opcode::LOCAL7_OP)
)
}
pub type ArgNum = u8;
pub fn arg_obj<'a, 'c>() -> impl Parser<'a, 'c, ArgNum>
where
'c: 'a,
{
let arg_parser = |i, arg_opcode| {
opcode(arg_opcode).then(comment_scope(DebugVerbosity::AllScopes, "ArgObj", id())).map(move |((), _)| Ok(i))
};
choice!(
arg_parser(0, opcode::ARG0_OP),
arg_parser(1, opcode::ARG1_OP),
arg_parser(2, opcode::ARG2_OP),
arg_parser(3, opcode::ARG3_OP),
arg_parser(4, opcode::ARG4_OP),
arg_parser(5, opcode::ARG5_OP),
arg_parser(6, opcode::ARG6_OP)
)
}