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