helly           Tue Mar  9 11:38:38 2004 EDT

  Modified files:              
    /ZendEngine2        zend_API.c zend_compile.c zend_compile.h 
                        zend_execute.c zend_execute_API.c zend_interfaces.c 
                        zend_language_parser.y zend_reflection_api.c 
    /php-src/ext/spl    spl_functions.c spl_iterators.c 
  Log:
  Clearify the different method/class flags (as discussed with Andi).
  
  
http://cvs.php.net/diff.php/ZendEngine2/zend_API.c?r1=1.245&r2=1.246&ty=u
Index: ZendEngine2/zend_API.c
diff -u ZendEngine2/zend_API.c:1.245 ZendEngine2/zend_API.c:1.246
--- ZendEngine2/zend_API.c:1.245        Tue Mar  2 11:17:58 2004
+++ ZendEngine2/zend_API.c      Tue Mar  9 11:38:33 2004
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_API.c,v 1.245 2004/03/02 16:17:58 helly Exp $ */
+/* $Id: zend_API.c,v 1.246 2004/03/09 16:38:33 helly Exp $ */
 
 #include "zend.h"
 #include "zend_execute.h"
@@ -1237,11 +1237,12 @@
                if (ptr->flags & ZEND_ACC_ABSTRACT) {
                        if (scope) {
                                /* This is a class that must be abstract itself. Here 
we set the check info. */
-                               scope->ce_flags |= ZEND_ACC_ABSTRACT;
+                               scope->ce_flags |= ZEND_ACC_IMPLICIT_ABSTRACT_CLASS;
                                if (!(scope->ce_flags & ZEND_ACC_INTERFACE)) {
                                        /* Since the class is not an interface it 
needs to be declared as a abstract class. */
+                                       /* Since here we are handling internal 
functions only we can add the keyword flag. */
                                        /* This time we set the flag for the keyword 
'abstratc'. */
-                                       scope->ce_flags |= ZEND_ACC_ABSTRACT_CLASS;
+                                       scope->ce_flags |= 
ZEND_ACC_EXPLICIT_ABSTRACT_CLASS;
                                }
                        }
                } else {
@@ -1522,7 +1523,7 @@
 
 ZEND_API zend_class_entry *zend_register_internal_interface(zend_class_entry 
*orig_class_entry TSRMLS_DC)
 {
-       return do_register_internal_class(orig_class_entry, 
ZEND_ACC_ABSTRACT|ZEND_ACC_INTERFACE TSRMLS_CC);
+       return do_register_internal_class(orig_class_entry, ZEND_ACC_INTERFACE 
TSRMLS_CC);
 }
 
 ZEND_API int zend_set_hash_symbol(zval *symbol, char *name, int name_length,
http://cvs.php.net/diff.php/ZendEngine2/zend_compile.c?r1=1.555&r2=1.556&ty=u
Index: ZendEngine2/zend_compile.c
diff -u ZendEngine2/zend_compile.c:1.555 ZendEngine2/zend_compile.c:1.556
--- ZendEngine2/zend_compile.c:1.555    Tue Mar  9 10:27:39 2004
+++ ZendEngine2/zend_compile.c  Tue Mar  9 11:38:33 2004
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_compile.c,v 1.555 2004/03/09 15:27:39 andi Exp $ */
+/* $Id: zend_compile.c,v 1.556 2004/03/09 16:38:33 helly Exp $ */
 
 #include "zend_language_parser.h"
 #include "zend.h"
@@ -974,7 +974,7 @@
                }
 
                if (fn_flags & ZEND_ACC_ABSTRACT) {
-                       CG(active_class_entry)->ce_flags |= ZEND_ACC_ABSTRACT;
+                       CG(active_class_entry)->ce_flags |= 
ZEND_ACC_IMPLICIT_ABSTRACT_CLASS;
                }
 
                if (!(fn_flags & ZEND_ACC_PPP_MASK)) {
@@ -1749,8 +1749,8 @@
        TSRMLS_FETCH();
 
        if (zend_hash_quick_find(child_function_table, hash_key->arKey, 
hash_key->nKeyLength, hash_key->h, (void **) &child)==FAILURE) {
-               if (parent_flags & ZEND_ACC_ABSTRACT) {
-                       child_ce->ce_flags |= ZEND_ACC_ABSTRACT;
+               if (parent_flags & (ZEND_ACC_ABSTRACT)) {
+                       child_ce->ce_flags |= ZEND_ACC_IMPLICIT_ABSTRACT_CLASS;
                }
                return 1; /* method doesn't exist in child, copy from parent */
        }
@@ -2537,8 +2537,7 @@
        if (ce->num_interfaces > 0) {
                ce->interfaces = (zend_class_entry **) erealloc(ce->interfaces, 
sizeof(zend_class_entry *)*ce->num_interfaces);
        }
-       if (!(ce->ce_flags & ZEND_ACC_INTERFACE)
-               && !(ce->ce_flags & ZEND_ACC_ABSTRACT_CLASS)
+       if (!(ce->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS))
                && ((parent_token->op_type != IS_UNUSED) || (ce->num_interfaces > 0))) 
{
                zend_verify_abstract_class(ce TSRMLS_CC);
                if (ce->parent || ce->num_interfaces) {
http://cvs.php.net/diff.php/ZendEngine2/zend_compile.h?r1=1.281&r2=1.282&ty=u
Index: ZendEngine2/zend_compile.h
diff -u ZendEngine2/zend_compile.h:1.281 ZendEngine2/zend_compile.h:1.282
--- ZendEngine2/zend_compile.h:1.281    Tue Mar  9 10:27:39 2004
+++ ZendEngine2/zend_compile.h  Tue Mar  9 11:38:33 2004
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_compile.h,v 1.281 2004/03/09 15:27:39 andi Exp $ */
+/* $Id: zend_compile.h,v 1.282 2004/03/09 16:38:33 helly Exp $ */
 
 #ifndef ZEND_COMPILE_H
 #define ZEND_COMPILE_H
@@ -99,18 +99,21 @@
 } zend_try_catch_element;
 
 
+/* method flags (types) */
 #define ZEND_ACC_STATIC                        0x01
 #define ZEND_ACC_ABSTRACT              0x02
 #define ZEND_ACC_FINAL                 0x04
-#define ZEND_ACC_INTERFACE             0x08
-/* ZEND_ACC_ABSTRACT is used for abstract classes and methods. Abstract checks work 
only on this flag. */
-/* ZEND_ACC_ABSTRACT_CLASS denotes that a class was explicitly defined as abstract by 
using the keyword. */
-#define ZEND_ACC_ABSTRACT_CLASS        0x10
-#define ZEND_ACC_FINAL_CLASS   0x20
-#define ZEND_ACC_IMPLEMENTED_ABSTRACT  0x40
+#define ZEND_ACC_IMPLEMENTED_ABSTRACT          0x08
 
-#define ZEND_ACC_ALLOW_STATIC  0x80
+/* class flags (types) */
+/* ZEND_ACC_IMPLICIT_ABSTRACT_CLASS is used for abstract classes (since it is set by 
any abstract method even interfaces MAY have it set, too). */
+/* ZEND_ACC_EXPLICIT_ABSTRACT_CLASS denotes that a class was explicitly defined as 
abstract by using the keyword. */
+#define ZEND_ACC_IMPLICIT_ABSTRACT_CLASS       0x10
+#define ZEND_ACC_EXPLICIT_ABSTRACT_CLASS       0x20
+#define ZEND_ACC_FINAL_CLASS               0x40
+#define ZEND_ACC_INTERFACE                         0x80
 
+/* method flags (visibility) */
 /* The order of those must be kept - public < protected < private */
 #define ZEND_ACC_PUBLIC                0x100
 #define ZEND_ACC_PROTECTED     0x200
@@ -120,10 +123,14 @@
 #define ZEND_ACC_CHANGED       0x800
 #define ZEND_ACC_IMPLICIT_PUBLIC       0x1000
 
+/* method flags (special method detection) */
 #define ZEND_ACC_CTOR          0x2000
 #define ZEND_ACC_DTOR          0x4000
 #define ZEND_ACC_CLONE         0x8000
 
+/* method flag (bc only), any method that has this flag can be used statically and 
non statically. */
+#define ZEND_ACC_ALLOW_STATIC  0x10000
+
 char *zend_visibility_string(zend_uint fn_flags);
 
 
http://cvs.php.net/diff.php/ZendEngine2/zend_execute.c?r1=1.621&r2=1.622&ty=u
Index: ZendEngine2/zend_execute.c
diff -u ZendEngine2/zend_execute.c:1.621 ZendEngine2/zend_execute.c:1.622
--- ZendEngine2/zend_execute.c:1.621    Tue Mar  9 10:27:39 2004
+++ ZendEngine2/zend_execute.c  Tue Mar  9 11:38:33 2004
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_execute.c,v 1.621 2004/03/09 15:27:39 andi Exp $ */
+/* $Id: zend_execute.c,v 1.622 2004/03/09 16:38:33 helly Exp $ */
 
 #define ZEND_INTENSIVE_DEBUGGING 0
 
@@ -3169,7 +3169,7 @@
 
 int zend_new_handler(ZEND_OPCODE_HANDLER_ARGS)
 {
-       if (EX_T(opline->op1.u.var).class_entry->ce_flags & 
(ZEND_ACC_INTERFACE|ZEND_ACC_ABSTRACT|ZEND_ACC_ABSTRACT_CLASS)) {
+       if (EX_T(opline->op1.u.var).class_entry->ce_flags & 
(ZEND_ACC_INTERFACE|ZEND_ACC_IMPLICIT_ABSTRACT_CLASS|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS))
 {
                char *class_type;
 
                if (EX_T(opline->op1.u.var).class_entry->ce_flags & 
ZEND_ACC_INTERFACE) {
http://cvs.php.net/diff.php/ZendEngine2/zend_execute_API.c?r1=1.273&r2=1.274&ty=u
Index: ZendEngine2/zend_execute_API.c
diff -u ZendEngine2/zend_execute_API.c:1.273 ZendEngine2/zend_execute_API.c:1.274
--- ZendEngine2/zend_execute_API.c:1.273        Mon Mar  8 11:52:59 2004
+++ ZendEngine2/zend_execute_API.c      Tue Mar  9 11:38:34 2004
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_execute_API.c,v 1.273 2004/03/08 16:52:59 helly Exp $ */
+/* $Id: zend_execute_API.c,v 1.274 2004/03/09 16:38:34 helly Exp $ */
 
 #include <stdio.h>
 #include <signal.h>
@@ -1225,7 +1225,7 @@
 {
        zend_abstract_info ai;
 
-       if ((ce->ce_flags & ZEND_ACC_ABSTRACT) && !(ce->ce_flags & 
ZEND_ACC_ABSTRACT_CLASS)) {
+       if ((ce->ce_flags & ZEND_ACC_IMPLICIT_ABSTRACT_CLASS) && !(ce->ce_flags & 
ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) {
                memset(&ai, 0, sizeof(ai));
 
                zend_hash_apply_with_argument(&ce->function_table, (apply_func_arg_t) 
zend_verify_abstract_class_function, &ai TSRMLS_CC);
http://cvs.php.net/diff.php/ZendEngine2/zend_interfaces.c?r1=1.16&r2=1.17&ty=u
Index: ZendEngine2/zend_interfaces.c
diff -u ZendEngine2/zend_interfaces.c:1.16 ZendEngine2/zend_interfaces.c:1.17
--- ZendEngine2/zend_interfaces.c:1.16  Mon Mar  8 13:05:41 2004
+++ ZendEngine2/zend_interfaces.c       Tue Mar  9 11:38:34 2004
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_interfaces.c,v 1.16 2004/03/08 18:05:41 helly Exp $ */
+/* $Id: zend_interfaces.c,v 1.17 2004/03/09 16:38:34 helly Exp $ */
 
 #include "zend.h"
 #include "zend_API.h"
@@ -293,7 +293,7 @@
 
        if (class_type->get_iterator || (class_type->parent && 
class_type->parent->get_iterator)) {
                return SUCCESS;
-       }       
+       }
        for (i = 0; i < class_type->num_interfaces; i++) {
                if (class_type->interfaces[i] == zend_ce_aggregate || 
class_type->interfaces[i] == zend_ce_iterator) {
                        return SUCCESS;
http://cvs.php.net/diff.php/ZendEngine2/zend_language_parser.y?r1=1.141&r2=1.142&ty=u
Index: ZendEngine2/zend_language_parser.y
diff -u ZendEngine2/zend_language_parser.y:1.141 
ZendEngine2/zend_language_parser.y:1.142
--- ZendEngine2/zend_language_parser.y:1.141    Thu Feb 26 14:59:49 2004
+++ ZendEngine2/zend_language_parser.y  Tue Mar  9 11:38:34 2004
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_language_parser.y,v 1.141 2004/02/26 19:59:49 helly Exp $ */
+/* $Id: zend_language_parser.y,v 1.142 2004/03/09 16:38:34 helly Exp $ */
 
 /* 
  * LALR shift/reduce conflicts and how they are resolved:
@@ -287,7 +287,7 @@
 
 class_entry_type:
                T_CLASS                 {  $$.u.constant.value.lval = 0; }
-       |       T_ABSTRACT T_CLASS { $$.u.constant.value.lval = 
ZEND_ACC_ABSTRACT_CLASS; }
+       |       T_ABSTRACT T_CLASS { $$.u.constant.value.lval = 
ZEND_ACC_EXPLICIT_ABSTRACT_CLASS; }
        |       T_FINAL T_CLASS { $$.u.constant.value.lval = ZEND_ACC_FINAL_CLASS; }
 ;
 
http://cvs.php.net/diff.php/ZendEngine2/zend_reflection_api.c?r1=1.93&r2=1.94&ty=u
Index: ZendEngine2/zend_reflection_api.c
diff -u ZendEngine2/zend_reflection_api.c:1.93 ZendEngine2/zend_reflection_api.c:1.94
--- ZendEngine2/zend_reflection_api.c:1.93      Sun Mar  7 19:19:43 2004
+++ ZendEngine2/zend_reflection_api.c   Tue Mar  9 11:38:34 2004
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_reflection_api.c,v 1.93 2004/03/08 00:19:43 helly Exp $ */
+/* $Id: zend_reflection_api.c,v 1.94 2004/03/09 16:38:34 helly Exp $ */
 #include "zend.h"
 #include "zend_API.h"
 #include "zend_exceptions.h"
@@ -269,13 +269,17 @@
        if (ce->get_iterator != NULL) {
                string_printf(str, "<iterateable> ");
        }
-       if (ce->ce_flags & ZEND_ACC_ABSTRACT_CLASS) {
-               string_printf(str, "abstract ");
+       if (ce->ce_flags & ZEND_ACC_INTERFACE) {
+               string_printf(str, "interface ");
+       } else {
+               if (ce->ce_flags & 
(ZEND_ACC_IMPLICIT_ABSTRACT_CLASS|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) {
+                       string_printf(str, "abstract ");
+               }
+               if (ce->ce_flags & ZEND_ACC_FINAL_CLASS) {
+                       string_printf(str, "final ");
+               } 
+               string_printf(str, "class ");
        }
-       if (ce->ce_flags & ZEND_ACC_FINAL_CLASS) {
-               string_printf(str, "final ");
-       } 
-       string_printf(str, (ce->ce_flags & ZEND_ACC_INTERFACE) ? "interface " : "class 
");
        string_write(str, ce->name, ce->name_length);
        if (ce->parent) {
                string_printf(str, " extends %s", ce->parent->name);
@@ -952,7 +956,7 @@
 
        array_init(return_value);
 
-       if (modifiers & (ZEND_ACC_ABSTRACT | ZEND_ACC_ABSTRACT_CLASS)) {
+       if (modifiers & (ZEND_ACC_ABSTRACT | ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) {
                add_next_index_stringl(return_value, "abstract", sizeof("abstract"), 
1);
        }
        if (modifiers & (ZEND_ACC_FINAL | ZEND_ACC_FINAL_CLASS)) {
@@ -2252,7 +2256,7 @@
    Returns whether this class is abstract */
 ZEND_METHOD(reflection_class, isAbstract)
 {
-       _class_check_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_ACC_ABSTRACT_CLASS);
+       _class_check_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, 
ZEND_ACC_IMPLICIT_ABSTRACT_CLASS);
 }
 /* }}} */
 
@@ -3192,7 +3196,8 @@
        REGISTER_MAIN_LONG_CONSTANT("M_FINAL", ZEND_ACC_FINAL, 
CONST_PERSISTENT|CONST_CS);
 
        /* Class modifiers */
-       REGISTER_MAIN_LONG_CONSTANT("C_ABSTRACT", ZEND_ACC_ABSTRACT_CLASS, 
CONST_PERSISTENT|CONST_CS);
+       REGISTER_MAIN_LONG_CONSTANT("C_IMPLICIT_ABSTRACT", 
ZEND_ACC_IMPLICIT_ABSTRACT_CLASS, CONST_PERSISTENT|CONST_CS);
+       REGISTER_MAIN_LONG_CONSTANT("C_EXPLICIT_ABSTRACT", 
ZEND_ACC_EXPLICIT_ABSTRACT_CLASS, CONST_PERSISTENT|CONST_CS);
        REGISTER_MAIN_LONG_CONSTANT("C_FINAL", ZEND_ACC_FINAL_CLASS, 
CONST_PERSISTENT|CONST_CS);
 }
 /* }}} */
http://cvs.php.net/diff.php/php-src/ext/spl/spl_functions.c?r1=1.24&r2=1.25&ty=u
Index: php-src/ext/spl/spl_functions.c
diff -u php-src/ext/spl/spl_functions.c:1.24 php-src/ext/spl/spl_functions.c:1.25
--- php-src/ext/spl/spl_functions.c:1.24        Thu Feb  5 22:14:06 2004
+++ php-src/ext/spl/spl_functions.c     Tue Mar  9 11:38:37 2004
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_functions.c,v 1.24 2004/02/06 03:14:06 iliaa Exp $ */
+/* $Id: spl_functions.c,v 1.25 2004/03/09 16:38:37 helly Exp $ */
 
 #ifdef HAVE_CONFIG_H
        #include "config.h"
@@ -45,7 +45,7 @@
        *ppce = zend_register_internal_class(&ce TSRMLS_CC);
 
        /* entries changed by initialize */
-       (*ppce)->ce_flags = ZEND_ACC_ABSTRACT | ZEND_ACC_INTERFACE;
+       (*ppce)->ce_flags = ZEND_ACC_INTERFACE;
 }
 /* }}} */
 
http://cvs.php.net/diff.php/php-src/ext/spl/spl_iterators.c?r1=1.24&r2=1.25&ty=u
Index: php-src/ext/spl/spl_iterators.c
diff -u php-src/ext/spl/spl_iterators.c:1.24 php-src/ext/spl/spl_iterators.c:1.25
--- php-src/ext/spl/spl_iterators.c:1.24        Mon Mar  8 13:05:41 2004
+++ php-src/ext/spl/spl_iterators.c     Tue Mar  9 11:38:37 2004
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_iterators.c,v 1.24 2004/03/08 18:05:41 helly Exp $ */
+/* $Id: spl_iterators.c,v 1.25 2004/03/09 16:38:37 helly Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -1204,7 +1204,7 @@
 
        REGISTER_SPL_STD_CLASS_EX(FilterIterator, spl_dual_it_new, 
spl_funcs_FilterIterator);
        REGISTER_SPL_ITERATOR(FilterIterator);
-       spl_ce_FilterIterator->ce_flags |= ZEND_ACC_ABSTRACT_CLASS;
+       spl_ce_FilterIterator->ce_flags |= ZEND_ACC_EXPLICIT_ABSTRACT_CLASS;
 
        REGISTER_SPL_SUB_CLASS_EX(ParentIterator, FilterIterator, spl_dual_it_new, 
spl_funcs_ParentIterator);
        REGISTER_SPL_IMPLEMENTS(ParentIterator, RecursiveIterator);

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to