]> granicus.if.org Git - php/commitdiff
Specializer was updated with executor's fixes.
authorDmitry Stogov <dmitry@php.net>
Wed, 22 Sep 2004 08:45:21 +0000 (08:45 +0000)
committerDmitry Stogov <dmitry@php.net>
Wed, 22 Sep 2004 08:45:21 +0000 (08:45 +0000)
Zend/zend_vm_handlers.h
Zend/zend_vm_spec.h

index 8172da5a5479c99e38540e5c12c65913e74612c5..5ce2b3a43a7e7154d6c902e9ab72fa32744fcb6d 100644 (file)
@@ -1217,6 +1217,7 @@ ZEND_VM_HELPER_EX(zend_fetch_var_address_helper, int type)
                        }
                }
                switch (opline->op2.u.EA.type) {
+                       case ZEND_FETCH_GLOBAL:
                        case ZEND_FETCH_LOCAL:
                                FREE_OP1();
                                break;
@@ -2614,8 +2615,14 @@ ZEND_VM_HANDLER(ZEND_RECV)
        if (zend_ptr_stack_get_arg(arg_num, (void **) &param TSRMLS_CC)==FAILURE) {
                char *space;
                char *class_name = get_active_class_name(&space TSRMLS_CC);
+               zend_execute_data *ptr = EX(prev_execute_data);
+
                zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, NULL TSRMLS_CC);
-               zend_error(E_WARNING, "Missing argument %ld for %s%s%s()", opline->op1.u.constant.value.lval, class_name, space, get_active_function_name(TSRMLS_C));
+               if(ptr && ptr->op_array) {
+                       zend_error(E_WARNING, "Missing argument %ld for %s%s%s(), called in %s on line %d and defined", opline->op1.u.constant.value.lval, class_name, space, get_active_function_name(TSRMLS_C), ptr->op_array->filename, ptr->opline->lineno);
+               } else {
+                       zend_error(E_WARNING, "Missing argument %ld for %s%s%s()", opline->op1.u.constant.value.lval, class_name, space, get_active_function_name(TSRMLS_C));
+               }
                if (opline->result.op_type == IS_VAR) {
                        PZVAL_UNLOCK_FREE(*EX_T(opline->result.u.var).var.ptr_ptr);
                }
@@ -3287,7 +3294,7 @@ ZEND_VM_HANDLER(ZEND_FE_RESET)
        if (opline->extended_value) {
                array_ptr_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_R);
                if (array_ptr_ptr == NULL) {
-                       MAKE_STD_ZVAL(array_ptr);
+                       ALLOC_INIT_ZVAL(array_ptr);
                } else if (Z_TYPE_PP(array_ptr_ptr) == IS_OBJECT) {
                        ce = Z_OBJCE_PP(array_ptr_ptr);
                        if (!ce || ce->get_iterator == NULL) {
index 0bc71f6bdb59494a2a4c6a6f7eb4e087d31f2a3e..7e807c5403225bc3b38ccd255dfdfc26db8b8b4a 100644 (file)
 #define SPEC_IS_OP1_TMP_FREE_ANY()              IS_TMP_FREE(free_op1)
 #define SPEC_IS_OP1_TMP_FREE_CONST()            0
 #define SPEC_IS_OP1_TMP_FREE_TMP()              1
-#define SPEC_IS_OP1_TMP_FREE_VAR()              IS_TMP_FREE(free_op1)
+#define SPEC_IS_OP1_TMP_FREE_VAR()              0
 #define SPEC_IS_OP1_TMP_FREE_UNUSED()           0
 
 #define SPEC_FREE_OP1_ANY()                     FREE_OP(free_op1);
 #define SPEC_FREE_OP1_CONST()
 #define SPEC_FREE_OP1_TMP()                     zval_dtor(free_op1.var)
-#define SPEC_FREE_OP1_VAR()                     FREE_OP(free_op1);
+#define SPEC_FREE_OP1_VAR()                     FREE_OP_VAR_PTR(free_op1);
 #define SPEC_FREE_OP1_UNUSED()
 
 #define SPEC_FREE_OP1_IF_VAR_ANY()              FREE_OP_IF_VAR(free_op1);
 #define SPEC_FREE_OP1_IF_VAR_CONST()
 #define SPEC_FREE_OP1_IF_VAR_TMP()
-#define SPEC_FREE_OP1_IF_VAR_VAR()              FREE_OP_IF_VAR(free_op1);
+#define SPEC_FREE_OP1_IF_VAR_VAR()              FREE_OP_VAR_PTR(free_op1);
 #define SPEC_FREE_OP1_IF_VAR_UNUSED()
 
 #define SPEC_FREE_OP1_VAR_PTR_ANY()             FREE_OP_VAR_PTR(free_op1);
 #define SPEC_IS_OP2_TMP_FREE_ANY()              IS_TMP_FREE(free_op2)
 #define SPEC_IS_OP2_TMP_FREE_CONST()            0
 #define SPEC_IS_OP2_TMP_FREE_TMP()              1
-#define SPEC_IS_OP2_TMP_FREE_VAR()              IS_TMP_FREE(free_op2)
+#define SPEC_IS_OP2_TMP_FREE_VAR()              0
 #define SPEC_IS_OP2_TMP_FREE_UNUSED()           0
 
 #define SPEC_FREE_OP2_ANY()                     FREE_OP(free_op2);
 #define SPEC_FREE_OP2_CONST()
 #define SPEC_FREE_OP2_TMP()                     zval_dtor(free_op2.var)
-#define SPEC_FREE_OP2_VAR()                     FREE_OP(free_op2);
+#define SPEC_FREE_OP2_VAR()                     FREE_OP_VAR_PTR(free_op2);
 #define SPEC_FREE_OP2_UNUSED()
 
 #define SPEC_FREE_OP2_IF_VAR_ANY()              FREE_OP_IF_VAR(free_op2);
 #define SPEC_FREE_OP2_IF_VAR_CONST()
 #define SPEC_FREE_OP2_IF_VAR_TMP()
-#define SPEC_FREE_OP2_IF_VAR_VAR()              FREE_OP_IF_VAR(free_op2);
+#define SPEC_FREE_OP2_IF_VAR_VAR()              FREE_OP_VAR_PTR(free_op2);
 #define SPEC_FREE_OP2_IF_VAR_UNUSED()
 
 #define SPEC_FREE_OP2_VAR_PTR_ANY()             FREE_OP_VAR_PTR(free_op2);