Changeset 839


Ignore:
Timestamp:
2012-03-25T04:41:55+02:00 (2 years ago)
Author:
moo
Message:

fix run_time_cache handling, fix SETNULL/COPYNULL mess up

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/processor/processor.m4

    r837 r839  
    314314DEF_STRUCT_P_FUNC(`zend_trait_precedence', , `dnl {{{ 
    315315    STRUCT_P(zend_trait_method_reference, trait_method) 
    316     COPYNULL(exclude_from_classes) 
     316    dnl TODO 
     317    STRUCT_ARRAY(, xc_class_name_t, exclude_from_classes) 
    317318    COPYNULL(function) 
    318319') 
     
    920921#endif 
    921922#ifdef ZEND_ENGINE_2_4 
    922     COPYNULL(run_time_cache) 
    923     COPYNULL(last_cache_slot) 
     923    SETNULL(run_time_cache) 
     924    DISPATCH(int, last_cache_slot) 
    924925#endif 
    925926    } while (0); 
     
    928929#ifdef ZEND_ENGINE_2 
    929930    dnl mark it as -1 on store, and lookup parent on restore 
    930     IFSTORE(`dst->prototype = (processor->active_class_entry_src && src->prototype) ? (zend_function *) -1 : NULL; DONE(prototype)', ` 
    931             IFRESTORE(`do { 
    932                 zend_function *parent; 
    933                 if (src->prototype != NULL 
    934                  && zend_u_hash_find(&(processor->active_class_entry_dst->parent->function_table), 
    935                         UG(unicode) ? IS_UNICODE : IS_STRING, 
    936                         src->function_name, xc_zstrlen(UG(unicode) ? IS_UNICODE : IS_STRING, src->function_name) + 1, 
    937                         (void **) &parent) == SUCCESS) { 
    938                     /* see do_inherit_method_check() */ 
    939                     if ((parent->common.fn_flags & ZEND_ACC_ABSTRACT)) { 
    940                       dst->prototype = parent; 
    941                     } else if (!(parent->common.fn_flags & ZEND_ACC_CTOR) || (parent->common.prototype && (parent->common.prototype->common.scope->ce_flags & ZEND_ACC_INTERFACE))) { 
    942                         /* ctors only have a prototype if it comes from an interface */ 
    943                         dst->prototype = parent->common.prototype ? parent->common.prototype : parent; 
    944                     } 
    945                     else { 
    946                         dst->prototype = NULL; 
    947                     } 
     931    IFSTORE(`dst->prototype = (processor->active_class_entry_src && src->prototype) ? (zend_function *) -1 : NULL;', ` 
     932        IFRESTORE(`do { 
     933            zend_function *parent; 
     934            if (src->prototype != NULL 
     935             && zend_u_hash_find(&(processor->active_class_entry_dst->parent->function_table), 
     936                    UG(unicode) ? IS_UNICODE : IS_STRING, 
     937                    src->function_name, xc_zstrlen(UG(unicode) ? IS_UNICODE : IS_STRING, src->function_name) + 1, 
     938                    (void **) &parent) == SUCCESS) { 
     939                /* see do_inherit_method_check() */ 
     940                if ((parent->common.fn_flags & ZEND_ACC_ABSTRACT)) { 
     941                    dst->prototype = parent; 
     942                } else if (!(parent->common.fn_flags & ZEND_ACC_CTOR) || (parent->common.prototype && (parent->common.prototype->common.scope->ce_flags & ZEND_ACC_INTERFACE))) { 
     943                    /* ctors only have a prototype if it comes from an interface */ 
     944                    dst->prototype = parent->common.prototype ? parent->common.prototype : parent; 
    948945                } 
    949946                else { 
    950947                    dst->prototype = NULL; 
    951948                } 
    952                 DONE(prototype) 
    953             } while (0); 
    954             ', ` 
    955                 COPYNULL(prototype) 
    956             ') 
    957     ') 
     949            } 
     950            else { 
     951                dst->prototype = NULL; 
     952            } 
     953        } while (0); 
     954        ') 
     955    ') 
     956    DONE(prototype) 
    958957 
    959958#endif 
Note: See TracChangeset for help on using the changeset viewer.