@@ -1231,6 +1231,7 @@ static int Lpb_enum(lua_State *L) {
1231
1231
}
1232
1232
1233
1233
static int lpb_pushdefault (lua_State * L , lpb_State * LS , pb_Field * f , int is_proto3 ) {
1234
+ pb_Type * type = f -> type ;
1234
1235
int ret = 0 ;
1235
1236
char * end ;
1236
1237
if (f == NULL ) return 0 ;
@@ -1243,12 +1244,17 @@ static int lpb_pushdefault(lua_State *L, lpb_State *LS, pb_Field *f, int is_prot
1243
1244
ret = 1 , lua_pushliteral (L , "" );
1244
1245
break ;
1245
1246
case PB_Tenum :
1246
- if ((f = pb_fname (f -> type , f -> default_value )) != NULL ) {
1247
- if (!LS -> enum_as_value )
1247
+ if ((f = pb_fname (type , f -> default_value )) != NULL ) {
1248
+ if (LS -> enum_as_value )
1249
+ ret = 1 , lpb_pushinteger (L , f -> number , LS -> int64_mode );
1250
+ else
1248
1251
ret = 1 , lua_pushstring (L , (char * )f -> name );
1252
+ } else if (is_proto3 ) {
1253
+ if ((f = pb_field (type , 0 )) == NULL || LS -> enum_as_value )
1254
+ ret = 1 , lua_pushinteger (L , 0 );
1249
1255
else
1250
- ret = 1 , lpb_pushinteger (L , f -> number , LS -> int64_mode );
1251
- } else if ( is_proto3 ) ret = 1 , lua_pushinteger ( L , 0 );
1256
+ ret = 1 , lua_pushstring (L , ( char * ) f -> name );
1257
+ }
1252
1258
break ;
1253
1259
case PB_Tmessage :
1254
1260
return 0 ;
@@ -1534,6 +1540,13 @@ static void lpbD_field(lpb_Env *e, pb_Field *f, uint32_t tag) {
1534
1540
pb_Field * ev = NULL ;
1535
1541
uint64_t u64 ;
1536
1542
1543
+ if (!f -> packed && pb_wtypebytype (f -> type_id ) != (int )pb_gettype (tag ))
1544
+ luaL_error (L , "type mismatch at offset %d, %s expected for type %s, got %s" ,
1545
+ lpb_offset (s ),
1546
+ pb_wtypename (pb_wtypebytype (f -> type_id ), NULL ),
1547
+ pb_typename (f -> type_id , NULL ),
1548
+ pb_wtypename (pb_gettype (tag ), NULL ));
1549
+
1537
1550
switch (f -> type_id ) {
1538
1551
case PB_Tenum :
1539
1552
if (pb_readvarint64 (& s -> base , & u64 ) == 0 )
@@ -1555,12 +1568,6 @@ static void lpbD_field(lpb_Env *e, pb_Field *f, uint32_t tag) {
1555
1568
break ;
1556
1569
1557
1570
default :
1558
- if (!f -> packed && pb_wtypebytype (f -> type_id ) != (int )pb_gettype (tag ))
1559
- luaL_error (L , "type mismatch at offset %d, %s expected for type %s, got %s" ,
1560
- lpb_offset (s ),
1561
- pb_wtypename (pb_wtypebytype (f -> type_id ), NULL ),
1562
- pb_typename (f -> type_id , NULL ),
1563
- pb_wtypename (pb_gettype (tag ), NULL ));
1564
1571
lpb_readtype (L , e -> LS , f -> type_id , s );
1565
1572
}
1566
1573
}
0 commit comments