Skip to content

Commit 13d7700

Browse files
committed
Add some const qualifiers
1 parent 6828f9d commit 13d7700

File tree

4 files changed

+28
-27
lines changed

4 files changed

+28
-27
lines changed

Zend/zend_hash.c

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -655,21 +655,18 @@ ZEND_API void ZEND_FASTCALL zend_hash_iterators_advance(HashTable *ht, HashPosit
655655
}
656656
}
657657

658-
static zend_always_inline Bucket *zend_hash_find_bucket(const HashTable *ht, zend_string *key, bool known_hash)
658+
/* Hash must be known and precomputed before */
659+
static zend_always_inline Bucket *zend_hash_find_bucket(const HashTable *ht, const zend_string *key)
659660
{
660-
zend_ulong h;
661+
zend_ulong key_hash = ZSTR_H(key);
661662
uint32_t nIndex;
662663
uint32_t idx;
663664
Bucket *p, *arData;
664665

665-
if (known_hash) {
666-
h = ZSTR_H(key);
667-
ZEND_ASSERT(h != 0 && "Hash must be known");
668-
} else {
669-
h = zend_string_hash_val(key);
670-
}
666+
ZEND_ASSERT(key_hash != 0 && "Hash must be known");
667+
671668
arData = ht->arData;
672-
nIndex = h | ht->nTableMask;
669+
nIndex = key_hash | ht->nTableMask;
673670
idx = HT_HASH_EX(arData, nIndex);
674671

675672
if (UNEXPECTED(idx == HT_INVALID_IDX)) {
@@ -681,7 +678,7 @@ static zend_always_inline Bucket *zend_hash_find_bucket(const HashTable *ht, zen
681678
}
682679

683680
while (1) {
684-
if (p->h == ZSTR_H(key) &&
681+
if (p->h == key_hash &&
685682
EXPECTED(p->key) &&
686683
zend_string_equal_content(p->key, key)) {
687684
return p;
@@ -758,7 +755,7 @@ static zend_always_inline zval *_zend_hash_add_or_update_i(HashTable *ht, zend_s
758755
zend_hash_packed_to_hash(ht);
759756
}
760757
} else if ((flag & HASH_ADD_NEW) == 0 || ZEND_DEBUG) {
761-
p = zend_hash_find_bucket(ht, key, 1);
758+
p = zend_hash_find_bucket(ht, key);
762759

763760
if (p) {
764761
zval *data;
@@ -1166,7 +1163,9 @@ ZEND_API zval* ZEND_FASTCALL zend_hash_set_bucket_key(HashTable *ht, Bucket *b,
11661163
HT_ASSERT_RC1(ht);
11671164
ZEND_ASSERT(!HT_IS_PACKED(ht));
11681165

1169-
p = zend_hash_find_bucket(ht, key, 0);
1166+
/* Precompute string hash */
1167+
zend_string_hash_val(key);
1168+
p = zend_hash_find_bucket(ht, key);
11701169
if (UNEXPECTED(p)) {
11711170
return (p == b) ? &p->val : NULL;
11721171
}
@@ -2526,17 +2525,19 @@ ZEND_API zval* ZEND_FASTCALL zend_hash_find(const HashTable *ht, zend_string *ke
25262525

25272526
IS_CONSISTENT(ht);
25282527

2529-
p = zend_hash_find_bucket(ht, key, 0);
2528+
/* Precompute string hash */
2529+
zend_string_hash_val(key);
2530+
p = zend_hash_find_bucket(ht, key);
25302531
return p ? &p->val : NULL;
25312532
}
25322533

2533-
ZEND_API zval* ZEND_FASTCALL zend_hash_find_known_hash(const HashTable *ht, zend_string *key)
2534+
ZEND_API zval* ZEND_FASTCALL zend_hash_find_known_hash(const HashTable *ht, const zend_string *key)
25342535
{
25352536
Bucket *p;
25362537

25372538
IS_CONSISTENT(ht);
25382539

2539-
p = zend_hash_find_bucket(ht, key, 1);
2540+
p = zend_hash_find_bucket(ht, key);
25402541
return p ? &p->val : NULL;
25412542
}
25422543

Zend/zend_hash.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ ZEND_API zval* ZEND_FASTCALL zend_hash_index_find(const HashTable *ht, zend_ulon
179179
ZEND_API zval* ZEND_FASTCALL _zend_hash_index_find(const HashTable *ht, zend_ulong h);
180180

181181
/* The same as zend_hash_find(), but hash value of the key must be already calculated. */
182-
ZEND_API zval* ZEND_FASTCALL zend_hash_find_known_hash(const HashTable *ht, zend_string *key);
182+
ZEND_API zval* ZEND_FASTCALL zend_hash_find_known_hash(const HashTable *ht, const zend_string *key);
183183

184184
static zend_always_inline zval *zend_hash_find_ex(const HashTable *ht, zend_string *key, bool known_hash)
185185
{

Zend/zend_string.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -370,16 +370,16 @@ ZEND_API void zend_interned_strings_switch_storage(bool request)
370370
# define I_REPLACE_SONAME_FNNAME_ZU(soname, fnname) _vgr00000ZU_ ## soname ## _ ## fnname
371371
#endif
372372

373-
ZEND_API bool ZEND_FASTCALL I_REPLACE_SONAME_FNNAME_ZU(NONE,zend_string_equal_val)(zend_string *s1, zend_string *s2)
373+
ZEND_API bool ZEND_FASTCALL I_REPLACE_SONAME_FNNAME_ZU(NONE,zend_string_equal_val)(const zend_string *s1, const zend_string *s2)
374374
{
375375
return !memcmp(ZSTR_VAL(s1), ZSTR_VAL(s2), ZSTR_LEN(s1));
376376
}
377377

378378
#if defined(__GNUC__) && defined(__i386__)
379-
ZEND_API bool ZEND_FASTCALL zend_string_equal_val(zend_string *s1, zend_string *s2)
379+
ZEND_API bool ZEND_FASTCALL zend_string_equal_val(const zend_string *s1, const zend_string *s2)
380380
{
381-
char *ptr = ZSTR_VAL(s1);
382-
size_t delta = (char*)s2 - (char*)s1;
381+
const char *ptr = ZSTR_VAL(s1);
382+
size_t delta = (const char*)s2 - (const char*)s1;
383383
size_t len = ZSTR_LEN(s1);
384384
zend_ulong ret;
385385

@@ -414,10 +414,10 @@ ZEND_API bool ZEND_FASTCALL zend_string_equal_val(zend_string *s1, zend_string *
414414
}
415415

416416
#elif defined(__GNUC__) && defined(__x86_64__) && !defined(__ILP32__)
417-
ZEND_API bool ZEND_FASTCALL zend_string_equal_val(zend_string *s1, zend_string *s2)
417+
ZEND_API bool ZEND_FASTCALL zend_string_equal_val(const zend_string *s1, const zend_string *s2)
418418
{
419-
char *ptr = ZSTR_VAL(s1);
420-
size_t delta = (char*)s2 - (char*)s1;
419+
const char *ptr = ZSTR_VAL(s1);
420+
size_t delta = (const char*)s2 - (const char*)s1;
421421
size_t len = ZSTR_LEN(s1);
422422
zend_ulong ret;
423423

Zend/zend_string.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -346,21 +346,21 @@ static zend_always_inline bool zend_string_equals_cstr(const zend_string *s1, co
346346

347347
#if defined(__GNUC__) && (defined(__i386__) || (defined(__x86_64__) && !defined(__ILP32__)))
348348
BEGIN_EXTERN_C()
349-
ZEND_API bool ZEND_FASTCALL zend_string_equal_val(zend_string *s1, zend_string *s2);
349+
ZEND_API bool ZEND_FASTCALL zend_string_equal_val(const zend_string *s1, const zend_string *s2);
350350
END_EXTERN_C()
351351
#else
352-
static zend_always_inline bool zend_string_equal_val(zend_string *s1, zend_string *s2)
352+
static zend_always_inline bool zend_string_equal_val(const zend_string *s1, const zend_string *s2)
353353
{
354354
return !memcmp(ZSTR_VAL(s1), ZSTR_VAL(s2), ZSTR_LEN(s1));
355355
}
356356
#endif
357357

358-
static zend_always_inline bool zend_string_equal_content(zend_string *s1, zend_string *s2)
358+
static zend_always_inline bool zend_string_equal_content(const zend_string *s1, const zend_string *s2)
359359
{
360360
return ZSTR_LEN(s1) == ZSTR_LEN(s2) && zend_string_equal_val(s1, s2);
361361
}
362362

363-
static zend_always_inline bool zend_string_equals(zend_string *s1, zend_string *s2)
363+
static zend_always_inline bool zend_string_equals(const zend_string *s1, const zend_string *s2)
364364
{
365365
return s1 == s2 || zend_string_equal_content(s1, s2);
366366
}

0 commit comments

Comments
 (0)