helly           Sat Dec 10 08:43:56 2005 EDT

  Modified files:              
    /php-src/sapi/cli   php_cli.c 
  Log:
  - Rewrite --r* and add --rfunction
  
  
http://cvs.php.net/diff.php/php-src/sapi/cli/php_cli.c?r1=1.139&r2=1.140&ty=u
Index: php-src/sapi/cli/php_cli.c
diff -u php-src/sapi/cli/php_cli.c:1.139 php-src/sapi/cli/php_cli.c:1.140
--- php-src/sapi/cli/php_cli.c:1.139    Mon Dec  5 20:08:40 2005
+++ php-src/sapi/cli/php_cli.c  Sat Dec 10 08:43:51 2005
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_cli.c,v 1.139 2005/12/06 01:08:40 sniper Exp $ */
+/* $Id: php_cli.c,v 1.140 2005/12/10 13:43:51 helly Exp $ */
 
 #include "php.h"
 #include "php_globals.h"
@@ -87,6 +87,7 @@
 #include "zend_execute.h"
 #include "zend_highlight.h"
 #include "zend_indent.h"
+#include "zend_exceptions.h"
 
 #include "php_getopt.h"
 
@@ -101,8 +102,9 @@
 #define PHP_MODE_STRIP         5
 #define PHP_MODE_CLI_DIRECT    6
 #define PHP_MODE_PROCESS_STDIN 7
-#define PHP_MODE_REFLECTION_CLASS       8
-#define PHP_MODE_REFLECTION_EXTENSION   9
+#define PHP_MODE_REFLECTION_FUNCTION    8
+#define PHP_MODE_REFLECTION_CLASS       9
+#define PHP_MODE_REFLECTION_EXTENSION   10
 
 static char *php_optarg = NULL;
 static int php_optind = 1;
@@ -137,8 +139,9 @@
        {'v', 0, "version"},
        {'z', 1, "zend-extension"},
 #ifdef HAVE_REFLECTION
-       {10,  1, "rclass"},
-       {11,  1, "rextension"},
+       {10,  1, "rfunction"},
+       {11,  1, "rclass"},
+       {12,  1, "rextension"},
 #endif
        {'-', 0, NULL} /* end of args */
 };
@@ -922,10 +925,14 @@
 
 #ifdef HAVE_REFLECTION
                        case 10:
-                               behavior=PHP_MODE_REFLECTION_CLASS;
+                               behavior=PHP_MODE_REFLECTION_FUNCTION;
                                reflection_what = php_optarg;
                                break;
                        case 11:
+                               behavior=PHP_MODE_REFLECTION_CLASS;
+                               reflection_what = php_optarg;
+                               break;
+                       case 12:
                                behavior=PHP_MODE_REFLECTION_EXTENSION;
                                reflection_what = php_optarg;
                                break;
@@ -1164,53 +1171,47 @@
        
                                break;
 #ifdef HAVE_REFLECTION
+                       case PHP_MODE_REFLECTION_FUNCTION:
                        case PHP_MODE_REFLECTION_CLASS:
                        case PHP_MODE_REFLECTION_EXTENSION:
                                {
-                                       zend_class_entry *reflection_ce;
-                                       zval *arg;
-                                       
-                                       if (behavior == 
PHP_MODE_REFLECTION_CLASS) {
-                                               zend_class_entry **ppce;
-
-                                               if 
(zend_lookup_class(reflection_what, strlen(reflection_what), &ppce TSRMLS_CC) 
== FAILURE) {
-                                                       zend_printf("Class %s 
not found\n", reflection_what);
-                                                       exit_status=254;
-
+                                       zend_class_entry *pce;
+                                       zval *arg, *ref;
+                                       zend_execute_data execute_data;
+
+                                       switch (behavior) {
+                                               case 
PHP_MODE_REFLECTION_FUNCTION:
+                                                       pce = 
reflection_function_ptr;
                                                        break;
-                                               }
-
-                                               reflection_ce = 
reflection_class_ptr;
-                                       } else if (behavior == 
PHP_MODE_REFLECTION_EXTENSION) {
-                                               char *lcname = 
do_alloca(strlen(reflection_what) + 1);
-                                               struct _zend_module_entry 
*module;
-
-                                               zend_str_tolower_copy(lcname, 
reflection_what, strlen(reflection_what));
-                                               if 
(zend_hash_find(&module_registry, lcname,  strlen(reflection_what) + 1, (void 
**)&module) == FAILURE) {
-                                                       zend_printf("Extension 
%s not found\n", reflection_what);
-
-                                                       free_alloca(lcname);
-
-                                                       exit_status=254;
+                                               case PHP_MODE_REFLECTION_CLASS:
+                                                       pce = 
reflection_class_ptr;
+                                                       break;
+                                               case 
PHP_MODE_REFLECTION_EXTENSION:
+                                                       pce = 
reflection_extension_ptr;
                                                        break;
-                                               }
-                                               free_alloca(lcname);
-
-                                               reflection_ce = 
reflection_extension_ptr;
-                                       } else {
-                                               // Can't happen
-                                               assert(0);
-                                               break;
                                        }
                                        
-                                       arg = emalloc(sizeof(zval));
-                                       INIT_PZVAL(arg);
+                                       MAKE_STD_ZVAL(arg);
                                        ZVAL_STRING(arg, reflection_what, 1);
-
-                                       zend_call_method_with_1_params(NULL, 
reflection_ce, NULL, "export", NULL, arg);
-
-                                       zval_dtor(arg);
-                                       FREE_ZVAL(arg);
+                                       ALLOC_ZVAL(ref);
+                                       object_init_ex(ref, pce);
+                                       INIT_PZVAL(ref);
+
+                                       memset(&execute_data, 0, 
sizeof(zend_execute_data));
+                                       EG(current_execute_data) = 
&execute_data;
+                                       EX(function_state).function = 
pce->constructor;
+                                       zend_call_method_with_1_params(&ref, 
pce, &pce->constructor, "__construct", NULL, arg);
+
+                                       if (EG(exception)) {
+                                               zval *msg = 
zend_read_property(zend_exception_get_default(TSRMLS_C), EG(exception), 
"message", sizeof("message")-1, 0 TSRMLS_CC);
+                                               zend_printf("Exception: %R\n", 
Z_TYPE_P(msg), Z_UNIVAL_P(msg));
+                                               zval_ptr_dtor(&EG(exception));
+                                               EG(exception) = NULL;
+                                       } else {
+                                               
zend_call_method_with_1_params(NULL, reflection_ptr, NULL, "export", NULL, ref);
+                                       }
+                                       zval_ptr_dtor(&ref);
+                                       zval_ptr_dtor(&arg);
 
                                        break;
                                }

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

Reply via email to