]> granicus.if.org Git - php/commitdiff
Support =unset as arguments
authorAndi Gutmans <andi@php.net>
Mon, 19 Apr 1999 16:28:05 +0000 (16:28 +0000)
committerAndi Gutmans <andi@php.net>
Mon, 19 Apr 1999 16:28:05 +0000 (16:28 +0000)
Zend/config.w32.h
Zend/zend-parser.y
Zend/zend_compile.c
Zend/zend_execute.c

index 1a416de9747a5fcc3d672efbd2213951942722ec..dac03e3b46e517ab1ac6557ab188d3b748407155 100644 (file)
@@ -17,7 +17,7 @@ typedef unsigned int uint;
 #undef inline
 #endif
 
-#define ZEND_DEBUG 0
+#define ZEND_DEBUG 1
 
 #define zend_sprintf sprintf
 
index 3f12046352c0ac7af54fa87f952c2d81f1bebdb6..520e2227786f70960556fe396300c3b5ae88cc72 100644 (file)
@@ -257,10 +257,12 @@ non_empty_parameter_list:
        |       '&' VARIABLE                                    { znode tmp;  fetch_simple_variable(&tmp, &$2, 0 CLS_CC); $$.op_type = IS_CONST; $$.u.constant.value.lval=1; $$.u.constant.type=IS_LONG; $$.u.constant.refcount=1; $$.u.constant.is_ref=0; do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_FORCE CLS_CC); }
        |       ZEND_CONST VARIABLE                     { znode tmp;  fetch_simple_variable(&tmp, &$2, 0 CLS_CC); $$.op_type = IS_CONST; $$.u.constant.value.lval=1; $$.u.constant.type=IS_LONG; $$.u.constant.refcount=1; $$.u.constant.is_ref=0; do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_NONE CLS_CC); }
        |       VARIABLE '=' static_scalar              { znode tmp;  fetch_simple_variable(&tmp, &$1, 0 CLS_CC); $$.op_type = IS_CONST; $$.u.constant.value.lval=1; $$.u.constant.type=IS_LONG; $$.u.constant.refcount=1; $$.u.constant.is_ref=0; do_receive_arg(ZEND_RECV_INIT, &tmp, &$$, &$3, BYREF_NONE CLS_CC); }
+       |       VARIABLE '=' ZEND_UNSET                 { znode tmp;  fetch_simple_variable(&tmp, &$1, 0 CLS_CC); $$.op_type = IS_CONST; $$.u.constant.value.lval=1; $$.u.constant.type=IS_LONG; $$.u.constant.refcount=1; $$.u.constant.is_ref=0; do_receive_arg(ZEND_RECV_INIT, &tmp, &$$, NULL, BYREF_NONE CLS_CC); }
        |       non_empty_parameter_list ',' VARIABLE                                           { znode tmp;  fetch_simple_variable(&tmp, &$3, 0 CLS_CC); $$=$1; $$.u.constant.value.lval++; do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_NONE CLS_CC); }
        |       non_empty_parameter_list ',' '&' VARIABLE                                       { znode tmp;  fetch_simple_variable(&tmp, &$4, 0 CLS_CC); $$=$1; $$.u.constant.value.lval++; do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_FORCE CLS_CC); }
        |       non_empty_parameter_list ',' ZEND_CONST VARIABLE                        { znode tmp;  fetch_simple_variable(&tmp, &$4, 0 CLS_CC); $$=$1; $$.u.constant.value.lval++; do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_NONE CLS_CC); }
        |       non_empty_parameter_list ',' VARIABLE '=' static_scalar         { znode tmp;  fetch_simple_variable(&tmp, &$3, 0 CLS_CC); $$=$1; $$.u.constant.value.lval++; do_receive_arg(ZEND_RECV_INIT, &tmp, &$$, &$5, BYREF_NONE CLS_CC); }
+       |       non_empty_parameter_list ',' VARIABLE '=' ZEND_UNSET            { znode tmp;  fetch_simple_variable(&tmp, &$3, 0 CLS_CC); $$=$1; $$.u.constant.value.lval++; do_receive_arg(ZEND_RECV_INIT, &tmp, &$$, NULL, BYREF_NONE CLS_CC); }
 ;
 
 
index 4db89e6a3ce7c733336a02c4e3b4c639036c95df..01c8ba41e033232de9195fa914d5d48a65c81563 100644 (file)
@@ -649,7 +649,7 @@ void do_receive_arg(int op, znode *var, znode *offset, znode *initialization, un
        opline->opcode = op;
        opline->result = *var;
        opline->op1 = *offset;
-       if (initialization) {
+       if ((op == ZEND_RECV_INIT) && initialization) {
                opline->op2 = *initialization;
        } else {
                SET_UNUSED(opline->op2);
index f8834532883f49249c72239eb4446c6c13f4eb30..eb2dc8873ce71f05ba215a7ee1e5df6db4fa1735 100644 (file)
@@ -1485,6 +1485,10 @@ send_by_ref:
 
                                        //if (zend_hash_index_find(EG(active_symbol_table), opline->op1.u.constant.value.lval, (void **) &param)==FAILURE) {
                                        if (zend_ptr_stack_get_arg(opline->op1.u.constant.value.lval, (void **) &param)==FAILURE) {
+                                               if (opline->op2.op_type == IS_UNUSED) {
+                                                       DEC_AI_COUNT();
+                                                       break;
+                                               }
                                                if (opline->op2.u.constant.type == IS_CONSTANT) {
                                                        zval *default_value = (zval *) emalloc(sizeof(zval));
                                                        zval tmp;