1
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
xcache/processor/dispatch.m4

59 lines
2.0 KiB
Plaintext

dnl DISPATCH(1:type, 2:elm)
define(`DISPATCH', `
DBG(`$0($*)')
assert(sizeof($1) == sizeof(src->$2));
ifelse(
`$1', `zend_bool', `PROC_INT(`$2', `u', `$1')'
, `$1', `zend_uchar', `PROC_INT(`$2', `u', `$1')'
, `$1', `char', `PROC_INT(`$2', `d', `$1')'
, `$1', `int32_t', `PROC_INT(`$2', `d', `$1')'
, `$1', `unsigned char', `PROC_INT(`$2', `u', `$1')'
, `$1', `zend_uint', `PROC_INT(`$2', `u', `$1')'
, `$1', `uint', `PROC_INT(`$2', `u', `$1')'
, `$1', `unsigned int', `PROC_INT(`$2', `u', `$1')'
, `$1', `zend_ulong', `PROC_INT(`$2', `lu', `$1')'
, `$1', `ulong', `PROC_INT(`$2', `lu', `$1')'
, `$1', `size_t', `PROC_INT(`$2', `u', `$1')'
, `$1', `long', `PROC_INT(`$2', `ld', `$1')'
, `$1', `time_t', `PROC_INT(`$2', `ld', `$1')'
, `$1', `zend_ushort', `PROC_INT(`$2', `hu', `$1')'
, `$1', `int', `PROC_INT(`$2', `d', `$1')'
, `$1', `double', `PROC_INT(`$2', `f', `$1')'
, `$1', `opcode_handler_t', `/* is copying enough? */COPY(`$2')'
, `$1', `zval_data_type', `PROC_INT(`$2', `u', `$1')'
, `$1', `xc_entry_type_t', `PROC_INT(`$2', `d', `$1')'
, `$1', `xc_hash_value_t', `PROC_INT(`$2', `lu', `$1')'
, `$1', `xc_md5sum_t', `/* is copying enough? */COPY(`$2')'
, `', `', `m4_errprint(`Unknown type "$1"')'
)
')
dnl {{{ DISPATCH_ARRAY(1:count, 2:type, 3:elm)
define(`DISPATCH_ARRAY', `
if (src->$3) {
int i;
IFDASM(`
zval *arr;
ALLOC_INIT_ZVAL(arr);
array_init(arr);
for (i = 0; i < src->$1; i ++) {
ifelse(
`$2', `zend_bool', `add_assoc_bool_ex(arr, ZEND_STRS("$3"), src->$3[i] ? 1 : 0);'
, `', `', `add_assoc_long_ex(arr, ZEND_STRS("$3"), src->$3[i]);')
}
add_assoc_zval_ex(dst, ZEND_STRS("$3"), arr);
', `
COPY_N_EX($@)
for (i = 0; i < src->$1; i ++) {
DISABLECHECK(`
DISPATCH(`$2', `$3[i]', `$4')
')
}
')dnl IFDASM
DONE(`$3')
}
else {
COPYNULL(`$3')
}
')
dnl }}}