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