Skip to content

Commit 68c3ee7

Browse files
committed
Support enum types in macros.
1 parent d248c37 commit 68c3ee7

File tree

6 files changed

+45
-3
lines changed

6 files changed

+45
-3
lines changed

Cargo.lock

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bindgen-tests/tests/expectations/tests/jsval_layout_opaque.rs

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bindgen-tests/tests/expectations/tests/jsval_layout_opaque_1_0.rs

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bindgen-tests/tests/expectations/tests/macro_enum_retval.rs

+9
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// bindgen-flags: --experimental --generate-fn-macros
2+
3+
typedef enum {
4+
wrong = 0,
5+
right,
6+
} truth;
7+
8+
#define get_wrong() wrong
9+

bindgen/ir/context.rs

+10-2
Original file line numberDiff line numberDiff line change
@@ -3238,15 +3238,23 @@ impl cmacro::CodegenContext for BindgenContext {
32383238
.last_callback(|c| c.fn_macro_arg_type(name, arg))
32393239
}
32403240

3241-
fn resolve_enum_variant(&self, variant: &str) -> Option<syn::Expr> {
3241+
fn resolve_enum_variant(
3242+
&self,
3243+
variant: &str,
3244+
) -> Option<(syn::Type, syn::Expr)> {
32423245
let (item_id, enum_variant) = self.enum_variant(variant)?;
32433246

32443247
let item = self.resolve_item(item_id);
32453248
if item.is_blocklisted(self) {
32463249
return None;
32473250
}
32483251

3249-
Some(enum_variant.clone())
3252+
let enum_ty = match item.kind() {
3253+
ItemKind::Type(enum_ty) => enum_ty.to_rust_ty_or_opaque(self, item),
3254+
_ => return None,
3255+
};
3256+
3257+
Some((enum_ty, enum_variant.clone()))
32503258
}
32513259

32523260
fn resolve_ty(&self, ty: &str) -> Option<syn::Type> {

0 commit comments

Comments
 (0)