From 7ca8ead3627721ba36e85429ae9b6dfc6d17fab6 Mon Sep 17 00:00:00 2001 From: Minijackson Date: Sun, 19 Jan 2020 16:03:35 +0100 Subject: clang-parser: really report enum constant values --- src/parser/clang/parsing.rs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/parser/clang/parsing.rs b/src/parser/clang/parsing.rs index 251aefa..fd3e392 100644 --- a/src/parser/clang/parsing.rs +++ b/src/parser/clang/parsing.rs @@ -849,14 +849,25 @@ impl<'a> TryFrom> for EnumConstant { } debug!("Parsing enum: {:?}", entity); - let value = entity + let (signed_value, unsigned_value) = entity .get_enum_constant_value() .ok_or_else(|| anyhow!("No enum constant value"))?; - dbg!(value); - Ok(EnumConstant { - value: String::from(""), - }) + let is_signed = entity + .get_semantic_parent() + .ok_or_else(|| anyhow!("Enum constant not attached to an enum"))? + .get_enum_underlying_type() + .ok_or_else(|| anyhow!("Enum doesn't have an underlying type"))? + .get_canonical_type() + .is_signed_integer(); + + let value = if is_signed { + format!("{}", signed_value) + } else { + format!("{}", unsigned_value) + }; + + Ok(EnumConstant { value }) } } -- cgit v1.2.3