source: trunk/processor/dispatch.m4 @ 840

Last change on this file since 840 was 840, checked in by moo, 2 years ago

copy md5 digest correctly in notmemcpy mode

  • Property svn:eol-style set to native
File size: 1.9 KB
RevLine 
[1]1dnl DISPATCH(1:type, 2:elm)
2define(`DISPATCH', `
3    DBG(`$0($*)')
[484]4    assert(sizeof($1) == sizeof(src->$2));
[1]5    ifelse(
6        `$1', `zend_bool',        `PROC_INT(`$2', `u',  `$1')'
7    , `$1', `zend_uchar',       `PROC_INT(`$2', `u',  `$1')'
8    , `$1', `char',             `PROC_INT(`$2', `d',  `$1')'
9    , `$1', `int32_t',          `PROC_INT(`$2', `d',  `$1')'
10    , `$1', `unsigned char',    `PROC_INT(`$2', `u',  `$1')'
11    , `$1', `zend_uint',        `PROC_INT(`$2', `u',  `$1')'
12    , `$1', `uint',             `PROC_INT(`$2', `u',  `$1')'
13    , `$1', `unsigned int',     `PROC_INT(`$2', `u',  `$1')'
14    , `$1', `zend_ulong',       `PROC_INT(`$2', `lu', `$1')'
15    , `$1', `ulong',            `PROC_INT(`$2', `lu', `$1')'
16    , `$1', `size_t',           `PROC_INT(`$2', `u', `$1')'
17    , `$1', `long',             `PROC_INT(`$2', `ld', `$1')'
18    , `$1', `time_t',           `PROC_INT(`$2', `ld', `$1')'
19    , `$1', `zend_ushort',      `PROC_INT(`$2', `hu', `$1')'
20    , `$1', `int',              `PROC_INT(`$2', `d',  `$1')'
21    , `$1', `double',           `PROC_INT(`$2', `f',  `$1')'
22    , `$1', `opcode_handler_t', `/* is copying enough? */COPY(`$2')'
23    , `$1', `zval_data_type',   `PROC_INT(`$2', `u',  `$1')'
24    , `$1', `xc_entry_type_t',  `PROC_INT(`$2', `d',  `$1')'
25    , `$1', `xc_hash_value_t',  `PROC_INT(`$2', `lu', `$1')'
[840]26    , `$1', `xc_md5sum_t',      `COPY(`$2')'
[1]27    , `', `', `m4_errprint(`Unknown type "$1"')'
28    )
29')
[662]30dnl {{{ DISPATCH_ARRAY(1:count, 2:type, 3:elm)
31define(`DISPATCH_ARRAY', `
32    if (src->$3) {
33        int i;
34        IFDASM(`
35            zval *arr;
36            ALLOC_INIT_ZVAL(arr);
37            array_init(arr);
38            for (i = 0; i < src->$1; i ++) {
39                ifelse(
40                    `$2', `zend_bool', `add_assoc_bool_ex(arr, ZEND_STRS("$3"), src->$3[i] ? 1 : 0);'
[840]41                , `', `', `add_next_index_long(arr, src->$3[i]);')
[662]42            }
43            add_assoc_zval_ex(dst, ZEND_STRS("$3"), arr);
44        ', `
45            COPY_N_EX($@)
46            for (i = 0; i < src->$1; i ++) {
47                DISABLECHECK(`
48                    DISPATCH(`$2', `$3[i]', `$4')
49                ')
50            }
51        ')dnl IFDASM
52        DONE(`$3')
53    }
54    else {
55        COPYNULL(`$3')
56    }
57')
58dnl }}}
Note: See TracBrowser for help on using the repository browser.