]> granicus.if.org Git - php/commitdiff
- Rejuggle some code.
authorAndi Gutmans <andi@php.net>
Wed, 17 Jul 2002 18:36:29 +0000 (18:36 +0000)
committerAndi Gutmans <andi@php.net>
Wed, 17 Jul 2002 18:36:29 +0000 (18:36 +0000)
Zend/zend_compile.c
Zend/zend_language_parser.y

index dd35df6bb0ab6ec86e13e602ca13c776a9bb716b..21c606f7f41dd41b82c665d4527fbfd7d6697de6 100644 (file)
@@ -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;
index 08b420f1b62ddb0311dd0a467a3d7f903613f980..fc3655472b6f8020aa5fca12e59452798ce06999 100644 (file)
@@ -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: