| | 249 | static int xc_hash_static_member_check(xc_processor_t *processor, Bucket *b TSRMLS_DC) /* {{{ */ |
| | 250 | { |
| | 251 | zend_class_entry *src = processor->active_class_entry_src; |
| | 252 | if (src->parent) { |
| | 253 | zval **srczv; |
| | 254 | if (zend_hash_quick_find(CE_STATIC_MEMBERS(src), b->arKey, b->nKeyLength, b->h, (void **) &srczv) == SUCCESS) { |
| | 255 | zval **zv = (zval **) b->pData; |
| | 256 | if (*srczv == *zv) { |
| | 257 | return ZEND_HASH_APPLY_REMOVE; |
| | 258 | } |
| | 259 | } |
| | 260 | } |
| | 261 | return ZEND_HASH_APPLY_KEEP; |
| | 262 | } |
| | 263 | /* }}} */ |
| | 264 | /* fix static members on restore */ |
| | 265 | static void inherit_static_prop(zval **p) /* {{{ */ |
| | 266 | { |
| | 267 | (*p)->refcount++; |
| | 268 | (*p)->is_ref = 1; |
| | 269 | } |
| | 270 | /* }}} */ |
| | 271 | static void xc_fix_static_members(xc_processor_t *processor, zend_class_entry *dst TSRMLS_DC) /* {{{ */ |
| | 272 | { |
| | 273 | zend_class_entry *parent_ce = dst->parent; |
| | 274 | if (parent_ce->type != dst->type) { |
| | 275 | /* User class extends internal class */ |
| | 276 | zend_update_class_constants(parent_ce TSRMLS_CC); |
| | 277 | zend_hash_merge(&dst->default_static_members, CE_STATIC_MEMBERS(parent_ce), (void (*)(void *)) inherit_static_prop, NULL, sizeof(zval *), 0); |
| | 278 | } |
| | 279 | else { |
| | 280 | zend_hash_merge(&dst->default_static_members, &parent_ce->default_static_members, (void (*)(void *)) inherit_static_prop, NULL, sizeof(zval *), 0); |
| | 281 | } |
| | 282 | |
| | 283 | /* |
| | 284 | HashPosition pos; |
| | 285 | HashTable *pmembers = CE_STATIC_MEMBERS(dst->parent); |
| | 286 | zval **zv; |
| | 287 | for (zend_hash_internal_pointer_reset_ex(pmembers, &pos); |
| | 288 | zend_hash_get_current_data_ex(pmembers, (void **) &zv, &pos) == SUCCESS; |
| | 289 | zend_hash_move_forward_ex(pmembers, &pos)) { |
| | 290 | if (zend_hash_quick_find(parent->static_members, p->arKey, p->nKeyLength, p->h, &pprop.ptr) == SUCCESS) { |
| | 291 | } |
| | 292 | } |
| | 293 | */ |
| | 294 | } |
| | 295 | /* }}} */ |