Skip to content

Commit 6f310be

Browse files
committed
section_mangler: Add decoding of enum types
1 parent 025feb0 commit 6f310be

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

compiler/section_mangler/src/parser.rs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,16 @@ fn type_struct(input: &str) -> ParseResult<Type> {
6767
many_m_n(n, n, parse_type).map(|members| Type::Struct { members }).parse(input)
6868
}
6969

70+
fn type_enum(input: &str) -> ParseResult<Type> {
71+
char('e')
72+
.and(number::<usize>)
73+
.and(parse_type)
74+
.map(|((_, elements), ty)| Type::Enum { referenced_type: Box::new(ty), elements })
75+
.parse(input)
76+
}
77+
7078
fn parse_type(input: &str) -> ParseResult<Type> {
71-
alt((type_void, type_integer, type_float, type_pointer, type_struct))(input)
79+
alt((type_void, type_integer, type_float, type_pointer, type_struct, type_enum))(input)
7280
}
7381

7482
fn parse_var_content<'i>(input: &'i str, name: &str) -> ParseResult<'i, SectionMangler> {
@@ -170,6 +178,15 @@ mod tests {
170178
assert!(type_struct("r2r1u8").is_err());
171179
}
172180

181+
#[test]
182+
fn parse_enum() {
183+
assert!(type_enum("e15u8").is_ok());
184+
assert!(type_enum("e12pv").is_ok());
185+
186+
assert!(type_enum("e1").is_err());
187+
assert!(type_enum("eu8").is_err());
188+
}
189+
173190
#[test]
174191
fn parse_variable() {
175192
let _ = SectionMangler::from("$RUSTY$var-name:u8");

0 commit comments

Comments
 (0)