]> granicus.if.org Git - php/commitdiff
Simplified code
authorDmitry Stogov <dmitry@zend.com>
Tue, 28 Apr 2015 16:11:23 +0000 (19:11 +0300)
committerDmitry Stogov <dmitry@zend.com>
Tue, 28 Apr 2015 16:11:23 +0000 (19:11 +0300)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 15e64b8cfe91e3eb797c96fa4c204371e735d1c8..8d94a090553fb1ce655e7d5bd43833df0d23c0cd 100644 (file)
@@ -2093,9 +2093,14 @@ ZEND_VM_HANDLER(98, ZEND_FETCH_LIST, CONST|TMPVAR|CV, CONST)
 
 ZEND_VM_C_LABEL(try_fetch_list):
        if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
-               zval *value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), EX_CONSTANT(opline->op2), OP2_TYPE, BP_VAR_R);
+               zval *value = zend_hash_index_find(Z_ARRVAL_P(container), Z_LVAL_P(EX_CONSTANT(opline->op2)));
 
-               ZVAL_COPY(EX_VAR(opline->result.var), value);
+               if (UNEXPECTED(value == NULL)) {
+                       zend_error(E_NOTICE,"Undefined offset: " ZEND_ULONG_FMT, Z_LVAL_P(EX_CONSTANT(opline->op2)));
+                       ZVAL_NULL(EX_VAR(opline->result.var));
+               } else {
+                       ZVAL_COPY(EX_VAR(opline->result.var), value);
+               }
        } else if (UNEXPECTED(Z_TYPE_P(container) == IS_OBJECT) &&
                   EXPECTED(Z_OBJ_HT_P(container)->read_dimension)) {
                zval *result = EX_VAR(opline->result.var);
index f59aff111d21e63de14ecce6aedded86c8e5e801..40cc771bda33dc8a58c0ff39f4323144d75db733 100644 (file)
@@ -5268,9 +5268,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_CONST_CONST_HA
 
 try_fetch_list:
        if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
-               zval *value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), EX_CONSTANT(opline->op2), IS_CONST, BP_VAR_R);
+               zval *value = zend_hash_index_find(Z_ARRVAL_P(container), Z_LVAL_P(EX_CONSTANT(opline->op2)));
 
-               ZVAL_COPY(EX_VAR(opline->result.var), value);
+               if (UNEXPECTED(value == NULL)) {
+                       zend_error(E_NOTICE,"Undefined offset: " ZEND_ULONG_FMT, Z_LVAL_P(EX_CONSTANT(opline->op2)));
+                       ZVAL_NULL(EX_VAR(opline->result.var));
+               } else {
+                       ZVAL_COPY(EX_VAR(opline->result.var), value);
+               }
        } else if (UNEXPECTED(Z_TYPE_P(container) == IS_OBJECT) &&
                   EXPECTED(Z_OBJ_HT_P(container)->read_dimension)) {
                zval *result = EX_VAR(opline->result.var);
@@ -31323,9 +31328,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_CV_CONST_HANDL
 
 try_fetch_list:
        if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
-               zval *value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), EX_CONSTANT(opline->op2), IS_CONST, BP_VAR_R);
+               zval *value = zend_hash_index_find(Z_ARRVAL_P(container), Z_LVAL_P(EX_CONSTANT(opline->op2)));
 
-               ZVAL_COPY(EX_VAR(opline->result.var), value);
+               if (UNEXPECTED(value == NULL)) {
+                       zend_error(E_NOTICE,"Undefined offset: " ZEND_ULONG_FMT, Z_LVAL_P(EX_CONSTANT(opline->op2)));
+                       ZVAL_NULL(EX_VAR(opline->result.var));
+               } else {
+                       ZVAL_COPY(EX_VAR(opline->result.var), value);
+               }
        } else if (UNEXPECTED(Z_TYPE_P(container) == IS_OBJECT) &&
                   EXPECTED(Z_OBJ_HT_P(container)->read_dimension)) {
                zval *result = EX_VAR(opline->result.var);
@@ -41090,9 +41100,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_TMPVAR_CONST_H
 
 try_fetch_list:
        if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
-               zval *value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), EX_CONSTANT(opline->op2), IS_CONST, BP_VAR_R);
+               zval *value = zend_hash_index_find(Z_ARRVAL_P(container), Z_LVAL_P(EX_CONSTANT(opline->op2)));
 
-               ZVAL_COPY(EX_VAR(opline->result.var), value);
+               if (UNEXPECTED(value == NULL)) {
+                       zend_error(E_NOTICE,"Undefined offset: " ZEND_ULONG_FMT, Z_LVAL_P(EX_CONSTANT(opline->op2)));
+                       ZVAL_NULL(EX_VAR(opline->result.var));
+               } else {
+                       ZVAL_COPY(EX_VAR(opline->result.var), value);
+               }
        } else if (UNEXPECTED(Z_TYPE_P(container) == IS_OBJECT) &&
                   EXPECTED(Z_OBJ_HT_P(container)->read_dimension)) {
                zval *result = EX_VAR(opline->result.var);