Re: [PHP-DEV] ZE2 and classes

2002-11-19 Thread Wez Furlong
php.net/get_defined_functions and
php.net/get_class_methods not good enough for you? ;-)

What's the long term aim?

--Wez.

On Tue, 19 Nov 2002, Marcus [iso-8859-1] Börger wrote:

 I have experimented with the code below.

 The main thing is to introduce a function that can return a list of
 all available functions (this is a first step to something bigger...).

 At this point i have three problems:
 1) When i create a function it is shown in the result :-)
 2) When i create a class it is shown twice (same goes with methods) :-(
 3) When i look for internal classes there is the problem that the the
 function entries
   do not know there scope (class). In other words the connection between
zend_class_entry.function_table - zend_function is a one way link
because zend_function.scope==NULL :-((

 For the moment:
 I know that i can fetch the scop easily if it is missing by using
 apply_func_args_t type functions instead of apply_func_arg_t
 and passing the scope to add_function_info.
 But for me it seems to be a problem in the zend engine.

 Example 1:
 [marcus@zaphod php4-HEAD]$ php -r 'class zz_c { function zz_c()
 {echozz_inst\n;}; static function zz_sf() {};};$o=new
 zz_c();$l=function_list();sort($l);var_dump($l);' | grep zz
 zz_inst
string(10) class zz_c
string(10) class zz_c
string(18) static zz_c::zz_sf
string(18) static zz_c::zz_sf
string(2) zz
string(10) zz_c::zz_c
string(10) zz_c::zz_c

 Example 2: searching for methods of class defined in ext/xslt
 [marcus@zaphod php4-HEAD]$ php -r 'var_dump(function_list());' | grep domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode


 /* {{{ add_function_info */
 static int add_function_info(zend_function *func, zval *return_value TSRMLS_DC)
 {
  char *f;
  if (func-internal_function.handler !=
 zif_display_disabled_function) {
  /* ?? internal_function-type = ZEND_INTERNAL_FUNCTION;  */
  if (func-common.scope) {
  if (func-common.is_static) {
  spprintf(f, 0, static %s::%s,
 func-common.scope-name, func-common.function_name);
  } else {
  spprintf(f, 0, %s::%s,
 func-common.scope-name, func-common.function_name);
  }
  } else {
  f = estrdup(func-common.function_name);
  }
  add_next_index_string(return_value, f, 0);
  }
  return 0;
 }
 /* }}} */
 /* {{{ add_class_info */
 static int add_class_info(zend_class_entry **zclass, zval *return_value
 TSRMLS_DC)
 {
  char *f;
  spprintf(f, 0, class %s, (*zclass)-name);
  add_next_index_string(return_value, f, 0);
  zend_hash_apply_with_argument((*zclass)-function_table,
 (apply_func_arg_t)add_function_info, return_value TSRMLS_CC);
  return 0;
 }
 /* }}} */
 /* {{{ proto array function_list()
 Returns an array of all php functions */
 PHP_FUNCTION(function_list)
 {
  if (ZEND_NUM_ARGS()) {
  WRONG_PARAM_COUNT;
  }

  if (array_init(return_value) == FAILURE) {
  php_error_docref(NULL TSRMLS_CC, E_ERROR, Unable to
 initialize array);
  RETURN_FALSE;
  }

  zend_hash_apply_with_argument(EG(function_table),
 (apply_func_arg_t)add_function_info, return_value TSRMLS_CC);
  zend_hash_apply_with_argument(EG(class_table),
 (apply_func_arg_t)add_class_info,return_value TSRMLS_CC);
 }
 /* }}} */



 --- mailto:[EMAIL PROTECTED] --
 We are animals among animals, all children of matter,
 save that we are the more disarmed. But since, unlike animals,
 we know that we must die, let us prepare for that moment
 by enjoying the life that has been given us by chance and for chance.
 Umberto Eco, The island of the day before
 - http://marcus-boerger.de -



--
PHP Development Mailing List http://www.php.net/
To unsubscribe, visit: http://www.php.net/unsub.php




Re: [PHP-DEV] ZE2 and classes

2002-11-19 Thread Marcus Börger
I am thinking about about documentation assistance for user
functions and for the documentation team.

marcus

At 10:41 19.11.2002, Wez Furlong wrote:

php.net/get_defined_functions and
php.net/get_class_methods not good enough for you? ;-)

What's the long term aim?

--Wez.

On Tue, 19 Nov 2002, Marcus [iso-8859-1] Börger wrote:

 I have experimented with the code below.

 The main thing is to introduce a function that can return a list of
 all available functions (this is a first step to something bigger...).

 At this point i have three problems:
 1) When i create a function it is shown in the result :-)
 2) When i create a class it is shown twice (same goes with methods) :-(
 3) When i look for internal classes there is the problem that the the
 function entries
   do not know there scope (class). In other words the connection between
zend_class_entry.function_table - zend_function is a one way link
because zend_function.scope==NULL :-((

 For the moment:
 I know that i can fetch the scop easily if it is missing by using
 apply_func_args_t type functions instead of apply_func_arg_t
 and passing the scope to add_function_info.
 But for me it seems to be a problem in the zend engine.

 Example 1:
 [marcus@zaphod php4-HEAD]$ php -r 'class zz_c { function zz_c()
 {echozz_inst\n;}; static function zz_sf() {};};$o=new
 zz_c();$l=function_list();sort($l);var_dump($l);' | grep zz
 zz_inst
string(10) class zz_c
string(10) class zz_c
string(18) static zz_c::zz_sf
string(18) static zz_c::zz_sf
string(2) zz
string(10) zz_c::zz_c
string(10) zz_c::zz_c

 Example 2: searching for methods of class defined in ext/xslt
 [marcus@zaphod php4-HEAD]$ php -r 'var_dump(function_list());' | grep 
domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode
string(7) domnode


 /* {{{ add_function_info */
 static int add_function_info(zend_function *func, zval *return_value 
TSRMLS_DC)
 {
  char *f;
  if (func-internal_function.handler !=
 zif_display_disabled_function) {
  /* ?? internal_function-type = 
ZEND_INTERNAL_FUNCTION;  */
  if (func-common.scope) {
  if (func-common.is_static) {
  spprintf(f, 0, static %s::%s,
 func-common.scope-name, func-common.function_name);
  } else {
  spprintf(f, 0, %s::%s,
 func-common.scope-name, func-common.function_name);
  }
  } else {
  f = estrdup(func-common.function_name);
  }
  add_next_index_string(return_value, f, 0);
  }
  return 0;
 }
 /* }}} */
 /* {{{ add_class_info */
 static int add_class_info(zend_class_entry **zclass, zval *return_value
 TSRMLS_DC)
 {
  char *f;
  spprintf(f, 0, class %s, (*zclass)-name);
  add_next_index_string(return_value, f, 0);
  zend_hash_apply_with_argument((*zclass)-function_table,
 (apply_func_arg_t)add_function_info, return_value TSRMLS_CC);
  return 0;
 }
 /* }}} */
 /* {{{ proto array function_list()
 Returns an array of all php functions */
 PHP_FUNCTION(function_list)
 {
  if (ZEND_NUM_ARGS()) {
  WRONG_PARAM_COUNT;
  }

  if (array_init(return_value) == FAILURE) {
  php_error_docref(NULL TSRMLS_CC, E_ERROR, Unable to
 initialize array);
  RETURN_FALSE;
  }

  zend_hash_apply_with_argument(EG(function_table),
 (apply_func_arg_t)add_function_info, return_value TSRMLS_CC);
  zend_hash_apply_with_argument(EG(class_table),
 (apply_func_arg_t)add_class_info,return_value TSRMLS_CC);
 }
 /* }}} */



 --- mailto:[EMAIL PROTECTED] --
 We are animals among animals, all children of matter,
 save that we are the more disarmed. But since, unlike animals,
 we know that we must die, let us prepare for that moment
 by enjoying the life that has been given us by chance and for chance.
 Umberto Eco, The island of the day before
 - http://marcus-boerger.de -



--
PHP Development Mailing List http://www.php.net/
To unsubscribe, visit: http://www.php.net/unsub.php




[PHP-DEV] ZE2 and classes

2002-11-18 Thread Marcus Börger
I have experimented with the code below.

The main thing is to introduce a function that can return a list of
all available functions (this is a first step to something bigger...).

At this point i have three problems:
1) When i create a function it is shown in the result :-)
2) When i create a class it is shown twice (same goes with methods) :-(
3) When i look for internal classes there is the problem that the the 
function entries
 do not know there scope (class). In other words the connection between
  zend_class_entry.function_table - zend_function is a one way link
  because zend_function.scope==NULL :-((

For the moment:
I know that i can fetch the scop easily if it is missing by using
apply_func_args_t type functions instead of apply_func_arg_t
and passing the scope to add_function_info.
But for me it seems to be a problem in the zend engine.

Example 1:
[marcus@zaphod php4-HEAD]$ php -r 'class zz_c { function zz_c() 
{echozz_inst\n;}; static function zz_sf() {};};$o=new 
zz_c();$l=function_list();sort($l);var_dump($l);' | grep zz
zz_inst
  string(10) class zz_c
  string(10) class zz_c
  string(18) static zz_c::zz_sf
  string(18) static zz_c::zz_sf
  string(2) zz
  string(10) zz_c::zz_c
  string(10) zz_c::zz_c

Example 2: searching for methods of class defined in ext/xslt
[marcus@zaphod php4-HEAD]$ php -r 'var_dump(function_list());' | grep domnode
  string(7) domnode
  string(7) domnode
  string(7) domnode
  string(7) domnode
  string(7) domnode
  string(7) domnode
  string(7) domnode
  string(7) domnode
  string(7) domnode
  string(7) domnode
  string(7) domnode
  string(7) domnode
  string(7) domnode
  string(7) domnode
  string(7) domnode
  string(7) domnode
  string(7) domnode


/* {{{ add_function_info */
static int add_function_info(zend_function *func, zval *return_value TSRMLS_DC)
{
char *f;
if (func-internal_function.handler != 
zif_display_disabled_function) {
/* ?? internal_function-type = ZEND_INTERNAL_FUNCTION;  */
if (func-common.scope) {
if (func-common.is_static) {
spprintf(f, 0, static %s::%s, 
func-common.scope-name, func-common.function_name);
} else {
spprintf(f, 0, %s::%s, 
func-common.scope-name, func-common.function_name);
}
} else {
f = estrdup(func-common.function_name);
}
add_next_index_string(return_value, f, 0);
}
return 0;
}
/* }}} */
/* {{{ add_class_info */
static int add_class_info(zend_class_entry **zclass, zval *return_value 
TSRMLS_DC)
{
char *f;
spprintf(f, 0, class %s, (*zclass)-name);
add_next_index_string(return_value, f, 0);
zend_hash_apply_with_argument((*zclass)-function_table, 
(apply_func_arg_t)add_function_info, return_value TSRMLS_CC);
return 0;
}
/* }}} */
/* {{{ proto array function_list()
   Returns an array of all php functions */
PHP_FUNCTION(function_list)
{
if (ZEND_NUM_ARGS()) {
WRONG_PARAM_COUNT;
}

if (array_init(return_value) == FAILURE) {
php_error_docref(NULL TSRMLS_CC, E_ERROR, Unable to 
initialize array);
RETURN_FALSE;
}

zend_hash_apply_with_argument(EG(function_table), 
(apply_func_arg_t)add_function_info, return_value TSRMLS_CC);
zend_hash_apply_with_argument(EG(class_table), 
(apply_func_arg_t)add_class_info,return_value TSRMLS_CC);
}
/* }}} */



--- mailto:[EMAIL PROTECTED] --
We are animals among animals, all children of matter,
save that we are the more disarmed. But since, unlike animals,
we know that we must die, let us prepare for that moment
by enjoying the life that has been given us by chance and for chance.
   Umberto Eco, The island of the day before
- http://marcus-boerger.de -