Changeset 835


Ignore:
Timestamp:
2012-03-25T03:58:22+02:00 (3 years ago)
Author:
moo
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.