summaryrefslogtreecommitdiffstats
path: root/src/parser/clang/parsing.rs
diff options
context:
space:
mode:
authorMinijackson <minijackson@riseup.net>2020-01-19 16:03:35 +0100
committerMinijackson <minijackson@riseup.net>2020-01-19 16:03:35 +0100
commit7ca8ead3627721ba36e85429ae9b6dfc6d17fab6 (patch)
tree5ba61fb43d48a2c43dac862a8ce1eee463e59ba0 /src/parser/clang/parsing.rs
parentbfb020fbb9e1f81c4459851194e5fc5e1df91156 (diff)
downloadposeidoc-7ca8ead3627721ba36e85429ae9b6dfc6d17fab6.tar.gz
poseidoc-7ca8ead3627721ba36e85429ae9b6dfc6d17fab6.zip
clang-parser: really report enum constant values
Diffstat (limited to 'src/parser/clang/parsing.rs')
-rw-r--r--src/parser/clang/parsing.rs21
1 files 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<clang::Entity<'a>> for EnumConstant {
849 } 849 }
850 debug!("Parsing enum: {:?}", entity); 850 debug!("Parsing enum: {:?}", entity);
851 851
852 let value = entity 852 let (signed_value, unsigned_value) = entity
853 .get_enum_constant_value() 853 .get_enum_constant_value()
854 .ok_or_else(|| anyhow!("No enum constant value"))?; 854 .ok_or_else(|| anyhow!("No enum constant value"))?;
855 dbg!(value);
856 855
857 Ok(EnumConstant { 856 let is_signed = entity
858 value: String::from(""), 857 .get_semantic_parent()
859 }) 858 .ok_or_else(|| anyhow!("Enum constant not attached to an enum"))?
859 .get_enum_underlying_type()
860 .ok_or_else(|| anyhow!("Enum doesn't have an underlying type"))?
861 .get_canonical_type()
862 .is_signed_integer();
863
864 let value = if is_signed {
865 format!("{}", signed_value)
866 } else {
867 format!("{}", unsigned_value)
868 };
869
870 Ok(EnumConstant { value })
860 } 871 }
861} 872}
862 873