@@ -436,6 +436,14 @@ fn get_ty(mut ty: &syn::Type) -> &syn::Type {
436
436
ty
437
437
}
438
438
439
+ fn get_expr ( mut expr : & syn:: Expr ) -> & syn:: Expr {
440
+ while let syn:: Expr :: Group ( g) = expr {
441
+ expr = & g. expr ;
442
+ }
443
+
444
+ expr
445
+ }
446
+
439
447
impl < ' a > ConvertToAst < ( BindgenAttrs , & ' a ast:: ImportModule ) > for syn:: ForeignItemFn {
440
448
type Target = ast:: ImportKind ;
441
449
@@ -1074,24 +1082,24 @@ fn import_enum(enum_: syn::ItemEnum, program: &mut ast::Program) -> Result<(), D
1074
1082
_ => bail_span ! ( v. fields, "only C-Style enums allowed with #[wasm_bindgen]" ) ,
1075
1083
}
1076
1084
1077
- match & v. discriminant {
1078
- Some ( (
1079
- _,
1080
- syn:: Expr :: Lit ( syn:: ExprLit {
1081
- attrs : _,
1082
- lit : syn:: Lit :: Str ( str_lit) ,
1083
- } ) ,
1084
- ) ) => {
1085
+ let ( _, expr) = match & v. discriminant {
1086
+ Some ( pair) => pair,
1087
+ None => {
1088
+ bail_span ! ( v, "all variants must have a value" ) ;
1089
+ }
1090
+ } ;
1091
+ match get_expr ( expr) {
1092
+ syn:: Expr :: Lit ( syn:: ExprLit {
1093
+ attrs : _,
1094
+ lit : syn:: Lit :: Str ( str_lit) ,
1095
+ } ) => {
1085
1096
variants. push ( v. ident . clone ( ) ) ;
1086
1097
variant_values. push ( str_lit. value ( ) ) ;
1087
1098
}
1088
- Some ( ( _ , expr) ) => bail_span ! (
1099
+ expr => bail_span ! (
1089
1100
expr,
1090
1101
"enums with #[wasm_bidngen] cannot mix string and non-string values" ,
1091
1102
) ,
1092
- None => {
1093
- bail_span ! ( v, "all variants must have a value" ) ;
1094
- }
1095
1103
}
1096
1104
}
1097
1105
@@ -1122,18 +1130,17 @@ impl<'a> MacroParse<(&'a mut TokenStream, BindgenAttrs)> for syn::ItemEnum {
1122
1130
let generate_typescript = opts. skip_typescript ( ) . is_none ( ) ;
1123
1131
1124
1132
// Check if the first value is a string literal
1125
- match self . variants [ 0 ] . discriminant {
1126
- Some ( (
1127
- _,
1133
+ if let Some ( ( _, expr) ) = & self . variants [ 0 ] . discriminant {
1134
+ match get_expr ( expr) {
1128
1135
syn:: Expr :: Lit ( syn:: ExprLit {
1129
1136
attrs : _,
1130
1137
lit : syn:: Lit :: Str ( _) ,
1131
- } ) ,
1132
- ) ) => {
1133
- opts. check_used ( ) ?;
1134
- return import_enum ( self , program) ;
1138
+ } ) => {
1139
+ opts. check_used ( ) ?;
1140
+ return import_enum ( self , program) ;
1141
+ }
1142
+ _ => { }
1135
1143
}
1136
- _ => { }
1137
1144
}
1138
1145
let js_name = opts
1139
1146
. js_name ( )
@@ -1169,28 +1176,27 @@ impl<'a> MacroParse<(&'a mut TokenStream, BindgenAttrs)> for syn::ItemEnum {
1169
1176
}
1170
1177
1171
1178
let value = match & v. discriminant {
1172
- Some ( (
1173
- _,
1179
+ Some ( ( _, expr) ) => match get_expr ( expr) {
1174
1180
syn:: Expr :: Lit ( syn:: ExprLit {
1175
1181
attrs : _,
1176
1182
lit : syn:: Lit :: Int ( int_lit) ,
1177
- } ) ,
1178
- ) ) => match int_lit. base10_digits ( ) . parse :: < u32 > ( ) {
1179
- Ok ( v) => v,
1180
- Err ( _) => {
1181
- bail_span ! (
1182
- int_lit,
1183
- "enums with #[wasm_bindgen] can only support \
1183
+ } ) => match int_lit. base10_digits ( ) . parse :: < u32 > ( ) {
1184
+ Ok ( v) => v,
1185
+ Err ( _) => {
1186
+ bail_span ! (
1187
+ int_lit,
1188
+ "enums with #[wasm_bindgen] can only support \
1184
1189
numbers that can be represented as u32"
1185
- ) ;
1186
- }
1190
+ ) ;
1191
+ }
1192
+ } ,
1193
+ expr => bail_span ! (
1194
+ expr,
1195
+ "enums with #[wasm_bidngen] may only have \
1196
+ number literal values",
1197
+ ) ,
1187
1198
} ,
1188
1199
None => i as u32 ,
1189
- Some ( ( _, expr) ) => bail_span ! (
1190
- expr,
1191
- "enums with #[wasm_bidngen] may only have \
1192
- number literal values",
1193
- ) ,
1194
1200
} ;
1195
1201
1196
1202
let comments = extract_doc_comments ( & v. attrs ) ;
@@ -1242,15 +1248,15 @@ impl MacroParse<BindgenAttrs> for syn::ItemConst {
1242
1248
bail_span ! ( self , "#[wasm_bindgen] will not work on constants unless you are defining a #[wasm_bindgen(typescript_custom_section)]." ) ;
1243
1249
}
1244
1250
1245
- match * self . expr {
1251
+ match get_expr ( & self . expr ) {
1246
1252
syn:: Expr :: Lit ( syn:: ExprLit {
1247
1253
lit : syn:: Lit :: Str ( litstr) ,
1248
1254
..
1249
1255
} ) => {
1250
1256
program. typescript_custom_sections . push ( litstr. value ( ) ) ;
1251
1257
}
1252
- _ => {
1253
- bail_span ! ( self , "Expected a string literal to be used with #[wasm_bindgen(typescript_custom_section)]." ) ;
1258
+ expr => {
1259
+ bail_span ! ( expr , "Expected a string literal to be used with #[wasm_bindgen(typescript_custom_section)]." ) ;
1254
1260
}
1255
1261
}
1256
1262
0 commit comments