Changeset 1440 in svn for trunk


Ignore:
Timestamp:
2013-11-05T18:17:07+01:00 (19 months ago)
Author:
Xuefer
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.