Changeset 311 in svn for trunk/processor


Ignore:
Timestamp:
2006-12-09T16:27:03Z (13 years ago)
Author:
Xuefer
Message:

restruct cached compile, add md5 table to recognize and merge file with same content

Location:
trunk/processor
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/processor/dispatch.m4

    r1 r311  
    2323    , `$1', `xc_entry_type_t',  `PROC_INT(`$2', `d',  `$1')'
    2424    , `$1', `xc_hash_value_t',  `PROC_INT(`$2', `lu', `$1')'
     25    , `$1', `xc_md5sum_t',      `/* is copying enough? */COPY(`$2')'
    2526    , `', `', `m4_errprint(`Unknown type "$1"')'
    2627    )
  • trunk/processor/head.m4

    r300 r311  
    6565    zend_bool reference; /* enable if to deal with reference */
    6666    zend_bool have_references;
    67     const xc_entry_t *xce_src;
    68     const xc_entry_t *xce_dst;
     67    const xc_entry_data_php_t *php_src;
     68    const xc_entry_data_php_t *php_dst;
     69    const xc_cache_t          *cache;
    6970    const zend_class_entry *cache_ce;
    7071    zend_uint cache_class_num;
     
    186187static zend_ulong xc_get_class_num(xc_processor_t *processor, zend_class_entry *ce) {
    187188    zend_ulong i;
    188     const xc_entry_t *xce = processor->xce_src;
     189    const xc_entry_data_php_t *php = processor->php_src;
    189190    zend_class_entry *ceptr;
    190191
     
    192193        return processor->cache_class_num;
    193194    }
    194     for (i = 0; i < xce->data.php->classinfo_cnt; i ++) {
    195         ceptr = CestToCePtr(xce->data.php->classinfos[i].cest);
     195    for (i = 0; i < php->classinfo_cnt; i ++) {
     196        ceptr = CestToCePtr(php->classinfos[i].cest);
    196197        if (ZCEP_REFCOUNT_PTR(ceptr) == ZCEP_REFCOUNT_PTR(ce)) {
    197198            processor->cache_ce = ceptr;
     
    209210    /* must be parent or currrent class */
    210211    assert(class_num <= processor->active_class_num);
    211     return CestToCePtr(processor->xce_dst->data.php->classinfos[class_num - 1].cest);
     212    return CestToCePtr(processor->php_dst->classinfos[class_num - 1].cest);
    212213}
    213214#endif
     
    275276/* }}} */
    276277dnl ================ export API
    277 /* export: xc_entry_t *xc_processor_store_xc_entry_t(xc_entry_t *src TSRMLS_DC); :export {{{ */
    278 xc_entry_t *xc_processor_store_xc_entry_t(xc_entry_t *src TSRMLS_DC) {
    279     xc_entry_t *dst;
     278define(`DEFINE_STORE_API', `
     279/* export: $1 *xc_processor_store_$1($1 *src TSRMLS_DC); :export {{{ */
     280$1 *xc_processor_store_$1($1 *src TSRMLS_DC) {
     281    $1 *dst;
    280282    xc_processor_t processor;
    281283
    282284    memset(&processor, 0, sizeof(processor));
    283285    processor.reference = 1;
     286    processor.cache = src->cache;
    284287
    285288    IFASSERT(`xc_stack_init(&processor.allocsizes);')
     
    295298        processor.size = ALIGN(processor.size + sizeof(src[0]));
    296299
    297         xc_calc_xc_entry_t(&processor, src TSRMLS_CC);
     300        xc_calc_$1(&processor, src TSRMLS_CC);
    298301        if (processor.reference) {
    299302            zend_hash_destroy(&processor.zvalptrs);
     
    302305    }
    303306    src->size = processor.size;
    304     src->have_references = processor.have_references;
     307    ifelse(`$1', `xc_entry_t', `
     308        src->data.var->have_references = processor.have_references;
     309    ', `
     310        src->have_references = processor.have_references;
     311    ')
    305312
    306313    IFASSERT(`xc_stack_reverse(&processor.allocsizes);')
     
    314321
    315322        /* mem :) */
    316         processor.p = (char *) src->cache->mem->handlers->malloc(src->cache->mem, processor.size);
     323        processor.p = (char *) processor.cache->mem->handlers->malloc(processor.cache->mem, processor.size);
    317324        if (processor.p == NULL) {
    318325            dst = NULL;
     
    323330
    324331        /* allocate */
    325         dst = (xc_entry_t *) processor.p;
     332        dst = ($1 *) processor.p;
    326333        processor.p = (char *) ALIGN(processor.p + sizeof(dst[0]));
    327334
    328         xc_store_xc_entry_t(&processor, dst, src TSRMLS_CC);
     335        xc_store_$1(&processor, dst, src TSRMLS_CC);
    329336        IFASSERT(` {
    330337            int real = processor.p - oldp;
     
    348355}
    349356/* }}} */
    350 /* export: xc_entry_t *xc_processor_restore_xc_entry_t(xc_entry_t *dst, const xc_entry_t *src, zend_bool readonly_protection TSRMLS_DC); :export {{{ */
    351 xc_entry_t *xc_processor_restore_xc_entry_t(xc_entry_t *dst, const xc_entry_t *src, zend_bool readonly_protection TSRMLS_DC) {
     357')
     358DEFINE_STORE_API(`xc_entry_t')
     359DEFINE_STORE_API(`xc_entry_data_php_t')
     360/* export: xc_entry_t *xc_processor_restore_xc_entry_t(xc_entry_t *dst, const xc_entry_t *src TSRMLS_DC); :export {{{ */
     361xc_entry_t *xc_processor_restore_xc_entry_t(xc_entry_t *dst, const xc_entry_t *src TSRMLS_DC) {
     362    xc_processor_t processor;
     363
     364    memset(&processor, 0, sizeof(processor));
     365    xc_restore_xc_entry_t(&processor, dst, src TSRMLS_CC);
     366
     367    return dst;
     368}
     369/* }}} */
     370/* export: xc_entry_data_php_t *xc_processor_restore_xc_entry_data_php_t(xc_entry_data_php_t *dst, const xc_entry_data_php_t *src, zend_bool readonly_protection TSRMLS_DC); :export {{{ */
     371xc_entry_data_php_t *xc_processor_restore_xc_entry_data_php_t(xc_entry_data_php_t *dst, const xc_entry_data_php_t *src, zend_bool readonly_protection TSRMLS_DC) {
    352372    xc_processor_t processor;
    353373
    354374    memset(&processor, 0, sizeof(processor));
    355375    processor.readonly_protection = readonly_protection;
     376    /* this function is used for php data only */
    356377    if (src->have_references) {
    357378        processor.reference = 1;
     
    361382        zend_hash_init(&processor.zvalptrs, 0, NULL, NULL, 0);
    362383    }
    363     xc_restore_xc_entry_t(&processor, dst, src TSRMLS_CC);
     384    xc_restore_xc_entry_data_php_t(&processor, dst, src TSRMLS_CC);
    364385    if (processor.reference) {
    365386        zend_hash_destroy(&processor.zvalptrs);
  • trunk/processor/main.m4

    r307 r311  
    136136define(`FIXPOINTER', `FIXPOINTER_EX(`$1', `dst->$2')')
    137137define(`FIXPOINTER_EX', `IFSTORE(`
    138     $2 = ($1 *) processor->xce_src->cache->shm->handlers->to_readonly(processor->xce_src->cache->shm, (char *)$2);
     138    $2 = ($1 *) processor->cache->shm->handlers->to_readonly(processor->cache->shm, (char *)$2);
    139139')')
    140140define(`UNFIXPOINTER', `UNFIXPOINTER_EX(`$1', `dst->$2')')
    141141define(`UNFIXPOINTER_EX', `IFSTORE(`
    142     $2 = ($1 *) processor->xce_src->cache->shm->handlers->to_readwrite(processor->xce_src->cache->shm, (char *)$2);
     142    $2 = ($1 *) processor->cache->shm->handlers->to_readwrite(processor->cache->shm, (char *)$2);
    143143')')
    144144dnl }}}
    145145dnl {{{ COPY
    146146define(`COPY', `IFNOTMEMCPY(`IFCOPY(`dst->$1 = src->$1;')')DONE(`$1')')
     147dnl }}}
     148dnl {{{ COPYPOINTER
     149define(`COPYPOINTER', `COPY(`$1')')
     150dnl }}}
     151dnl {{{ COPYARRAY
     152define(`COPYARRAY', `IFNOTMEMCPY(`IFCOPY(`memcpy(dst->$1, src->$1, sizeof(dst->$1));')')DONE(`$1')')
    147153dnl }}}
    148154dnl {{{ SETNULL_EX
     
    223229EXPORT(`xc_funcinfo_t')
    224230EXPORT(`xc_entry_t')
     231EXPORT(`xc_entry_data_php_t')
    225232EXPORT(`zval')
    226233
  • trunk/processor/processor.m4

    r310 r311  
    479479    dnl readonly_protection=on
    480480    dnl main op_array && have early binding
    481     if (!processor->readonly_protection && !(src == processor->xce_src->data.php->op_array && processor->xce_src->data.php->have_early_binding)) {
     481    if (!processor->readonly_protection && !(src == processor->php_src->op_array && processor->php_src->have_early_binding)) {
    482482        /* really fast shallow copy */
    483483        memcpy(dst, src, sizeof(src[0]));
     
    719719    zend_uint i;
    720720
    721 #ifdef HAVE_INODE
    722     DISPATCH(int, device)
    723     DISPATCH(int, inode)
    724 #endif
     721    IFCOPY(`
     722        processor->php_dst = dst;
     723        processor->php_src = src;
     724    ')
     725
     726    DISPATCH(xc_hash_value_t, hvalue)
     727    /* skip */
     728    DONE(next)
     729    COPY(cache)
     730    DISPATCH(xc_md5sum_t, md5)
     731    DISPATCH(zend_ulong, refcount)
     732
    725733    DISPATCH(size_t, sourcesize)
    726 
    727     DISPATCH(time_t, mtime)
     734    DISPATCH(zend_ulong, hits)
     735    DISPATCH(size_t, size)
    728736
    729737    STRUCT_P(zend_op_array, op_array)
     
    750758    DISPATCH(zend_bool, have_early_binding)
    751759    popdef(`BEFORE_LOOP')
     760    DISPATCH(zend_bool, have_references)
    752761')
    753762dnl }}}
     
    755764    IFDPRINT(`INDENT()`'fprintf(stderr, "zval:value");')
    756765    STRUCT_P_EX(zval_ptr, dst->value, src->value, `value', `', `&')
     766    DISPATCH(zend_bool, have_references)
    757767    DONE(value)
    758768')
     
    760770dnl {{{ xc_entry_t
    761771DEF_STRUCT_P_FUNC(`xc_entry_t', , `
    762     IFCOPY(`
    763         processor->xce_dst = dst;
    764         processor->xce_src = src;
    765     ')
    766772    DISPATCH(xc_entry_type_t, type)
    767773    DISPATCH(size_t, size)
     
    809815        switch (src->type) {
    810816        case XC_TYPE_PHP:
    811             STRUCT_P(xc_entry_data_php_t, data.php)
     817            IFCALCCOPY(`DONE(data.php)', `STRUCT_P(xc_entry_data_php_t, data.php)')
    812818            break;
     819
    813820        case XC_TYPE_VAR:
    814821            STRUCT_P(xc_entry_data_var_t, data.var)
    815822            break;
     823
    816824        default:
    817825            assert(0);
     
    820828    DONE(data)
    821829    dnl }}}
    822     DISPATCH(zend_bool, have_references)
     830    DISPATCH(time_t, mtime)
     831#ifdef HAVE_INODE
     832    DISPATCH(int, device)
     833    DISPATCH(int, inode)
     834#endif
    823835')
    824836dnl }}}
Note: See TracChangeset for help on using the changeset viewer.