@@ -372,30 +372,64 @@ static zend_always_inline bool zend_ast_is_decl(const zend_ast *ast) {
372372static zend_always_inline bool zend_ast_is_list (const zend_ast * ast ) {
373373 return (ast -> kind >> ZEND_AST_IS_LIST_SHIFT ) & 1 ;
374374}
375- static zend_always_inline zend_ast_list * zend_ast_get_list (zend_ast * ast ) {
376- ZEND_ASSERT (zend_ast_is_list (ast ));
377- return (zend_ast_list * ) ast ;
378- }
379375
380- static zend_always_inline zval * zend_ast_get_zval (zend_ast * ast ) {
381- ZEND_ASSERT (ast -> kind == ZEND_AST_ZVAL );
382- return & ((zend_ast_zval * ) ast )-> val ;
376+ #if __cplusplus
377+ extern "C++" {
378+ static inline const zend_ast_list * zend_ast_get_list (const zend_ast * ast ) {
379+ ZEND_ASSERT (zend_ast_is_list (ast ));
380+ return reinterpret_cast < const zend_ast_list * > (ast );
381+ }
382+ static inline zend_ast_list * zend_ast_get_list (zend_ast * ast ) {
383+ ZEND_ASSERT (zend_ast_is_list (ast ));
384+ return reinterpret_cast < zend_ast_list * > (ast );
385+ }
386+ static inline const zval * zend_ast_get_zval (const zend_ast * ast ) {
387+ ZEND_ASSERT (ast -> kind == ZEND_AST_ZVAL || ast -> kind == ZEND_AST_CONSTANT );
388+ return & reinterpret_cast < const zend_ast_zval * > (ast )-> val ;
389+ }
390+ static inline zval * zend_ast_get_zval (zend_ast * ast ) {
391+ ZEND_ASSERT (ast -> kind == ZEND_AST_ZVAL || ast -> kind == ZEND_AST_CONSTANT );
392+ return & reinterpret_cast < zend_ast_zval * > (ast )-> val ;
393+ }
394+ static inline const zend_ast_op_array * zend_ast_get_op_array (const zend_ast * ast ) {
395+ ZEND_ASSERT (ast -> kind == ZEND_AST_OP_ARRAY );
396+ return reinterpret_cast < const zend_ast_op_array * > (ast );
397+ }
398+ static inline zend_ast_op_array * zend_ast_get_op_array (zend_ast * ast ) {
399+ ZEND_ASSERT (ast -> kind == ZEND_AST_OP_ARRAY );
400+ return reinterpret_cast < zend_ast_op_array * > (ast );
401+ }
383402}
384- static zend_always_inline zend_string * zend_ast_get_str (zend_ast * ast ) {
403+ #else
404+ # define zend_ast_get_list (ast ) (ZEND_ASSERT(zend_ast_is_list(ast)), _Generic( \
405+ (ast), \
406+ const zend_ast *: ((const zend_ast_list *) ast), \
407+ zend_ast *: ((zend_ast_list *) ast) \
408+ ))
409+
410+ # define zend_ast_get_zval (ast ) (ZEND_ASSERT((ast)->kind == ZEND_AST_ZVAL || (ast)->kind == ZEND_AST_CONSTANT), _Generic( \
411+ (ast), \
412+ const zend_ast *: (&((const zend_ast_zval *) ast)->val), \
413+ zend_ast *: (&((zend_ast_zval *) ast)->val) \
414+ ))
415+
416+ # define zend_ast_get_op_array (ast ) (ZEND_ASSERT((ast)->kind == ZEND_AST_OP_ARRAY), _Generic( \
417+ (ast), \
418+ const zend_ast *: ((const zend_ast_op_array *) ast), \
419+ zend_ast *: ((zend_ast_op_array *) ast) \
420+ ))
421+ #endif
422+
423+ static zend_always_inline zend_string * zend_ast_get_str (const zend_ast * ast ) {
385424 const zval * zv = zend_ast_get_zval (ast );
386425 ZEND_ASSERT (Z_TYPE_P (zv ) == IS_STRING );
387426 return Z_STR_P (zv );
388427}
389428
390- static zend_always_inline zend_ast_op_array * zend_ast_get_op_array (zend_ast * ast ) {
391- ZEND_ASSERT (ast -> kind == ZEND_AST_OP_ARRAY );
392- return (zend_ast_op_array * ) ast ;
393- }
394-
395- static zend_always_inline zend_string * zend_ast_get_constant_name (zend_ast * ast ) {
396- ZEND_ASSERT (ast -> kind == ZEND_AST_CONSTANT );
397- ZEND_ASSERT (Z_TYPE (((zend_ast_zval * ) ast )-> val ) == IS_STRING );
398- return Z_STR (((zend_ast_zval * ) ast )-> val );
429+ static zend_always_inline zend_string * zend_ast_get_constant_name (const zend_ast * ast ) {
430+ const zval * zv = zend_ast_get_zval (ast );
431+ ZEND_ASSERT (Z_TYPE_P (zv ) == IS_STRING );
432+ return Z_STR_P (zv );
399433}
400434
401435static zend_always_inline uint32_t zend_ast_get_num_children (const zend_ast * ast ) {
0 commit comments