Changeset 1440


Ignore:
Timestamp:
2013-11-05T18:17:07+01:00 (10 months ago)
Author:
moo
Message:

adds ptrmove

Location:
trunk/processor
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/processor/hashtable.m4

    r1416 r1440  
    1 dnl DEF_HASH_TABLE_FUNC(1:name, 2:datatype [, 3:dataname] [, 4:check_function]) 
     1dnl DEF_HASH_TABLE_FUNC(1:name, 2:datatype [, 3:dataname]) 
    22define(`DEF_HASH_TABLE_FUNC', ` 
    33    DEF_STRUCT_P_FUNC(`HashTable', `$1', ` 
     
    1111            int keysize; 
    1212 
    13 #if defined(HARDENING_PATCH_HASH_PROTECT) && HARDENING_PATCH_HASH_PROTECT 
    14             DONE(canary) 
    15 #endif 
    16             DONE(nTableSize) 
    17             DONE(nTableMask) 
    18             DONE(nNumOfElements) 
    19             DONE(nNextFreeElement) 
    20             DONE(pInternalPointer) 
    21             DONE(pListHead) 
    22             DONE(pListTail) 
    23             DONE(arBuckets) 
    24             DONE(pDestructor) 
    25             DONE(persistent) 
    26             DONE(nApplyCount) 
    27             DONE(bApplyProtection) 
    28 #if ZEND_DEBUG 
    29             DONE(inconsistent) 
    30 #endif 
    31 #ifdef IS_UNICODE 
    32             DONE(unicode) 
    33 #endif 
     13            define(`AUTOCHECK_SKIP') 
     14            IFAUTOCHECK(`xc_autocheck_skip = 1;') 
    3415 
    3516            DISABLECHECK(` 
     
    6546 
    6647            efree(buf); 
    67         ', ` 
     48        ', ` dnl IFDASM else 
    6849        dnl }}} 
    6950        Bucket *srcBucket; 
    70         IFCOPY(`Bucket *pnew = NULL, *prev = NULL;') 
     51        IFCOPY(`Bucket *dstBucket = NULL, *prev = NULL;') 
    7152        zend_bool first = 1; 
    7253        dnl only used for copy 
     
    9273        DONE(arBuckets) 
    9374        DISABLECHECK(` 
    94         for (srcBucket = SRC(`pListHead'); srcBucket != NULL; srcBucket = srcBucket->pListNext) { 
    95             ifelse($4, `', `', ` 
    96                 pushdef(`BUCKET', `srcBucket') 
    97                 if ($4 == ZEND_HASH_APPLY_REMOVE) { 
    98                     IFCOPY(`DST(`nNumOfElements') --;') 
    99                     continue; 
    100                 } 
    101                 popdef(`BUCKET') 
    102             ') 
    103  
     75        for (srcBucket = SRCPTR(`Bucket', `pListHead'); srcBucket != NULL; srcBucket = SRCPTR_EX(`Bucket', `srcBucket->pListNext')) { 
     76            IFPTRMOVE(`Bucket *dstBucket = srcBucket;') 
    10477            IFCALCCOPY(`bucketsize = BUCKET_SIZE(srcBucket);') 
    105             ALLOC(pnew, char, bucketsize, , Bucket) 
     78            ALLOC(dstBucket, char, bucketsize, , Bucket) 
    10679            IFCOPY(` 
    10780#ifdef ZEND_ENGINE_2_4 
    108                 memcpy(pnew, srcBucket, BUCKET_HEAD_SIZE(Bucket)); 
     81                memcpy(dstBucket, srcBucket, BUCKET_HEAD_SIZE(Bucket)); 
    10982                if (BUCKET_KEY_SIZE(srcBucket)) { 
    110                     memcpy((char *) (pnew + 1), srcBucket->arKey, BUCKET_KEY_SIZE(srcBucket)); 
    111                     pnew->arKey = (const char *) (pnew + 1); 
     83                    memcpy((char *) (dstBucket + 1), srcBucket->arKey, BUCKET_KEY_SIZE(srcBucket)); 
     84                    dstBucket->arKey = (const char *) (dstBucket + 1); 
    11285                } 
    11386                else { 
    114                     pnew->arKey = NULL; 
     87                    dstBucket->arKey = NULL; 
    11588                } 
    11689#else 
    117                 memcpy(pnew, srcBucket, bucketsize); 
     90                memcpy(dstBucket, srcBucket, bucketsize); 
    11891#endif 
    11992                n = srcBucket->h & SRC(`nTableMask'); 
    120                 /* pnew into hash node chain */ 
    121                 pnew->pLast = NULL; 
    122                 pnew->pNext = DST(`arBuckets[n]'); 
    123                 if (pnew->pNext) { 
    124                     pnew->pNext->pLast = pnew; 
     93                /* dstBucket into hash node chain */ 
     94                dstBucket->pLast = NULL; 
     95                dstBucket->pNext = DST(`arBuckets[n]'); 
     96                if (dstBucket->pNext) { 
     97                    dstBucket->pNext->pLast = dstBucket; 
    12598                } 
    126                 DST(`arBuckets[n]') = pnew; 
    12799            ') 
    128100            IFDPRINT(` 
     
    133105            ') 
    134106            if (sizeof(void *) == sizeof($2)) { 
    135                 IFCOPY(`pnew->pData = &pnew->pDataPtr;') 
    136                 dnl no alloc 
    137                 STRUCT_P_EX(`$2', pnew->pData, (($2*)srcBucket->pData), `', `$3', ` ') 
     107                IFCOPY(`dstBucket->pData = &dstBucket->pDataPtr;') 
     108                dnl $6 = `' to skip alloc 
     109                STRUCT_P_EX(`$2', dstBucket->pData, (($2*)srcBucket->pData), `', `$3', ` ') 
     110                FIXPOINTER_EX(`$2', dstBucket->pData, srcBucket->pData) 
    138111            } 
    139112            else { 
    140                 STRUCT_P_EX(`$2', pnew->pData, (($2*)srcBucket->pData), `', `$3') 
    141                 IFCOPY(`pnew->pDataPtr = NULL;') 
     113                STRUCT_P_EX(`$2', dstBucket->pData, (($2*)srcBucket->pData), `', `$3') 
     114                IFCOPY(`dstBucket->pDataPtr = NULL;') 
    142115            } 
    143116 
    144117            if (first) { 
    145                 IFCOPY(`DST(`pListHead') = pnew;') 
     118                IFCOPY(`DST(`pListHead') = dstBucket;') 
    146119                first = 0; 
    147120            } 
     
    149122            IFCOPY(` 
    150123                /* flat link */ 
    151                 pnew->pListLast = prev; 
    152                 pnew->pListNext = NULL; 
     124                dstBucket->pListLast = prev; 
     125                dstBucket->pListNext = NULL; 
    153126                if (prev) { 
    154                     prev->pListNext = pnew; 
     127                    prev->pListNext = dstBucket; 
    155128                } 
    156                 prev = pnew; 
     129                prev = dstBucket; 
     130            ') 
     131            FIXPOINTER_EX(`Bucket', `dstBucket', `srcBucket') 
     132            IFCOPY(` 
     133                DST(`arBuckets[n]') = dstBucket; 
    157134            ') 
    158135        } 
    159         ') 
    160         dnl TODO: fix pointer on arBuckets[n] 
     136        ') dnl DISABLECHECK 
    161137        FIXPOINTER(Bucket *, arBuckets) 
    162138#ifdef ZEND_ENGINE_2_4 
     
    166142    } 
    167143#endif 
    168         IFCOPY(`DST(`pListTail') = pnew;') DONE(pListTail) 
     144        IFCOPY(`DST(`pListTail') = dstBucket;') DONE(pListTail) 
    169145        IFCOPY(`DST(`pDestructor') = SRC(`pDestructor');') DONE(pDestructor) 
    170146        PROCESS(zend_bool, persistent) 
  • trunk/processor/head.m4

    r1439 r1440  
    115115}; 
    116116/* }}} */ 
     117/* export: typedef struct _xc_ptrmove_t { ptrdiff_t src; ptrdiff_t ptrdiff; } xc_ptrmove_t; :export {{{ */ 
     118/* }}} */ 
    117119/* export: typedef struct _xc_dasm_t { const zend_op_array *active_op_array_src; } xc_dasm_t; :export {{{ */ 
    118120/* }}} */ 
  • trunk/processor/main.m4

    r1439 r1440  
    2424dnl ============ 
    2525define(`INDENT', `xc_dprint_indent(indent);') 
     26dnl }}} 
     27dnl {{{ SRCPTR(1:type, 2:elm) 
     28define(`SRCPTR', `SRCPTR_EX(`$1', `SRC(`$2')')') 
     29define(`SRCPTR_EX', `IFPTRMOVE(`(($1 *) (((char *) $2) + ptrmove->src))', `$2')') 
     30dnl }}} 
     31dnl {{{ SRCPTR(1:type, 2:elm) 
     32define(`DSTPTR', `DSTPTR_EX(`$1', `DST(`$2')')') 
     33define(`DSTPTR_EX', `SRCPTR_EX($@)') 
    2634dnl }}} 
    2735dnl {{{ ALLOC(1:dst, 2:type, 3:count=1, 4:clean=false, 5:realtype=$2) 
     
    123131define(`EXPORT', `define(`EXPORT_$1')') 
    124132dnl }}} 
    125 dnl {{{ FIXPOINTER 
    126 define(`FIXPOINTER', `FIXPOINTER_EX(`$1', `DST(`$2')')') 
    127 define(`FIXPOINTER_EX', `IFSTORE(` 
    128     $2 = ($1 *) processor->shm->handlers->to_readonly(processor->shm, (void *)$2); 
    129 ')') 
    130 define(`UNFIXPOINTER', `UNFIXPOINTER_EX(`$1', `DST(`$2')')') 
    131 define(`UNFIXPOINTER_EX', `IFSTORE(` 
    132     $2 = ($1 *) processor->shm->handlers->to_readwrite(processor->shm, (void *)$2); 
    133 ')') 
     133dnl {{{ FIXPOINTER(1:type, 2:ele) 
     134define(`FIXPOINTER', `FIXPOINTER_EX(`$1', `DST(`$2')', `SRCPTR(`$1', `$2')')') 
     135dnl }}} 
     136dnl {{{ FIXPOINTER_EX(1:type, 2:dst, 3:src) 
     137define(`FIXPOINTER_EX', ` 
     138    IFSTORE(`$2 = ($1 *) processor->shm->handlers->to_readonly(processor->shm, (void *)$2);') 
     139    IFPTRMOVE(`$2 = ($1 *) (((char *) $3) + ptrmove->ptrdiff);') 
     140') 
    134141dnl }}} 
    135142dnl {{{ IFNOTMEMCPY 
     
    139146define(`COPY', `IFNOTMEMCPY(`IFCOPY(`DST(`$1') = SRC(`$1');')')DONE(`$1')') 
    140147dnl }}} 
    141 dnl {{{ COPY_N_EX 
     148dnl {{{ COPY_N_EX(1:count, 2:type, 3:dst) 
    142149define(`COPY_N_EX', ` 
    143150    ALLOC(`DST(`$3')', `$2', `SRC(`$1')') 
     
    147154') 
    148155dnl }}} 
    149 dnl {{{ COPY_N 
    150 define(`COPY_N', `COPY_N_EX(`$1',`$2')DONE(`$1')') 
    151 dnl }}} 
    152156dnl {{{ COPYPOINTER 
    153157define(`COPYPOINTER', `COPY(`$1')') 
    154 dnl }}} 
    155 dnl {{{ COPYARRAY_EX 
    156 define(`COPYARRAY_EX', `IFNOTMEMCPY(`IFCOPY(`memcpy(DST(`$1'), SRC(`$1'), sizeof(DST(`$1')));')')') 
    157 dnl }}} 
    158 dnl {{{ COPYARRAY 
    159 define(`COPYARRAY', `COPYARRAY_EX(`$1',`$2')DONE(`$1')') 
    160158dnl }}} 
    161159dnl {{{ SETNULL_EX 
    162160define(`SETNULL_EX', `IFCOPY(`$1 = NULL;')') 
    163161define(`SETNULL', `SETNULL_EX(`DST(`$1')')DONE(`$1')') 
    164 dnl }}} 
    165 dnl {{{ SETZERO_EX 
    166 define(`SETZERO_EX', `IFCOPY(`$1 = 0;')') 
    167 define(`SETZERO', `SETZERO_EX(`DST(`$1')')DONE(`$1')') 
    168162dnl }}} 
    169163dnl {{{ COPYNULL_EX(1:dst, 2:elm-name) 
     
    243237define(`IFCALCSTORE', `IFSTORE(`$1', `IFCALC(`$1', `$2')')') 
    244238define(`IFRESTORE', `ifelse(PROCESSOR_TYPE, `restore', `$1', `$2')') 
     239define(`IFPTRMOVE', `ifelse(PROCESSOR_TYPE, `ptrmove', `$1', `$2')') 
    245240define(`IFCOPY', `IFSTORE(`$1', `IFRESTORE(`$1', `$2')')') 
    246241define(`IFCALCCOPY', `IFCALC(`$1', `IFCOPY(`$1', `$2')')') 
     
    270265REDEF(`PROCESSOR_TYPE', `store') include(srcdir`/processor/processor.m4') 
    271266REDEF(`PROCESSOR_TYPE', `restore') include(srcdir`/processor/processor.m4') 
     267REDEF(`PROCESSOR_TYPE', `ptrmove') include(srcdir`/processor/processor.m4') 
    272268 
    273269#ifdef HAVE_XCACHE_DPRINT 
  • trunk/processor/process.m4

    r1380 r1440  
    1313    DONE(`$1') 
    1414') 
     15dnl }}} 
     16dnl {{{ PROCESS_CTEXTPOINTER 
     17define(`PROCESS_CTEXTPOINTER', `COPY(`$1')') 
    1518dnl }}} 
    1619define(`PROCESS_xc_ztstring', `dnl {{{ (1:elm) 
     
    7275    , `$1', `xc_op_type',        `PROCESS_xc_op_type(`$2')' 
    7376    , `$1', `xc_opcode',         `PROCESS_xc_opcode(`$2')' 
    74     , `$1', `opcode_handler_t',  `/* is copying enough? */COPY(`$2')' 
     77    , `$1', `opcode_handler_t',  `/* is copying enough? */PROCESS_CTEXTPOINTER(`$2')' 
    7578    , `$1', `xc_md5sum_t',       `COPY(`$2')' 
    7679    , `', `', `m4_errprint(`AUTOCHECK ERROR: Unknown type "$1"')define(`EXIT_PENDING', 1)' 
  • trunk/processor/processor.m4

    r1438 r1440  
    194194                    ', ` 
    195195                        zval_ptr pzv = dst[0]; 
    196                         FIXPOINTER_EX(zval, pzv) 
     196                        FIXPOINTER_EX(zval, pzv, dst[0]) 
    197197                    ') 
    198198                    if (zend_hash_add(&processor->zvalptrs, (char *) &src[0], sizeof(src[0]), (void *) &pzv, sizeof(pzv), NULL) == SUCCESS) { 
     
    210210            IFDPRINT(`INDENT()`'fprintf(stderr, "[%p] ", (void *) src[0]);') 
    211211            STRUCT_P_EX(zval, dst[0], src[0], `[0]', `', ` ') 
    212             FIXPOINTER_EX(zval, dst[0]) 
     212            FIXPOINTER_EX(zval, dst[0], src[0]) 
    213213        } while (0); 
    214214    ') 
     
    336336        ALLOC(dst[0], zend_trait_alias) 
    337337        STRUCT_P_EX(zend_trait_alias, dst[0], src[0], `[0]', `', ` ') 
    338         FIXPOINTER_EX(zend_trait_alias, dst[0]) 
     338        FIXPOINTER_EX(zend_trait_alias, dst[0], src[0]) 
    339339    ') 
    340340    DONE_SIZE(sizeof(zend_trait_alias)) 
     
    349349        ALLOC(dst[0], zend_trait_precedence) 
    350350        STRUCT_P_EX(zend_trait_precedence, dst[0], src[0], `[0]', `', ` ') 
    351         FIXPOINTER_EX(zend_trait_precedence, dst[0]) 
     351        FIXPOINTER_EX(zend_trait_precedence, dst[0], src[0]) 
    352352    ') 
    353353    DONE_SIZE(sizeof(zend_trait_precedence)) 
     
    366366#ifndef ZEND_ENGINE_2 
    367367        /* just copy parent and resolve on install_class */ 
    368         COPY(parent) 
     368        COPYPOINTER(parent) 
    369369#else 
    370370        PROC_CLASS_ENTRY_P(parent) 
     
    458458    /* # NOT DONE */ 
    459459#   ifdef ZEND_ENGINE_2_1 
    460     COPY(serialize_func) 
    461     COPY(unserialize_func) 
    462 #   endif 
    463     COPY(iterator_funcs) 
    464     COPY(create_object) 
    465     COPY(get_iterator) 
    466     COPY(interface_gets_implemented) 
     460    PROCESS_CTEXTPOINTER(serialize_func) 
     461    PROCESS_CTEXTPOINTER(unserialize_func) 
     462#   endif 
     463    PROCESS_CTEXTPOINTER(iterator_funcs) 
     464    PROCESS_CTEXTPOINTER(create_object) 
     465    PROCESS_CTEXTPOINTER(get_iterator) 
     466    PROCESS_CTEXTPOINTER(interface_gets_implemented) 
    467467#   ifdef ZEND_ENGINE_2_3 
    468     COPY(get_static_method) 
     468    PROCESS_CTEXTPOINTER(get_static_method) 
    469469#   endif 
    470470#   ifdef ZEND_ENGINE_2_1 
    471     COPY(serialize) 
    472     COPY(unserialize) 
     471    PROCESS_CTEXTPOINTER(serialize) 
     472    PROCESS_CTEXTPOINTER(unserialize) 
    473473#   endif 
    474474    /* deal with it inside xc_fix_method */ 
    475475    SETNULL(constructor) 
    476     COPY(destructor) 
    477     COPY(clone) 
    478     COPY(__get) 
    479     COPY(__set) 
     476    PROCESS_CTEXTPOINTER(destructor) 
     477    PROCESS_CTEXTPOINTER(clone) 
     478    PROCESS_CTEXTPOINTER(__get) 
     479    PROCESS_CTEXTPOINTER(__set) 
    480480/* should be >5.1 */ 
    481481#   ifdef ZEND_ENGINE_2_1 
    482     COPY(__unset) 
    483     COPY(__isset) 
     482    PROCESS_CTEXTPOINTER(__unset) 
     483    PROCESS_CTEXTPOINTER(__isset) 
    484484#    if defined(ZEND_ENGINE_2_2) || PHP_MAJOR_VERSION >= 6 
    485     COPY(__tostring) 
     485    PROCESS_CTEXTPOINTER(__tostring) 
    486486#    endif 
    487487#   endif 
    488     COPY(__call) 
     488    PROCESS_CTEXTPOINTER(__call) 
    489489#   ifdef ZEND_CALLSTATIC_FUNC_NAME 
    490     COPY(__callstatic) 
     490    PROCESS_CTEXTPOINTER(__callstatic) 
    491491#   endif 
    492492#   ifndef ZEND_ENGINE_2_4 
    493493    /* # NOT DONE */ 
    494     COPY(module) 
     494    PROCESS_CTEXTPOINTER(module) 
    495495#   endif 
    496496#else /* ZEND_ENGINE_2 */ 
    497     COPY(handle_function_call) 
    498     COPY(handle_property_get) 
    499     COPY(handle_property_set) 
     497    PROCESS_CTEXTPOINTER(handle_function_call) 
     498    PROCESS_CTEXTPOINTER(handle_property_get) 
     499    PROCESS_CTEXTPOINTER(handle_property_set) 
    500500#endif 
    501501    dnl must do after SETNULL(constructor) and dst->parent 
     
    674674                assert(Z_OP(DST(`op1')).jmp_addr >= processor->active_op_array_dst->opcodes); 
    675675                assert(Z_OP(DST(`op1')).jmp_addr - processor->active_op_array_dst->opcodes < processor->active_op_array_dst->last); 
    676                 FIXPOINTER_EX(zend_op, `Z_OP(DST(`op1')).jmp_addr') 
     676                FIXPOINTER_EX(zend_op, `Z_OP(DST(`op1')).jmp_addr', `Z_OP(SRC(`op1')).jmp_addr') 
    677677                break; 
    678678 
     
    692692                assert(Z_OP(DST(`op2')).jmp_addr >= processor->active_op_array_dst->opcodes); 
    693693                assert(Z_OP(DST(`op2')).jmp_addr - processor->active_op_array_dst->opcodes < processor->active_op_array_dst->last); 
    694                 FIXPOINTER_EX(zend_op, `Z_OP(DST(`op2')).jmp_addr') 
     694                FIXPOINTER_EX(zend_op, `Z_OP(DST(`op2')).jmp_addr', `Z_OP(SRC(`op2')).jmp_addr') 
    695695                break; 
    696696 
     
    884884#endif 
    885885 
     886    IFSTORE(`pushdef(`FIXPOINTER')') 
    886887    STRUCT_P(zend_uint, refcount) 
    887888    IFSTORE(` 
    888         UNFIXPOINTER(zend_uint, refcount) 
     889        popdef(`FIXPOINTER') 
    889890        DST(`refcount[0]') = 1; 
    890891        FIXPOINTER(zend_uint, refcount) 
     
    944945 
    945946#ifndef ZEND_ENGINE_2_4 
    946     COPY(start_op) 
     947    COPYPOINTER(start_op) 
    947948    PROCESS(int, backpatch_count) 
    948949#endif 
     
    962963#ifdef IS_UNICODE 
    963964    IFRESTORE(` 
    964         COPY(script_encoding) 
     965        COPYPOINTER(script_encoding) 
    965966    ', ` 
    966967        PROC_STRING(script_encoding) 
     
    10511052    PROCESS(zend_uchar, type) 
    10521053#endif 
    1053     IFRESTORE(`COPY(key)', ` 
     1054    IFRESTORE(`COPYPOINTER(key)', ` 
    10541055        PROC_ZSTRING_N(type, key, key_size) 
    10551056    ') 
     
    10811082    PROCESS(zend_uchar, type) 
    10821083#endif 
    1083     IFRESTORE(`COPY(key)', ` 
     1084    IFRESTORE(`COPYPOINTER(key)', ` 
    10841085        PROC_ZSTRING_N(type, key, key_size) 
    10851086    ') 
    10861087    PROCESS(ulong, h) 
    1087     IFRESTORE(`COPY(op_array_info)', ` 
     1088    IFRESTORE(`COPYPOINTER(op_array_info)', ` 
    10881089        STRUCT(xc_op_array_info_t, op_array_info) 
    10891090    ') 
     
    11001101    PROCESS(zend_uchar, type) 
    11011102#endif 
    1102     IFRESTORE(`COPY(key)', ` 
     1103    IFRESTORE(`COPYPOINTER(key)', ` 
    11031104        PROC_ZSTRING_N(type, key, key_size) 
    11041105    ') 
    11051106    PROCESS(ulong, h) 
    11061107    PROCESS(zend_uint, methodinfo_cnt) 
    1107     IFRESTORE(`COPY(methodinfos)', ` 
     1108    IFRESTORE(`COPYPOINTER(methodinfos)', ` 
    11081109        STRUCT_ARRAY(zend_uint, methodinfo_cnt, xc_op_array_info_t, methodinfos) 
    11091110    ') 
     
    11291130    PROCESS(zend_uchar, type) 
    11301131#endif 
    1131     IFRESTORE(`COPY(key)', ` 
     1132    IFRESTORE(`COPYPOINTER(key)', ` 
    11321133        PROC_ZSTRING_L(type, key, key_len) 
    11331134    ') 
     
    11631164    PROCESS(size_t, size) 
    11641165 
    1165     IFRESTORE(`COPY(op_array_info)', ` 
     1166    IFRESTORE(`COPYPOINTER(op_array_info)', ` 
    11661167        STRUCT(xc_op_array_info_t, op_array_info) 
    11671168    ') 
     
    11851186    PROCESS(zend_uint, autoglobal_cnt) 
    11861187    IFRESTORE(` 
    1187         COPY(autoglobals) 
     1188        COPYPOINTER(autoglobals) 
    11881189    ', ` 
    11891190        STRUCT_ARRAY(zend_uint, autoglobal_cnt, xc_autoglobal_t, autoglobals) 
     
    11931194    PROCESS(zend_uint, compilererror_cnt) 
    11941195    IFRESTORE(` 
    1195         COPY(compilererrors) 
     1196        COPYPOINTER(compilererrors) 
    11961197    ', ` 
    11971198        STRUCT_ARRAY(zend_uint, compilererror_cnt, xc_compilererror_t, compilererrors) 
     
    12211222    DISABLECHECK(` 
    12221223        PROCESS(int, entry.name.str.len) 
    1223         IFRESTORE(`COPY(entry.name.str.val)', ` 
     1224        IFRESTORE(`COPYPOINTER(entry.name.str.val)', ` 
    12241225            PROC_STRING_L(entry.name.str.val, entry.name.str.len) 
    12251226        ') 
    12261227    ') 
    12271228 
    1228     IFCALCCOPY(`COPY(php)', `STRUCT_P(xc_entry_data_php_t, php)') 
     1229    IFCALCCOPY(`COPYPOINTER(php)', `STRUCT_P(xc_entry_data_php_t, php)') 
    12291230 
    12301231    IFSTORE(`DST(`refcount') = 0; DONE(refcount)', `PROCESS(long, refcount)') 
     
    12351236 
    12361237    PROCESS(size_t, filepath_len) 
    1237     IFRESTORE(`COPY(filepath)', `PROC_STRING_L(filepath, filepath_len)') 
     1238    IFRESTORE(`COPYPOINTER(filepath)', `PROC_STRING_L(filepath, filepath_len)') 
    12381239    PROCESS(size_t, dirpath_len) 
    1239     IFRESTORE(`COPY(dirpath)', `PROC_STRING_L(dirpath, dirpath_len)') 
     1240    IFRESTORE(`COPYPOINTER(dirpath)', `PROC_STRING_L(dirpath, dirpath_len)') 
    12401241#ifdef IS_UNICODE 
    12411242    PROCESS(int, ufilepath_len) 
    1242     IFRESTORE(`COPY(ufilepath)', `PROC_USTRING_L(ufilepath, ufilepath_len)') 
     1243    IFRESTORE(`COPYPOINTER(ufilepath)', `PROC_USTRING_L(ufilepath, ufilepath_len)') 
    12431244    PROCESS(int, udirpath_len) 
    1244     IFRESTORE(`COPY(udirpath)', `PROC_USTRING_L(udirpath, udirpath_len)') 
     1245    IFRESTORE(`COPYPOINTER(udirpath)', `PROC_USTRING_L(udirpath, udirpath_len)') 
    12451246#endif 
    12461247') 
     
    12641265        PROCESS(int, entry.name.str.len) 
    12651266#endif 
    1266         IFRESTORE(`COPY(entry.name.str.val)', ` 
     1267        IFRESTORE(`COPYPOINTER(entry.name.str.val)', ` 
    12671268#ifdef IS_UNICODE 
    12681269            PROC_ZSTRING_L(name_type, entry.name.uni.val, entry.name.uni.len) 
  • trunk/processor/string.m4

    r1313 r1440  
    6464            DSTPTR = ifdef(`REALPTRTYPE', `(REALPTRTYPE() *)') STRDUP() (SRCPTR, ($3) - 1); 
    6565        ') 
    66         FIXPOINTER_EX(ifdef(`REALPTRTYPE', `REALPTRTYPE()', `PTRTYPE'), DSTPTR) 
     66        FIXPOINTER_EX(ifdef(`REALPTRTYPE', `REALPTRTYPE()', `PTRTYPE'), DSTPTR, SRCPTR) 
    6767        IFDASM(` 
    6868            ifelse(STRTYPE,zstr_uchar, ` 
  • trunk/processor/struct.m4

    r1416 r1440  
    1212        IFSTORE(  `xc_processor_t *processor, $1 *dst, const $1 * const src') 
    1313        IFRESTORE(`xc_processor_t *processor, $1 *dst, const $1 * const src') 
     14        IFPTRMOVE(`const xc_ptrmove_t *ptrmove, $1 * const dst, const $1 * const src') 
    1415        IFDASM(   `xc_dasm_t *dasm, zval *dst, const $1 * const src') 
    1516        TSRMLS_DC 
     
    5960            IFRESTORE(`assert(xc_is_shm(src));') 
    6061            IFCALCSTORE(`assert(!xc_is_shm(src));') 
    61             do { 
    6262        ') 
    6363        ifdef(`SIZEOF_$1', , `m4_errprint(`AUTOCHECK WARN: $1: missing structinfo, dont panic')') 
     
    6565        ifdef(`USEMEMCPY', `IFCOPY(` 
    6666            memcpy(dst, src, sizeof($1)); 
    67             do { 
    6867        ')') 
    6968 
     
    7170            fprintf(stderr, "%s", "{\n"); 
    7271            indent ++; 
    73             { 
    74         ') 
    75         $3`' 
     72        ') 
     73        { 
     74            $3`' 
     75        } 
    7676        IFDPRINT(` 
    77             } 
    7877            indent --; 
    7978            INDENT()fprintf(stderr, "}\n"); 
    8079        ') 
     80 
    8181        IFAUTOCHECK(` 
    8282        /* {{{ autocheck */ 
     
    105105        /* }}} */ 
    106106        ') 
    107         ifdef(`ELEMENTSOF_$1', ` 
    108             pushdef(`ELEMENTS_UNDONE', LIST_DIFF(defn(`ELEMENTSOF_$1'), defn(`ELEMENTS_DONE'))) 
    109             ifelse(defn(`ELEMENTS_UNDONE'), , `m4_errprint(`AUTOCHECK INFO: $1: processor looks good')', ` 
    110                 m4_errprint(`AUTOCHECK ERROR: ====' PROCESSOR_TYPE `$1 =================') 
    111                 m4_errprint(`AUTOCHECK expected:' defn(`ELEMENTSOF_$1')) 
    112                 m4_errprint(`AUTOCHECK missing :' defn(`ELEMENTS_UNDONE')) 
    113                 define(`EXIT_PENDING', 1) 
    114             ') 
    115             popdef(`ELEMENTS_UNDONE') 
    116         ') 
    117         ifdef(`USEMEMCPY', `IFCOPY(` 
    118             } while (0); 
    119         ')') 
    120         IFAUTOCHECK(` 
    121             } while (0); 
    122         ') 
     107        ifdef(`AUTOCHECK_SKIP', `undefine(`AUTOCHECK_SKIP')', ` 
     108            ifdef(`ELEMENTSOF_$1', ` 
     109                pushdef(`ELEMENTS_UNDONE', LIST_DIFF(defn(`ELEMENTSOF_$1'), defn(`ELEMENTS_DONE'))) 
     110                ifelse(defn(`ELEMENTS_UNDONE'), , `m4_errprint(`AUTOCHECK INFO: $1: processor looks good')', ` 
     111                    m4_errprint(`AUTOCHECK ERROR: ====' PROCESSOR_TYPE `$1 =================') 
     112                    m4_errprint(`AUTOCHECK expected:' defn(`ELEMENTSOF_$1')) 
     113                    m4_errprint(`AUTOCHECK missing :' defn(`ELEMENTS_UNDONE')) 
     114                    define(`EXIT_PENDING', 1) 
     115                ') 
     116                popdef(`ELEMENTS_UNDONE') 
     117            ') 
     118        ') 
     119 
    123120        popdef(`ELEMENTS_DONE') 
    124121    } 
     
    146143        IFSTORE(  `processor, $6 $2, $6 $3') 
    147144        IFRESTORE(`processor, $6 $2, $6 $3') 
     145        IFPTRMOVE(` 
     146            ptrmove 
     147            , ifelse(`$6', `', `DSTPTR_EX(`$1', `$2')', `$6 $2') 
     148            , ifelse(`$6', `', `SRCPTR_EX(`$1', `$3')', `$6 $3') 
     149        ') 
    148150        IFDASM(   `dasm, ifdef(`DASM_STRUCT_DIRECT', `dst', `zv'), $6 $3') 
    149151        TSRMLS_CC 
     
    156158') 
    157159    popdef(`FUNC_NAME') 
    158     ifelse(`$6', , `FIXPOINTER_EX(`$1', `$2')') 
     160    ifelse(`$6', , `FIXPOINTER_EX(`$1', `$2', `$3')') 
    159161') 
    160162dnl }}} 
Note: See TracChangeset for help on using the changeset viewer.