XCache is a fast, stable PHP opcode cacher that has been proven and is now running on production servers under high load.
https://xcache.lighttpd.net/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
4.6 KiB
145 lines
4.6 KiB
define(`PROCESS_SCALAR', `dnl {{{ (1:elm, 2:format=%d, 3:type=) |
|
IFNOTMEMCPY(`IFCOPY(`DST(`$1') = SRC(`$1');')') |
|
IFDPRINT(` |
|
INDENT() |
|
fprintf(stderr, "$3:$1:\t%ifelse(`$2',`',`d',`$2')\n", SRC(`$1')); |
|
') |
|
IFDASM(` |
|
ifelse( |
|
`$3', `zend_bool', `add_assoc_bool_ex(dst, ZEND_STRS("$1"), SRC(`$1') ? 1 : 0);' |
|
, `', `', `add_assoc_long_ex(dst, ZEND_STRS("$1"), SRC(`$1'));' |
|
) |
|
') |
|
DONE(`$1') |
|
') |
|
dnl }}} |
|
define(`PROCESS_xc_ztstring', `dnl {{{ (1:elm) |
|
pushdef(`REALPTRTYPE', `zend_class_entry') |
|
PROC_STRING(`$1') |
|
popdef(`REALPTRTYPE') |
|
') |
|
dnl }}} |
|
define(`PROCESS_xc_zval_type_t', `dnl {{{ (1:elm) |
|
IFDPRINT(` |
|
INDENT() |
|
fprintf(stderr, ":$1:\t%d %s\n", SRC(`$1'), xc_get_data_type(SRC(`$1'))); |
|
DONE(`$1') |
|
', `PROCESS_SCALAR(`$1')') |
|
') |
|
dnl }}} |
|
define(`PROCESS_xc_op_type', `dnl {{{ (1:elm) |
|
IFDPRINT(` |
|
INDENT() |
|
fprintf(stderr, ":$1:\t%d %s\n", SRC(`$1'), xc_get_op_type(SRC(`$1'))); |
|
DONE(`$1') |
|
', `PROCESS_SCALAR(`$1')') |
|
') |
|
dnl }}} |
|
define(`PROCESS_xc_opcode', `dnl {{{ (1:elm) |
|
IFDPRINT(` |
|
INDENT() |
|
fprintf(stderr, ":$1:\t%u %s\n", SRC(`$1'), xc_get_opcode(SRC(`$1'))); |
|
DONE(`$1') |
|
', `PROCESS_SCALAR(`$1')') |
|
') |
|
dnl }}} |
|
define(`PROCESS', `dnl PROCESS(1:type, 2:elm) |
|
DBG(`$0($*)') |
|
assert(sizeof($1) == sizeof(SRC(`$2'))); |
|
ifelse( |
|
`$1', `zend_bool', `PROCESS_SCALAR(`$2', `u', `$1')' |
|
, `$1', `zend_uchar', `PROCESS_SCALAR(`$2', `u', `$1')' |
|
, `$1', `char', `PROCESS_SCALAR(`$2', `d', `$1')' |
|
, `$1', `int32_t', `PROCESS_SCALAR(`$2', `d', `$1')' |
|
, `$1', `unsigned char', `PROCESS_SCALAR(`$2', `u', `$1')' |
|
, `$1', `zend_uint', `PROCESS_SCALAR(`$2', `u', `$1')' |
|
, `$1', `uint', `PROCESS_SCALAR(`$2', `u', `$1')' |
|
, `$1', `unsigned int', `PROCESS_SCALAR(`$2', `u', `$1')' |
|
, `$1', `zend_ulong', `PROCESS_SCALAR(`$2', `lu', `$1')' |
|
, `$1', `ulong', `PROCESS_SCALAR(`$2', `lu', `$1')' |
|
, `$1', `size_t', `PROCESS_SCALAR(`$2', `lu', `$1')' |
|
, `$1', `long', `PROCESS_SCALAR(`$2', `ld', `$1')' |
|
, `$1', `time_t', `PROCESS_SCALAR(`$2', `ld', `$1')' |
|
, `$1', `zend_ushort', `PROCESS_SCALAR(`$2', `hu', `$1')' |
|
, `$1', `int', `PROCESS_SCALAR(`$2', `d', `$1')' |
|
, `$1', `double', `PROCESS_SCALAR(`$2', `f', `$1')' |
|
, `$1', `xc_entry_type_t', `PROCESS_SCALAR(`$2', `d', `$1')' |
|
, `$1', `xc_hash_value_t', `PROCESS_SCALAR(`$2', `lu', `$1')' |
|
, `$1', `last_brk_cont_t', `PROCESS_SCALAR(`$2', `d', `$1')' |
|
|
|
, `$1', `xc_ztstring', `PROCESS_xc_ztstring(`$2')' |
|
, `$1', `xc_zval_type_t', `PROCESS_xc_zval_type_t(`$2')' |
|
, `$1', `xc_op_type', `PROCESS_xc_op_type(`$2')' |
|
, `$1', `xc_opcode', `PROCESS_xc_opcode(`$2')' |
|
, `$1', `opcode_handler_t', `/* is copying enough? */COPY(`$2')' |
|
, `$1', `xc_md5sum_t', `COPY(`$2')' |
|
, `', `', `m4_errprint(`AUTOCHECK ERROR: Unknown type "$1"')define(`EXIT_PENDING', 1)' |
|
) |
|
') |
|
define(`PROCESS_ARRAY', `dnl {{{ (1:count, 2:type, 3:elm, [4:real_type]) |
|
if (src->$3) { |
|
int LOOPCOUNTER; |
|
IFDASM(` |
|
zval *arr; |
|
ALLOC_INIT_ZVAL(arr); |
|
array_init(arr); |
|
|
|
for (LOOPCOUNTER = 0; |
|
ifelse(`$1', `', `src->$3[LOOPCOUNTER]', |
|
`', `', `LOOPCOUNTER < SRC(`$1')'); |
|
++LOOPCOUNTER) { |
|
pushdef(`dst', `arr') |
|
pushdef(`SRC', `ifelse(`$4', `', `', `', `', `($2)')' defn(`SRC') `[LOOPCOUNTER]') |
|
popdef(`add_assoc_bool_ex', `add_next_index_bool($1, $3)') |
|
popdef(`add_assoc_string_ex', `add_next_index_string($1, $3)') |
|
popdef(`add_assoc_long_ex', `add_next_index_long($1, $3)') |
|
popdef(`add_assoc_zval_ex', `add_next_index_zval($1, $3)') |
|
DISABLECHECK(` |
|
PROCESS(`$2', `$3') |
|
') |
|
popdef(`add_assoc_zval_ex') |
|
popdef(`add_assoc_long_ex') |
|
popdef(`add_assoc_string_ex') |
|
popdef(`add_assoc_bool_ex') |
|
popdef(`SRC') |
|
popdef(`dst') |
|
|
|
++LOOPCOUNTER; |
|
} |
|
add_assoc_zval_ex(dst, ZEND_STRS("$3"), arr); |
|
', ` |
|
dnl find count with NULL |
|
ifelse(`$1', `', ` |
|
size_t count = 0; |
|
while (SRC(`$3[count]')) { |
|
++count; |
|
} |
|
++count; |
|
pushdef(`STRUCT_COUNT', `count') |
|
', |
|
`', `', `pushdef(`STRUCT_COUNT', `SRC(`$1')')') |
|
ALLOC(`dst->$3', `$2', `STRUCT_COUNT', , `$4') |
|
popdef(`STRUCT_COUNT') |
|
|
|
for (LOOPCOUNTER = 0; |
|
ifelse(`$1', `', `src->$3[LOOPCOUNTER]', |
|
`', `', `LOOPCOUNTER < SRC(`$1')'); |
|
++LOOPCOUNTER) { |
|
DISABLECHECK(` |
|
pushdef(`DST', defn(`DST') `[LOOPCOUNTER]') |
|
pushdef(`SRC', `ifelse(`$4', `', `', `', `', `($2)')' defn(`SRC') `[LOOPCOUNTER]') |
|
PROCESS(`$2', `$3') |
|
popdef(`SRC') |
|
popdef(`DST') |
|
') |
|
} |
|
dnl the end marker |
|
ifelse(`$1', `', `IFCOPY(`DST(`$3[LOOPCOUNTER]') = NULL;')') |
|
')dnl IFDASM |
|
DONE(`$3') |
|
} |
|
else { |
|
COPYNULL(`$3') |
|
} |
|
') |
|
dnl }}}
|
|
|