chregu          Tue Apr 20 05:24:24 2004 EDT

  Modified files:              
    /php-src/ext/xsl    xsltprocessor.c 
    /php-src/ext/xsl/tests      xslt011.phpt xslt011.xsl 
  Log:
  - make static methods calls work from within xslt
  - extended tests
  
  
http://cvs.php.net/diff.php/php-src/ext/xsl/xsltprocessor.c?r1=1.26&r2=1.27&ty=u
Index: php-src/ext/xsl/xsltprocessor.c
diff -u php-src/ext/xsl/xsltprocessor.c:1.26 php-src/ext/xsl/xsltprocessor.c:1.27
--- php-src/ext/xsl/xsltprocessor.c:1.26        Sun Mar 28 10:35:01 2004
+++ php-src/ext/xsl/xsltprocessor.c     Tue Apr 20 05:24:23 2004
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: xsltprocessor.c,v 1.26 2004/03/28 15:35:01 helly Exp $ */
+/* $Id: xsltprocessor.c,v 1.27 2004/04/20 09:24:23 chregu Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -142,7 +142,8 @@
        zval handler;
        xmlXPathObjectPtr obj;
        char *str;
-
+       char *callable = NULL;
+       
        TSRMLS_FETCH();
 
        tctxt = xsltXPathGetTransformContext(ctxt);
@@ -243,29 +244,34 @@
        fci.retval_ptr_ptr = &retval;
        fci.no_separation = 0;
        /*fci.function_handler_cache = &function_ptr;*/
-       
-       result = zend_call_function(&fci, NULL TSRMLS_CC);
-       if (result == FAILURE) {
-               if (Z_TYPE(handler) == IS_STRING) {
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call 
handler %s()", Z_STRVAL_P(&handler));
-               } 
+       if (!zend_make_callable(&handler, &callable TSRMLS_CC)) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call handler 
%s()", callable);
+               efree(callable);
+               
        } else {
-               if (retval->type == IS_OBJECT && instanceof_function( 
Z_OBJCE_P(retval), dom_node_class_entry TSRMLS_CC)) {
-                       xmlNode *nodep;
-                       dom_object *obj;
-                       obj = (dom_object *)zend_object_store_get_object(retval 
TSRMLS_CC);
-                       nodep = dom_object_get_node(obj);
-                       valuePush(ctxt, xmlXPathNewNodeSet(nodep));
-               } else if (retval->type == IS_BOOL) {
-                       valuePush(ctxt, xmlXPathNewBoolean(retval->value.lval));
-               } else if (retval->type == IS_OBJECT) {
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "A PHP Object can 
not be converted to a XPath-string");
-                       valuePush(ctxt, xmlXPathNewString(""));
+               result = zend_call_function(&fci, NULL TSRMLS_CC);
+               if (result == FAILURE) {
+                       if (Z_TYPE(handler) == IS_STRING) {
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to 
call handler %s()", Z_STRVAL_P(&handler));
+                       } 
                } else {
-                       convert_to_string_ex(&retval);
-                       valuePush(ctxt, xmlXPathNewString( Z_STRVAL_P(retval)));
+                       if (retval->type == IS_OBJECT && instanceof_function( 
Z_OBJCE_P(retval), dom_node_class_entry TSRMLS_CC)) {
+                               xmlNode *nodep;
+                               dom_object *obj;
+                               obj = (dom_object 
*)zend_object_store_get_object(retval TSRMLS_CC);
+                               nodep = dom_object_get_node(obj);
+                               valuePush(ctxt, xmlXPathNewNodeSet(nodep));
+                       } else if (retval->type == IS_BOOL) {
+                               valuePush(ctxt, 
xmlXPathNewBoolean(retval->value.lval));
+                       } else if (retval->type == IS_OBJECT) {
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "A PHP 
Object can not be converted to a XPath-string");
+                               valuePush(ctxt, xmlXPathNewString(""));
+                       } else {
+                               convert_to_string_ex(&retval);
+                               valuePush(ctxt, xmlXPathNewString( 
Z_STRVAL_P(retval)));
+                       }
+                       zval_ptr_dtor(&retval);
                }
-               zval_ptr_dtor(&retval);
        }
        zval_dtor(&handler);
        for (i = 0; i < nargs - 1; i++) {
http://cvs.php.net/diff.php/php-src/ext/xsl/tests/xslt011.phpt?r1=1.8&r2=1.9&ty=u
Index: php-src/ext/xsl/tests/xslt011.phpt
diff -u php-src/ext/xsl/tests/xslt011.phpt:1.8 php-src/ext/xsl/tests/xslt011.phpt:1.9
--- php-src/ext/xsl/tests/xslt011.phpt:1.8      Wed Apr  7 12:48:11 2004
+++ php-src/ext/xsl/tests/xslt011.phpt  Tue Apr 20 05:24:24 2004
@@ -39,6 +39,13 @@
   function nonDomNode() {
     return  new foo();
   }
+  
+  class aClass {
+    static function aStaticFunction($id) {
+        return $id;
+    }
+  }
+  
 --EXPECTF--
 Test 11: php:function Support
 
@@ -48,4 +55,5 @@
 foobar - 
 this is from an external DomDocument
 from the Input Document
+static
 
http://cvs.php.net/diff.php/php-src/ext/xsl/tests/xslt011.xsl?r1=1.3&r2=1.4&ty=u
Index: php-src/ext/xsl/tests/xslt011.xsl
diff -u php-src/ext/xsl/tests/xslt011.xsl:1.3 php-src/ext/xsl/tests/xslt011.xsl:1.4
--- php-src/ext/xsl/tests/xslt011.xsl:1.3       Sun Jan 18 07:30:52 2004
+++ php-src/ext/xsl/tests/xslt011.xsl   Tue Apr 20 05:24:24 2004
@@ -16,6 +16,10 @@
 <xsl:value-of select="php:function('nodeSet',/doc)/i"/>
 <xsl:text>
 </xsl:text>
+<xsl:value-of select="php:function('aClass::aStaticFunction','static')"/>
+<xsl:text>
+</xsl:text>
+
 <xsl:value-of select="php:function('nonDomNode')"/>
 </xsl:template>
 </xsl:stylesheet>

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

Reply via email to