diff options
author | Minijackson <minijackson@riseup.net> | 2020-01-19 16:03:35 +0100 |
---|---|---|
committer | Minijackson <minijackson@riseup.net> | 2020-01-19 16:03:35 +0100 |
commit | 7ca8ead3627721ba36e85429ae9b6dfc6d17fab6 (patch) | |
tree | 5ba61fb43d48a2c43dac862a8ce1eee463e59ba0 /src/parser | |
parent | bfb020fbb9e1f81c4459851194e5fc5e1df91156 (diff) | |
download | poseidoc-7ca8ead3627721ba36e85429ae9b6dfc6d17fab6.tar.gz poseidoc-7ca8ead3627721ba36e85429ae9b6dfc6d17fab6.zip |
clang-parser: really report enum constant values
Diffstat (limited to 'src/parser')
-rw-r--r-- | src/parser/clang/parsing.rs | 21 |
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 | ||