]> granicus.if.org Git - php/commitdiff
Load string once
authorDmitry Stogov <dmitry@zend.com>
Thu, 12 Sep 2019 15:46:13 +0000 (18:46 +0300)
committerDmitry Stogov <dmitry@zend.com>
Thu, 12 Sep 2019 15:46:13 +0000 (18:46 +0300)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 8bcfe5f660444fd26e9243023a2583e6b79170a4..fa3940720cb870b13de2f57e7fd728e373bf53ee 100644 (file)
@@ -7944,7 +7944,7 @@ ZEND_VM_HOT_HANDLER(168, ZEND_BIND_GLOBAL, CV, CONST, CACHE_SLOT)
 {
        USE_OPLINE
        zend_free_op free_op1, free_op2;
-       zval *varname;
+       zend_string *varname;
        zval *value;
        zval *variable_ptr;
        uintptr_t idx;
@@ -7952,7 +7952,7 @@ ZEND_VM_HOT_HANDLER(168, ZEND_BIND_GLOBAL, CV, CONST, CACHE_SLOT)
 
        ZEND_VM_REPEATABLE_OPCODE
 
-       varname = GET_OP2_ZVAL_PTR(BP_VAR_R);
+       varname = Z_STR_P(GET_OP2_ZVAL_PTR(BP_VAR_R));
 
        /* We store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
        idx = (uintptr_t)CACHED_PTR(opline->extended_value) - 1;
@@ -7960,19 +7960,19 @@ ZEND_VM_HOT_HANDLER(168, ZEND_BIND_GLOBAL, CV, CONST, CACHE_SLOT)
                Bucket *p = (Bucket*)((char*)EG(symbol_table).arData + idx);
 
                if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
-               (EXPECTED(p->key == Z_STR_P(varname)) ||
-                (EXPECTED(p->h == ZSTR_H(Z_STR_P(varname))) &&
+               (EXPECTED(p->key == varname) ||
+                (EXPECTED(p->h == ZSTR_H(varname)) &&
                  EXPECTED(p->key != NULL) &&
-                 EXPECTED(zend_string_equal_content(p->key, Z_STR_P(varname)))))) {
+                 EXPECTED(zend_string_equal_content(p->key, varname))))) {
 
                        value = (zval*)p; /* value = &p->val; */
                        ZEND_VM_C_GOTO(check_indirect);
                }
        }
 
-       value = zend_hash_find_ex(&EG(symbol_table), Z_STR_P(varname), 1);
+       value = zend_hash_find_ex(&EG(symbol_table), varname, 1);
        if (UNEXPECTED(value == NULL)) {
-               value = zend_hash_add_new(&EG(symbol_table), Z_STR_P(varname), &EG(uninitialized_zval));
+               value = zend_hash_add_new(&EG(symbol_table), varname, &EG(uninitialized_zval));
                idx = (char*)value - (char*)EG(symbol_table).arData;
                /* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
                CACHE_PTR(opline->extended_value, (void*)(idx + 1));
index 7a5121aad1b9a46334d0ead48e4b49402b3584e2..3c587611cdf879770207fc9d69f6d76a613782e7 100644 (file)
@@ -41487,7 +41487,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_GLOBAL_SPEC_C
 {
        USE_OPLINE
 
-       zval *varname;
+       zend_string *varname;
        zval *value;
        zval *variable_ptr;
        uintptr_t idx;
@@ -41495,7 +41495,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_GLOBAL_SPEC_C
 
        ZEND_VM_REPEATABLE_OPCODE
 
-       varname = RT_CONSTANT(opline, opline->op2);
+       varname = Z_STR_P(RT_CONSTANT(opline, opline->op2));
 
        /* We store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
        idx = (uintptr_t)CACHED_PTR(opline->extended_value) - 1;
@@ -41503,19 +41503,19 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_GLOBAL_SPEC_C
                Bucket *p = (Bucket*)((char*)EG(symbol_table).arData + idx);
 
                if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
-               (EXPECTED(p->key == Z_STR_P(varname)) ||
-                (EXPECTED(p->h == ZSTR_H(Z_STR_P(varname))) &&
+               (EXPECTED(p->key == varname) ||
+                (EXPECTED(p->h == ZSTR_H(varname)) &&
                  EXPECTED(p->key != NULL) &&
-                 EXPECTED(zend_string_equal_content(p->key, Z_STR_P(varname)))))) {
+                 EXPECTED(zend_string_equal_content(p->key, varname))))) {
 
                        value = (zval*)p; /* value = &p->val; */
                        goto check_indirect;
                }
        }
 
-       value = zend_hash_find_ex(&EG(symbol_table), Z_STR_P(varname), 1);
+       value = zend_hash_find_ex(&EG(symbol_table), varname, 1);
        if (UNEXPECTED(value == NULL)) {
-               value = zend_hash_add_new(&EG(symbol_table), Z_STR_P(varname), &EG(uninitialized_zval));
+               value = zend_hash_add_new(&EG(symbol_table), varname, &EG(uninitialized_zval));
                idx = (char*)value - (char*)EG(symbol_table).arData;
                /* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
                CACHE_PTR(opline->extended_value, (void*)(idx + 1));