Changeset 196
- Timestamp:
- 09/24/2006 08:02:43 AM (2 years ago)
- Location:
- trunk
- Files:
-
- 4 modified
-
processor/hashtable.m4 (modified) (2 diffs)
-
processor/head.m4 (modified) (1 diff)
-
processor/processor.m4 (modified) (2 diffs)
-
xcache.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/processor/hashtable.m4
r58 r196 1 dnl DEF_HASH_TABLE_FUNC(1:name, 2:datatype [, 3:dataname] )1 dnl DEF_HASH_TABLE_FUNC(1:name, 2:datatype [, 3:dataname] [, 4:check_function]) 2 2 define(`DEF_HASH_TABLE_FUNC', ` 3 3 DEF_STRUCT_P_FUNC(`HashTable', `$1', ` … … 94 94 95 95 for (b = src->pListHead; b != NULL; b = b->pListNext) { 96 ifelse(`$4', `', `', ` 97 pushdef(`BUCKET', `b') 98 if ($4 == ZEND_HASH_APPLY_REMOVE) { 99 IFCOPY(`dst->nNumOfElements --;') 100 continue; 101 } 102 popdef(`BUCKET') 103 ') 104 96 105 IFCALCCOPY(`bucketsize = BUCKET_SIZE(b);') 97 106 ALLOC(pnew, char, bucketsize, , Bucket) -
trunk/processor/head.m4
r195 r196 247 247 } 248 248 /* }}} */ 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 /* }}} */ 249 296 #endif 250 297 /* {{{ call op_array ctor handler */ -
trunk/processor/processor.m4
r194 r196 65 65 dnl }}} 66 66 DEF_HASH_TABLE_FUNC(`HashTable_zval_ptr', `zval_ptr') 67 DEF_HASH_TABLE_FUNC(`HashTable_zval_ptr_static_member_check', `zval_ptr', , `xc_hash_static_member_check(processor, BUCKET TSRMLS_CC)') 67 68 #ifdef HAVE_XCACHE_CONSTANT 68 69 DEF_HASH_TABLE_FUNC(`HashTable_zend_constant', `zend_constant') … … 297 298 STRUCT(HashTable, properties_info, HashTable_zend_property_info) 298 299 # ifdef ZEND_ENGINE_2_1 299 STRUCT(HashTable, default_static_members, HashTable_zval_ptr)300 STRUCT(HashTable, default_static_members, IFSTORE(HashTable_zval_ptr_static_member_check, HashTable_zval_ptr)) 300 301 IFCOPY(`dst->static_members = &dst->default_static_members;') 302 IFRESTORE(`if (dst->parent) xc_fix_static_members(processor, dst TSRMLS_CC);') 301 303 DONE(static_members) 302 304 # else 303 STRUCT_P(HashTable, static_members, HashTable_zval_ptr)305 STRUCT_P(HashTable, static_members, IFSTORE(HashTable_zval_ptr_static_member_check, HashTable_zval_ptr)) 304 306 # endif 305 307 STRUCT(HashTable, constants_table, HashTable_zval_ptr) -
trunk/xcache.c
r190 r196 2462 2462 static startup_func_t xc_last_ext_startup; 2463 2463 static zend_llist_element *xc_llist_element; 2464 static xc_ptr_compare_func(void *p1, void *p2) /* {{{ */2464 static int xc_ptr_compare_func(void *p1, void *p2) /* {{{ */ 2465 2465 { 2466 2466 return p1 == p2;

