Skip to content

Commit 8b10fcd

Browse files
committed
Merge branch 'PHP-7.4'
* PHP-7.4: Load string once
2 parents 13fd8c5 + 5a61619 commit 8b10fcd

File tree

2 files changed

+14
-14
lines changed

2 files changed

+14
-14
lines changed

Zend/zend_vm_def.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7945,35 +7945,35 @@ ZEND_VM_HANDLER(163, ZEND_FAST_RET, ANY, TRY_CATCH)
79457945
ZEND_VM_HOT_HANDLER(168, ZEND_BIND_GLOBAL, CV, CONST, CACHE_SLOT)
79467946
{
79477947
USE_OPLINE
7948-
zval *varname;
7948+
zend_string *varname;
79497949
zval *value;
79507950
zval *variable_ptr;
79517951
uintptr_t idx;
79527952
zend_reference *ref;
79537953

79547954
ZEND_VM_REPEATABLE_OPCODE
79557955

7956-
varname = GET_OP2_ZVAL_PTR(BP_VAR_R);
7956+
varname = Z_STR_P(GET_OP2_ZVAL_PTR(BP_VAR_R));
79577957

79587958
/* We store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
79597959
idx = (uintptr_t)CACHED_PTR(opline->extended_value) - 1;
79607960
if (EXPECTED(idx < EG(symbol_table).nNumUsed * sizeof(Bucket))) {
79617961
Bucket *p = (Bucket*)((char*)EG(symbol_table).arData + idx);
79627962

79637963
if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
7964-
(EXPECTED(p->key == Z_STR_P(varname)) ||
7965-
(EXPECTED(p->h == ZSTR_H(Z_STR_P(varname))) &&
7964+
(EXPECTED(p->key == varname) ||
7965+
(EXPECTED(p->h == ZSTR_H(varname)) &&
79667966
EXPECTED(p->key != NULL) &&
7967-
EXPECTED(zend_string_equal_content(p->key, Z_STR_P(varname)))))) {
7967+
EXPECTED(zend_string_equal_content(p->key, varname))))) {
79687968

79697969
value = (zval*)p; /* value = &p->val; */
79707970
ZEND_VM_C_GOTO(check_indirect);
79717971
}
79727972
}
79737973

7974-
value = zend_hash_find_ex(&EG(symbol_table), Z_STR_P(varname), 1);
7974+
value = zend_hash_find_ex(&EG(symbol_table), varname, 1);
79757975
if (UNEXPECTED(value == NULL)) {
7976-
value = zend_hash_add_new(&EG(symbol_table), Z_STR_P(varname), &EG(uninitialized_zval));
7976+
value = zend_hash_add_new(&EG(symbol_table), varname, &EG(uninitialized_zval));
79777977
idx = (char*)value - (char*)EG(symbol_table).arData;
79787978
/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
79797979
CACHE_PTR(opline->extended_value, (void*)(idx + 1));

Zend/zend_vm_execute.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42083,35 +42083,35 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZE
4208342083
static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4208442084
{
4208542085
USE_OPLINE
42086-
zval *varname;
42086+
zend_string *varname;
4208742087
zval *value;
4208842088
zval *variable_ptr;
4208942089
uintptr_t idx;
4209042090
zend_reference *ref;
4209142091

4209242092
ZEND_VM_REPEATABLE_OPCODE
4209342093

42094-
varname = RT_CONSTANT(opline, opline->op2);
42094+
varname = Z_STR_P(RT_CONSTANT(opline, opline->op2));
4209542095

4209642096
/* We store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
4209742097
idx = (uintptr_t)CACHED_PTR(opline->extended_value) - 1;
4209842098
if (EXPECTED(idx < EG(symbol_table).nNumUsed * sizeof(Bucket))) {
4209942099
Bucket *p = (Bucket*)((char*)EG(symbol_table).arData + idx);
4210042100

4210142101
if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
42102-
(EXPECTED(p->key == Z_STR_P(varname)) ||
42103-
(EXPECTED(p->h == ZSTR_H(Z_STR_P(varname))) &&
42102+
(EXPECTED(p->key == varname) ||
42103+
(EXPECTED(p->h == ZSTR_H(varname)) &&
4210442104
EXPECTED(p->key != NULL) &&
42105-
EXPECTED(zend_string_equal_content(p->key, Z_STR_P(varname)))))) {
42105+
EXPECTED(zend_string_equal_content(p->key, varname))))) {
4210642106

4210742107
value = (zval*)p; /* value = &p->val; */
4210842108
goto check_indirect;
4210942109
}
4211042110
}
4211142111

42112-
value = zend_hash_find_ex(&EG(symbol_table), Z_STR_P(varname), 1);
42112+
value = zend_hash_find_ex(&EG(symbol_table), varname, 1);
4211342113
if (UNEXPECTED(value == NULL)) {
42114-
value = zend_hash_add_new(&EG(symbol_table), Z_STR_P(varname), &EG(uninitialized_zval));
42114+
value = zend_hash_add_new(&EG(symbol_table), varname, &EG(uninitialized_zval));
4211542115
idx = (char*)value - (char*)EG(symbol_table).arData;
4211642116
/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
4211742117
CACHE_PTR(opline->extended_value, (void*)(idx + 1));

0 commit comments

Comments
 (0)