]> granicus.if.org Git - php/commitdiff
Allow "null" default value for arguments with array type hint
authorDmitry Stogov <dmitry@php.net>
Tue, 15 Nov 2005 16:49:40 +0000 (16:49 +0000)
committerDmitry Stogov <dmitry@php.net>
Tue, 15 Nov 2005 16:49:40 +0000 (16:49 +0000)
Zend/zend_compile.c

index c10f694ee1cea86a6df676dcb307aa1f52e72b09..85923e622e4b1d1584b1293840af31f1c974e8c1 100644 (file)
@@ -1277,7 +1277,6 @@ void zend_do_receive_arg(zend_uchar op, znode *var, znode *offset, znode *initia
                if (class_type->u.constant.type == IS_STRING) {
                        cur_arg_info->class_name = class_type->u.constant.value.str.val;
                        cur_arg_info->class_name_len = class_type->u.constant.value.str.len;
-
                        if (op == ZEND_RECV_INIT) {
                                if (Z_TYPE(initialization->u.constant) == IS_NULL || (Z_TYPE(initialization->u.constant) == IS_CONSTANT && !strcasecmp(Z_STRVAL(initialization->u.constant), "NULL"))) {
                                        cur_arg_info->allow_null = 1;
@@ -1289,6 +1288,13 @@ void zend_do_receive_arg(zend_uchar op, znode *var, znode *offset, znode *initia
                        cur_arg_info->array_type_hint = 1;
                        cur_arg_info->class_name = NULL;
                        cur_arg_info->class_name_len = 0;
+                       if (op == ZEND_RECV_INIT) {
+                               if (Z_TYPE(initialization->u.constant) == IS_NULL || (Z_TYPE(initialization->u.constant) == IS_CONSTANT && !strcasecmp(Z_STRVAL(initialization->u.constant), "NULL"))) {
+                                       cur_arg_info->allow_null = 1;
+                               } else if (Z_TYPE(initialization->u.constant) != IS_ARRAY && Z_TYPE(initialization->u.constant) != IS_CONSTANT_ARRAY) {
+                                       zend_error(E_COMPILE_ERROR, "Default value for parameters with array type hint can only be an array or NULL");
+                               }
+                       }
                }
        } else {
                cur_arg_info->class_name = NULL;