cvs: ZendEngine2 / zend_compile.c zend_compile.h zend_language_parser.y
| From: | Zeev Suraski | 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: