Skip to content

Commit 15d1881

Browse files
author
J. Cliff Dyer
committed
Wrap enum_val_signed in an Option.
Also reorganize calling function to avoid duplicate checking of cursor type. Fixes #127
1 parent 58cf53e commit 15d1881

File tree

2 files changed

+19
-11
lines changed

2 files changed

+19
-11
lines changed

src/clang.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -349,11 +349,15 @@ impl Cursor {
349349

350350
/// Get the signed constant value for this cursor's enum variant referent.
351351
///
352-
/// Returns `LLONG_MIN` if the cursor's referent is not an enum variant,
353-
/// which is also a valid enum value, so callers should check the cursor
354-
/// kind before calling this method (see issue #127).
355-
pub fn enum_val_signed(&self) -> i64 {
356-
unsafe { clang_getEnumConstantDeclValue(self.x) as i64 }
352+
/// Returns None if the cursor's referent is not an enum variant.
353+
pub fn enum_val_signed(&self) -> Option<i64> {
354+
unsafe {
355+
if self.kind() == CXCursor_EnumConstantDecl {
356+
Some(clang_getEnumConstantDeclValue(self.x) as i64)
357+
} else {
358+
None
359+
}
360+
}
357361
}
358362

359363
/// Get the unsigned constant value for this cursor's enum variant referent.

src/ir/enum_ty.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,18 @@ impl Enum {
7171
};
7272

7373
declaration.visit(|cursor| {
74-
if cursor.kind() == CXCursor_EnumConstantDecl {
74+
let val = if is_signed {
75+
cursor.enum_val_signed().map(EnumVariantValue::Signed)
76+
} else {
77+
if cursor.kind() == CXCursor_EnumConstantDecl {
78+
Some(EnumVariantValue::Unsigned(cursor.enum_val_unsigned()))
79+
} else {
80+
None
81+
}
82+
};
83+
if let Some(val) = val {
7584
let name = cursor.spelling();
7685
let comment = cursor.raw_comment();
77-
let val = if is_signed {
78-
EnumVariantValue::Signed(cursor.enum_val_signed())
79-
} else {
80-
EnumVariantValue::Unsigned(cursor.enum_val_unsigned())
81-
};
8286
variants.push(EnumVariant::new(name, comment, val));
8387
}
8488
CXChildVisit_Continue

0 commit comments

Comments
 (0)