Hi Moriyoshi,
File: Zend/zend_compile.c
Function: do_bind_class
<some code snippet>
zend_class_entry *ce
zend_hash_add(class_table, opline->op2.u.constant.value.str.val,
opline->op2.u.constant.value.str.len+1, &ce, sizeof(zend_class_entry *),
NULL)
<some code snippet>

>From the above zend_hash_add I came to a conclusion that class_table is
a HashTable of string versus zend_class_entry**.
Am I incorrect?


Whereas for function table
do_bind_function
zend_function *function;
zend_hash_add(function_table, opline->op2.u.constant.value.str.val,
opline->op2.u.constant.value.str.len+1, function, sizeof(zend_function),
NULL)

My argument is deep copy of hashtable using hash_copy will work in case
of function table not in case of class_table because of double
dereferencing needed in case of class_table.
In fact we invoke 
zend_hash_copy(compiler_globals->class_table, global_class_table,
(copy_ctor_func_t) zend_class_add_ref, &tmp_class,
sizeof(zend_class_entry));

in Zend/zend.c in a function compiler_globals_ctor

The last parameter sizeof(zend_class_entry) of value say 292 to
zend_hash_copy indicate it to dereference the value of one of the
hashtable entry.
This value is of type zend_class_entry** which when dereferenced once
gives rise to zend_class_entry* the corresponding memcpy function copies
292 bytes from this zend_class_entry * which is not correct.
For details look at INIT_DATA macro in zend_hash.c


Thanks in advance

With regards
Kamesh Jayachandran
On Thu, 8 Jul 2004 02:25:21 +0900, "Moriyoshi Koizumi"
<[EMAIL PROTECTED]> said:
> 
> On 2004/07/08, at 1:04, Kamesh Jayachandran wrote:
> 
> > My question is very simple.
> > Please answer the following question.
> > 1)Zend has global_class_table of type HashTable with a key as the class
> > name ('char*') and value of type 'zend_class_entry**'. True or False?
> 
> Keys are just strings and associated values are of zend_class_entry *.
> 
> ZendEngine's HashTable may seem a quirk. It passes a pointer to the
> given value, not the holding value itself (of type zend_class_entry *,
> in this case). Is there something wrong with this?
> 
> Moriyoshi
> 

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

Reply via email to