]> granicus.if.org Git - php/commitdiff
- Support default arguments for reference parameters
authorAndi Gutmans <andi@php.net>
Fri, 28 Dec 2001 13:28:33 +0000 (13:28 +0000)
committerAndi Gutmans <andi@php.net>
Fri, 28 Dec 2001 13:28:33 +0000 (13:28 +0000)
- Fix two compile warnings

Zend/zend_execute.c
Zend/zend_language_parser.y

index 70196d7dd4096620908eb570e9ad0a1533096e80..c87138fa0f7c86eef061a092bb2e7f506a8e25d0 100644 (file)
@@ -1524,7 +1524,7 @@ binary_assign_op_addr: {
                                                        zend_str_tolower(tmp.value.str.val, tmp.value.str.len);
                                                }
 
-                                               if (zend_hash_find(EG(class_table), class_name->value.str.val, class_name->value.str.len+1, &EX(Ts)[EX(opline)->result.u.var].EA.class_entry) == FAILURE) {
+                                               if (zend_hash_find(EG(class_table), class_name->value.str.val, class_name->value.str.len+1, (void **) &EX(Ts)[EX(opline)->result.u.var].EA.class_entry) == FAILURE) {
                                                        zend_error(E_ERROR, "Class '%s' not found", class_name->value.str.val);
                                                }
                                                if (class_name == &tmp) {
@@ -1532,7 +1532,7 @@ binary_assign_op_addr: {
                                                }
                                                FREE_OP(EX(Ts), &EX(opline)->op2, EG(free_op2));
                                        } else {
-                                               if (zend_hash_find(&EX(Ts)[EX(opline)->op1.u.var].EA.class_entry->class_table, EX(opline)->op2.u.constant.value.str.val, EX(opline)->op2.u.constant.value.str.len+1, &EX(Ts)[EX(opline)->result.u.var].EA.class_entry) == FAILURE) {
+                                               if (zend_hash_find(&EX(Ts)[EX(opline)->op1.u.var].EA.class_entry->class_table, EX(opline)->op2.u.constant.value.str.val, EX(opline)->op2.u.constant.value.str.len+1, (void **) &EX(Ts)[EX(opline)->result.u.var].EA.class_entry) == FAILURE) {
                                                        zend_error(E_ERROR, "Class '%s' not found", EX(opline)->op2.u.constant.value.str.val);
                                                }
                                        }
@@ -1992,14 +1992,14 @@ send_by_ref:
                                                        param = NULL;
                                                        assignment_value = &EX(opline)->op2.u.constant;
                                                }
+                                               zend_assign_to_variable(NULL, &EX(opline)->result, NULL, assignment_value, IS_VAR, EX(Ts) TSRMLS_CC);
                                        } else {
                                                assignment_value = *param;
-                                       }
-
-                                       if (PZVAL_IS_REF(assignment_value) && param) {
-                                               zend_assign_to_variable_reference(NULL, get_zval_ptr_ptr(&EX(opline)->result, EX(Ts), BP_VAR_W), param, NULL TSRMLS_CC);
-                                       } else {
-                                               zend_assign_to_variable(NULL, &EX(opline)->result, NULL, assignment_value, IS_VAR, EX(Ts) TSRMLS_CC);
+                                               if (PZVAL_IS_REF(assignment_value)) {
+                                                       zend_assign_to_variable_reference(NULL, get_zval_ptr_ptr(&EX(opline)->result, EX(Ts), BP_VAR_W), param, NULL TSRMLS_CC);
+                                               } else {
+                                                       zend_assign_to_variable(NULL, &EX(opline)->result, NULL, assignment_value, IS_VAR, EX(Ts) TSRMLS_CC);
+                                               }
                                        }
                                }
                                NEXT_OPCODE();
index d0224885912de91d11dbab52c64fdaf652ead80b..1fe20561332d12aaedb8e53d4be7fd95ca79ba6f 100644 (file)
@@ -338,10 +338,12 @@ parameter_list:
 non_empty_parameter_list:
                T_VARIABLE                              { znode tmp;  fetch_simple_variable(&tmp, &$1, 0 TSRMLS_CC); $$.op_type = IS_CONST; $$.u.constant.value.lval=1; $$.u.constant.type=IS_LONG; INIT_PZVAL(&$$.u.constant); zend_do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_NONE TSRMLS_CC); }
        |       '&' T_VARIABLE                  { znode tmp;  fetch_simple_variable(&tmp, &$2, 0 TSRMLS_CC); $$.op_type = IS_CONST; $$.u.constant.value.lval=1; $$.u.constant.type=IS_LONG; INIT_PZVAL(&$$.u.constant); zend_do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_FORCE TSRMLS_CC); }
+       |       '&' T_VARIABLE '=' static_scalar                        { znode tmp;  fetch_simple_variable(&tmp, &$2, 0 TSRMLS_CC); $$.op_type = IS_CONST; $$.u.constant.value.lval=1; $$.u.constant.type=IS_LONG; INIT_PZVAL(&$$.u.constant); zend_do_receive_arg(ZEND_RECV_INIT, &tmp, &$$, &$4, BYREF_FORCE TSRMLS_CC); }
        |       T_CONST T_VARIABLE              { znode tmp;  fetch_simple_variable(&tmp, &$2, 0 TSRMLS_CC); $$.op_type = IS_CONST; $$.u.constant.value.lval=1; $$.u.constant.type=IS_LONG; INIT_PZVAL(&$$.u.constant); zend_do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_NONE TSRMLS_CC); }
        |       T_VARIABLE '=' static_scalar                            { znode tmp;  fetch_simple_variable(&tmp, &$1, 0 TSRMLS_CC); $$.op_type = IS_CONST; $$.u.constant.value.lval=1; $$.u.constant.type=IS_LONG; INIT_PZVAL(&$$.u.constant); zend_do_receive_arg(ZEND_RECV_INIT, &tmp, &$$, &$3, BYREF_NONE TSRMLS_CC); }
        |       non_empty_parameter_list ',' T_VARIABLE         { znode tmp;  fetch_simple_variable(&tmp, &$3, 0 TSRMLS_CC); $$=$1; $$.u.constant.value.lval++; zend_do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_NONE TSRMLS_CC); }
        |       non_empty_parameter_list ',' '&' T_VARIABLE     { znode tmp;  fetch_simple_variable(&tmp, &$4, 0 TSRMLS_CC); $$=$1; $$.u.constant.value.lval++; zend_do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_FORCE TSRMLS_CC); }
+       |       non_empty_parameter_list ',' '&' T_VARIABLE      '=' static_scalar { znode tmp;  fetch_simple_variable(&tmp, &$4, 0 TSRMLS_CC); $$=$1; $$.u.constant.value.lval++; zend_do_receive_arg(ZEND_RECV_INIT, &tmp, &$$, &$6, BYREF_FORCE TSRMLS_CC); }
        |       non_empty_parameter_list ',' T_CONST T_VARIABLE                         { znode tmp;  fetch_simple_variable(&tmp, &$4, 0 TSRMLS_CC); $$=$1; $$.u.constant.value.lval++; zend_do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_NONE TSRMLS_CC); }
        |       non_empty_parameter_list ',' T_VARIABLE '=' static_scalar       { znode tmp;  fetch_simple_variable(&tmp, &$3, 0 TSRMLS_CC); $$=$1; $$.u.constant.value.lval++; zend_do_receive_arg(ZEND_RECV_INIT, &tmp, &$$, &$5, BYREF_NONE TSRMLS_CC); }
 ;