31#ifdef HAVE_SYS_IOCTL_H
32# include "sys/ioctl.h"
33# ifndef GWINSZ_IN_SYS_IOCTL
85 if (isspace(*str) || *str ==
'-') {
109 return str[0] && str[1] && memcmp(str,
"0x", 2) == 0;
124 if (!sep || sep == str || sep+2 == str+
len-1) {
130 if (str[0] ==
'\\') {
136 (*class)[sep - str] = 0;
139 if (method !=
NULL) {
154 return strdup(resolved_name);
161 if (memcmp(
file,
"[no active file]",
sizeof(
"[no active file]")) == 0) {
173 zend_string_release(lfname);
179 tmp = zend_string_tolower(
lcname);
180 zend_string_release(
lcname);
184 zend_string_release(
lcname);
190 func = zend_hash_find_ptr(
EG(function_table), lfname);
193 zend_string_release(lfname);
202 while (isspace(*
p)) {
207 while (*
p && isspace(*(
p +
len -1))) {
232 if (name_length ==
color->name_length &&
267 while (element && element->
name) {
305 bool unicode_warned =
false;
311 if (!unicode_warned) {
313 "prompt contains unsupported unicode characters");
314 unicode_warned =
true;
337 if (!
EG(current_execute_data) || !
EG(current_execute_data)->
func) {
354 CONSOLE_SCREEN_BUFFER_INFO csbi;
356 GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
357 columns = (uint32_t) csbi.srWindow.Right - csbi.srWindow.Left + 1;
358#elif defined(HAVE_SYS_IOCTL_H) && defined(TIOCGWINSZ)
361 columns = (uint32_t) ioctl(fileno(stdout), TIOCGWINSZ, &w) == 0 ? w.ws_col : 80;
372 CONSOLE_SCREEN_BUFFER_INFO csbi;
374 if (GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi)) {
375 lines = (uint32_t) csbi.srWindow.Bottom - csbi.srWindow.Top + 1;
379#elif defined(HAVE_SYS_IOCTL_H) && defined(TIOCGWINSZ)
382 lines = (uint32_t) ioctl(fileno(stdout), TIOCGWINSZ, &w) == 0 ? w.ws_row : 40;
390#if !defined(_WIN32) && defined(FASYNC)
400 char *lc_name, *lc_free;
407 lc_free = lc_name =
emalloc(name_length + 1);
409 lc_length = name_length + 1;
411 if (lc_name[0] ==
'\\') {
417 *ce = zend_hash_str_find_ptr(
EG(class_table), lc_name, lc_length);
419 phpdbg_error(
"Could not fetch class %.*s, invalid data source", name_length,
name);
450 char *last_index =
NULL;
451 size_t index_len = 0;
454 if (
len < 2 || *input !=
'$') {
472 if (last_index[index_len - 1] ==
'-') {
480 last_index = input + i;
483 if (input[i - 1] ==
']') {
490 if (new_index && index_len == 0) {
494 if (i ==
len || (i ==
len - 1 && input[
len - 1] ==
']')) {
498 char *keyname =
estrndup(last_index, index_len);
517 char *keyname =
estrndup(last_index, index_len);
526 char *keyname =
estrndup(last_index, index_len);
535 char *keyname =
estrndup(last_index, index_len);
547 }
else if (new_index) {
548 char last_chr = last_index[index_len];
549 last_index[index_len] = 0;
550 if (!(
zv = zend_symtable_str_find(parent, last_index, index_len))) {
552 phpdbg_error(
"%.*s is undefined", (
int) (input[i] ==
']' ? i + 1 : i), input);
560 last_index[index_len] = last_chr;
563 char *keyname =
estrndup(last_index, index_len);
569 char *keyname =
estrndup(last_index, index_len);
578 char *keyname =
estrndup(last_index, index_len);
587 char *keyname =
estrndup(last_index, index_len);
595 phpdbg_error(
"%.*s is nor an array nor an object", (
int) (input[i] ==
'>' ? i - 1 : i), input);
619 op =
EG(opline_before_exception);
624 op_num = op - op_array->
opcodes;
628 if (op_num <=
catch || op_num <=
finally) {
633 cur = &op_array->
opcodes[
catch];
689 decode2[
len+1] =
'0';
690 decode2[
len+2] =
'\0';
698 for (i = 0; i <
ZSTR_LEN(str); i++) {
706 zend_string_release(str);
727 decode =
estrdup(
"<constant>");
file(string $filename, int $flags=0, $context=null)
strstr(string $haystack, string $needle, bool $before_needle=false)
strchr(string $haystack, string $needle, bool $before_needle=false)
PHPAPI char * expand_filepath(const char *filepath, char *real_path)
unsigned const char * end
unsigned const char * pos
unsigned char key[REFLECTION_KEY_LEN]
PHPAPI zend_string * php_addcslashes(zend_string *str, const char *what, size_t what_len)
#define phpdbg_try_access
#define phpdbg_catch_access
#define PHPDBG_IS_COLOURED
#define phpdbg_end_try_access()
#define PHPDBG_IN_SIGNAL_HANDLER
const phpdbg_color_t * colors[PHPDBG_COLORS]
#define phpdbg_error(strfmt,...)
#define phpdbg_debug(strfmt,...)
PHPDBG_API const phpdbg_color_t * phpdbg_get_color(const char *name, size_t name_length)
int phpdbg_safe_class_lookup(const char *name, int name_length, zend_class_entry **ce)
int phpdbg_is_auto_global(char *name, int len)
PHPDBG_API const phpdbg_color_t * phpdbg_get_colors(void)
PHPDBG_API int phpdbg_get_element(const char *name, size_t len)
PHPDBG_API int phpdbg_parse_variable_with_arg(char *input, size_t len, HashTable *parent, size_t i, phpdbg_parse_var_with_arg_func callback, phpdbg_parse_var_with_arg_func step_cb, bool silent, void *arg)
PHPDBG_API int phpdbg_is_empty(const char *str)
PHPDBG_API void phpdbg_set_async_io(int fd)
PHPDBG_API const zend_function * phpdbg_get_function(const char *fname, const char *cname)
PHPDBG_API int phpdbg_is_class_method(const char *str, size_t len, char **class, char **method)
PHPDBG_API int phpdbg_is_addr(const char *str)
PHPDBG_API char * phpdbg_trim(const char *str, size_t len, size_t *new_len)
PHPDBG_API char * phpdbg_resolve_path(const char *path)
char * phpdbg_get_property_key(char *key)
PHPDBG_API bool phpdbg_check_caught_ex(zend_execute_data *execute_data, zend_object *exception)
PHPDBG_API int phpdbg_parse_variable(char *input, size_t len, HashTable *parent, size_t i, phpdbg_parse_var_func callback, bool silent)
int phpdbg_rebuild_symtable(void)
PHPDBG_API const char * phpdbg_current_file(void)
PHPDBG_API uint32_t phpdbg_get_terminal_width(void)
PHPDBG_API void phpdbg_set_color_ex(int element, const char *name, size_t name_length)
PHPDBG_API void phpdbg_set_prompt(const char *prompt)
PHPDBG_API const char * phpdbg_get_prompt(void)
PHPDBG_API void phpdbg_set_color(int element, const phpdbg_color_t *color)
PHPDBG_API int phpdbg_is_numeric(const char *str)
PHPDBG_API uint32_t phpdbg_get_terminal_height(void)
char * phpdbg_short_zval_print(zval *zv, int maxlen)
#define PHPDBG_COLOR_INVALID
#define PHPDBG_COLOR_PROMPT
int(* phpdbg_parse_var_func)(char *name, size_t len, char *keyname, size_t keylen, HashTable *parent, zval *zv)
#define PHPDBG_ELEMENT_END
struct _phpdbg_color_t phpdbg_color_t
#define PHPDBG_COLOR_NOTICE
int(* phpdbg_parse_var_with_arg_func)(char *name, size_t len, char *keyname, size_t keylen, HashTable *parent, zval *zv, void *arg)
#define PHPDBG_ELEMENT_D(name, id)
#define PHPDBG_COLOR_ERROR
#define PHPDBG_COLOR_D(color, code)
struct _phpdbg_element_t phpdbg_element_t
zend_try_catch_element * try_catch_array
ZEND_API ZEND_COLD void zend_error(int type, const char *format,...)
#define ZEND_EXTERN_MODULE_GLOBALS(module_name)
ZEND_API zend_array * zend_rebuild_symbol_table(void)
#define estrndup(s, length)
@ ZEND_AST_CONSTANT_CLASS
ZEND_API bool zend_is_auto_global_str(const char *name, size_t len)
#define ZEND_FETCH_CLASS_NO_AUTOLOAD
struct _zend_op_array zend_op_array
#define RT_CONSTANT(opline, node)
#define OP_JMP_ADDR(opline, node)
#define strncasecmp(s1, s2, n)
ZEND_API zend_class_entry * zend_lookup_class(zend_string *name)
ZEND_API const char * zend_get_executed_filename(void)
ZEND_API zend_class_entry * zend_fetch_class_by_name(zend_string *class_name, zend_string *lcname, uint32_t fetch_type)
#define CACHE_PTR(num, ptr)
union _zend_function zend_function
#define ZEND_HASH_FOREACH_END()
#define ZEND_HASH_FOREACH_KEY_VAL_IND(ht, _h, _key, _val)
struct _zend_string zend_string
ZEND_API char *ZEND_FASTCALL zend_str_tolower_copy(char *dest, const char *source, size_t length)
#define ZEND_IGNORE_VALUE(x)
struct _zend_class_entry zend_class_entry
struct _zend_object zend_object
#define Z_ISREF_P(zval_p)
#define Z_ARRVAL_P(zval_p)
struct _zend_array HashTable
#define Z_OBJCE_P(zval_p)
#define Z_RES_HANDLE_P(zval_p)
#define Z_INDIRECT_P(zval_p)
#define Z_OBJPROP_P(zval_p)
struct _zend_ast zend_ast
struct _zend_execute_data zend_execute_data
#define Z_ASTVAL_P(zval_p)