cvs: ZendEngine2 / zend_compile.c zend_compile.h zend_language_parser.y

From: Date: Mon, 09 Jun 2003 13:51:53 +0000
Subject: cvs: ZendEngine2 / zend_compile.c zend_compile.h zend_language_parser.y
Groups: php.zend-engine.cvs 
Request: Send a blank email to php-zend-engine-cvs+get-1359@lists.php.net to get a copy of this message
zeev Mon Jun 9 09:51:53 2003 EDT Modified files: /ZendEngine2 zend_compile.c zend_compile.h zend_language_parser.y Log: Fix bogus implicit declarations of properties (squash bug #23671) Index: ZendEngine2/zend_compile.c diff -u ZendEngine2/zend_compile.c:1.425 ZendEngine2/zend_compile.c:1.426 --- ZendEngine2/zend_compile.c:1.425 Sun Jun 8 14:53:58 2003 +++ ZendEngine2/zend_compile.c Mon Jun 9 09:51:53 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_compile.c,v 1.425 2003/06/08 18:53:58 zeev Exp $ */ +/* $Id: zend_compile.c,v 1.426 2003/06/09 13:51:53 zeev Exp $ */ #include "zend_language_parser.h" #include "zend.h" @@ -2516,12 +2516,6 @@ break; } *result = opline_ptr->result; - if (CG(active_class_entry) - && property->op_type == IS_CONST - && !zend_hash_exists(&CG(active_class_entry)->properties_info, property->u.constant.value.str.val, property->u.constant.value.str.len+1)) { - property->u.constant.value.str.val = estrndup(property->u.constant.value.str.val, property->u.constant.value.str.len); - zend_do_declare_property(property, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_IMPLICIT_PUBLIC TSRMLS_CC); - } return; } } @@ -2539,6 +2533,36 @@ } + +void zend_do_declare_implicit_property(TSRMLS_D) +{ + zend_op *opline_ptr; + zend_llist_element *le; + zend_llist *fetch_list_ptr; + + + zend_stack_top(&CG(bp_stack), (void **) &fetch_list_ptr); + + if (fetch_list_ptr->count != 1) { + return; + } + + le = fetch_list_ptr->head; + opline_ptr = (zend_op *) le->data; + + if (opline_ptr->op1.op_type == IS_UNUSED + && CG(active_class_entry) + && opline_ptr->op2.op_type == IS_CONST + && !zend_hash_exists(&CG(active_class_entry)->properties_info, opline_ptr->op2.u.constant.value.str.val, opline_ptr->op2.u.constant.value.str.len+1)) { + znode property; + + property = opline_ptr->op2; + property.u.constant.value.str.val = estrndup(opline_ptr->op2.u.constant.value.str.val, opline_ptr->op2.u.constant.value.str.len); + zend_do_declare_property(&property, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_IMPLICIT_PUBLIC TSRMLS_CC); + } +} + + void zend_do_push_object(znode *object TSRMLS_DC) { zend_stack_push(&CG(object_stack), object, sizeof(znode)); @@ -2547,10 +2571,12 @@ void zend_do_pop_object(znode *object TSRMLS_DC) { - znode *tmp; + if (object) { + znode *tmp; - zend_stack_top(&CG(object_stack), (void **) &tmp); - *object = *tmp; + zend_stack_top(&CG(object_stack), (void **) &tmp); + *object = *tmp; + } zend_stack_del_top(&CG(object_stack)); } Index: ZendEngine2/zend_compile.h diff -u ZendEngine2/zend_compile.h:1.241 ZendEngine2/zend_compile.h:1.242 --- ZendEngine2/zend_compile.h:1.241 Sun Jun 8 14:53:58 2003 +++ ZendEngine2/zend_compile.h Mon Jun 9 09:51:53 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_compile.h,v 1.241 2003/06/08 18:53:58 zeev Exp $ */ +/* $Id: zend_compile.h,v 1.242 2003/06/09 13:51:53 zeev Exp $ */ #ifndef ZEND_COMPILE_H #define ZEND_COMPILE_H @@ -369,6 +369,7 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, znode *parent_class_name TSRMLS_DC); void zend_do_end_class_declaration(znode *class_token, znode *parent_token TSRMLS_DC); void zend_do_declare_property(znode *var_name, znode *value, zend_uint access_type TSRMLS_DC); +void zend_do_declare_implicit_property(TSRMLS_D); void zend_do_declare_class_constant(znode *var_name, znode *value TSRMLS_DC); void zend_do_fetch_property(znode *result, znode *object, znode *property TSRMLS_DC); Index: ZendEngine2/zend_language_parser.y diff -u ZendEngine2/zend_language_parser.y:1.116 ZendEngine2/zend_language_parser.y:1.117 --- ZendEngine2/zend_language_parser.y:1.116 Mon Jun 2 08:13:11 2003 +++ ZendEngine2/zend_language_parser.y Mon Jun 9 09:51:53 2003 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_language_parser.y,v 1.116 2003/06/02 12:13:11 stas Exp $ */ +/* $Id: zend_language_parser.y,v 1.117 2003/06/09 13:51:53 zeev Exp $ */ /* * LALR shift/reduce conflicts and how they are resolved: @@ -746,7 +746,7 @@ function_call_parameter_list ')' { zend_do_end_function_call(&$1, &$$, &$3, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); zend_do_push_object(&$$ TSRMLS_CC); $$.u.EA.type = ZEND_PARSED_METHOD_CALL; } - | /* empty */ { $$.u.EA.type = ZEND_PARSED_MEMBER; } + | /* empty */ { zend_do_declare_implicit_property(TSRMLS_C); $$.u.EA.type = ZEND_PARSED_MEMBER; } ; variable_without_objects:

« previous php.zend-engine.cvs (#1359) next »