@@ -6914,13 +6914,13 @@ static void zend_pm_compile_container(
69146914 zend_ast_list * element_list = zend_ast_get_list (ast -> child [0 ]);
69156915
69166916 /* Make sure the value is actually of the right type. */
6917- zend_pm_copy_tmp (& expr_copy_node , expr_node , false);
6918- zend_op * is_array_op = zend_emit_op (NULL , ZEND_TYPE_CHECK , & expr_copy_node , NULL );
6919- SET_NODE (is_array_op -> result , result );
6920- is_array_op -> extended_value = is_array ? MAY_BE_ARRAY : MAY_BE_OBJECT ;
6921- zend_pm_emit_jmpz_ex (result , false_label );
6922-
69236917 if (is_array ) {
6918+ zend_pm_copy_tmp (& expr_copy_node , expr_node , false);
6919+ zend_op * is_array_op = zend_emit_op (NULL , ZEND_TYPE_CHECK , & expr_copy_node , NULL );
6920+ SET_NODE (is_array_op -> result , result );
6921+ is_array_op -> extended_value = is_array ? MAY_BE_ARRAY : MAY_BE_OBJECT ;
6922+ zend_pm_emit_jmpz_ex (result , false_label );
6923+
69246924 /* Make sure the array has the right size. */
69256925 zend_pm_copy_tmp (& expr_copy_node , expr_node , false);
69266926 znode count_node ;
@@ -6934,6 +6934,19 @@ static void zend_pm_compile_container(
69346934 (ast -> attr & ZEND_ARRAY_PATTERN_NON_EXHAUSTIVE ) ? ZEND_IS_SMALLER_OR_EQUAL : ZEND_IS_EQUAL ,
69356935 & count_target_node , & count_node );
69366936 SET_NODE (count_ok_op -> result , result );
6937+ zend_pm_emit_jmpz_ex (result , false_label );
6938+ } else {
6939+ zend_pm_copy_tmp (& expr_copy_node , expr_node , false);
6940+
6941+ znode class_node ;
6942+ zend_compile_class_ref (& class_node , ast -> child [1 ], ZEND_FETCH_CLASS_NO_AUTOLOAD | ZEND_FETCH_CLASS_EXCEPTION | ZEND_FETCH_CLASS_SILENT );
6943+
6944+ zend_op * opline = zend_emit_op_tmp (NULL , ZEND_INSTANCEOF , & expr_copy_node , NULL );
6945+ SET_NODE (opline -> result , result );
6946+ opline -> op2_type = IS_CONST ;
6947+ opline -> op2 .constant = zend_add_class_name_literal (Z_STR (class_node .u .constant ));
6948+ opline -> extended_value = zend_alloc_cache_slot ();
6949+
69376950 zend_pm_emit_jmpz_ex (result , false_label );
69386951 }
69396952
0 commit comments