static inline zend_uint phpdbg_decode_literal(zend_op_array *ops, zend_literal *literal TSRMLS_DC) /* {{{ */
{
zend_uint iter = 0;
-
+
while (iter < ops->last_literal) {
if (literal == &ops->literals[iter]) {
return iter;
}
iter++;
}
-
+
return 0;
} /* }}} */
case IS_CV:
asprintf(&decode, "$%s", ops->vars[op->var].name);
break;
-
+
case IS_VAR:
case IS_TMP_VAR: {
zend_ulong id = 0, *pid = NULL;
if (zend_hash_index_find(vars, (zend_ulong) ops->vars - op->var, (void**) &pid) != SUCCESS) {
id = zend_hash_num_elements(vars);
zend_hash_index_update(
- vars, (zend_ulong) ops->vars - op->var,
- (void**) &id,
+ vars, (zend_ulong) ops->vars - op->var,
+ (void**) &id,
sizeof(zend_ulong), NULL);
} else id = *pid;
asprintf(&decode, "@%lu", id);
} break;
-
+
case IS_CONST:
- asprintf(&decode, "C%lu", phpdbg_decode_literal(ops, op->literal TSRMLS_CC));
+ asprintf(&decode, "C%u", phpdbg_decode_literal(ops, op->literal TSRMLS_CC));
break;
-
+
case IS_UNUSED:
asprintf(&decode, "<unused>");
break;
char *phpdbg_decode_opline(zend_op_array *ops, zend_op *op, HashTable *vars TSRMLS_DC) /*{{{ */
{
char *decode[4] = {NULL, NULL, NULL, NULL};
-
+
switch (op->opcode) {
case ZEND_JMP:
#ifdef ZEND_GOTO
#endif
asprintf(&decode[1], "#%lu", op->op1.jmp_addr - ops->opcodes);
goto format;
-
+
case ZEND_JMPZNZ:
decode[1] = phpdbg_decode_op(ops, &op->op1, op->op1_type, vars TSRMLS_CC);
asprintf(
- &decode[2], "#%lu or #%lu", op->op2.opline_num, op->extended_value);
+ &decode[2], "#%u or #%lu", op->op2.opline_num, op->extended_value);
goto result;
-
+
case ZEND_JMPZ:
case ZEND_JMPNZ:
case ZEND_JMPZ_EX:
case ZEND_JMPNZ_EX:
-
+
#ifdef ZEND_JMP_SET
case ZEND_JMP_SET:
#endif
case ZEND_RECV_INIT:
goto result;
-
+
default: {
decode[1] = phpdbg_decode_op(ops, &op->op1, op->op1_type, vars TSRMLS_CC);
decode[2] = phpdbg_decode_op(ops, &op->op2, op->op2_type, vars TSRMLS_CC);
result:
- decode[3] = phpdbg_decode_op(ops, &op->result, op->result_type, vars TSRMLS_CC);
+ decode[3] = phpdbg_decode_op(ops, &op->result, op->result_type, vars TSRMLS_CC);
format:
asprintf(
&decode[0],
- "%-20s %-20s %-20s",
- decode[1] ? decode[1] : "",
+ "%-20s %-20s %-20s",
+ decode[1] ? decode[1] : "",
decode[2] ? decode[2] : "",
decode[3] ? decode[3] : "");
}
}
-
+
if (decode[1])
free(decode[1]);
if (decode[2])
zend_op *opline = execute_data->opline;
char *decode = phpdbg_decode_opline(execute_data->op_array, opline, vars TSRMLS_CC);
-
+
if (ignore_flags ||
(!(PHPDBG_G(flags) & PHPDBG_IS_QUIET) ||
(PHPDBG_G(flags) & PHPDBG_IS_STEPPING))) {
decode,
execute_data->op_array->filename ? execute_data->op_array->filename : "unknown");
}
-
+
if (decode) {
free(decode);
}
CASE(ZEND_RECV_VARIADIC);
#endif
CASE(ZEND_OP_DATA);
- default:
+ default:
return "UNKNOWN";
}
} /* }}} */