From 9c52e883f0896bb6ebda1ff838d04dedec6a1707 Mon Sep 17 00:00:00 2001 From: Andi Gutmans Date: Wed, 17 Jul 2002 18:36:29 +0000 Subject: [PATCH] - Rejuggle some code. --- Zend/zend_compile.c | 5 ++++- Zend/zend_language_parser.y | 11 +++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index dd35df6bb0..21c606f7f4 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -918,6 +918,9 @@ void zend_do_begin_function_declaration(znode *function_token, znode *function_n op_array.scope = CG(active_class_entry); if (is_method) { + char *foo; + + foo = CG(active_class_entry)->name; zend_hash_update(&CG(active_class_entry)->function_table, name, name_len+1, &op_array, sizeof(zend_op_array), (void **) &CG(active_op_array)); if ((CG(active_class_entry)->name_length == (uint) name_len) && (!memcmp(CG(active_class_entry)->name, name, name_len))) { CG(active_class_entry)->constructor = (zend_function *) CG(active_op_array); @@ -2046,7 +2049,7 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, znod new_class_entry->handle_property_get = NULL; /* code for inheritance from parent class */ - if (parent_class_name) { + if (parent_class_name->op_type == IS_CONST) { zend_class_entry *parent_class, **parent_class_p; zend_function tmp_zend_function; zval *tmp; diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 08b420f1b6..fc3655472b 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -271,8 +271,12 @@ unticked_declaration_statement: '(' parameter_list ')' '{' inner_statement_list '}' { zend_do_end_function_declaration(&$1 TSRMLS_CC); } | T_OLD_FUNCTION { $1.u.opline_num = CG(zend_lineno); } is_reference T_STRING { zend_do_begin_function_declaration(&$1, &$4, 0, $3.op_type TSRMLS_CC); } parameter_list '(' inner_statement_list ')' ';' { zend_do_end_function_declaration(&$1 TSRMLS_CC); } - | T_CLASS declaration_class_name { zend_do_begin_class_declaration(&$1, &$2, NULL TSRMLS_CC); } '{' class_statement_list '}' { zend_do_end_class_declaration(&$1 TSRMLS_CC); } - | T_CLASS declaration_class_name T_EXTENDS T_STRING { zend_do_begin_class_declaration(&$1, &$2, &$4 TSRMLS_CC); } '{' class_statement_list '}' { zend_do_end_class_declaration(&$1 TSRMLS_CC); } + | T_CLASS declaration_class_name extends_from { zend_do_begin_class_declaration(&$1, &$2, &$3 TSRMLS_CC); } '{' class_statement_list '}' { zend_do_end_class_declaration(&$1 TSRMLS_CC); } +; + +extends_from: + /* empty */ { $$.op_type = IS_UNUSED; } + | T_EXTENDS T_STRING { $$ = $2; } ; declaration_class_name: @@ -432,8 +436,7 @@ class_statement: parameter_list ')' '{' inner_statement_list '}' { zend_do_end_function_declaration(&$1 TSRMLS_CC); } | T_OLD_FUNCTION { $1.u.opline_num = CG(zend_lineno); } is_reference T_STRING { zend_do_begin_function_declaration(&$1, &$4, 1, $3.op_type TSRMLS_CC); } parameter_list '(' inner_statement_list ')' ';' { zend_do_end_function_declaration(&$1 TSRMLS_CC); } - | T_CLASS T_STRING { zend_do_begin_class_declaration(&$1, &$2, NULL TSRMLS_CC); } '{' class_statement_list '}' { zend_do_end_class_declaration(&$1 TSRMLS_CC); } - | T_CLASS T_STRING T_EXTENDS T_STRING { zend_do_begin_class_declaration(&$1, &$2, &$4 TSRMLS_CC); } '{' class_statement_list '}' { zend_do_end_class_declaration(&$1 TSRMLS_CC); } + | T_CLASS T_STRING extends_from { zend_do_begin_class_declaration(&$1, &$2, &$3 TSRMLS_CC); } '{' class_statement_list '}' { zend_do_end_class_declaration(&$1 TSRMLS_CC); } ; is_reference: -- 2.40.0