Sophie

Sophie

distrib > Mandriva > current > i586 > media > contrib-release-src > by-pkgid > 22e5092e1bd23b2766f2e2418c78afad > files > 1

php-perl-1.0.0-27mdv2010.1.src.rpm

--- php_perl.c	2004-12-17 11:49:46.000000000 +0100
+++ php_perl.c.oden	2009-10-06 12:03:41.000000000 +0200
@@ -55,6 +55,35 @@
 #include "SAPI.h"
 #include "php_perl.h"
 
+#ifndef Z_ISREF
+# define Z_REFCOUNT_PP(ppz)				Z_REFCOUNT_P(*(ppz))
+# define Z_SET_REFCOUNT_PP(ppz, rc)		Z_SET_REFCOUNT_P(*(ppz), rc)
+# define Z_ADDREF_PP(ppz)				Z_ADDREF_P(*(ppz))
+# define Z_DELREF_PP(ppz)				Z_DELREF_P(*(ppz))
+# define Z_ISREF_PP(ppz)				Z_ISREF_P(*(ppz))
+# define Z_SET_ISREF_PP(ppz)			Z_SET_ISREF_P(*(ppz))
+# define Z_UNSET_ISREF_PP(ppz)			Z_UNSET_ISREF_P(*(ppz))
+# define Z_SET_ISREF_TO_PP(ppz, isref)	Z_SET_ISREF_TO_P(*(ppz), isref)
+
+# define Z_REFCOUNT_P(pz)				(pz)->refcount
+# define Z_SET_REFCOUNT_P(pz, rc)		do {(pz)->refcount = (rc);} while(0)
+# define Z_ADDREF_P(pz)					++(pz)->refcount
+# define Z_DELREF_P(pz)					--(pz)->refcount
+# define Z_ISREF_P(pz)					(pz)->is_ref
+# define Z_SET_ISREF_P(pz)				do {(pz)->is_ref = 1;} while(0)
+# define Z_UNSET_ISREF_P(pz)			do {(pz)->is_ref = 1;} while(0)
+# define Z_SET_ISREF_TO_P(pz, isref)	do {(pz)->is_ref = (isref);} while(0)
+
+# define Z_REFCOUNT(z)					Z_REFCOUNT_P(&(z))
+# define Z_SET_REFCOUNT(z, rc)			Z_SET_REFCOUNT_P(&(z), rc)
+# define Z_ADDREF(z)					Z_ADDREF_P(&(z))
+# define Z_DELREF(z)					Z_DELREF_P(&(z))
+# define Z_ISREF(z)						Z_ISREF_P(&(z))
+# define Z_SET_ISREF(z)					Z_SET_ISREF_P(&(z))
+# define Z_UNSET_ISREF(z)				Z_UNSET_ISREF_P(&(z))
+# define Z_SET_ISREF_TO(z, isref)		Z_SET_ISREF_TO_P(&(z), isref)
+#endif
+
 ZEND_BEGIN_MODULE_GLOBALS(perl)
   PerlInterpreter *perl;
   HashTable       perl_objects; /* this hash is used to make one to one
@@ -139,8 +168,8 @@ static zend_function *php_perl_get_metho
 #endif
 static int php_perl_call_function_handler(char *method, INTERNAL_FUNCTION_PARAMETERS);
 static zend_function *php_perl_get_constructor(zval *object TSRMLS_DC);
-static zend_class_entry* php_perl_get_class_entry(zval *object TSRMLS_DC);
-static int php_perl_get_class_name(zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC);
+static zend_class_entry* php_perl_get_class_entry(const zval *object TSRMLS_DC);
+static int php_perl_get_class_name(const zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC);
 static zval* php_perl_get(zval *object TSRMLS_DC);
 static void php_perl_set(zval **object, zval *value TSRMLS_DC);
 
@@ -340,14 +369,14 @@ static SV* php_perl_zval_to_sv_ref(PerlI
 {
   SV* sv;
 
-  if ((zv->is_ref || Z_TYPE_P(zv) == IS_OBJECT || Z_TYPE_P(zv) == IS_ARRAY) &&
+  if ((Z_ISREF_P(zv) || Z_TYPE_P(zv) == IS_OBJECT || Z_TYPE_P(zv) == IS_ARRAY) &&
       zend_hash_find(var_hash, (char*)zv, sizeof(zv), (void**)&sv) == SUCCESS) {
     sv = *(SV**)sv;
     SvREFCNT_inc(sv);
     return sv;
   }
   sv = php_perl_zval_to_sv_noref(my_perl, zv, var_hash TSRMLS_CC);
-  if (zv->is_ref || Z_TYPE_P(zv) == IS_OBJECT || Z_TYPE_P(zv) == IS_ARRAY) {
+  if (Z_ISREF_P(zv) || Z_TYPE_P(zv) == IS_OBJECT || Z_TYPE_P(zv) == IS_ARRAY) {
     zend_hash_add(var_hash, (char*)zv, sizeof(zv), &sv, sizeof(SV*), NULL);
   }
   return sv;
@@ -390,7 +419,7 @@ static SV* php_perl_zval_to_sv_noref(Per
         SV* sv = (SV*)newRV((SV*)hv);
         zval** zv_ptr;
 
-        if (zv->is_ref || Z_TYPE_P(zv) == IS_ARRAY) {
+        if (Z_ISREF_P(zv) || Z_TYPE_P(zv) == IS_ARRAY) {
           zend_hash_add(var_hash, (char*)zv, sizeof(zv), &sv, sizeof(SV*), NULL);
         }
 
@@ -420,7 +449,7 @@ static SV* php_perl_zval_to_sv_noref(Per
         SV* sv = (SV*)newRV((SV*)av);
         zval** zv_ptr;
 
-        if (zv->is_ref || Z_TYPE_P(zv) == IS_ARRAY) {
+        if (Z_ISREF_P(zv) || Z_TYPE_P(zv) == IS_ARRAY) {
           zend_hash_add(var_hash, (char*)zv, sizeof(zv), &sv, sizeof(SV*), NULL);
         }
 
@@ -480,9 +509,9 @@ static zval* php_perl_sv_to_zval_ref(Per
       FREE_ZVAL(zv);
     }
     if (Z_TYPE_PP(z) != IS_OBJECT) {
-      (*z)->is_ref = 1;
+      Z_SET_ISREF_PP(z);
     }
-    (*z)->refcount++;
+    Z_ADDREF_PP(z);
     return *z;
   }
 
@@ -750,7 +779,7 @@ static zval* php_perl_get(zval *object T
   }
   retval = php_perl_sv_to_zval(my_perl, obj->sv, NULL TSRMLS_CC);
   /* ensure we're creating a temporary variable */
-  if (retval) {retval->refcount = 0;}
+  if (retval) {Z_SET_REFCOUNT_P(retval, 0);}
   return retval;
 }
 
@@ -824,16 +853,16 @@ static zval* php_perl_read_dimension(zva
         obj->context = PERL_SCALAR;
 
         ALLOC_INIT_ZVAL(retval);
-        retval->refcount = 0;
-        retval->is_ref = 1;
-        retval->type = IS_OBJECT;
+        Z_SET_REFCOUNT_P(retval, 0);
+        Z_SET_ISREF_P(retval);
+        Z_TYPE_P(retval) = IS_OBJECT;
         Z_OBJ_HT_P(retval) = &php_perl_proxy_handlers;
         Z_OBJ_HANDLE_P(retval) = zend_objects_store_put(obj, php_perl_destructor, NULL, NULL TSRMLS_CC);        
       } else {
         ALLOC_INIT_ZVAL(retval);
         retval = php_perl_sv_to_zval(my_perl, *prop_val, retval TSRMLS_CC);
         /* ensure we're creating a temporary variable */
-        if (retval) {retval->refcount = 0;}
+        if (retval) {Z_SET_REFCOUNT_P(retval, 0);}
       }
     }
   } else if (SvTYPE(sv) == SVt_PVHV) {
@@ -973,8 +1002,8 @@ static zval* php_perl_read_property(zval
       new_obj->properties = NULL;
 
       ALLOC_INIT_ZVAL(new_object);
-      new_object->refcount = 0;
-      new_object->type = IS_OBJECT;
+      Z_SET_REFCOUNT_P(new_object, 0);
+      Z_TYPE_P(new_object) = IS_OBJECT;
       new_object->value.obj.handlers = &php_perl_object_handlers;
       new_object->value.obj.handle =
         zend_objects_store_put(new_obj, php_perl_cleaner, NULL, NULL TSRMLS_CC);
@@ -990,8 +1019,8 @@ static zval* php_perl_read_property(zval
       new_obj->properties = NULL;
 
       ALLOC_INIT_ZVAL(new_object);
-      new_object->refcount = 0;
-      new_object->type = IS_OBJECT;
+      Z_SET_REFCOUNT_P(new_object, 0);
+      Z_TYPE_P(new_object) = IS_OBJECT;
       new_object->value.obj.handlers = &php_perl_object_handlers;
       new_object->value.obj.handle =
         zend_objects_store_put(new_obj, php_perl_cleaner, NULL, NULL TSRMLS_CC);
@@ -1007,8 +1036,8 @@ static zval* php_perl_read_property(zval
       new_obj->properties = NULL;
 
       ALLOC_INIT_ZVAL(new_object);
-      new_object->refcount = 0;
-      new_object->type = IS_OBJECT;
+      Z_SET_REFCOUNT_P(new_object, 0);
+      Z_TYPE_P(new_object) = IS_OBJECT;
       new_object->value.obj.handlers = &php_perl_object_handlers;
       new_object->value.obj.handle =
         zend_objects_store_put(new_obj, php_perl_cleaner, NULL, NULL TSRMLS_CC);
@@ -1085,15 +1114,15 @@ static zval* php_perl_read_property(zval
       obj->context = PERL_SCALAR;
 
       ALLOC_INIT_ZVAL(retval);
-      retval->refcount = 0;
-      retval->is_ref = 1;
-      retval->type = IS_OBJECT;
+      Z_SET_REFCOUNT_P(retval, 0);
+      Z_SET_ISREF_P(retval);
+      Z_TYPE_P(retval) = IS_OBJECT;
       Z_OBJ_HT_P(retval) = &php_perl_proxy_handlers;
       Z_OBJ_HANDLE_P(retval) = zend_objects_store_put(obj, php_perl_destructor, NULL, NULL TSRMLS_CC);        
     } else {
       retval = php_perl_sv_to_zval(my_perl, sv, retval TSRMLS_CC);
       /* ensure we're creating a temporary variable */
-      if (retval) {retval->refcount = 0;}
+      if (retval) {Z_SET_REFCOUNT_P(retval, 0);}
     }
   }
 
@@ -1518,7 +1547,7 @@ static HashTable* php_perl_get_propertie
 }
 
 /* Returns class name of overloaded Perl's object */
-static int php_perl_get_class_name(zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC)
+static int php_perl_get_class_name(const zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC)
 {
   php_perl_object *obj = (php_perl_object*)zend_object_store_get_object(object TSRMLS_CC);
   SV* sv = obj->sv;
@@ -1561,7 +1590,7 @@ static int php_perl_get_class_name(zval 
 }
 
 /* Returns class_entry of overloaded Perl's objects */
-static zend_class_entry* php_perl_get_class_entry(zval *object TSRMLS_DC)
+static zend_class_entry* php_perl_get_class_entry(const zval *object TSRMLS_DC)
 {
   return perl_class_entry;
 }
@@ -1752,10 +1781,14 @@ static void php_perl_iterator_rewind(zen
   }
 }
 
+#if PHP_VERSION_ID >= 50200
+zend_object_iterator *php_perl_get_iterator(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC)
+#else
 zend_object_iterator *php_perl_get_iterator(zend_class_entry *ce, zval *object TSRMLS_DC)
+#endif
 {
   zend_object_iterator *iterator = emalloc(sizeof(zend_object_iterator));
-  object->refcount++;
+  Z_ADDREF_P(object);
   iterator->data = (void*)object;
   iterator->funcs = &php_perl_iterator_funcs;