source: trunk/processor/process.m4 @ 844

Last change on this file since 844 was 844, checked in by moo, 3 years ago

kill some warning

  • Property svn:eol-style set to native
File size: 4.4 KB
RevLine 
[843]1define(`PROCESS_SCALAR', `dnl {{{ (1:elm, 2:format=%d, 3:type=)
2    IFNOTMEMCPY(`IFCOPY(`DST(`$1') = SRC(`$1');')')
3    IFDPRINT(`
4        INDENT()
5        fprintf(stderr, "$3:$1:\t%ifelse(`$2',`',`d',`$2')\n", SRC(`$1'));
6    ')
7    IFDASM(`
8        ifelse(
9            `$3', `zend_bool', `add_assoc_bool_ex(dst, ZEND_STRS("$1"), SRC(`$1') ? 1 : 0);'
10        , `', `', `add_assoc_long_ex(dst, ZEND_STRS("$1"), SRC(`$1'));'
11        )
12    ')
13    DONE(`$1')
14')
15dnl }}}
16define(`PROCESS_xc_ztstring', `dnl {{{ (1:elm)
17    PROC_STRING(`$1')
18')
19dnl }}}
20define(`PROCESS_zval_data_type', `dnl {{{ (1:elm)
21    IFDPRINT(`
22        INDENT()
23        fprintf(stderr, ":$1:\t%d %s\n", SRC(`$1'), xc_get_data_type(SRC(`$1')));
24        DONE(`$1')
25    ', `PROCESS_SCALAR(`$1')')
26')
27dnl }}}
28define(`PROCESS_op_type', `dnl {{{ (1:elm)
29    IFDPRINT(`
30        INDENT()
31        fprintf(stderr, ":$1:\t%d %s\n", SRC(`$1'), xc_get_op_type(SRC(`$1')));
32        DONE(`$1')
33    ', `PROCESS_SCALAR(`$1')')
34')
35dnl }}}
36define(`PROCESS_opcode', `dnl {{{ (1:elm)
37    IFDPRINT(`
38        INDENT()
39        fprintf(stderr, ":$1:\t%u %s\n", SRC(`$1'), xc_get_opcode(SRC(`$1')));
40        DONE(`$1')
41    ', `PROCESS_SCALAR(`$1')')
42')
43dnl }}}
44define(`PROCESS', `dnl PROCESS(1:type, 2:elm)
[1]45    DBG(`$0($*)')
[843]46    assert(sizeof($1) == sizeof(SRC(`$2')));
[1]47    ifelse(
[843]48        `$1', `zend_bool',        `PROCESS_SCALAR(`$2', `u',  `$1')'
49    , `$1', `zend_uchar',       `PROCESS_SCALAR(`$2', `u',  `$1')'
50    , `$1', `char',             `PROCESS_SCALAR(`$2', `d',  `$1')'
51    , `$1', `int32_t',          `PROCESS_SCALAR(`$2', `d',  `$1')'
52    , `$1', `unsigned char',    `PROCESS_SCALAR(`$2', `u',  `$1')'
53    , `$1', `zend_uint',        `PROCESS_SCALAR(`$2', `u',  `$1')'
54    , `$1', `uint',             `PROCESS_SCALAR(`$2', `u',  `$1')'
55    , `$1', `unsigned int',     `PROCESS_SCALAR(`$2', `u',  `$1')'
56    , `$1', `zend_ulong',       `PROCESS_SCALAR(`$2', `lu', `$1')'
57    , `$1', `ulong',            `PROCESS_SCALAR(`$2', `lu', `$1')'
[844]58    , `$1', `size_t',           `PROCESS_SCALAR(`$2', `lu', `$1')'
[843]59    , `$1', `long',             `PROCESS_SCALAR(`$2', `ld', `$1')'
60    , `$1', `time_t',           `PROCESS_SCALAR(`$2', `ld', `$1')'
61    , `$1', `zend_ushort',      `PROCESS_SCALAR(`$2', `hu', `$1')'
62    , `$1', `int',              `PROCESS_SCALAR(`$2', `d',  `$1')'
63    , `$1', `double',           `PROCESS_SCALAR(`$2', `f',  `$1')'
64    , `$1', `xc_entry_type_t',  `PROCESS_SCALAR(`$2', `d',  `$1')'
65    , `$1', `xc_hash_value_t',  `PROCESS_SCALAR(`$2', `lu', `$1')'
66
67    , `$1', `xc_ztstring',       `PROCESS_xc_ztstring(`$2')'
68    , `$1', `xc_zval_data_type', `PROCESS_zval_data_type(`$2')'
69    , `$1', `xc_op_type',        `PROCESS_op_type(`$2')'
70    , `$1', `xc_opcode',         `PROCESS_opcode(`$2')'
71    , `$1', `opcode_handler_t',  `/* is copying enough? */COPY(`$2')'
72    , `$1', `xc_md5sum_t',       `COPY(`$2')'
73    , `', `', `m4_errprint(`AUTOCHECK ERROR: Unknown type "$1"')define(`EXIT_PENDING', 1)'
[1]74    )
75')
[843]76define(`PROCESS_ARRAY', `dnl {{{ (1:count, 2:type, 3:elm, [4:force_type])
[662]77    if (src->$3) {
[843]78        int LOOPCOUNTER;
[662]79        IFDASM(`
80            zval *arr;
81            ALLOC_INIT_ZVAL(arr);
82            array_init(arr);
[843]83
84            for (LOOPCOUNTER = 0;
85                    ifelse(`$1', `', `src->$3[LOOPCOUNTER]',
86                    `', `', `LOOPCOUNTER < SRC(`$1')');
87                    ++LOOPCOUNTER) {
88                pushdef(`dst', `arr')
89                pushdef(`SRC', defn(`SRC') `[LOOPCOUNTER]')
90                popdef(`add_assoc_bool_ex', `add_next_index_bool($1, $3)')
91                popdef(`add_assoc_string_ex', `add_next_index_string($1, $3)')
92                popdef(`add_assoc_long_ex', `add_next_index_long($1, $3)')
93                popdef(`add_assoc_zval_ex', `add_next_index_zval($1, $3)')
94                DISABLECHECK(`
95                    PROCESS(`$2', `$3')
96                ')
97                popdef(`add_assoc_zval_ex')
98                popdef(`add_assoc_long_ex')
99                popdef(`add_assoc_string_ex')
100                popdef(`add_assoc_bool_ex')
101                popdef(`SRC')
102                popdef(`dst')
103
104                ++LOOPCOUNTER;
[662]105            }
106            add_assoc_zval_ex(dst, ZEND_STRS("$3"), arr);
107        ', `
[843]108            dnl find count with NULL
109            ifelse(`$1', `', `
110                size_t count = 0;
111                while (SRC(`$3[count]')) {
112                    ++count;
113                }
114                ++count;
115                pushdef(`STRUCT_COUNT', `count')
116            ',
117            `', `', `pushdef(`STRUCT_COUNT', `SRC(`$1')')')
118            ALLOC(`dst->$3', `$2', `STRUCT_COUNT', , `$4')
119            popdef(`STRUCT_COUNT')
120
121            for (LOOPCOUNTER = 0;
122                    ifelse(`$1', `', `src->$3[LOOPCOUNTER]',
123                    `', `', `LOOPCOUNTER < SRC(`$1')');
124                    ++LOOPCOUNTER) {
[662]125                DISABLECHECK(`
[843]126                    pushdef(`DST', defn(`DST') `[LOOPCOUNTER]')
127                    pushdef(`SRC', ((const char **) defn(`SRC'))`[LOOPCOUNTER]')
128                    PROCESS(`$2', `$3')
129                    popdef(`SRC')
130                    popdef(`DST')
[662]131                ')
132            }
[843]133            dnl the end marker
134            ifelse(`$1', `', `IFCOPY(`DST(`$3[LOOPCOUNTER]') = NULL;')')
[662]135        ')dnl IFDASM
136        DONE(`$3')
137    }
138    else {
139        COPYNULL(`$3')
140    }
141')
142dnl }}}
Note: See TracBrowser for help on using the repository browser.