Changeset 839 in svn for trunk/processor/processor.m4


Ignore:
Timestamp:
2012-03-25T02:41:55Z (3 years ago)
Author:
Xuefer
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.