[PHP-CVS] cvs: php-src /tests/classes clone_002.phpt clone_003.phpt ZendEngine2 zend_objects.c

2003-07-02 Thread Marcus Boerger
helly   Wed Jul  2 03:24:11 2003 EDT

  Modified files:  
/ZendEngine2zend_objects.c 
/php-src/tests/classes  clone_002.phpt clone_003.phpt 
  Log:
  Finally fix property cloning and fix the tests accordingly.
  
  # The default behaviour is to copy all properties with all current values
  # from the old object. But if __clone is overwritten then only the default
  # properties are cloned with their correct default values. So we keep
  # the type system intact and also allow real __clone overwriting now.
  
  
Index: ZendEngine2/zend_objects.c
diff -u ZendEngine2/zend_objects.c:1.31 ZendEngine2/zend_objects.c:1.32
--- ZendEngine2/zend_objects.c:1.31 Tue Jul  1 19:29:36 2003
+++ ZendEngine2/zend_objects.c  Wed Jul  2 03:24:10 2003
@@ -17,7 +17,7 @@
+--+
 */
 
-/* $Id: zend_objects.c,v 1.31 2003/07/01 23:29:36 helly Exp $ */
+/* $Id: zend_objects.c,v 1.32 2003/07/02 07:24:10 helly Exp $ */
 
 #include zend.h
 #include zend_globals.h
@@ -108,12 +108,13 @@
zend_object *new_object;
zend_object_handle handle = Z_OBJ_HANDLE_P(zobject);
 
+   /* assume that create isn't overwritten, so when clone depends on the 
+* overwritten one then it must itself be overwritten */
old_object = zend_objects_get_address(zobject TSRMLS_CC);
retval = zend_objects_new(new_object, old_object-ce TSRMLS_CC);
 
ALLOC_HASHTABLE(new_object-properties);
zend_hash_init(new_object-properties, 0, NULL, ZVAL_PTR_DTOR, 0);
-   zend_hash_copy(new_object-properties, old_object-properties, 
(copy_ctor_func_t) zval_add_ref, (void *) NULL /* Not used anymore */, sizeof(zval *));
 
if (old_object-ce-clone) {
zval *old_obj;
@@ -121,6 +122,9 @@
zval *clone_func_name;
zval *retval_ptr;
HashTable symbol_table;
+   zend_class_entry *ce = old_object-ce;
+
+   zend_hash_copy(new_object-properties, ce-default_properties, 
(copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *));
 
MAKE_STD_ZVAL(new_obj);
new_obj-type = IS_OBJECT;
@@ -148,6 +152,8 @@
zval_ptr_dtor(new_obj);
zval_ptr_dtor(clone_func_name);
zval_ptr_dtor(retval_ptr);
+   } else {
+   zend_hash_copy(new_object-properties, old_object-properties, 
(copy_ctor_func_t) zval_add_ref, (void *) NULL /* Not used anymore */, sizeof(zval *));
}
 
return retval;
Index: php-src/tests/classes/clone_002.phpt
diff -u php-src/tests/classes/clone_002.phpt:1.3 
php-src/tests/classes/clone_002.phpt:1.4
--- php-src/tests/classes/clone_002.phpt:1.3Tue Jul  1 19:20:48 2003
+++ php-src/tests/classes/clone_002.phptWed Jul  2 03:24:11 2003
@@ -38,7 +38,7 @@
   [p1]=
   int(1)
   [p2]=
-  string(1) A
+  int(2)
   [p3]=
   string(1) C
 }
Index: php-src/tests/classes/clone_003.phpt
diff -u php-src/tests/classes/clone_003.phpt:1.1 
php-src/tests/classes/clone_003.phpt:1.2
--- php-src/tests/classes/clone_003.phpt:1.1Tue Jul  1 19:57:27 2003
+++ php-src/tests/classes/clone_003.phptWed Jul  2 03:24:11 2003
@@ -5,26 +5,29 @@
 --FILE--
 ?php
 class base {
-   private $p1 = 1;
-   protected $p2 = 2;
-   public $p3;
+   protected $p1 = 'base:1';
+   public $p2 = 'base:2';
+   public $p3 = 'base:3';
+   public $p4 = 'base:4';
+   public $p5 = 'base:5';
+   private $p6 = 'base:6';
public function __clone() {
}
 };
 
-class test {
-   public $p1 = 4;
-   protected $p4 = 5;
-   public $p5;
+class test extends base {
+   public $p1 = 'test:1';
+   public $p3 = 'test:3';
+   public $p4 = 'test:4';
+   public $p5 = 'test:5';
public function __clone() {
+   $this-p5 = 'clone:5';
}
 }
 
 $obj = new test;
-$obj-p2 = 'A';
-$obj-p3 = 'B';
+$obj-p4 = 'A';
 $copy = $obj-__clone();
-$copy-p3 = 'C';
 echo Object\n;
 print_r($obj);
 echo Clown\n;
@@ -35,20 +38,23 @@
 Object
 test Object
 (
-[p1] = 4
-[p4:protected] = 5
-[p5] = 
-[p2] = A
-[p3] = B
+[p1] = test:1
+[p3] = test:3
+[p4] = A
+[p5] = test:5
+[p1:protected] = base:1
+[p2] = base:2
+[p6:private] = base:6
 )
 Clown
 test Object
 (
-[p1] = 4
-[p4:protected] = 5
-[p5] = 
-[p1:private] = 1
-[p2] = A
-[p3] = C
+[p1] = test:1
+[p3] = test:3
+[p4] = test:4
+[p5] = clone:5
+[p1:protected] = base:1
+[p2] = base:2
+[p6:private] = base:6
 )
 Done



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



[PHP-CVS] cvs: php-src /tests/classes clone_002.phpt

2003-07-01 Thread Marcus Boerger
helly   Tue Jul  1 17:27:59 2003 EDT

  Added files: 
/php-src/tests/classes  clone_002.phpt 
  Log:
  Add more clone testing
  

Index: php-src/tests/classes/clone_002.phpt
+++ php-src/tests/classes/clone_002.phpt
--TEST--
ZE2 object cloning, 1
--SKIPIF--
?php if (version_compare(zend_version(), '2.0.0-dev', '')) die('skip ZendEngine 2 
needed'); ?
--FILE--
?php
class test {
public $p1 = 1;
public $p2 = 2;
public $p3;
public __clone() {
}
};

$obj = new test;
$obj-p2 = 'A';
$obj-p3 = 'B';
$copy = $obj-__clone();
$copy-p3 = 'C';
echo Object\n;
var_dump($obj);
echo Clown\n;
var_dump($copy);
echo Done\n;
?
--EXPECT--
Object
object(test)#1 (3) {
  [p1]=
  int(1)
  [p2]=
  string(1) A
  [p3]=
  string(1) B
}
Clown
object(test)#2 (3) {
  [p1]=
  int(1)
  [p2]=
  string(1) A
  [p3]=
  string(1) C
}
Done



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



[PHP-CVS] cvs: php-src /tests/classes clone_002.phpt

2003-07-01 Thread Marcus Boerger
helly   Tue Jul  1 17:28:15 2003 EDT

  Modified files:  
/php-src/tests/classes  clone_002.phpt 
  Log:
  ups
  
Index: php-src/tests/classes/clone_002.phpt
diff -u php-src/tests/classes/clone_002.phpt:1.1 
php-src/tests/classes/clone_002.phpt:1.2
--- php-src/tests/classes/clone_002.phpt:1.1Tue Jul  1 17:27:59 2003
+++ php-src/tests/classes/clone_002.phptTue Jul  1 17:28:15 2003
@@ -1,5 +1,5 @@
 --TEST--
-ZE2 object cloning, 1
+ZE2 object cloning, 2
 --SKIPIF--
 ?php if (version_compare(zend_version(), '2.0.0-dev', '')) die('skip ZendEngine 2 
needed'); ?
 --FILE--



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



[PHP-CVS] cvs: php-src /tests/classes clone_002.phpt

2003-07-01 Thread Marcus Boerger
helly   Tue Jul  1 19:20:48 2003 EDT

  Modified files:  
/php-src/tests/classes  clone_002.phpt 
  Log:
  ups (2nd)
  
Index: php-src/tests/classes/clone_002.phpt
diff -u php-src/tests/classes/clone_002.phpt:1.2 
php-src/tests/classes/clone_002.phpt:1.3
--- php-src/tests/classes/clone_002.phpt:1.2Tue Jul  1 17:28:15 2003
+++ php-src/tests/classes/clone_002.phptTue Jul  1 19:20:48 2003
@@ -8,7 +8,7 @@
public $p1 = 1;
public $p2 = 2;
public $p3;
-   public __clone() {
+   public function __clone() {
}
 };
 



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



Re: [PHP-CVS] cvs: php-src /tests/classes clone_002.phpt

2003-07-01 Thread Jani Taskinen

Why do all these test check the ZE version???
This branch uses ZE2 anyway?

--Jani


On Tue, 1 Jul 2003, Marcus Boerger wrote:

helly  Tue Jul  1 17:28:15 2003 EDT

  Modified files:  
/php-src/tests/classes clone_002.phpt 
  Log:
  ups
  
Index: php-src/tests/classes/clone_002.phpt
diff -u php-src/tests/classes/clone_002.phpt:1.1 
php-src/tests/classes/clone_002.phpt:1.2
--- php-src/tests/classes/clone_002.phpt:1.1   Tue Jul  1 17:27:59 2003
+++ php-src/tests/classes/clone_002.phpt   Tue Jul  1 17:28:15 2003
@@ -1,5 +1,5 @@
 --TEST--
-ZE2 object cloning, 1
+ZE2 object cloning, 2
 --SKIPIF--
 ?php if (version_compare(zend_version(), '2.0.0-dev', '')) die('skip ZendEngine 2 
 needed'); ?
 --FILE--






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



Re[2]: [PHP-CVS] cvs: php-src /tests/classes clone_002.phpt

2003-07-01 Thread Marcus Börger
Hello Jani,

Wednesday, July 2, 2003, 1:58:29 AM, you wrote:


JT Why do all these test check the ZE version???
JT This branch uses ZE2 anyway?

Maybe you edit them whit SED and remove those chacks all ?

-- 
Best regards,
 Marcusmailto:[EMAIL PROTECTED]


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