@@ -1937,9 +1937,17 @@ parse_type_enum(struct lysp_yang_ctx *ctx, enum ly_stmt enum_kw, struct lysp_typ
19371937 size_t word_len ;
19381938 enum ly_stmt kw ;
19391939 struct lysp_type_enum * enm ;
1940+ LY_ARRAY_COUNT_TYPE u , v ;
19401941
19411942 LY_ARRAY_NEW_RET (PARSER_CTX (ctx ), * enums , enm , LY_EMEM );
19421943
1944+ /* revalidate the backward parent pointers from extensions */
1945+ LY_ARRAY_FOR (* enums , u ) {
1946+ LY_ARRAY_FOR ((* enums )[u ].exts , v ) {
1947+ (* enums )[u ].exts [v ].parent = & (* enums )[u ];
1948+ }
1949+ }
1950+
19431951 /* get value */
19441952 LY_CHECK_RET (get_argument (ctx , enum_kw == LY_STMT_ENUM ? Y_STR_ARG : Y_IDENTIF_ARG , NULL , & word , & buf , & word_len ));
19451953 if (enum_kw == LY_STMT_ENUM ) {
@@ -2246,6 +2254,7 @@ parse_type(struct lysp_yang_ctx *ctx, struct lysp_type *type)
22462254 size_t word_len ;
22472255 enum ly_stmt kw ;
22482256 struct lysp_type * nest_type ;
2257+ LY_ARRAY_COUNT_TYPE u , v ;
22492258
22502259 if (type -> name ) {
22512260 LOGVAL_PARSER (ctx , LY_VCODE_DUPSTMT , "type" );
@@ -2329,6 +2338,12 @@ parse_type(struct lysp_yang_ctx *ctx, struct lysp_type *type)
23292338 break ;
23302339 case LY_STMT_TYPE :
23312340 LY_ARRAY_NEW_RET (PARSER_CTX (ctx ), type -> types , nest_type , LY_EMEM );
2341+ /* revalidate the backward parent pointers from extensions */
2342+ LY_ARRAY_FOR (type -> types , u ) {
2343+ LY_ARRAY_FOR ((type -> types )[u ].exts , v ) {
2344+ (type -> types )[u ].exts [v ].parent = & (type -> types )[u ];
2345+ }
2346+ }
23322347 LY_CHECK_RET (parse_type (ctx , nest_type ));
23332348 type -> flags |= LYS_SET_TYPE ;
23342349 break ;
0 commit comments