From bd3a56086eaf5a2867802ce01671e91d51c769f4 Mon Sep 17 00:00:00 2001 From: John Baublitz Date: Tue, 6 Aug 2024 15:29:26 -0400 Subject: [PATCH] Add option to generate safe and unsafe conversions for rustified enums --- bindgen-cli/options.rs | 38 +- bindgen-integration/build.rs | 2 + .../tests/expectations/tests/issue-2646.rs | 100 ++++ .../tests/libclang-9/struct_typedef_ns.rs | 4 + bindgen-tests/tests/headers/issue-2646.h | 30 ++ bindgen/codegen/.mod.rs.swp | Bin 0 -> 462848 bytes bindgen/codegen/mod.rs | 436 +++++++++++++----- bindgen/ir/enum_ty.rs | 102 +++- bindgen/lib.rs | 17 +- bindgen/options/mod.rs | 17 +- 10 files changed, 602 insertions(+), 144 deletions(-) create mode 100644 bindgen-tests/tests/expectations/tests/issue-2646.rs create mode 100644 bindgen-tests/tests/headers/issue-2646.h create mode 100644 bindgen/codegen/.mod.rs.swp diff --git a/bindgen-cli/options.rs b/bindgen-cli/options.rs index ad96664bd2..c1015f0c6b 100644 --- a/bindgen-cli/options.rs +++ b/bindgen-cli/options.rs @@ -2,7 +2,8 @@ use bindgen::callbacks::TypeKind; use bindgen::{ builder, Abi, AliasVariation, Builder, CodegenConfig, EnumVariation, FieldVisibilityKind, Formatter, MacroTypeVariation, NonCopyUnionStyle, - RegexSet, RustTarget, DEFAULT_ANON_FIELDS_PREFIX, RUST_TARGET_STRINGS, + RegexSet, RustEnumOptions, RustTarget, DEFAULT_ANON_FIELDS_PREFIX, + RUST_TARGET_STRINGS, }; use clap::error::{Error, ErrorKind}; use clap::{CommandFactory, Parser}; @@ -77,6 +78,21 @@ fn parse_abi_override(abi_override: &str) -> Result<(Abi, String), Error> { Ok((abi, regex.to_owned())) } +fn parse_rustified_enum( + rustified_enum: &str, +) -> Result<(RustEnumOptions, String), Error> { + let (regex, options) = match rustified_enum.rsplit_once('=') { + Some((regex, options)) => (regex, options), + None => (rustified_enum, ""), + }; + + let options = options + .parse() + .map_err(|err| Error::raw(ErrorKind::InvalidValue, err))?; + + Ok((options, regex.to_owned())) +} + fn parse_custom_derive( custom_derive: &str, ) -> Result<(Vec, String), Error> { @@ -150,12 +166,11 @@ struct BindgenCommand { /// Mark any enum whose name matches REGEX as a global newtype. #[arg(long, value_name = "REGEX")] newtype_global_enum: Vec, - /// Mark any enum whose name matches REGEX as a Rust enum. - #[arg(long, value_name = "REGEX")] - rustified_enum: Vec, - /// Mark any enum whose name matches REGEX as a non-exhaustive Rust enum. - #[arg(long, value_name = "REGEX")] - rustified_non_exhaustive_enum: Vec, + /// Mark any enum whose name matches the provided regex as a Rust enum. This parameter takes + /// options in the shape REGEX or REGEX=OPTIONS where OPTIONS can be a comma separated list of + /// options from non_exhaustive, try_from_raw, and from_raw_unchecked. + #[arg(long, value_parser = parse_rustified_enum)] + rustified_enum: Vec<(RustEnumOptions, String)>, /// Mark any enum whose name matches REGEX as a series of constants. #[arg(long, value_name = "REGEX")] constified_enum: Vec, @@ -523,7 +538,6 @@ where newtype_enum, newtype_global_enum, rustified_enum, - rustified_non_exhaustive_enum, constified_enum, constified_enum_module, default_macro_constant_type, @@ -690,12 +704,8 @@ where builder = builder.newtype_global_enum(regex); } - for regex in rustified_enum { - builder = builder.rustified_enum(regex); - } - - for regex in rustified_non_exhaustive_enum { - builder = builder.rustified_non_exhaustive_enum(regex); + for (options, regex) in rustified_enum { + builder = builder.rustified_enum(options, regex); } for regex in constified_enum { diff --git a/bindgen-integration/build.rs b/bindgen-integration/build.rs index 88ba945366..993bdffb50 100644 --- a/bindgen-integration/build.rs +++ b/bindgen-integration/build.rs @@ -192,6 +192,8 @@ fn setup_macro_test() { .enable_cxx_namespaces() .default_enum_style(EnumVariation::Rust { non_exhaustive: false, + safe_conversion: false, + unsafe_conversion: false, }) .raw_line("pub use self::root::*;") .raw_line("extern { fn my_prefixed_function_to_remove(i: i32); }") diff --git a/bindgen-tests/tests/expectations/tests/issue-2646.rs b/bindgen-tests/tests/expectations/tests/issue-2646.rs new file mode 100644 index 0000000000..462e2eee4c --- /dev/null +++ b/bindgen-tests/tests/expectations/tests/issue-2646.rs @@ -0,0 +1,100 @@ +#![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)] +#[repr(u32)] +#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] +pub enum Plain { + Plain1 = 0, + Plain2 = 1, + Plain3 = 2, +} +impl TryFromRaw { + pub type TryFromRaw_ctype = ::std::os::raw::c_int; + pub const TFR1: TryFromRaw_ctype = -1; + pub const TFR2: TryFromRaw_ctype = 5; + pub const TFR3: TryFromRaw_ctype = 6; +} +#[repr(i32)] +#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] +pub enum TryFromRaw { + TFR1 = -1, + TFR2 = 5, + TFR3 = 6, +} +pub struct TryFromRawError(TryFromRaw_ctype); +impl TryFromRawError { + #[must_use] + pub fn value(&self) -> TryFromRaw_ctype { + self.0 + } +} +impl std::convert::TryFrom for TryFromRaw { + type Error = TryFromRawError; + fn try_from(v: TryFromRaw_ctype) -> Result { + match v { + -1 => Ok(TryFromRaw::TFR1), + 5 => Ok(TryFromRaw::TFR2), + 6 => Ok(TryFromRaw::TFR3), + _ => TryFromRawError(v), + } + } +} +impl FromRawUnchecked { + pub type FromRawUnchecked_ctype = ::std::os::raw::c_uint; + pub const FRU1: FromRawUnchecked_ctype = 6; + pub const FRU2: FromRawUnchecked_ctype = 10; + pub const FRU3: FromRawUnchecked_ctype = 11; +} +#[repr(u32)] +#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] +pub enum FromRawUnchecked { + FRU1 = 6, + FRU2 = 10, + FRU3 = 11, +} +impl FromRawUnchecked { + const unsafe fn from_ctype_unchecked(v: FromRawUnchecked_ctype) -> Self { + std::mem::transmute(v) + } +} +impl Both { + pub const Both3: Both = Both::Both1; +} +impl Both { + pub type Both_ctype = ::std::os::raw::c_int; + pub const Both1: Both_ctype = 0; + pub const Both2: Both_ctype = -1; +} +#[repr(i32)] +#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] +pub enum Both { + Both1 = 0, + Both2 = -1, +} +pub struct BothError(Both_ctype); +impl BothError { + #[must_use] + pub fn value(&self) -> Both_ctype { + self.0 + } +} +impl std::convert::TryFrom for Both { + type Error = BothError; + fn try_from(v: Both_ctype) -> Result { + match v { + 0 => Ok(Both::Both1), + -1 => Ok(Both::Both2), + _ => BothError(v), + } + } +} +impl Both { + const unsafe fn from_ctype_unchecked(v: Both_ctype) -> Self { + std::mem::transmute(v) + } +} +#[repr(u32)] +#[non_exhaustive] +#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] +pub enum NonExhaustive { + Ex1 = 0, + Ex2 = 1, +} diff --git a/bindgen-tests/tests/expectations/tests/libclang-9/struct_typedef_ns.rs b/bindgen-tests/tests/expectations/tests/libclang-9/struct_typedef_ns.rs index d93a62e746..b836b74a8a 100644 --- a/bindgen-tests/tests/expectations/tests/libclang-9/struct_typedef_ns.rs +++ b/bindgen-tests/tests/expectations/tests/libclang-9/struct_typedef_ns.rs @@ -21,6 +21,8 @@ pub mod root { "Offset of field: typedef_struct::foo", ][::std::mem::offset_of!(typedef_struct, foo) - 0usize]; }; + pub type typedef_enum_ctype = ::std::os::raw::c_uint; + pub const typedef_enum_BAR: typedef_enum_ctype = 1; #[repr(u32)] #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] pub enum typedef_enum { @@ -47,6 +49,8 @@ pub mod root { }; pub type typedef_struct = root::_bindgen_mod_id_12::_bindgen_ty_1; pub const _bindgen_mod_id_12_BAR: root::_bindgen_mod_id_12::_bindgen_ty_2 = _bindgen_ty_2::BAR; + pub type _bindgen_ty_2_ctype = ::std::os::raw::c_uint; + pub const _bindgen_ty_2_BAR: _bindgen_ty_2_ctype = 1; #[repr(u32)] #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] pub enum _bindgen_ty_2 { diff --git a/bindgen-tests/tests/headers/issue-2646.h b/bindgen-tests/tests/headers/issue-2646.h new file mode 100644 index 0000000000..63068780eb --- /dev/null +++ b/bindgen-tests/tests/headers/issue-2646.h @@ -0,0 +1,30 @@ +// bindgen-flags: --rustified-enum 'Plain.*' --rustified-enum 'TryFromRaw.*=try_from_raw' --rustified-enum='FromRawUnchecked.*=from_raw_unchecked' --rustified-enum='Both.*=try_from_raw,from_raw_unchecked' --rustified-enum 'NonExhaustive.*=non_exhaustive' + +enum Plain { + Plain1, + Plain2, + Plain3 +}; + +enum TryFromRaw { + TFR1 = -1, + TFR2 = 5, + TFR3 +}; + +enum FromRawUnchecked { + FRU1 = 6, + FRU2 = 10, + FRU3 = 11, +}; + +enum Both { + Both1, + Both2 = -1, + Both3, +}; + +enum NonExhaustive { + Ex1, + Ex2, +}; diff --git a/bindgen/codegen/.mod.rs.swp b/bindgen/codegen/.mod.rs.swp new file mode 100644 index 0000000000000000000000000000000000000000..cca18dc6b5f03a5339580f3d0d4cb3e03753bb51 GIT binary patch literal 462848 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 z z4b3UE=1i0Jnx?Bd+a{5zeiTW&l;8Mrd2GbD!uLw8U3jR^!`mD2&*JxdPzL=Rr|=b& zPt|LPVzP|Yjyr|0-kepR(a}_s_67BOB3>fmO2NZrGOBVtCDYU1mxTAN#K025Qyjh41E1HKxh5Q zr{9Y~A6y7d1@i6pPw?|E1ykT6@BnaEAiID0_WJ<1-tqcs_u>`NrLzpQSt-(*MPGA^ zjsK?Gy4%+2BmU94}nW}`DJilC@Oua_h9 zRDv;9g%@jd@uDq!gC__G>yuBa}b>tn$Vip3l-{ zLhtcglLwu4T{-NP%$&NB0uIWjmfE@X35%(r|8>_b)Hf9U?EOQb)JJN@$XvRLq8Lad z4yw5NA);ub<`1K-YUVhCZlG9eyMi7%hfp2ptznl`HKkP9YZ{86c&T>N%$H`O@K|d> z&D^P2qD+;dNR{3dkyIB$E^ncfom-qnG3)wGh)Bj)3R03=TU$gO;l@t~!(#XF2{KmbdXu@sjZW!TuK~{lmw=5x@`2lcuOSP#8c0U)e6Std75oA@z-PdF z!8PDdz(#OC@Hu1vuLpk)BpWyj$oKzU!Hw|yuLpkuc7b)^eDG`d{SN`z15APQz|r87 z@ceH8&j6AEJQ}P9virXWxI6d0k{-w1}nfrz%P*ld>DKPyaGHD z41wdp9lRCwnI| z4zWzY%#8-CTX(9bUQHAAPxLfo$kr%317qmK=AkB=eL7P^C)Q7qC>AmB>R~A*U84)% zwk@eu#=S}@zVgHB8u9J;yXodOI$y|VS;W=LWPPN^ zVne0rvs~cv9fd>mUYPOAm1p7R6skH6dmoP6b2YV_9Ypkrr3w1v@&FGpnZR9pCK|d^ zyrjg77n`ch6+uK_j-iIot0nRVbGnUU=ECp#s#1u-PZh$jBIIC%8A-*)WOTEvLx8>Uf0h8kS zEorFPn^J`_t^I<|)KqWE9mgg$D}=}ES#Uhm$?|2t{UrG=R-f9}4~Ri>vn zqYeiKrS7rG`7YmVOPKz9_XjdzY7`@if7{}OoiHo9n7ORr~EqP^~LB=+|tITK+~WSm>>DCx1$lc}mPEJB2DN2dK(WIaDEHlHD8(;VQf6wuZ4e|dk0{g&ba28k$THq+4bN`+J zo(|;ye<}D85q%EmyuUYq*Mld472uD+7vbmM2%ZDv?{6IJ0S^N!!B64oKL*|iWDB6Z z02c%K0sMXNQ+WFi0qp~L8F)5$GI%_=96T0`froz6T1oHQP4mcKQ4}jzVF9weTCxZWkpZ_lSAdo%4tAP0b z17I6ygFAxn!_$8cyd69p>;$KSJA$vl&;Jd03fKF{UcM|ij7<~mZ8D&{|wU@XJy-Z z+NtH4%$v*?g08I$>MY}$rxv0;<>cCE3qjXb2KCXNT!{9h(`utF1YKJh)JJ<#A=)!) zV=aVSTL`IDHScjy3T{?!#qBRsv_@$2@aa!iq|YZlWwXbO1sQC$@L-|i&4%`NIeyJf z(ut3h$%5}2nQR@JIMkdNQjbeVjq<3w9(cWW0%#Q4LdjxC359mg;YYdCy6s2AYT;a8T%uH>gEy4}O|a2PfFVtNsy`^DtS{^JVh_fIafx>9 z?^j7Ko17RQ9iQg#=BW;ocVETi{s?lkt&zmRMLT5AS_baQ6lFAI;+I;ltp6oo@^3I zmnmyjonk+i)idq45_w9%>KcYK)P}MQ84JN7QdUBfQS|MA+$;d*E?E}y?q;`KfAjst zsM&05k0)QVSmI4XdLiH8qkiwV_=o_2%w5Ze>*{X$%EPW3Ilv)+K6Eun3jw=_2FA6& z(#8=EJy9+dT99~_>AX_&Z%wZBSM{CxyLuv_O-%6CiE6~L6Rut!TFabktU3uuQDENk z30Ihw%$=o+;wVowammuBtLgJ~n~qd3;Yz}-47O&0M_rm7d>D#v6&fB>nMF@My>x4p0 z#-DX+o)z7(-#Yc$!nvx~sL}ti`ZX&4mR7LcO8xiH9Q!Y{=`GTI#s9%b5=8fb68jo=kv9P9ySg1dn4!2iDo90ZR6 z8^Fon&fw?p{?`NT59otOfYo3=I2L>h-v6WENniq81kML-a7XZSc>I3=*8s@@_JE5( z*c%{Oz|Y|EzXV2edcf zW#BJ>>;Sa?{{%1ueiz&TzyDeA8SrM%1xtbS{;vVg0@GkUmK>XCHkZ-8m#HCU-PgzqN2xXA0tGZFg5M5@IQ! zmakE$7yLK-z!04&T_TTIqx{=BGP<|lIyAcTP$3RzKN1u52Z5-~xgBV(F;V&YIx*gl zjuof_Rmb0l=8w;zN55#YR(MJ z{ixuBM4W|?2q^t&^X^V&tW{heWHRA`=;#m;PD3Ukc1#Zho{y1lJY@Gxp&Hc`vLf=q zoD-kn<+O*tav zaKXsb^!UgG-*jj%+x9Po*`fJhCdPVVVuCXV`eKjGS33_R$rBYEYE%7AY%0C5w{LP} zns^|f;GZV;j~w7EJnN##i-pF@8)>+=%lv`0)B)^FoTcm!mBP2sQi{Pn;ANAEoT-r^ zicEvSGhjXh9ZJknUJvS_Mu&-*){Z-qqg$WK@|lhRw{>oEroX49uj4z>W78{w<|}hG z(BvX^>%ZAU@v3y!Ba1rr`4JVK$W?Y@T!JGHs=yKq{y9qNrJdf%*V6K(zf_9y9o?;| z2XR2H`77rKw|@#6u7S#-f$-T3SCwo(v zY9>d2x^Xl=YW+~BY1YDB8O0B%5T?#F{ziB)eEO!MUS|oY7iyX=eKQ#tA(`6T->l3J z&UK-+H6LKhoMtxX*zz1Ykw7+CM16?qX3NG^8(Zl7CdPY<+pHOq^Km4DIoR-PxhbDG z@%HR|_=nlgDv+`3_AsB>2-Q;%QdVrCazfzjh47+raW)hea|#^tRDD0>EYUjs-o&NI z5F|U(?V=MI#bJ|fDOM-5(87(Su6DgDXnfIX=}p!3CejH08%pwve5IT-ExNX@FNFcgR9R5h82~#c@?&@@(grmMjL>PxPp0>6fT|2U9dUwi(a1`dLY!7z9Y1mW$kKct$ob7m5JLn1zoc*fXc4ku#4t0%V z9u}h%Jd{OaQ}2g~t~))%C?2&V=}o~!{u369)^BsrLCPNNj} zjE}MTC}F7&CUIKAr~sLJha$bMaZSa7_9kV4*(GScjPKtw&H=8P>WpvkwStN-OGVGb zzAGh$w$0+9@-mj+%C4y{(d&j+D{@0j7j{NhNvW4PETXdQf_xk6EzWsDelztVbD0WO zX72D;Nn!f(bztU^%@$?B?Kk>2JrKv$!|ZgA>27-sAGcW14d=9*4~LKLa1gu;YbVqb z8i7on*N|ABxt8e;HJrF_9H))tvwndf+yM8UrBv5@Lr(ms)%(IFrcKG-)w9a?^}z8= z$gbk`NK_#Fyy(D&0)>mt;aS-Ytrakm<^zCzY!VSJnd^iy|`yr+bqVNKL|FI*OXM z-`ba=yoWGOP6>Ta;jlBx&6&5kcX&0qy3tHmr5iim)))1Gp}g^xhd3e6>qoch$P^Jv zkS5Bj>ZM-Ox-j9=!gzu=?cz-khnYGPNdltvBa`j+GETNytG$X44PL+$7Ghue6_k6j zxnD>1s<3-Ioyn#g5E7G4DE7k|a=|Gxqp~Ujta361lv&Ql%P|46uy%H^J8UB)cg z@P;T|bLwetC~>Nw?!h{%(6MY7+J-AwNfEWJOJ9?anEe|WHykve-v-~gp-P`~H zqz$Aj^bxnA1@%=<;0W(XS>6mymH#rT~CqWW@-d26J7|JS0p%w z{ia!bhfv0v2O6Uv_OVy&0#-1Fe)fdUocxHHE{m4dkjgfWq~o<}PX0~Maq$0tlH^M4 z|69Fmc{TF>6<`(&fa{U%-v*uvE(WW>*OBcN^Y0BncKy@9G2kZT`5VFef#m&1gP$SG ze;K?2>;}gJ+3i0Jy5Jaa1G4*}^>0L0*Li)f1;bO1y2NP!CipP=lcbCD|ido0qz5Sj*R{$ zFbA{;|M$TUk;^{=t_0_UZD2K!oc?C;JTMQ`t~Z14f=`3j*F0sGzABa`ahh~765k2G zm$45lJTg>TTzFZ*m|VITsvfx^C!2+R?2lTw*z3DeAj#D88E-EyE8`5cM2SipN#b!T z{qDQG3W?)2!|;U6%N5)vB-Xo~WaL-CeT1p-jJ{KyM0^Jyb6oO}LQio-hN=smdd6y#!8K*STO00#`3hJcE)hYW9`Kc@7zVnl) z$rq-;4(cl363kh(@NE3uV=hyYa#Ol>Z|@P|mc702TaI1?3dGhsb!g?H!lCyQzCn5? zV9{57Gm|#MNom97kor-ClmD z=&8eXOqTPKJ4a6}zk~GDVLQpP?$uGcx!lguGlyk{y?aEDAEsB7WGQW|bjuqAdP1Mp zKK#j$biyeSCaG7`vU|Y&@5DqmK@G*Mdv$sLbPw}olAW=Z!@t&3>ERRh9FXCysT3Bj z7QYYMyLzB%ZCT2wR=m>d@19zs%AV>G8Mv5vq(4fSdw=y&F&F*q_w6&kgk2haW??O)4Dy;n|Uz8t@Yb%Sb> zOQ2S#;Eu#H0=sSRkdkpuL0OcnK-{$1vu3O@P&;GV4e!Vpt2?YyOBr{Pvpj`#Vtolu#@~loj4Nqm9EzVT{*IQYsg|x*Oj-4}3)9zQ^J)A*MdaG* zbx!<{ejkywxH3}1N0sff9#`rmF)AgDhks2MdVQd{$fBU=g1wdqeHef$5f9rwwNTQy zaPh*^Wl>&vR+XJ{TQ-Fye0iYyrPk(&iN!gNG{*-@CadZNm-G3G>>tCHGAj|vPjqKA zgyjFaM1N#g$^U!2{QnhX{`Z5IfH|-M90R_G-2XA~MsPXM835zpJa7g$1w0Deh#ue@ z;9Bq{ptu090khyd@IS!`;C|p}@E_<1t_Ru+a5Z=?=zvY&!QejNDDW%v1~-8lf%XKv z8N3NB0-YJ4vjeX~m+*e@0trW z;2f9$M}eQBTTom8`44;oTn2Pzz*?aF0sn%2;h(@Y;A24h1U?8p0A2v*KnI)#jt1AE zb5N|nr-OCi{@~l_8{|vyOt1#51P=sv2X_WXgFAt%(Lr1Zo(gnc;3L6*(udcB*MjGR zgWyu2m;sxC`uM)!4j}#ns??a&Z*;y>GYc+^4*U1fdCIQMrDk)Z8B0*stvP;Vt!*!~ z%Udiq5#(gEtz9~^-JQb+$(&ZONUrb9?LU7ObJx~|{n!&T50-PrW*1R&?mrWm(XEnn z^6WWVw_G6EZ@RM=e}S3`rOW4b7SObK>N4%f8O5u>7Vg<(k=n12Ga z8`Ufv3Y!)^^V7!i(3&bVW0u2Vo-IC>H+ZiHW#O=bM34Ge!q0~q_U!StlVR8fsdN5p zguB7LW~&0ySZqrRJQhw)6xFSlUkD4g+4^W&*HO!{KBj0`$ZQar$Vr8*6Mu>sGd;T4 zd%f93o`Bs@o~;Y>M$u``IS0u}wL2`fHMKHd_!O3LszTcQIyfL}b4QPb#a8l6lDslu z*36bP>Xuvt)WSjj2w{%Sf)5>WzT2zGd^C0=z?^YyWqB>XO77C;3SPz*5vTGqwrIXWB<< zfE^nFsYGlt_4^O}fltxq2p@1O>jC#NvCye8PQ%<`1u=4U0qs=&`PR-w;!@b=8mbD5 z$r*B~^_I?!#gy%(RczT_gGWktmjW%QHGh+=*o6`CC#Dl1%wpRtk>{Q>HZk8(d;Yfb z-B7Q<{K^H-Pt1+@pP12rYmt6WZnZXxo;%WfQ%jm+OCL$rS^!g6OsJ-M=^Vm%itwPZ4n)KTgRU1CP^`s88zmQS8{HuB1F zxvuG4VIH=oP;=z7Z~3q4E4u0wG3{B~^BD`#an?#0KIv=1ReeV_i7$uWuEaUvh3oOR z=?Rvl@E?lH+&}YF*<6d?Tm0>Gcm1>TI*tB``YMxCMRKtJe;wPj_3*HHKg9iik;U>O^zyrY1Fr&r<+hbZQwZuUDC4%p^&K8_%x9#6N zzuDsaHRFr*hq%AoEhY(ZxKVq`T^e;F9872yg&)3VV>{gfaC~}fcDFdm%-pms*WC_6 zd+T@$IeyskI@9)KD^Y6(Cg7Z9Cfj(h5xZ&_PZ}aujUmKm3EazFkw>-sQ#O{BmVzv$ zcFrmzm-|LE32m)RG00K2E+Vga$+_j77USaNh$$|_VSRkMGoHK1Bk!vmE?%IQh)n>p zXt&L#mxHq1G;4D$I}S$kV~9*{;@hCV@)62tVsq?$(W+AkBIAjM)MI)A% zlZQ)B&3C0$wl5kUmP-Y?6l`P&fdaNQoiCMOI!1u6BH!V$^G471_$Jq2Ej%n7a|DtGRO~Hcgued9;;#{iv(?C_}@|D-kut(~64h zDRRG}8a6(gopsfrJPYDiNU&hr^UB-vO36i z25QHj5|V+fPrYjQaF)%SGM8wVh@0QEW@%UDB7-`ls^s=iv7_?GDs^s>{}DZFYmgTu z|6k_if5rd%G59R_8}MqNn17D}8^H!p2l5H{*4>Dg2R;L?25$mafJ5LCuo2t?d=`2C zRp5`nAfnT8m_!pr42%iR@0`CMm zH}IKY5j+mu9o!il4ekVfK!;rez6h=Y(jmMMJOwD;z#w=KI2IfOevQ81``~-v^WY=k zHQ*&cdm0`NbgtlPpfd;V4sL)RggquceBkyo$w_>V$ zu^Hj5gDLOaj+?DEcD&-@3`7*SXz4wtM=OyL7Ur9fLUVeqT&&kZp~`Y~J^?jc`SaNr z-KX;Q_Qy!yVS{{|6bBXD!|JVFWH`npVN?j^oQUxzpeS|E`sPZ7LY3oaMa!*lA4LKc zmJgiqGpnxCuvm4~63ee{)VhbSt|NtDLROcldv8r$qt{n-ZdzBr#?rE_S6!(B!Pi{C zsW$D=XsojS^C1`&th?O9+JtWOS3%JKO&#o3@@Nj^27-2P6D!3vs`REwLU!8*_gv|a zD+e9fm*>kRHA~bLMhX3z<-davmfa>1y=*JDiKw?qO<~-DA?Oy*-kM^nl?qWU8miW2 zP6v|{Q${`!dkC`GhFi!IGc{v$=u5@e*>GwtYq5w`tT8bLKC)r0w8mcH5nWBlYXe8b zNUfFXo>MZjQIl2lRI9uiH`LQSP~@Oc%!V)yR+!&lJ5(uN3zaD;(t{4qY0+)65z85? zCmKhmbJ5-^Vof0NFnUO`*fkG}Ou~!8nxch_!MpiCM1UAW+oYM2In_|@9sv^Vfm$zs5Ebw0^h4xz04Q9L2^ZqJuCgv zn1vOTie{0F7w7CHsA(s557%usd;Uy)iZe2u>Q;)E;98=>SaxneIpw|ihRnM2E?6!T z3@o@+*j6@Z4cyzmqU`L(Ykd{udhR0l|5|5wERrH<(pOt1=qX?+EH7T``L@(lv_GE z`cipWeuIO9^-Rv*gMKYiRAHCU6Q(eS3RQGF)X8*s_H<$?`0X(Rp?ru9H>Ru0Eg)9% zsG5;JPTGaM4{h@yV<{#s*$PM#sRGN~zpy7e7y87x^kMnC^p&uCq>p#}=G~2@r~s7@ zS|~|;JmHq+Y|C>&skC${&e6tWp@D%6wtd{)l*R!(V4ZKG4o|NlP7{D0={|2w?= ze-zXZ<#X94;C z-wXT{x&AHS&EQh77W@R+{!8Em;2@X*n{Pp0O;6iX`@O5PDmxE`4KLk$ziV>hQ{Jw)c zeI-zgzbAmz;2z+UM`4c#SAeI1#{tFgKN%biK7!1w^ZS~h0e(b#e+_&UybY-RzXLuB z-UD6(^a&h6-(}{qNLU(K`*b|y2yx4ID1I9ImMa5z?kSd!-{l;E4y>7rZi^B^%+#` z(HGMzq=NIQ8pG(AM+&!0VUe#j^?r%_E*8vsg0R{)8TZ_|tc1 z6x@7ae=a|S=c;>y;|C^3SOCm64r=S%!B7q@MeU4f+dE6x9XWa_MPxz^IqTc+oUg^# z^xK!zPc#<3j>7qArj%Mw^d+*=6Vn*aznP6h~$XrJ!lIhqAYFG%;9yYhQ zq>+rOoDN1K3Z>t~?(=+3!^0J0Do(vl4%rQo)s#>8 z2@3XZ`_)sKlM9r3cX@2f(WLTWW16*4V11VhEng>W$IeT|bD8c!MT?Z*3jx@|f&tKN zjkvS98iV5hJ!rj8NEOk8o`iIe(9fiLMpi5J}2-D0yAJ3D4@wFvt{hLm*p5<0Lk z&}?#~K~hOoG|JD&U3`Vp3y23h#t9olh0UUI+I*#9loD#*QrgU<-j`h? zn}hg0O||zmn{InHq3P{R$2HV&ZLgZSN9bGH8A`<|W5ivm+yR}nh5WV0@bhZ*rtU(E zsOvE^d%sxx6nM6#i}8m9Oh@~r>W~ft6WtT=`QVIT!pFGNT2{%YaFt2A62`(|#I-mV z{U#@QigczLK9e=tj;My2Xy>LflGBu|iBwoa3B3ntz3F z=lo5)>a^36Tymn_=#>{XqO*2f5)Bt*N!3%I(ol!4M@GESQcINS*1k1^Q`4O>I+x)I zG1TnA=)b;;imDgPcRFnMT<&XNOw1diHAka5*0N=x-A5+&?X%^E@q%t)JgcO7D$FC3 zBf*TR$cEIfl3ewatG0|V!D-T+tjfOC-OyFRGF4zT%0M)qw_RbsciyeOof}iTm(-Os z#4<~ka?@<1NdWb8JGaWKz{mHgR8(SI0-1O{|CTxz#(uZ zkWK#E;HyA;^8XQh0lXGGAIN`y57-Gdfro>8gBy_ZWs`qBcr|zxxDq@GNEdJskpKR} zzM-`-m@PmKReB&NyY2K{Sboi|1(= z0{k(o@meXjotls9!i?b8(#>YX7*rLPH%njX{=LBHJTvF~=|qZDZn1Y7b1~N={*Bdq za-`dmyvla_^q82CvoG_qmdmQOLNi!|^l(HkyY{k{Q_+JRyF$(zUf4A+9_&;rtS*_a z(`T)^-Vk1tk%t4Buy2}Z|81FUqUU{=P%rgEUZ#{Xz4ocBB~Qeo%~P9gvx>M^)MJs1 z8jI8>eR<;ee}pUh0hd%dX4C4(@L8^VP4=9#0~j6D!bOwO66Y1WRncr^Q~eQ{$s$X{ z5@s?-22Sn1)HX{AF8xc*usDm5JF!a!SE9ggb-S_^>Kn@sEXz|rn~kPWe~5+J`FA>9 zXa&*O7t;~LAgV9cA05g2=aYS^eza6PV&iEx0&F1_f>Jnmb zH+A=1K=unacs$un%UNac((Gg+^ z;DY)sC=P4NB>u2Gh<96I%9qtSU5qF_>DHOXQho_j?RhNI;YD??l(fBw)5v=kW!nXp zon}-|?$76)_|-0`sZ9Uv2~;B4M5Y;frmOmB7nziVsop2#p+=wAjK8oyvOwBnnYU9& zt8dYXJH|wr*5X_GO%1UyRCvJqO?p-o+wEQ1I$lunht-C~Rej6{;>{XKN*U9&Ak0*i zVGCzJ&QDGg1z4Sp1g3?XoHrEAH}5NR-N=ii9XHjjY~J6kE~mVy)}k9HSK$lPgX6#% zD_UHwS0E@Z1Lq) z(i%i2#8&D%s<}YFXr9Q&wneV#^nZ4YYZ#Ai?_7Z?s~+J4ZA$^hQ5^iAs=`AOeUnVg zj$~4{7~c!WGsp{gU~zW$Y-jK600(}tc8+~K<6NS3pm!MFG|LXj_M|r!Y^4mcG?7HC7ziM=!AU&a?6BBxY3W74NNDS|qPF`Tqfk zmY?zR|4uJveg?V!IpC?_Dd04419JcS!IQvB@PCl?-wWOYUIOO96G0PPhrIt~@GQ^< z4+J+O@BclJZGRuo9{xvxM}oV8?;`jA6SxAr5d0Ci3_J@=f^)#x;1OU5NKc?W{htF* z29E`I2X_NMKqv4yuovtC=Yrn_UqLVM9`I~13f6<;z}>*j$o@BhZ-Fm@PXopA`v~|j zconz|JPVuxR)f2Oy8xXl@I&x9Aicqh!KL6t@Jrwx_9-wLLIeDmd#|9-F=jDiuc z5!?@GZ@*&q?Es41cP=;%sGpw8xAX(2g5L)>aqWj79#8rWr8>2?ZB=w9WpbXC+oj_| zs+zujlI_^oq89iH6D!e)I+_9OfSDv?$y}Lr0Cp8}u(S7)lx2412RVxL>Tz|6yw2R2 zHhvbMDK?nrgOIc|N%p=-e^`j6V+WXrbGEmJ_N;4ulxkFk8mn*gri5lV$~0^E z0@u#ReRw2TA8ggmV>$bFtk0Wwm?qs8tyNjpx$aX9t55NXEUBGy@6)FfZPfxX=cGx7 zmI>vEXGE=~8^*Y@cVWhl^cu<`ZfIW(tu^ei>GteyB2zHg)X#Q5o6Svp1vYDPfLyq9TB5@j|bs@^;1 zM85-Sz3Gb>NZx@>dr8}Vk*?pHv`~~naBO110(oY~L$H09^?G;z%y@^Dxqf5LCBCL@ z7e$QIF@kzfL24cE(!5xu!%lsV#RalfXM{O6lQWzAmxwq0OIN(AX=RyTmeVSI#e!6q z^%=t1FK=^qE&pFDiCX?=`pd*coFU9s*=tdxM~t2mKHED}OY2r()rpALwKzA&CUzWJ zh?qJu*&f?D%h5&ciCife$_X#a7VxU4a}&4NkJ`^g?5vR0y76{n#G(m@XZ0Q0xh&rn zxR(-F3H=myY^o*qf5vTnkn$>ML!&;(Kh}ARibT-mtnpQB3g<||h5Dhi(nz*EV;qp5 zHN8e3$MCGFxb0*;%}DZotyv2G6NAa$aa!=4g4?$_ygIzxJ*=!EBGIENP2nLo_p#Wo ze29^h*}Z1kJ9jZB;Txj;01^jKO3c@pBsvPBX+sG$lUobwRf{x_1y^wsV}_~A$)OWcc+~_}uqpc&Rz6(QmYkQ{}-i^I{1Qu-JRrG=1!O8u?olq>Q6G3WQM{~o{BM@h+a6WeR>*C4-OV(oM>!#j*R;UZV7AGHdYp#B?^^O zCOygOWSiQMP{Q?sS27n zf23T}u){HpIfhoSpu`CjG*-+eXH!-)?0VX}gXvolj1=>VD^4y=j)5d`luk{eweC!d zP|<`^p?xeimnptkKeO*<%mq)H#M>*U2Xa}Z%|WY*jYXr(N@TDMoT^FNcerB5-1#jv zS@p?hVwyHT(G}YVb0Kw0v0&u>!CRe>(k288*Cs4n>b!P4&FA_n@-bNf;U%<{qZ!v# z7J-RSG}`b46Aek?V&v8$tmugX9*nAS zwezmbSzn!x=jwhA6;I)(z7h*j53`suuw51-v@gLzR=5FD_B(}TX#YQ=Z|xIa{=dY_ z|DQwNe+JkIE&`jux#0HT%gFwJ4(7lbFbwVqJ^vpB?*#7v`@j>yG2jQt_n!e*fO&8}cofin z{<{I`0Dgj;|1Iz~@W;6C7X;OEHtUjmBje>FG+XUC*~RTav!P|@nB|Ky6@e*t1+(nrejb)&?WNyZD4xDG z3uVQG9kS<-&`$0UzI+pIL$8nK!^&lVwiRSqjp(3I@{`k2E~x5_`RSwXNTB@hW;1)7 zsUP)yx3#vBU5XXi)Jz4p=Fby&Za$n{v89FHsgE9zkXKnuds!q8r_5vTJWIP34U-WI zeOBi{8H|=Pqjm8}z+tt*HCSt(EJ1y3{iI04p<+chPlHoQA|2M&Q9RY?2@~=f1!9Rh z1BTsQoWhYcSL1N$G0YXj=nB~o{3-N5vABp@)ZU||uf;42X_ymW>w9&GVEajnt%#MT zJs8OW(0)q#X~U`Aqmt^+@bOw~NlmL|7l{Xgo0LP!_0p&TLp(o zx+@JCl~)$x$}2ywDXPVJQ?2y`-Q2luye(R1ivmw|A~%?vL9aXmtE*k%#rXpf zCpkH$@0ux2l-JfQ>-nIj=_DBC-qvQ7jt*=K&6G{2aSOZGL4e_;a!D9_S`#a_@8~(X zcz)j<+nZ&H&b2i=;xv7>G$=5LGMOY?CvIoz6JDS^1A8pLp}^QQsRSqCRIufaTbrL_ zKEmul!5IImelx~%)z0VLZ_vZ5Kp;*n@mjw($}M6B;ghMomiUFo~rC6nr(%>sn=%8 zR8ta4O*hPRW;;lZbGy9TDeWF~#&%R>vK~krOYuiwrkDR{YgTa~yGVC3>|?91Ao?=+F?IR5Dzbwu<~&$!05iOLSHU4|{8w7Zz;} z!h1}C8K5PT@3Q>uV%L zY6LyF(J!W*n^*X2*$V_^6+Sr=3RfTv7p%iJAgCmBY#|!i(HG@y{F#So%Awk4ACJjEvQ#r0L` zI(-II=7=>jXgK?*b! zPW>7gQtQatV@prze}+x|N7Sr+2{}^!{~a&?{|q_*b>IL{?EeWc4ixYI?~wDK21daH zz_rNsp8}r*+7qw?TnrT7PksQ3>Hh}sdaxb*KDaB8Kfq6c_WZvOybL@QjDyF6$AXi< zQQ!y2`L6?#{T~LdN4Eb0cq@1&*a;NF{}JFC;#Vk z+5@0Ce76VRp|L*?6oc;_;Dz81!3@|5T3`~?!R>%_0AB$*(@*gOo&;vVI5-jfntqe* z{~O@T!1|Fs6ahr^V2WwGs2k9g=qTqljNCwUct{RpzX!q|Z!YpXe_&wi?)KcAXzIYB zz(DJx2Z(7C^H9l}_EOEdD;hN|CG~!%CO2UrQ*F6~P;n2tWuWyY;dG?rTr*@R8*ogY zgdluEIo5BYb+)&tc~fYpNV7iP!3t?F_m$^0XdYMBFe&wu0tUBFOkwe1fz-e#-|#Cd zn9hKlrsolpXBWn%2T(mTA9nU4fU&}zbYh97gq55CRWfeaiawX3a~_v63cnIkjHbqd zw&QlA9<9`AMEBLs`p}|zx4BF4GQE7yEm144moKtp!rx(%Mrcp9i62y*qI|X2M1}&& zD|k6R(05oUw7#=t^WkJaq^I&*t)S^;-^O7o6Ebl9NBzZ2ZIpapus!hJE-btg7h00KD_GsH8L%C{}%x7z+giU6&XRb5Ve%)6- zDBZ(!#vp^LCl%V5VOme%M1#)Fd$<&G~^=#$qe?L z4vHxPW9c~0TDYfg*HzgiD(W0xEqHS}<*!qzS;Q&FQ2dao+Z{a3De@8lW?K{ZyRv$U z>XWav_1bdvbjA~G!#k2^2I<%qoo1nIuvF$^*2+~iT??Ps#GQAP?hfu9>&`eeW%hI} zJSIwTd;w|<+kcX~J-pfNGGvvcg@SJZQ5Tl7MZF*UBV34@YRh>>;t>mU!Ti%^$Zvp_sX*NPY8B!~b)klYihezw~Tx9cuGk+CJDgr{@Fn<*Z1X*FT zW(#@iyGMa^E1Ea;XYo@euwn`~Uz8gmPFFb}#0kQ0srqW+kE(BRkjZ`QaIdf8d!#eP zsD%X4O2BraaaMfxV1wl7mP-cRkT7e(;f(7^?iRmgpvsJ_)2%pDXaVuXTY<3^%%way z_HN?P*G zQmg<%N@2e8v4paksW8Q-Trp$*E#py6AWUIlsz@C!(!rAP#BN#ZnVD5E&WJ6nZ47DA zTby}RI$ftksYYdZVw#b{+c_Qx6`R!{clsQ0HjG#?Q<{*n7Es?(qs%Xqx~2=DLgp4> zr)>DiClwVsZoI;7h^j3CVScC&Zdc1RY+}Kw1ZS|3na<=Q#+TFTwzq60aZ-|^7s{#` zDS6N-9+=(nN@Cz@#QK0!IrSS6l;^T&;lg+xSU-RO!AgI(PJ3c?((1Zcr|evAPwYnX zL*USCLrMn*J-@dd?PVbgG3}l;q-JtMz|W(DSZ^DW$6GjgxKn0E-87t4o!rh(PJA(+ z3McW;wRi5^KTh=05GrIeC&f`Llq@bnu#qgkv{BQ)>U_!_PLGrgl1iGttUulNGfFC- z11A4Bkr$6amX!RDzSBO6`S&g$*?$_W1;>GVfNPNXUkMcFZw5ROoB>V&4+h#7@Ck4g zcnx>~xCopG$yaDV6j|Rh_4s_n%eZjBM0o(w7 z2^1UfE8r90MPLt@2Rp%oz+J!{!5zRi&=0&9%z+MA2ObUn9^HV>0=PZ69ne03zW{#@ z=D;fO3*`Q{cl1aa3hdUz$d}m!T$!MU;|L>0PPLP4<*329I1$-r;23*rEpq9AH%vRF*ahiRY9w*-_T1Ksx* zBdN!@oqvRGq=%xg|^q?ooF+vQ%OqdH1+O?`#YbT zl-OlP`eX%h7|GB-=vyXvl55^4OzV_r0qW}O%jW_$@m62NY!b~h`*}OKvbe{Yu2RNs zj907+{e_8QaB>u@tj}!T^eaET)z6o3PExRE`oN)P^S~kVEHL|%Ya*q>e~(F_P3e8< z?7r?~RzTS7%osXJX2(uu^bbO&D2W7{kmH(7#V12p!=pqzn~iej{(fp52R4O`BG5A1 zmovR>*xZqw)@PJRX4@2#Vy`)qv2sGqpuLT@L)&H#S5Q|RJlgbX7x)6jPNu=~p}4#b zNu?}QJgAp+D{qcmd4=xD>!{rOx;!9v5BZGtio=#XKzdd89MhV+1tHzZ)uPislB#XP zb?*tS)+lSG_J1^{l_dVS9l1ft z*T4moxKW}X7AyRZi|t__?wSU$;l8TZ`&Not{NC_eWUcnM6bz=VDs{7o`=8E^kC%Dj z3BSz74Z~L2{E~qnbtGlr@|=wf zMqy)`sjz!%uF+4cP*H#R+U8Q`z!KXnh-?{6ga))X6pR2WdW7ffZOg}(*yBmKnxEr z{i*g&tjv?{o*;wJ*v$}SdpXm%r=>{1q$=DAFUp1t7+yt<n+w|CID@Dess6|AP?@k49dU{EwH4 zef}0XU+4b44IBdJfk%MvBHzpZ|Ha^`U=vsiP6Nk+`+$3cUm@fF6?h-`Q*a6x0{;Wt z2PppkJ;4u<_x};-%)bu;od+OYz>~p+;0(|Nw*xisRb>C?g6DuqupUS^AiaR}0N(&t zfj5Fz0L2k_0k{~P3hF>{1HOsO|9T+5fsNo~p#1_rL-tqPfVYB|0-Ygn5F7xH2KNWr zEATz=UhoVs3C;#}a0hS{_z}8*7lUc=1aLNx?|{w${62F3N5MOQ&ieZk@G>w4Rs!uA zP&`4!3y@ymEO0mQCFK710__pl3&y}^a8DpVfe(W#z(rs!&^ZJ51L|Ap0`3BC!biY= z0`W?24!`vs$^7ARdC_kPYvF$JyJCY|oMfiE6C2;`Vys22)}#Kzt0eIWY^vnrF& z3aOn;6@;Z~XJ=k}Ld|^PFC)J%bdXq0I}{3`ymKl?LJ98Sc5JuxZYiF5-;7NguDHOsO8vWkKr>nf2`&1hVzSm+$f zNlfjQkCk!)H)@^wtm1Cbzp7H%7D}vdHI=K8>#wnyarQ5@*?EnZoqJiq@2<>W-2o{3 z4%W?1AD7Va6kpql2hBP+bFe;>B&@{+)NikaFJJfS%7TBf>Xg@`K&4U@#YL2xv=M21 z5ifvP8+BNk7$`_fD)iy$L1yl9A0Czjj!fsP9b8UX3uLVs*IkWSplneJ<9S%|{YS`0 z-f^A1Qr4q|GB5w_Cl3$rh)(9nyI$EzwVBg6xs`T#+@er8u|`wnL-%6(@{DYp&lZJU~i>n${p;-jh;9OcC(^pq9{$2)|T z6uIf+S6p%jbA4%w!ulXq7&ankpGkJiTY<-N#G6}HHT|M0tScYFP6KgeH|=@~adzHp z?ycF&`LD2wphm$YW9FDX))&ubjXKPT;7aaY38HyIuP_G%S65Ci>NeB{DVQ`O0inoQfGmmwm{p#(*aX^N{zu zH~cV_4p}Fq+H1}1bvmxTH9Z}F93K5qLb1-T$Y^ z^lt{w0lUEY;3440$nakS?*gv{9Uxg>viIP zqu>}I8U8Q80k9n$4~_!gK|b$-i@ zmdd^qTnZHPU-tVI;FrkUe+`}r9s!O9A4TTg3r+_sz|r6*$l4zT^51_cxDY%L+#dV` z^7R35CirLCQ*C+;zu$NJm@2A%s|PVHYxfHNcC5nXu1*&Qd9I!hB`3JB0i>&KGn=Q@ zD~N`i;JXAri=?ZSE2AM?^-frp!a^!QM#E*wqS^f*xSc|Yn25N=MHh>5#tgxN%15Lq z?l3OC$uVNZuAn+Yeu*w2E9DsRW4Y|eniCBvfprKTw2^YINz1o(2@<6;R_m&&vM~1+ z?BXKy;227hw2-k(tdqNR{-T#0OKc#{7%i~rdgW`TAb*(DCfUM1!C4}3d<@{(mWlW& z{Z=JRUpfLU(3XMI=S(<$!p*yG(y+t3Og`vQtv-a3PJQtk^t=CErARxhVGT8WQqJ|2 zrucy{jVLWKG?}wdBgiyMKT8(#(BDQ!j%@NQJk2D%*dq_Mc;0q2c{cl2y-lgpTub~u zx$O*!)uTXpm1v3r*rM4j?R!61ehW{!i(UvSKP#n%PXZgN6dXgHtNXnAs-B4{(N>_Q zU+6)JdY}(A>bCVNN1-_ti(9j39T$-aa#Zi~sBQCd9IjXO#y(}$ZGEyJ8s)WtOOXHX z`=FLzDgUx{f^$i6o5{24a_VDrSOc3zZ0+BBJQ-CcZB?Sm%9213**n<@%l3B#5^Ai< zE~1XB7&hvND2c=zPgb&gu{PEA4li0(JicUF=|LmCd)-rwDgBm5Gd%}=<$^WzW$%*o zzGG!9>$U2MVk>Yzae;a{u_?bw!=bW^dsZyep`RKoOJnMUrK!WRXOI+&XUT+n`tGM5 z3+Y7HflXO|;y)$VsZ34g$gURBhwswp7oi(fXuTbBOf+Wkqb{ie{JBIMc@YxhE&f!6x^m$NY5VQoV>kt*3^ z?Ve)f)!@I*rPn5{;Jc|knIt3N0N(RT zXzIo+kzB3(AFjI(B#-Foql|T~;wGI`!w_=ERIbLiu=KlTcaRU0YiVYoylNG%1_Fna)cw@idEv zO-v!NeT#kx_W$d>{6FXA|9?Q{e=%qS+5NTe|2pLTuY!+(%Yp3wUC;*737iG)1*8v< z?f;cPvH#8n4+DRP%>Q;E`~GF11Edca0Ez`D8~@jk|Gxk}58e)50-g_o&3}R47lONk zpQ97_BzO&&0n^|V@F;K(@FjEuvhnW$P0#?xfO`O)6YzKF2%ZmSz#o9$13E|Wv*2%m z?E5+^U;%6ZiVyHLbOmn#F9#hk1}+2_fCqv*fPX`G@D-r506q((Q#cFM!L{fR-UR*( z$nRfg0qh2k217tPhMUnPTnBy*eg?h@-VL4)&H_3!@OtzL9|V_yoj_*+tN?cg)|b8? zdwhvHTMCPkahl>}Y3%hn6TJY*jgXbpCtz!o` zreGH#ZFLrGWNUk8^`op%6(!vjYSUz8k+L+YlXadJXVn%(KVXu&?9t|;zCrqr?5{1R zQQ;7r&K4qKZQH+j-ksJF70YK6wk+d_ynbug6J2^)b|C2)o3?G-wBhVCN6tTY)3#G< zSa=)OH!BIf!`3Nn#MRX8W{}85Bhtc(E_@~Ppi=45z%vu|PPE-0H|RM6iNhJ?qK_&S zcm3q=M!sh7n;f#*IU{vr$mJ|&Z|ey~O|Gdx`lQod%+Qjp`-m5XI0^3YOb$&_vsq2< zw(c21H;%hq_<0FjTZb&fj+5v8lhGzNB~`L4FSv7PPg@u|W4~@|1s_d}EJXF7tsvwq zktK<8$isYvVvs5e{Sz z?m=v;2nk>Sllm%*FIPjjzGe6?C;d>B2S@#-^Tw68zZlJFi3rINx*|LuEyamXqxH_L)h? z5{Slla!Gg|ttMQ^xwJM3Q_Q z1EM(VW6N-}$v$`jNpv{wF*$+HRm869nbtI0O_cPcs6~}#M1d?q0TgD3Q^Z2p^r@-4NYdmADEc$Jd{;|CYG%WNZYJN{Pe%sA`x-uK&XIC^uZ+Jvu%dd z>mAcv9Z$^Yx_!xDnvSM&%JQ?ELM_UvB<`Mg0(1^rLBU_M7UsV^A6kMd->(qJ*MW!ajd3m@ke7LO;S*rNh+-spUA0&Q3azi(Y2SdjQg2)WRQ~k zIrfzMu6#uWipe)Mi>MmM^o=$OACJ)?0ReHL;9XX9}>jh ztUw}rhd1A1S3CS`=pgzo7@FPw|3QSrfAjMHv=457vP@ z1H}k@6?isKoWSG3&yexI3|0`f1=d4P8WlKKA`d=7jJ$k*U0U@f=_+5ThTW#HLh zH#i=s?;gYVL%{EV8~OYD>d*KSlTZHJ2kY=bYz`8c-Q?E`i(zB(C-Psz_#7;lLx}=m zFpc6A>l}rmKwkw~fp~k@x4lm9wGF(tQ$afT{%gGS}jId-NCQp29P1seAZJ$$A6f0^L zXEF{m@n(LGMp1P88MYF)=lC(|BPxw%g&>D5?j)yekJ(`Hmm0*UV)y+7V^wE9*_kf# zC*vJNBc%ZDK=PIOvZ}xeE5c4CQGPJv0YcDPb!dQWRoSGKU5p^$^gWd~|idFa}*3q~Bev2M@o@?x!1x~wqvRG*?a zDKR?{nU$vsSN!xYtPAAev;~ktq31(BFniM{42+D7FLJ0-dp3mf8lY?hm)Y-i>pk9Y z3kG?mmDKFM(JS6N-RaC#WCwlgh==;T&dQo3$Zog2fE;6VZB*`#`ce2Ed=}Xp#Q4Dz zsyt9sHy>%NVLB8-OCU;w0wux6RDRtg*c*105Wj8N(Z_0`J=6a1eV{Rw>xr~L>ir^u z8n7B#b6Wl6sEKHr`U&i?U)aTEDN#AC*?9-KvzYQmu&{I}L20FVrL1Ghv(u0!70eEv z!VZY}g`CqyIiKWnhIM$}!*RqY>WEQlM}l+Rjwfb$H#U#&2|P!ucj}hap4>LV@lERH zG{Aim(~Cp~@L`UcmdwN_Cl#%!oJxXhq!!h*5H@S;Z+)`1jU)mR(B?_GG$fJy_hq+d#hxV=aY1LL*D3p-gn^8#k1zMEXwdoSoR+& zv+$I@t+s_ER?pB<*`flsmAS=*kzFm~%gpOw^#wN3#QT{ft}O8>`3F=S0GL+n);7W* z>joQD7o!Nhm@N(*RiLt0HG#Xcgo-b(!o**ytZ3k+A`hq%XA7r%fef?WQJQGfkW7Qe zg?3SJHBPeZ%<5=GUV&Z6_Pfl@#hYCw_#@6S^t;>dvg=@MR%+}j#`06@UIKDL3*`yD z$4c}dYg#w{l1lpW+gXU2%}Xk)qQ(rn|EwJt+Ktv}Da~YDX9C^QLW=+%w!5RjciinF zRW9L1!KRPGW*N0R_d%^R};m18}zq6R*Kf_9_(^ZxeCGamvHi5 zV_+OVWAtPL;cxZiJb%{gLI0nB*9hWni-WKlG+er-F-hY*$l;7de23*%S;!#hx6^Em zqq&WJh!UJAKn`h&Y_w;W)f`HfGta#KY1{iL+)V^Im!Yk_!lBGF)8V1oCpyC(xkf@YAQ#0F*9QmCUWaUF<;HIGitA zk6bRx%}MF?sjh>&*XwRA+^+s6%W$JQ_u}(QOXc%iVq)Lux8|W9ZF37te;6uIL4DQw zl{rh4ifUCv=d%g9_IY4=O==E`6?Clk4Q@B*3!NFdqZSIF?~=t`5+A9|O#-P8`7JRn z4O>hO*JdN`jjjT*^H3&yNn@CF8q`x-OJ71!WM5WE?h3xIcjl-*>O4>*- zajKNFlZ_4=N=^8T)O@OCcAaYCw@WA{cc2NHV4cJ4oPy$WqV$ku!~>>w9B(ghR1?{A zY_d*Loonrg^aDy>PQkOT%^QQ|n^6hXCcT=?3H{n7+ZakS>CR8Yx(a2YPp_iX>@NQm zZ2UMSH=CRH&bB5SrTp1iV&}fd5oi`2HhqF}Z9rd<(Y%s$E!#89@wqDJT#HdIFBPkz zMsoy>&uGOiW5q(l5ot|&=I3;TYDpZghEGf?J3QZ&k5k@8*)O%4(|6=E#(~=Z1qNQj AZ~y=R literal 0 HcmV?d00001 diff --git a/bindgen/codegen/mod.rs b/bindgen/codegen/mod.rs index c6e3364234..db8089fa77 100644 --- a/bindgen/codegen/mod.rs +++ b/bindgen/codegen/mod.rs @@ -3134,6 +3134,12 @@ pub enum EnumVariation { Rust { /// Indicates whether the generated struct should be `#[non_exhaustive]` non_exhaustive: bool, + /// Indicates whether the generated struct should have a safe conversion from an integer + /// value. + safe_conversion: bool, + /// Indicates whether the generated struct should have an unsafe conversion from an integer + /// value. + unsafe_conversion: bool, }, /// The code for this enum will use a newtype NewType { @@ -3165,11 +3171,20 @@ impl fmt::Display for EnumVariation { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { let s = match self { Self::Rust { - non_exhaustive: false, - } => "rust", - Self::Rust { - non_exhaustive: true, - } => "rust_non_exhaustive", + non_exhaustive, + safe_conversion, + unsafe_conversion, + .. + } => match (non_exhaustive, safe_conversion, unsafe_conversion) { + (false, false, false) => "rust", + (false, true, true) => "rust_conversions", + (false, true, _) => "rust_safe_conversion", + (false, _, true) => "rust_unsafe_conversion", + (true, false, false) => "rust_non_exhaustive", + (true, true, true) => "rust_non_exhaustive_conversions", + (true, true, _) => "rust_non_exhaustive_safe_conversion", + (true, _, true) => "rust_non_exhaustive_unsafe_conversion", + }, Self::NewType { is_bitfield: true, .. } => "bitfield", @@ -3198,10 +3213,46 @@ impl std::str::FromStr for EnumVariation { match s { "rust" => Ok(EnumVariation::Rust { non_exhaustive: false, + safe_conversion: false, + unsafe_conversion: false, + }), + "rust_conversions" => Ok(EnumVariation::Rust { + non_exhaustive: false, + safe_conversion: true, + unsafe_conversion: true, + }), + "rust_safe_conversion" => Ok(EnumVariation::Rust { + non_exhaustive: false, + safe_conversion: true, + unsafe_conversion: false, + }), + "rust_unsafe_conversion" => Ok(EnumVariation::Rust { + non_exhaustive: false, + safe_conversion: false, + unsafe_conversion: true, }), "rust_non_exhaustive" => Ok(EnumVariation::Rust { non_exhaustive: true, + safe_conversion: false, + unsafe_conversion: false, + }), + "rust_non_exhaustive_conversions" => Ok(EnumVariation::Rust { + non_exhaustive: true, + safe_conversion: true, + unsafe_conversion: true, + }), + "rust_non_exhaustive_safe_conversion" => Ok(EnumVariation::Rust { + non_exhaustive: true, + safe_conversion: true, + unsafe_conversion: false, }), + "rust_non_exhaustive_unsafe_conversion" => { + Ok(EnumVariation::Rust { + non_exhaustive: true, + safe_conversion: false, + unsafe_conversion: true, + }) + } "bitfield" => Ok(EnumVariation::NewType { is_bitfield: true, is_global: false, @@ -3233,8 +3284,13 @@ enum EnumBuilder<'a> { Rust { attrs: Vec, ident: Ident, - tokens: proc_macro2::TokenStream, + typedef: Option, + const_tokens: Vec, + rustified_tokens: Vec, + safe_conversion_tokens: Vec, emitted_any_variants: bool, + safe_conversion: bool, + unsafe_conversion: bool, }, NewType { canonical_name: &'a str, @@ -3262,7 +3318,7 @@ impl<'a> EnumBuilder<'a> { fn new( name: &'a str, mut attrs: Vec, - repr: syn::Type, + repr: EnumRepr, enum_variation: EnumVariation, has_typedef: bool, ) -> Self { @@ -3272,29 +3328,72 @@ impl<'a> EnumBuilder<'a> { EnumVariation::NewType { is_bitfield, is_global, - } => EnumBuilder::NewType { - canonical_name: name, - tokens: quote! { - #( #attrs )* - pub struct #ident (pub #repr); - }, - is_bitfield, - is_global, - }, + } => { + let repr = match repr { + EnumRepr::Other(r) => r, + _ => panic!( + "Should never get this variant for new type enum" + ), + }; + EnumBuilder::NewType { + canonical_name: name, + tokens: quote! { + #( #attrs )* + pub struct #ident (pub #repr); + }, + is_bitfield, + is_global, + } + } - EnumVariation::Rust { .. } => { + EnumVariation::Rust { + safe_conversion, + unsafe_conversion, + .. + } => { + let (untranslated_repr, translated_repr) = match repr { + EnumRepr::Rust(un_r, t_r) => (un_r, t_r), + _ => panic!( + "Should never get this variant for rustified enum" + ), + }; + let ctype = if safe_conversion || unsafe_conversion { + Some(Ident::new( + format!("{}_ctype", ident.to_string()).as_str(), + Span::call_site(), + )) + } else { + None + }; // `repr` is guaranteed to be Rustified in Enum::codegen - attrs.insert(0, quote! { #[repr( #repr )] }); - let tokens = quote!(); + attrs.insert(0, quote! { #[repr( #translated_repr)] }); EnumBuilder::Rust { attrs, + const_tokens: if ctype.is_some() { + vec![quote! { + pub type #ctype = #untranslated_repr; + }] + } else { + vec![] + }, ident, - tokens, + typedef: ctype, + rustified_tokens: vec![], + safe_conversion_tokens: vec![], emitted_any_variants: false, + safe_conversion, + unsafe_conversion, } } EnumVariation::Consts => { + let repr = match repr { + EnumRepr::Other(r) => r, + _ => { + panic!("Should never get this variant for consts enum") + } + }; + let mut variants = Vec::new(); if !has_typedef { @@ -3308,6 +3407,13 @@ impl<'a> EnumBuilder<'a> { } EnumVariation::ModuleConsts => { + let repr = match repr { + EnumRepr::Other(r) => r, + _ => { + panic!("Should never get this variant for module consts enum") + } + }; + let ident = Ident::new( CONSTIFIED_ENUM_MODULE_REPR_NAME, Span::call_site(), @@ -3327,7 +3433,7 @@ impl<'a> EnumBuilder<'a> { /// Add a variant to this enum. fn with_variant( - self, + mut self, ctx: &BindgenContext, variant: &EnumVariant, mangling_prefix: Option<&str>, @@ -3337,13 +3443,17 @@ impl<'a> EnumBuilder<'a> { ) -> Self { let variant_name = ctx.rust_mangle(variant.name()); let is_rust_enum = self.is_rust_enum(); - let expr = match variant.val() { + let (is_bool, expr) = match variant.val() { EnumVariantValue::Boolean(v) if is_rust_enum => { - helpers::ast_ty::uint_expr(v as u64) + (true, helpers::ast_ty::uint_expr(v as u64)) + } + EnumVariantValue::Boolean(v) => (true, quote!(#v)), + EnumVariantValue::Signed(v) => { + (false, helpers::ast_ty::int_expr(v)) + } + EnumVariantValue::Unsigned(v) => { + (false, helpers::ast_ty::uint_expr(v)) } - EnumVariantValue::Boolean(v) => quote!(#v), - EnumVariantValue::Signed(v) => helpers::ast_ty::int_expr(v), - EnumVariantValue::Unsigned(v) => helpers::ast_ty::uint_expr(v), }; let mut doc = quote! {}; @@ -3356,22 +3466,43 @@ impl<'a> EnumBuilder<'a> { match self { EnumBuilder::Rust { - attrs, - ident, - tokens, - emitted_any_variants: _, + ref ident, + ref typedef, + ref mut const_tokens, + ref mut rustified_tokens, + ref mut safe_conversion_tokens, + ref mut emitted_any_variants, + safe_conversion, + unsafe_conversion, + .. } => { let name = ctx.rust_ident(variant_name); - EnumBuilder::Rust { - attrs, - ident, - tokens: quote! { - #tokens + if safe_conversion || unsafe_conversion { + let const_name = Ident::new( + name.to_string().as_str(), + Span::call_site(), + ); + let add_cmp = if is_bool { + quote! { != 0 } + } else { + quote!() + }; + const_tokens.push(quote! { #doc - #name = #expr, - }, - emitted_any_variants: true, + pub const #const_name: #typedef = #expr #add_cmp; + }); } + rustified_tokens.push(quote! { + #doc + #name = #expr , + }); + safe_conversion_tokens.push(quote! { + #expr => Ok(#ident::#name) , + }); + + *emitted_any_variants = true; + + self } EnumBuilder::NewType { @@ -3453,21 +3584,85 @@ impl<'a> EnumBuilder<'a> { EnumBuilder::Rust { attrs, ident, - tokens, + typedef, + const_tokens, + rustified_tokens, + safe_conversion_tokens, emitted_any_variants, + safe_conversion, + unsafe_conversion, .. } => { let variants = if !emitted_any_variants { - quote!(__bindgen_cannot_repr_c_on_empty_enum = 0) + vec![quote!(__bindgen_cannot_repr_c_on_empty_enum = 0)] + } else { + rustified_tokens + }; + + let consts = if safe_conversion || unsafe_conversion { + quote! { + impl #ident { + #( #const_tokens )* + } + } + } else { + quote!() + }; + + let safe_conversion = if safe_conversion { + let prefix = ctx.trait_prefix(); + let error_type = Ident::new( + format!("{}Error", ident.to_string()).as_str(), + Span::call_site(), + ); + quote! { + pub struct #error_type(#typedef); + + impl #error_type { + #[must_use] + pub fn value(&self) -> #typedef { + self.0 + } + } + + impl #prefix::convert::TryFrom<#typedef> for #ident { + type Error = #error_type; + + fn try_from(v: #typedef) -> Result { + match v { + #( #safe_conversion_tokens )* + _ => #error_type(v) + } + } + } + } } else { - tokens + quote!() + }; + + let unsafe_conversion = if unsafe_conversion { + quote! { + impl #ident { + const unsafe fn from_ctype_unchecked(v: #typedef) -> Self { + std::mem::transmute(v) + } + } + } + } else { + quote!() }; quote! { + #consts + #( #attrs )* pub enum #ident { - #variants + #( #variants )* } + + #safe_conversion + + #unsafe_conversion } } EnumBuilder::NewType { @@ -3542,6 +3737,76 @@ impl<'a> EnumBuilder<'a> { } } +fn handle_tranlation<'a>( + ctx: &BindgenContext, + layout: Option<&Layout>, + item: &Item, + repr: Option<&Type>, + translate: bool, +) -> syn::Type { + match repr { + Some(repr) + if !ctx.options().translate_enum_integer_types && !translate => + { + repr.to_rust_ty_or_opaque(ctx, item) + } + repr => { + // An enum's integer type is translated to a native Rust + // integer type in 3 cases: + // * the enum is Rustified and we need a translated type for + // the repr attribute + // * the representation couldn't be determined from the C source + // * it was explicitly requested as a bindgen option + + let kind = match repr { + Some(repr) => match *repr.canonical_type(ctx).kind() { + TypeKind::Int(int_kind) => int_kind, + _ => panic!("Unexpected type as enum repr"), + }, + None => { + warn!( + "Guessing type of enum! Forward declarations of enums \ + shouldn't be legal!" + ); + IntKind::Int + } + }; + + let signed = kind.is_signed(); + let size = layout + .map(|l| l.size) + .or_else(|| kind.known_size()) + .unwrap_or(0); + + let translated = match (signed, size) { + (true, 1) => IntKind::I8, + (false, 1) => IntKind::U8, + (true, 2) => IntKind::I16, + (false, 2) => IntKind::U16, + (true, 4) => IntKind::I32, + (false, 4) => IntKind::U32, + (true, 8) => IntKind::I64, + (false, 8) => IntKind::U64, + _ => { + warn!( + "invalid enum decl: signed: {}, size: {}", + signed, size + ); + IntKind::I32 + } + }; + + Type::new(None, None, TypeKind::Int(translated), false) + .to_rust_ty_or_opaque(ctx, item) + } + } +} + +enum EnumRepr { + Rust(syn::Type, syn::Type), + Other(syn::Type), +} + impl CodeGenerator for Enum { type Extra = Item; type Return = (); @@ -3561,71 +3826,37 @@ impl CodeGenerator for Enum { let layout = enum_ty.layout(ctx); let variation = self.computed_enum_variation(ctx, item); - let repr_translated; - let repr = match self.repr().map(|repr| ctx.resolve_type(repr)) { - Some(repr) - if !ctx.options().translate_enum_integer_types && - !variation.is_rust() => - { - repr - } - repr => { - // An enum's integer type is translated to a native Rust - // integer type in 3 cases: - // * the enum is Rustified and we need a translated type for - // the repr attribute - // * the representation couldn't be determined from the C source - // * it was explicitly requested as a bindgen option - - let kind = match repr { - Some(repr) => match *repr.canonical_type(ctx).kind() { - TypeKind::Int(int_kind) => int_kind, - _ => panic!("Unexpected type as enum repr"), - }, - None => { - warn!( - "Guessing type of enum! Forward declarations of enums \ - shouldn't be legal!" - ); - IntKind::Int - } - }; - - let signed = kind.is_signed(); - let size = layout - .map(|l| l.size) - .or_else(|| kind.known_size()) - .unwrap_or(0); - - let translated = match (signed, size) { - (true, 1) => IntKind::I8, - (false, 1) => IntKind::U8, - (true, 2) => IntKind::I16, - (false, 2) => IntKind::U16, - (true, 4) => IntKind::I32, - (false, 4) => IntKind::U32, - (true, 8) => IntKind::I64, - (false, 8) => IntKind::U64, - _ => { - warn!( - "invalid enum decl: signed: {}, size: {}", - signed, size - ); - IntKind::I32 - } - }; - - repr_translated = - Type::new(None, None, TypeKind::Int(translated), false); - &repr_translated - } + let repr = if variation.is_rust() { + EnumRepr::Rust( + handle_tranlation( + ctx, + layout.as_ref(), + item, + self.repr().map(|repr| ctx.resolve_type(repr)), + false, + ), + handle_tranlation( + ctx, + layout.as_ref(), + item, + self.repr().map(|repr| ctx.resolve_type(repr)), + true, + ), + ) + } else { + EnumRepr::Other(handle_tranlation( + ctx, + layout.as_ref(), + item, + self.repr().map(|repr| ctx.resolve_type(repr)), + false, + )) }; - let mut attrs = vec![]; // TODO(emilio): Delegate this to the builders? match variation { - EnumVariation::Rust { non_exhaustive } => { + EnumVariation::Rust { non_exhaustive, .. } => { if non_exhaustive && ctx.options().rust_features().non_exhaustive { @@ -3734,7 +3965,6 @@ impl CodeGenerator for Enum { }); } - let repr = repr.to_rust_ty_or_opaque(ctx, item); let has_typedef = ctx.is_enum_typedef_combo(item.id()); let mut builder = diff --git a/bindgen/ir/enum_ty.rs b/bindgen/ir/enum_ty.rs index 70cf0eae88..c080668804 100644 --- a/bindgen/ir/enum_ty.rs +++ b/bindgen/ir/enum_ty.rs @@ -9,6 +9,75 @@ use crate::ir::annotations::Annotations; use crate::parse::ParseError; use crate::regex_set::RegexSet; +use std::fmt::{self, Display}; +use std::ops::Deref; +use std::str::FromStr; + +/// Represents option for rustified enum generation. +#[derive(Clone, Debug, PartialEq, Eq, Hash)] +pub enum RustEnumOption { + /// Add non-exhaustive attribute to Rust enum. + NonExhaustive, + /// Add safe TryFrom conversion from integer value. + TryFromRaw, + /// Provide an unsafe wrapper for transmute from integer value. + FromRawUnchecked, +} + +impl FromStr for RustEnumOption { + type Err = String; + + fn from_str(s: &str) -> Result { + match s { + "non_exhaustive" => Ok(Self::NonExhaustive), + "try_from_raw" => Ok(Self::TryFromRaw), + "from_raw_unchecked" => Ok(Self::FromRawUnchecked), + _ => Err(format!( + "Invalid or unknown rustified struct option {:?}", + s + )), + } + } +} + +/// Collection of RustEnumOption values. +#[derive(Clone, Debug, PartialEq, Eq, Hash)] +pub struct RustEnumOptions(Vec); + +impl Deref for RustEnumOptions { + type Target = Vec; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl FromStr for RustEnumOptions { + type Err = String; + + fn from_str(s: &str) -> Result { + Ok(RustEnumOptions( + s.split(",").filter(|s| s != &"").try_fold( + Vec::new(), + |mut vec, opt| { + vec.push(RustEnumOption::from_str(opt)?); + Result::<_, String>::Ok(vec) + }, + )?, + )) + } +} + +impl Display for RustEnumOption { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { + RustEnumOption::NonExhaustive => write!(f, "non_exhaustive"), + RustEnumOption::TryFromRaw => write!(f, "try_from_raw"), + RustEnumOption::FromRawUnchecked => write!(f, "from_raw_unchecked"), + } + } +} + /// An enum representing custom handling that can be given to a variant. #[derive(Copy, Clone, Debug, PartialEq, Eq)] pub enum EnumVariantCustomBehavior { @@ -209,22 +278,6 @@ impl Enum { is_bitfield: false, is_global: true, } - } else if self.is_matching_enum( - ctx, - &ctx.options().rustified_enums, - item, - ) { - EnumVariation::Rust { - non_exhaustive: false, - } - } else if self.is_matching_enum( - ctx, - &ctx.options().rustified_non_exhaustive_enums, - item, - ) { - EnumVariation::Rust { - non_exhaustive: true, - } } else if self.is_matching_enum( ctx, &ctx.options().constified_enums, @@ -232,7 +285,22 @@ impl Enum { ) { EnumVariation::Consts } else { - ctx.options().default_enum_style + let matches = ctx + .options() + .rustified_enums + .iter() + .find(|(_, regex)| self.is_matching_enum(ctx, regex, item)); + match matches { + Some((options, _)) => EnumVariation::Rust { + non_exhaustive: options + .contains(&RustEnumOption::NonExhaustive), + safe_conversion: options + .contains(&RustEnumOption::TryFromRaw), + unsafe_conversion: options + .contains(&RustEnumOption::FromRawUnchecked), + }, + None => ctx.options().default_enum_style, + } } } } diff --git a/bindgen/lib.rs b/bindgen/lib.rs index 1a9932b534..09d83d01a2 100644 --- a/bindgen/lib.rs +++ b/bindgen/lib.rs @@ -54,6 +54,7 @@ pub use codegen::{ pub use features::RUST_TARGET_STRINGS; pub use features::{RustTarget, LATEST_STABLE_RUST}; pub use ir::annotations::FieldVisibilityKind; +pub use ir::enum_ty::RustEnumOptions; pub use ir::function::Abi; pub use regex_set::RegexSet; @@ -440,7 +441,7 @@ impl Builder { impl BindgenOptions { fn build(&mut self) { - const REGEX_SETS_LEN: usize = 29; + const REGEX_SETS_LEN: usize = 27; let regex_sets: [_; REGEX_SETS_LEN] = [ &mut self.blocklisted_types, @@ -459,8 +460,6 @@ impl BindgenOptions { &mut self.constified_enum_modules, &mut self.newtype_enums, &mut self.newtype_global_enums, - &mut self.rustified_enums, - &mut self.rustified_non_exhaustive_enums, &mut self.type_alias, &mut self.new_type_alias, &mut self.new_type_alias_deref, @@ -477,7 +476,9 @@ impl BindgenOptions { let record_matches = self.record_matches; #[cfg(feature = "experimental")] { - let sets_len = REGEX_SETS_LEN + self.abi_overrides.len(); + let sets_len = REGEX_SETS_LEN + + self.abi_overrides.len() + + self.rustified_enums.len(); let names = if self.emit_diagnostics { <[&str; REGEX_SETS_LEN]>::into_iter([ "--blocklist-type", @@ -494,8 +495,6 @@ impl BindgenOptions { "--bitfield-enum", "--newtype-enum", "--newtype-global-enum", - "--rustified-enum", - "--rustified-enum-non-exhaustive", "--constified-enum-module", "--constified-enum", "--type-alias", @@ -511,6 +510,9 @@ impl BindgenOptions { "--must-use", ]) .chain((0..self.abi_overrides.len()).map(|_| "--override-abi")) + .chain( + (0..self.rustified_enums.len()).map(|_| "--rustified-enum"), + ) .map(Some) .collect() } else { @@ -527,6 +529,9 @@ impl BindgenOptions { for regex_set in self.abi_overrides.values_mut().chain(regex_sets) { regex_set.build(record_matches); } + for regex_set in self.rustified_enums.values_mut() { + regex_set.build(record_matches); + } let rust_target = self.rust_target; #[allow(deprecated)] diff --git a/bindgen/options/mod.rs b/bindgen/options/mod.rs index e9f4fb811c..080cbc378d 100644 --- a/bindgen/options/mod.rs +++ b/bindgen/options/mod.rs @@ -18,6 +18,7 @@ use crate::CodegenConfig; use crate::FieldVisibilityKind; use crate::Formatter; use crate::HashMap; +use crate::RustEnumOptions; use crate::DEFAULT_ANON_FIELDS_PREFIX; use std::env; @@ -454,7 +455,7 @@ options! { as_args: "--newtype-global-enum", }, /// `enum`s marked as Rust `enum`s. - rustified_enums: RegexSet { + rustified_enums: HashMap { methods: { regex_option! { /// Mark the given `enum` as a Rust `enum`. @@ -465,13 +466,21 @@ options! { /// **Use this with caution**, creating an instance of a Rust `enum` with an /// invalid value will cause undefined behaviour. To avoid this, use the /// [`Builder::newtype_enum`] style instead. - pub fn rustified_enum>(mut self, arg: T) -> Builder { - self.options.rustified_enums.insert(arg); + pub fn rustified_enum>(mut self, options: RustEnumOptions, arg: T) -> Builder { + self.options.rustified_enums.entry(options).or_default().insert(arg.into()); self } } }, - as_args: "--rustified-enum", + as_args: |overrides, args| { + for (options, set) in overrides { + let options = options.iter().map(|item| item.to_string()).collect::>(); + for item in set.get_items() { + args.push("--rustified-enum".to_owned()); + args.push(format!("{}={}", item, options.join(","))); + } + } + }, }, /// `enum`s marked as non-exhaustive Rust `enum`s. rustified_non_exhaustive_enums: RegexSet {