Fix xperm parsing logic

This commit is contained in:
topjohnwu 2024-03-20 23:13:54 -07:00
parent d654b9cb97
commit a9ee2d7d18
2 changed files with 10 additions and 6 deletions

View File

@ -164,7 +164,11 @@ fn xperm_to_string(perm: &ffi::Xperm) -> String {
if perm.reset {
s.push('~');
}
s.write_fmt(format_args!("{{ {:#06x}-{:#06x} }}", perm.low, perm.high))
.ok();
if perm.low == perm.high {
s.write_fmt(format_args!("{{ {:#06X} }}", perm.low)).ok();
} else {
s.write_fmt(format_args!("{{ {:#06X}-{:#06X} }}", perm.low, perm.high))
.ok();
}
s
}

View File

@ -87,7 +87,7 @@ fn parse_terms<'a>(tokens: &mut Tokens<'a>) -> LoggedResult<Vec<&'a str>> {
}
}
// xperm ::= HX(low) { Xperm{low, high: 0, reset: false} };
// xperm ::= HX(low) { Xperm{low, high: low, reset: false} };
// xperm ::= HX(low) HP HX(high) { Xperm{low, high, reset: false} };
fn parse_xperm(tokens: &mut Tokens) -> LoggedResult<Xperm> {
let low = match tokens.next() {
@ -102,7 +102,7 @@ fn parse_xperm(tokens: &mut Tokens) -> LoggedResult<Xperm> {
_ => throw!(),
}
}
_ => 0,
_ => low,
};
Ok(Xperm {
low,
@ -111,7 +111,7 @@ fn parse_xperm(tokens: &mut Tokens) -> LoggedResult<Xperm> {
})
}
// xperms ::= HX(low) { if low > 0 { vec![Xperm{low, high: 0, reset: false}] } else { vec![Xperm{low: 0x0000, high: 0xFFFF, reset: true}] }};
// xperms ::= HX(low) { if low > 0 { vec![Xperm{low, high: low, reset: false}] } else { vec![Xperm{low: 0x0000, high: 0xFFFF, reset: true}] }};
// xperms ::= LB xperm_list(l) RB { l };
// xperms ::= TL LB xperm_list(mut l) RB { l.iter_mut().for_each(|x| { x.reset = true; }); l };
// xperms ::= ST { vec![Xperm{low: 0x0000, high: 0xFFFF, reset: false}] };
@ -154,7 +154,7 @@ fn parse_xperms(tokens: &mut Tokens) -> LoggedResult<Vec<Xperm>> {
if low > 0 {
xperms.push(Xperm {
low,
high: 0,
high: low,
reset,
});
} else {