|
|
|
@ -154,36 +154,30 @@ PHPDBG_PRINT(class) /* {{{ */ |
|
|
|
{ |
|
|
|
zend_class_entry **ce; |
|
|
|
|
|
|
|
switch (param->type) { |
|
|
|
case STR_PARAM: { |
|
|
|
if (zend_lookup_class(param->str, param->len, &ce TSRMLS_CC) == SUCCESS) { |
|
|
|
phpdbg_notice("%s %s: %s", |
|
|
|
((*ce)->type == ZEND_USER_CLASS) ? |
|
|
|
"User" : "Internal", |
|
|
|
((*ce)->ce_flags & ZEND_ACC_INTERFACE) ? |
|
|
|
"Interface" : |
|
|
|
((*ce)->ce_flags & ZEND_ACC_ABSTRACT) ? |
|
|
|
"Abstract Class" : |
|
|
|
"Class", |
|
|
|
(*ce)->name); |
|
|
|
|
|
|
|
phpdbg_writeln("Methods (%d):", zend_hash_num_elements(&(*ce)->function_table)); |
|
|
|
if (zend_hash_num_elements(&(*ce)->function_table)) { |
|
|
|
HashPosition position; |
|
|
|
zend_function *method; |
|
|
|
|
|
|
|
for (zend_hash_internal_pointer_reset_ex(&(*ce)->function_table, &position); |
|
|
|
zend_hash_get_current_data_ex(&(*ce)->function_table, (void**) &method, &position) == SUCCESS; |
|
|
|
zend_hash_move_forward_ex(&(*ce)->function_table, &position)) { |
|
|
|
phpdbg_print_function_helper(method TSRMLS_CC); |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
phpdbg_error("The class %s could not be found", param->str); |
|
|
|
if (zend_lookup_class(param->str, param->len, &ce TSRMLS_CC) == SUCCESS) { |
|
|
|
phpdbg_notice("%s %s: %s", |
|
|
|
((*ce)->type == ZEND_USER_CLASS) ? |
|
|
|
"User" : "Internal", |
|
|
|
((*ce)->ce_flags & ZEND_ACC_INTERFACE) ? |
|
|
|
"Interface" : |
|
|
|
((*ce)->ce_flags & ZEND_ACC_ABSTRACT) ? |
|
|
|
"Abstract Class" : |
|
|
|
"Class", |
|
|
|
(*ce)->name); |
|
|
|
|
|
|
|
phpdbg_writeln("Methods (%d):", zend_hash_num_elements(&(*ce)->function_table)); |
|
|
|
if (zend_hash_num_elements(&(*ce)->function_table)) { |
|
|
|
HashPosition position; |
|
|
|
zend_function *method; |
|
|
|
|
|
|
|
for (zend_hash_internal_pointer_reset_ex(&(*ce)->function_table, &position); |
|
|
|
zend_hash_get_current_data_ex(&(*ce)->function_table, (void**) &method, &position) == SUCCESS; |
|
|
|
zend_hash_move_forward_ex(&(*ce)->function_table, &position)) { |
|
|
|
phpdbg_print_function_helper(method TSRMLS_CC); |
|
|
|
} |
|
|
|
} break; |
|
|
|
|
|
|
|
phpdbg_default_switch_case(); |
|
|
|
} |
|
|
|
} else { |
|
|
|
phpdbg_error("The class %s could not be found", param->str); |
|
|
|
} |
|
|
|
|
|
|
|
return SUCCESS; |
|
|
|
@ -191,31 +185,25 @@ PHPDBG_PRINT(class) /* {{{ */ |
|
|
|
|
|
|
|
PHPDBG_PRINT(method) /* {{{ */ |
|
|
|
{ |
|
|
|
switch (param->type) { |
|
|
|
case METHOD_PARAM: { |
|
|
|
zend_class_entry **ce; |
|
|
|
|
|
|
|
if (zend_lookup_class(param->method.class, strlen(param->method.class), &ce TSRMLS_CC) == SUCCESS) { |
|
|
|
zend_function *fbc; |
|
|
|
char *lcname = zend_str_tolower_dup(param->method.name, strlen(param->method.name)); |
|
|
|
zend_class_entry **ce; |
|
|
|
|
|
|
|
if (zend_hash_find(&(*ce)->function_table, lcname, strlen(lcname)+1, (void**)&fbc) == SUCCESS) { |
|
|
|
phpdbg_notice("%s Method %s", |
|
|
|
(fbc->type == ZEND_USER_FUNCTION) ? "User" : "Internal", |
|
|
|
fbc->common.function_name); |
|
|
|
if (zend_lookup_class(param->method.class, strlen(param->method.class), &ce TSRMLS_CC) == SUCCESS) { |
|
|
|
zend_function *fbc; |
|
|
|
char *lcname = zend_str_tolower_dup(param->method.name, strlen(param->method.name)); |
|
|
|
|
|
|
|
phpdbg_print_function_helper(fbc TSRMLS_CC); |
|
|
|
} else { |
|
|
|
phpdbg_error("The method %s could not be found", param->method.name); |
|
|
|
} |
|
|
|
if (zend_hash_find(&(*ce)->function_table, lcname, strlen(lcname)+1, (void**)&fbc) == SUCCESS) { |
|
|
|
phpdbg_notice("%s Method %s", |
|
|
|
(fbc->type == ZEND_USER_FUNCTION) ? "User" : "Internal", |
|
|
|
fbc->common.function_name); |
|
|
|
|
|
|
|
efree(lcname); |
|
|
|
} else { |
|
|
|
phpdbg_error("The class %s could not be found", param->method.class); |
|
|
|
} |
|
|
|
} break; |
|
|
|
phpdbg_print_function_helper(fbc TSRMLS_CC); |
|
|
|
} else { |
|
|
|
phpdbg_error("The method %s could not be found", param->method.name); |
|
|
|
} |
|
|
|
|
|
|
|
phpdbg_default_switch_case(); |
|
|
|
efree(lcname); |
|
|
|
} else { |
|
|
|
phpdbg_error("The class %s could not be found", param->method.class); |
|
|
|
} |
|
|
|
|
|
|
|
return SUCCESS; |
|
|
|
@ -223,49 +211,43 @@ PHPDBG_PRINT(method) /* {{{ */ |
|
|
|
|
|
|
|
PHPDBG_PRINT(func) /* {{{ */ |
|
|
|
{ |
|
|
|
switch (param->type) { |
|
|
|
case STR_PARAM: { |
|
|
|
HashTable *func_table = EG(function_table); |
|
|
|
zend_function* fbc; |
|
|
|
const char *func_name = param->str; |
|
|
|
size_t func_name_len = param->len; |
|
|
|
char *lcname; |
|
|
|
/* search active scope if begins with period */ |
|
|
|
if (func_name[0] == '.') { |
|
|
|
if (EG(scope)) { |
|
|
|
func_name++; |
|
|
|
func_name_len--; |
|
|
|
|
|
|
|
func_table = &EG(scope)->function_table; |
|
|
|
} else { |
|
|
|
phpdbg_error("No active class"); |
|
|
|
return SUCCESS; |
|
|
|
} |
|
|
|
} else if (!EG(function_table)) { |
|
|
|
phpdbg_error("No function table loaded"); |
|
|
|
return SUCCESS; |
|
|
|
} else { |
|
|
|
func_table = EG(function_table); |
|
|
|
} |
|
|
|
|
|
|
|
lcname = zend_str_tolower_dup(func_name, func_name_len); |
|
|
|
|
|
|
|
if (zend_hash_find(func_table, lcname, strlen(lcname)+1, (void**)&fbc) == SUCCESS) { |
|
|
|
phpdbg_notice("%s %s %s", |
|
|
|
(fbc->type == ZEND_USER_FUNCTION) ? "User" : "Internal", |
|
|
|
(fbc->common.scope) ? "Method" : "Function", |
|
|
|
fbc->common.function_name); |
|
|
|
HashTable *func_table = EG(function_table); |
|
|
|
zend_function* fbc; |
|
|
|
const char *func_name = param->str; |
|
|
|
size_t func_name_len = param->len; |
|
|
|
char *lcname; |
|
|
|
/* search active scope if begins with period */ |
|
|
|
if (func_name[0] == '.') { |
|
|
|
if (EG(scope)) { |
|
|
|
func_name++; |
|
|
|
func_name_len--; |
|
|
|
|
|
|
|
func_table = &EG(scope)->function_table; |
|
|
|
} else { |
|
|
|
phpdbg_error("No active class"); |
|
|
|
return SUCCESS; |
|
|
|
} |
|
|
|
} else if (!EG(function_table)) { |
|
|
|
phpdbg_error("No function table loaded"); |
|
|
|
return SUCCESS; |
|
|
|
} else { |
|
|
|
func_table = EG(function_table); |
|
|
|
} |
|
|
|
|
|
|
|
phpdbg_print_function_helper(fbc TSRMLS_CC); |
|
|
|
} else { |
|
|
|
phpdbg_error("The function %s could not be found", func_name); |
|
|
|
} |
|
|
|
lcname = zend_str_tolower_dup(func_name, func_name_len); |
|
|
|
|
|
|
|
efree(lcname); |
|
|
|
} break; |
|
|
|
if (zend_hash_find(func_table, lcname, strlen(lcname)+1, (void**)&fbc) == SUCCESS) { |
|
|
|
phpdbg_notice("%s %s %s", |
|
|
|
(fbc->type == ZEND_USER_FUNCTION) ? "User" : "Internal", |
|
|
|
(fbc->common.scope) ? "Method" : "Function", |
|
|
|
fbc->common.function_name); |
|
|
|
|
|
|
|
phpdbg_default_switch_case(); |
|
|
|
phpdbg_print_function_helper(fbc TSRMLS_CC); |
|
|
|
} else { |
|
|
|
phpdbg_error("The function %s could not be found", func_name); |
|
|
|
} |
|
|
|
|
|
|
|
efree(lcname); |
|
|
|
|
|
|
|
return SUCCESS; |
|
|
|
} /* }}} */ |