Changeset 835 in svn


Ignore:
Timestamp:
2012-03-25T01:58:22Z (3 years ago)
Author:
Xuefer
Message:

support for null end STRUCT_ARRAY

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/processor/struct.m4

    r740 r835  
    187187            ALLOC_INIT_ZVAL(arr);
    188188            array_init(arr);
    189             for (LOOPCOUNTER = 0; LOOPCOUNTER < src->$1; LOOPCOUNTER ++) {
     189
     190            LOOPCOUNTER = 0;
     191            while (
     192            ifelse(`$1', `', `src->$3[LOOPCOUNTER]',
     193            `', `', `LOOPCOUNTER < src->$1')
     194            ) {
    190195                zval *zv;
    191196
     
    194199                FUNC_NAME (zv, &(src->$3[LOOPCOUNTER]) TSRMLS_CC);
    195200                add_next_index_zval(arr, zv);
     201
     202                ++LOOPCOUNTER;
    196203            }
    197204            add_assoc_zval_ex(dst, ZEND_STRS("$3"), arr);
    198205        ', `
    199             ALLOC(`dst->$3', `$2', `src->$1')
     206            dnl find count with NULL
     207            ifelse(`$1', `', `
     208                int count;
     209                for (count = 0; src->$3[count]; ++count) {
     210                    /* just count */
     211                }
     212                ++count;
     213                pushdef(`STRUCT_COUNT', `count')
     214            ',
     215            `', `', `pushdef(`STRUCT_COUNT', `src->$1')')
     216            ALLOC(`dst->$3', `$2', `STRUCT_COUNT')
    200217            ifdef(`AFTER_ALLOC', AFTER_ALLOC)
    201             for (LOOPCOUNTER = 0; LOOPCOUNTER < src->$1; LOOPCOUNTER ++) {
     218
     219            LOOPCOUNTER = 0;
     220            while (
     221            ifelse(`$1', `', `src->$3[LOOPCOUNTER]',
     222            `', `', `LOOPCOUNTER < src->$1')
     223            ) {
    202224                DISABLECHECK(`
    203225                    STRUCT(`$2', `$3[LOOPCOUNTER]', `$4')
    204226                ')
     227
     228                ++LOOPCOUNTER;
    205229            }
     230            dnl tailing NULL
     231            ifelse(`$1', `', `IFCOPY(`dst->$3[LOOPCOUNTER] = NULL;')')
     232            popdef(`STRUCT_COUNT')
    206233        ')dnl IFDASM
    207234        DONE(`$3')
Note: See TracChangeset for help on using the changeset viewer.