Changeset 233 for trunk/processor/head.m4
- Timestamp:
- 10/10/2006 02:46:00 AM (7 years ago)
- Files:
-
- 1 modified
-
trunk/processor/head.m4 (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/processor/head.m4
r230 r233 62 62 HashTable zvalptrs; 63 63 zend_bool reference; /* enable if to deal with reference */ 64 zend_bool have_references; 64 65 const xc_entry_t *xce_src; 65 66 const xc_entry_t *xce_dst; … … 261 262 } 262 263 /* }}} */ 263 static int xc_hash_static_member_check(xc_processor_t *processor, Bucket *b TSRMLS_DC) /* {{{ */ 264 { 265 const zend_class_entry *src = processor->active_class_entry_src; 266 if (src->parent) { 267 zval **parentzv; 268 if (zend_u_hash_quick_find(CE_STATIC_MEMBERS(src->parent), BUCKET_KEY_TYPE(b), ZSTR(BUCKET_KEY_S(b)), b->nKeyLength, b->h, (void **) &parentzv) == SUCCESS) { 269 zval **zv = (zval **) b->pData; 270 if (*parentzv == *zv) { 271 return ZEND_HASH_APPLY_REMOVE; 272 } 273 } 274 } 275 return ZEND_HASH_APPLY_KEEP; 276 } 277 /* }}} */ 278 /* fix static members on restore */ 279 static void inherit_static_prop(zval **p) /* {{{ */ 280 { 281 /* already set */ 282 #if 0 283 (*p)->refcount++; 284 (*p)->is_ref = 1; 285 #endif 286 } 287 /* }}} */ 288 static void xc_fix_static_members(xc_processor_t *processor, zend_class_entry *dst TSRMLS_DC) /* {{{ */ 289 { 290 zend_hash_merge(&dst->default_static_members, &dst->parent->default_static_members, (void (*)(void *)) inherit_static_prop, NULL, sizeof(zval *), 0); 291 } 292 /* }}} */ 293 #endif 294 int xc_hash_reset_zval_refcount_applyer(void *pDest TSRMLS_DC) /* {{{ */ 295 { 296 zval **zv = (zval **) pDest; 297 ZVAL_REFCOUNT(*zv) = 1; 298 return ZEND_HASH_APPLY_KEEP; 299 } 300 /* }}} */ 301 static void xc_hash_reset_zval_refcount(HashTable *hash TSRMLS_DC) /* {{{ */ 302 { 303 zend_hash_apply(hash, xc_hash_reset_zval_refcount_applyer TSRMLS_CC); 304 } 305 /* }}} */ 264 #endif 306 265 /* {{{ call op_array ctor handler */ 307 266 extern zend_bool xc_have_op_array_ctor; … … 320 279 321 280 memset(&processor, 0, sizeof(processor)); 322 if (src->type == XC_TYPE_VAR) { 323 processor.reference = 1; 324 } 281 processor.reference = 1; 325 282 326 283 IFASSERT(`xc_stack_init(&processor.allocsizes);') … … 343 300 } 344 301 src->size = processor.size; 302 src->have_references = processor.have_references; 345 303 346 304 IFASSERT(`xc_stack_reverse(&processor.allocsizes);') … … 394 352 memset(&processor, 0, sizeof(processor)); 395 353 processor.readonly_protection = readonly_protection; 396 354 if (src->have_references) { 355 processor.reference = 1; 356 } 357 358 if (processor.reference) { 359 zend_hash_init(&processor.zvalptrs, 0, NULL, NULL, 0); 360 } 397 361 xc_restore_xc_entry_t(&processor, dst, src TSRMLS_CC); 362 if (processor.reference) { 363 zend_hash_destroy(&processor.zvalptrs); 364 } 398 365 return dst; 399 366 } 400 367 /* }}} */ 401 /* export: zval *xc_processor_restore_zval(zval *dst, const zval *src TSRMLS_DC); :export {{{ */402 zval *xc_processor_restore_zval(zval *dst, const zval *src TSRMLS_DC) {368 /* export: zval *xc_processor_restore_zval(zval *dst, const zval *src, zend_bool have_references TSRMLS_DC); :export {{{ */ 369 zval *xc_processor_restore_zval(zval *dst, const zval *src, zend_bool have_references TSRMLS_DC) { 403 370 xc_processor_t processor; 404 371 405 372 memset(&processor, 0, sizeof(processor)); 406 processor.reference = 1; 407 408 zend_hash_init(&processor.zvalptrs, 0, NULL, NULL, 0); 409 dnl fprintf(stderr, "mark[%p] = %p\n", src, dst); 410 zend_hash_add(&processor.zvalptrs, (char *)src, sizeof(src), (void*)&dst, sizeof(dst), NULL); 373 processor.reference = have_references; 374 375 if (processor.reference) { 376 zend_hash_init(&processor.zvalptrs, 0, NULL, NULL, 0); 377 dnl fprintf(stderr, "mark[%p] = %p\n", src, dst); 378 zend_hash_add(&processor.zvalptrs, (char *)src, sizeof(src), (void*)&dst, sizeof(dst), NULL); 379 } 411 380 xc_restore_zval(&processor, dst, src TSRMLS_CC); 412 zend_hash_destroy(&processor.zvalptrs); 381 if (processor.reference) { 382 zend_hash_destroy(&processor.zvalptrs); 383 } 413 384 414 385 return dst;

