Commit:    184db665ebdb6a2717d15e956391f6d88e1d05c6
Author:    Stanislav Malyshev <s...@php.net>         Sun, 27 Jan 2013 18:02:51 
-0800
Parents:   581db9c5fa934fff1ad8d1a29333d5d93d3af982
Branches:  PHP-5.5 master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=184db665ebdb6a2717d15e956391f6d88e1d05c6

Log:
fix bug #60833 - self, parent, static behave inconsistently case-sensitive

Bugs:
https://bugs.php.net/60833

Changed paths:
  M  NEWS
  M  UPGRADING
  A  Zend/tests/bug60833.phpt
  M  Zend/zend_compile.c

diff --git a/NEWS b/NEWS
index a8747f5..6cd007c 100644
--- a/NEWS
+++ b/NEWS
@@ -1,7 +1,9 @@
 PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? 201?, PHP 5.5.0 Beta 1
-
+- Core:
+  . Fixed bug # 60833 (self, parent, static behave inconsistently 
+    case-sensitive). (Stas, mario at include-once dot org)
 
 24 Jan 2013, PHP 5.5.0 Alpha 4
 
diff --git a/UPGRADING b/UPGRADING
index 6c53084..1d2cebf 100755
--- a/UPGRADING
+++ b/UPGRADING
@@ -24,6 +24,8 @@ PHP 5.5 UPGRADE NOTES
 - Drop Windows XP and 2003 support. (Pierre)
 - All internal case insensitivity handling for class, function and constant 
   names is done according to ASCII rules, current locale settings are ignored. 
+- self, parent & static keywords now are always case-insensitive (see bug
+  #60833).
 - php_logo_guid(), php_egg_logo_guid(), php_real_logo_guid() and 
   zend_logo_guid() have been removed
 - Removal of Logo GUIDs
diff --git a/Zend/tests/bug60833.phpt b/Zend/tests/bug60833.phpt
new file mode 100644
index 0000000..deb6c0f
--- /dev/null
+++ b/Zend/tests/bug60833.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Bug #60833 (self, parent, static behave inconsistently case-sensitive)
+--FILE--
+<?php
+class A {
+       static $x = "A";
+       function testit() {
+               $this->v1 = new sELF;
+               $this->v2 = new SELF;
+       }
+}
+
+class B extends A {
+       static $x = "B";
+       function testit() {
+               PARENT::testit();
+               $this->v3 = new sELF;
+               $this->v4 = new PARENT;
+               $this->v4 = STATIC::$x;
+       }
+}
+$t = new B();
+$t->testit();
+var_dump($t);
+?>
+--EXPECTF--
+object(B)#%d (4) {
+  ["v1"]=>
+  object(A)#%d (0) {
+  }
+  ["v2"]=>
+  object(A)#%d (0) {
+  }
+  ["v3"]=>
+  object(B)#%d (0) {
+  }
+  ["v4"]=>
+  string(1) "B"
+}
+
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 10eac2d..1a8d108 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -5,7 +5,7 @@
    | Copyright (c) 1998-2013 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |
-   | that is bundled with this package in the file LICENSE, and is        | 
+   | that is bundled with this package in the file LICENSE, and is        |
    | available through the world-wide-web at the following url:           |
    | http://www.zend.com/license/2_00.txt.                                |
    | If you did not receive a copy of the Zend license and are unable to  |
@@ -107,7 +107,7 @@ ZEND_API zend_executor_globals executor_globals;
 
 static void zend_duplicate_property_info(zend_property_info *property_info) /* 
{{{ */
 {
-       if (!IS_INTERNED(property_info->name)) {                
+       if (!IS_INTERNED(property_info->name)) {
                property_info->name = estrndup(property_info->name, 
property_info->name_length);
        }
        if (property_info->doc_comment) {
@@ -118,7 +118,7 @@ static void zend_duplicate_property_info(zend_property_info 
*property_info) /* {
 
 static void zend_duplicate_property_info_internal(zend_property_info 
*property_info) /* {{{ */
 {
-       if (!IS_INTERNED(property_info->name)) {                
+       if (!IS_INTERNED(property_info->name)) {
                property_info->name = zend_strndup(property_info->name, 
property_info->name_length);
        }
 }
@@ -383,7 +383,7 @@ int zend_add_func_name_literal(zend_op_array *op_array, 
const zval *zv TSRMLS_DC
        zval c;
        int lc_literal;
 
-       if (op_array->last_literal > 0 && 
+       if (op_array->last_literal > 0 &&
            &op_array->literals[op_array->last_literal - 1].constant == zv &&
            op_array->literals[op_array->last_literal - 1].cache_slot == -1) {
                /* we already have function name as last literal (do nothing) */
@@ -391,7 +391,7 @@ int zend_add_func_name_literal(zend_op_array *op_array, 
const zval *zv TSRMLS_DC
        } else {
                ret = zend_add_literal(op_array, zv TSRMLS_CC);
        }
-       
+
        lc_name = zend_str_tolower_dup(Z_STRVAL_P(zv), Z_STRLEN_P(zv));
        ZVAL_STRINGL(&c, lc_name, Z_STRLEN_P(zv), 0);
        lc_literal = zend_add_literal(CG(active_op_array), &c TSRMLS_CC);
@@ -410,7 +410,7 @@ int zend_add_ns_func_name_literal(zend_op_array *op_array, 
const zval *zv TSRMLS
        zval c;
        int lc_literal;
 
-       if (op_array->last_literal > 0 && 
+       if (op_array->last_literal > 0 &&
            &op_array->literals[op_array->last_literal - 1].constant == zv &&
            op_array->literals[op_array->last_literal - 1].cache_slot == -1) {
                /* we already have function name as last literal (do nothing) */
@@ -443,7 +443,7 @@ int zend_add_class_name_literal(zend_op_array *op_array, 
const zval *zv TSRMLS_D
        zval c;
        int lc_literal;
 
-       if (op_array->last_literal > 0 && 
+       if (op_array->last_literal > 0 &&
            &op_array->literals[op_array->last_literal - 1].constant == zv &&
            op_array->literals[op_array->last_literal - 1].cache_slot == -1) {
                /* we already have function name as last literal (do nothing) */
@@ -477,7 +477,7 @@ int zend_add_const_name_literal(zend_op_array *op_array, 
const zval *zv, int unq
        int name_len, ns_len;
        zval c;
 
-       if (op_array->last_literal > 0 && 
+       if (op_array->last_literal > 0 &&
            &op_array->literals[op_array->last_literal - 1].constant == zv &&
            op_array->literals[op_array->last_literal - 1].cache_slot == -1) {
                /* we already have function name as last literal (do nothing) */
@@ -486,7 +486,7 @@ int zend_add_const_name_literal(zend_op_array *op_array, 
const zval *zv, int unq
                ret = zend_add_literal(op_array, zv TSRMLS_CC);
        }
 
-       /* skip leading '\\' */ 
+       /* skip leading '\\' */
        if (Z_STRVAL_P(zv)[0] == '\\') {
                name_len = Z_STRLEN_P(zv) - 1;
                name = Z_STRVAL_P(zv) + 1;
@@ -816,7 +816,7 @@ void fetch_array_dim(znode *result, const znode *parent, 
const znode *dim TSRMLS
                opline.result.var = opline.op1.var;
                zend_llist_add_element(fetch_list_ptr, &opline);
        }
-       
+
        init_op(&opline TSRMLS_CC);
        opline.opcode = ZEND_FETCH_DIM_W;       /* the backpatching routine 
assumes W */
        opline.result_type = IS_VAR;
@@ -830,12 +830,12 @@ void fetch_array_dim(znode *result, const znode *parent, 
const znode *dim TSRMLS
                ZEND_HANDLE_NUMERIC_EX(Z_STRVAL(CONSTANT(opline.op2.constant)), 
Z_STRLEN(CONSTANT(opline.op2.constant))+1, index, numeric = 1);
                if (numeric) {
                        zval_dtor(&CONSTANT(opline.op2.constant));
-                       ZVAL_LONG(&CONSTANT(opline.op2.constant), index); 
+                       ZVAL_LONG(&CONSTANT(opline.op2.constant), index);
                } else {
                        CALCULATE_LITERAL_HASH(opline.op2.constant);
                }
        }
-       
+
        GET_NODE(result, opline.result);
 
        zend_llist_add_element(fetch_list_ptr, &opline);
@@ -940,7 +940,7 @@ void zend_do_assign(znode *result, znode *variable, znode 
*value TSRMLS_DC) /* {
                                opline->result.var = 
get_temporary_variable(CG(active_op_array));
                                opline->op1_type = IS_CONST;
                                LITERAL_STRINGL(opline->op1,
-                                       
CG(active_op_array)->vars[value->u.op.var].name, 
+                                       
CG(active_op_array)->vars[value->u.op.var].name,
                                        
CG(active_op_array)->vars[value->u.op.var].name_len, 1);
                                CALCULATE_LITERAL_HASH(opline->op1.constant);
                                SET_UNUSED(opline->op2);
@@ -1569,7 +1569,7 @@ void zend_do_begin_function_declaration(znode 
*function_token, znode *function_n
 
        if (is_method) {
                int result;
-               
+
                lcname = zend_new_interned_string(zend_str_tolower_dup(name, 
name_len), name_len + 1, 1 TSRMLS_CC);
 
                if (IS_INTERNED(lcname)) {
@@ -1624,7 +1624,7 @@ void zend_do_begin_function_declaration(znode 
*function_token, znode *function_n
                        }
                } else {
                        char *class_lcname;
-                       
+
                        class_lcname = 
do_alloca(CG(active_class_entry)->name_length + 1, use_heap);
                        zend_str_tolower_copy(class_lcname, 
CG(active_class_entry)->name, CG(active_class_entry)->name_length);
                        /* Improve after RC: cache the lowercase class name */
@@ -1675,7 +1675,7 @@ void zend_do_begin_function_declaration(znode 
*function_token, znode *function_n
                        } else if ((name_len == 
sizeof(ZEND_TOSTRING_FUNC_NAME)-1) && (!memcmp(lcname, ZEND_TOSTRING_FUNC_NAME, 
sizeof(ZEND_TOSTRING_FUNC_NAME)-1))) {
                                if (fn_flags & ((ZEND_ACC_PPP_MASK | 
ZEND_ACC_STATIC) ^ ZEND_ACC_PUBLIC)) {
                                        zend_error(E_WARNING, "The magic method 
__toString() must have public visibility and cannot be static");
-                               }                               
+                               }
                                CG(active_class_entry)->__tostring = 
(zend_function *) CG(active_op_array);
                        } else if (!(fn_flags & ZEND_ACC_STATIC)) {
                                CG(active_op_array)->fn_flags |= 
ZEND_ACC_ALLOW_STATIC;
@@ -1806,14 +1806,14 @@ void zend_do_end_function_declaration(const znode 
*function_token TSRMLS_DC) /*
        if (CG(active_class_entry)) {
                zend_check_magic_method_implementation(CG(active_class_entry), 
(zend_function*)CG(active_op_array), E_COMPILE_ERROR TSRMLS_CC);
        } else {
-               /* we don't care if the function name is longer, in fact 
lowercasing only 
+               /* we don't care if the function name is longer, in fact 
lowercasing only
                 * the beginning of the name speeds up the check process */
                name_len = strlen(CG(active_op_array)->function_name);
                zend_str_tolower_copy(lcname, 
CG(active_op_array)->function_name, MIN(name_len, sizeof(lcname)-1));
                lcname[sizeof(lcname)-1] = '\0'; /* zend_str_tolower_copy won't 
necessarily set the zero byte */
                if (name_len == sizeof(ZEND_AUTOLOAD_FUNC_NAME) - 1 && 
!memcmp(lcname, ZEND_AUTOLOAD_FUNC_NAME, sizeof(ZEND_AUTOLOAD_FUNC_NAME)) && 
CG(active_op_array)->num_args != 1) {
                        zend_error(E_COMPILE_ERROR, "%s() must take exactly 1 
argument", ZEND_AUTOLOAD_FUNC_NAME);
-               }               
+               }
        }
 
        CG(active_op_array)->line_end = zend_get_compiled_lineno(TSRMLS_C);
@@ -1939,7 +1939,7 @@ int zend_do_begin_function_call(znode *function_name, 
zend_bool check_namespace
                        internal function with short name */
                        zend_do_begin_dynamic_function_call(function_name, 1 
TSRMLS_CC);
                        return 1;
-       } 
+       }
 
        lcname = zend_str_tolower_dup(function_name->u.constant.value.str.val, 
function_name->u.constant.value.str.len);
        if ((zend_hash_find(CG(function_table), lcname, 
function_name->u.constant.value.str.len+1, (void **) &function)==FAILURE) ||
@@ -1948,10 +1948,10 @@ int zend_do_begin_function_call(znode *function_name, 
zend_bool check_namespace
                        zend_do_begin_dynamic_function_call(function_name, 0 
TSRMLS_CC);
                        efree(lcname);
                        return 1; /* Dynamic */
-       } 
+       }
        efree(function_name->u.constant.value.str.val);
        function_name->u.constant.value.str.val = lcname;
-       
+
        zend_stack_push(&CG(function_call_stack), (void *) &function, 
sizeof(zend_function *));
        if (CG(context).nested_calls + 1 > CG(active_op_array)->nested_calls) {
                CG(active_op_array)->nested_calls = CG(context).nested_calls + 
1;
@@ -1984,7 +1984,7 @@ void zend_do_begin_method_call(znode *left_bracket 
TSRMLS_DC) /* {{{ */
                        name = CONSTANT(last_op->op2.constant);
                        if (Z_TYPE(name) != IS_STRING) {
                                zend_error(E_COMPILE_ERROR, "Method name must 
be a string");
-                       } 
+                       }
                        if (!IS_INTERNED(Z_STRVAL(name))) {
                                Z_STRVAL(name) = estrndup(Z_STRVAL(name), 
Z_STRLEN(name));
                        }
@@ -2188,7 +2188,7 @@ void zend_resolve_class_name(znode *class_name, ulong 
fetch_type, int check_ns_n
                        if (ZEND_FETCH_CLASS_DEFAULT != 
zend_get_class_fetch_type(Z_STRVAL(class_name->u.constant), 
Z_STRLEN(class_name->u.constant))) {
                                zend_error(E_COMPILE_ERROR, "'\\%s' is an 
invalid class name", Z_STRVAL(class_name->u.constant));
                        }
-               } else { 
+               } else {
                        if (CG(current_import)) {
                                len = compound - 
Z_STRVAL(class_name->u.constant);
                                lcname = 
zend_str_tolower_dup(Z_STRVAL(class_name->u.constant), len);
@@ -2553,8 +2553,8 @@ void zend_do_pass_param(znode *param, zend_uchar op, int 
offset TSRMLS_DC) /* {{
                        zend_error(E_COMPILE_ERROR, "Call-time 
pass-by-reference has been removed");
                }
                return;
-       } 
-       
+       }
+
        if (function_ptr) {
                if (ARG_MAY_BE_SENT_BY_REF(function_ptr, (zend_uint) offset)) {
                        if (param->op_type & (IS_VAR|IS_CV) && original_op != 
ZEND_SEND_VAL) {
@@ -2725,7 +2725,7 @@ void zend_do_return(znode *expr, int do_end_vparse 
TSRMLS_DC) /* {{{ */
                SET_UNUSED(opline->op1);
                SET_UNUSED(opline->op2);
        }
-       
+
        opline = get_next_op(CG(active_op_array) TSRMLS_CC);
 
        opline->opcode = returns_reference ? ZEND_RETURN_BY_REF : ZEND_RETURN;
@@ -2940,10 +2940,10 @@ void zend_do_end_finally(znode *try_token, znode* 
catch_token, znode *finally_to
 {
        if (catch_token->op_type == IS_UNUSED && finally_token->op_type == 
IS_UNUSED) {
                zend_error(E_COMPILE_ERROR, "Cannot use try without catch or 
finally");
-       } 
+       }
        if (finally_token->op_type != IS_UNUSED) {
                zend_op *opline;
-               
+
                
CG(active_op_array)->try_catch_array[try_token->u.op.opline_num].finally_op = 
finally_token->u.op.opline_num + 1;
                
CG(active_op_array)->try_catch_array[try_token->u.op.opline_num].finally_end = 
get_next_op_number(CG(active_op_array));
                CG(active_op_array)->has_finally_block = 1;
@@ -2952,11 +2952,11 @@ void zend_do_end_finally(znode *try_token, znode* 
catch_token, znode *finally_to
                opline->opcode = ZEND_FAST_RET;
                SET_UNUSED(opline->op1);
                SET_UNUSED(opline->op2);
-               
+
                
CG(active_op_array)->opcodes[finally_token->u.op.opline_num].op1.opline_num = 
get_next_op_number(CG(active_op_array));
 
                CG(context).in_finally--;
-       } 
+       }
 }
 /* }}} */
 
@@ -3063,7 +3063,7 @@ static void 
do_inherit_parent_constructor(zend_class_entry *ce) /* {{{ */
                lc_class_name = zend_str_tolower_dup(ce->name, ce->name_length);
                if (!zend_hash_exists(&ce->function_table, lc_class_name, 
ce->name_length+1)) {
                        lc_parent_class_name = 
zend_str_tolower_dup(ce->parent->name, ce->parent->name_length);
-                       if (!zend_hash_exists(&ce->function_table, 
lc_parent_class_name, ce->parent->name_length+1) && 
+                       if (!zend_hash_exists(&ce->function_table, 
lc_parent_class_name, ce->parent->name_length+1) &&
                                        
zend_hash_find(&ce->parent->function_table, lc_parent_class_name, 
ce->parent->name_length+1, (void **)&function)==SUCCESS) {
                                if (function->common.fn_flags & ZEND_ACC_CTOR) {
                                        /* inherit parent's constructor */
@@ -3202,8 +3202,8 @@ static zend_bool 
zend_do_perform_implementation_check(const zend_function *fe, c
                                                return 0;
                                        }
                                }
-                       } 
-               } 
+                       }
+               }
                if (fe->common.arg_info[i].type_hint != 
proto->common.arg_info[i].type_hint) {
                        /* Incompatible type hint */
                        return 0;
@@ -3232,7 +3232,7 @@ static zend_bool 
zend_do_perform_implementation_check(const zend_function *fe, c
                buf = erealloc(buf, length);            \
        }
 
-static char * zend_get_function_declaration(zend_function *fptr TSRMLS_DC) /* 
{{{ */ 
+static char * zend_get_function_declaration(zend_function *fptr TSRMLS_DC) /* 
{{{ */
 {
        char *offset, *buf;
        zend_uint length = 1024;
@@ -3249,7 +3249,7 @@ static char * zend_get_function_declaration(zend_function 
*fptr TSRMLS_DC) /* {{
                *(offset++) = ':';
                *(offset++) = ':';
        }
-       
+
        {
                size_t name_len = strlen(fptr->common.function_name);
                REALLOC_BUF_IF_EXCEED(buf, offset, length, name_len);
@@ -3290,7 +3290,7 @@ static char * zend_get_function_declaration(zend_function 
*fptr TSRMLS_DC) /* {{
                                offset += type_name_len;
                                *(offset++) = ' ';
                        }
-                               
+
                        if (arg_info->pass_by_reference) {
                                *(offset++) = '&';
                        }
@@ -3392,7 +3392,7 @@ static char * zend_get_function_declaration(zend_function 
*fptr TSRMLS_DC) /* {{
        *offset = '\0';
 
        return buf;
-} 
+}
 /* }}} */
 
 static void do_inheritance_check_on_method(zend_function *child, zend_function 
*parent TSRMLS_DC) /* {{{ */
@@ -3404,7 +3404,7 @@ static void do_inheritance_check_on_method(zend_function 
*child, zend_function *
                && parent->common.fn_flags & ZEND_ACC_ABSTRACT
                && parent->common.scope != (child->common.prototype ? 
child->common.prototype->common.scope : child->common.scope)
                && child->common.fn_flags & 
(ZEND_ACC_ABSTRACT|ZEND_ACC_IMPLEMENTED_ABSTRACT)) {
-               zend_error(E_COMPILE_ERROR, "Can't inherit abstract function 
%s::%s() (previously declared abstract in %s)", 
+               zend_error(E_COMPILE_ERROR, "Can't inherit abstract function 
%s::%s() (previously declared abstract in %s)",
                        parent->common.scope->name,
                        child->common.function_name,
                        child->common.prototype ? 
child->common.prototype->common.scope->name : child->common.scope->name);
@@ -3444,7 +3444,7 @@ static void do_inheritance_check_on_method(zend_function 
*child, zend_function *
        }
 
        if (parent_flags & ZEND_ACC_PRIVATE) {
-               child->common.prototype = NULL;         
+               child->common.prototype = NULL;
        } else if (parent_flags & ZEND_ACC_ABSTRACT) {
                child->common.fn_flags |= ZEND_ACC_IMPLEMENTED_ABSTRACT;
                child->common.prototype = parent;
@@ -3455,12 +3455,12 @@ static void 
do_inheritance_check_on_method(zend_function *child, zend_function *
 
        if (child->common.prototype && 
(child->common.prototype->common.fn_flags & ZEND_ACC_ABSTRACT)) {
                if (!zend_do_perform_implementation_check(child, 
child->common.prototype TSRMLS_CC)) {
-                       zend_error(E_COMPILE_ERROR, "Declaration of %s::%s() 
must be compatible with %s", ZEND_FN_SCOPE_NAME(child), 
child->common.function_name, 
zend_get_function_declaration(child->common.prototype? child->common.prototype 
: parent TSRMLS_CC)); 
+                       zend_error(E_COMPILE_ERROR, "Declaration of %s::%s() 
must be compatible with %s", ZEND_FN_SCOPE_NAME(child), 
child->common.function_name, 
zend_get_function_declaration(child->common.prototype? child->common.prototype 
: parent TSRMLS_CC));
                }
        } else if (EG(error_reporting) & E_STRICT || EG(user_error_handler)) { 
/* Check E_STRICT (or custom error handler) before the check so that we save 
some time */
                if (!zend_do_perform_implementation_check(child, parent 
TSRMLS_CC)) {
                        char *method_prototype = 
zend_get_function_declaration(child->common.prototype? child->common.prototype 
: parent TSRMLS_CC);
-                       zend_error(E_STRICT, "Declaration of %s::%s() should be 
compatible with %s", ZEND_FN_SCOPE_NAME(child), child->common.function_name, 
method_prototype); 
+                       zend_error(E_STRICT, "Declaration of %s::%s() should be 
compatible with %s", ZEND_FN_SCOPE_NAME(child), child->common.function_name, 
method_prototype);
                        efree(method_prototype);
                }
        }
@@ -3479,9 +3479,9 @@ static zend_bool do_inherit_method_check(HashTable 
*child_function_table, zend_f
                }
                return 1; /* method doesn't exist in child, copy from parent */
        }
-       
+
        do_inheritance_check_on_method(child, parent TSRMLS_CC);
-       
+
        return 0;
 }
 /* }}} */
@@ -3512,7 +3512,7 @@ static zend_bool 
do_inherit_property_access_check(HashTable *target_ht, zend_pro
                        zend_error(E_COMPILE_ERROR, "Cannot redeclare %s%s::$%s 
as %s%s::$%s",
                                (parent_info->flags & ZEND_ACC_STATIC) ? 
"static " : "non static ", parent_ce->name, hash_key->arKey,
                                (child_info->flags & ZEND_ACC_STATIC) ? "static 
" : "non static ", ce->name, hash_key->arKey);
-                               
+
                }
 
                if(parent_info->flags & ZEND_ACC_CHANGED) {
@@ -3778,10 +3778,10 @@ ZEND_API void 
zend_do_implement_interface(zend_class_entry *ce, zend_class_entry
                        }
                }
                ce->interfaces[ce->num_interfaces++] = iface;
-       
+
                zend_hash_merge_ex(&ce->constants_table, 
&iface->constants_table, (copy_ctor_func_t) zval_add_ref, sizeof(zval *), 
(merge_checker_func_t) do_inherit_constant_check, iface);
                zend_hash_merge_ex(&ce->function_table, &iface->function_table, 
(copy_ctor_func_t) do_inherit_method, sizeof(zend_function), 
(merge_checker_func_t) do_inherit_method_check, ce);
-       
+
                do_implement_interface(ce, iface TSRMLS_CC);
                zend_do_inherit_interfaces(ce, iface TSRMLS_CC);
        }
@@ -3821,10 +3821,10 @@ static zend_bool 
zend_traits_method_compatibility_check(zend_function *fn, zend_
 {
        zend_uint    fn_flags = fn->common.scope->ce_flags;
        zend_uint other_flags = other_fn->common.scope->ce_flags;
-       
+
        return zend_do_perform_implementation_check(fn, other_fn TSRMLS_CC)
                && zend_do_perform_implementation_check(other_fn, fn TSRMLS_CC)
-               && ((fn_flags & (ZEND_ACC_FINAL|ZEND_ACC_STATIC)) == 
+               && ((fn_flags & (ZEND_ACC_FINAL|ZEND_ACC_STATIC)) ==
                    (other_flags & (ZEND_ACC_FINAL|ZEND_ACC_STATIC))); /* equal 
final and static qualifier */
 }
 /* }}} */
@@ -3837,7 +3837,7 @@ static void zend_add_magic_methods(zend_class_entry* ce, 
const char* mname, uint
                if (ce->constructor) {
                        zend_error(E_COMPILE_ERROR, "%s has colliding 
constructor definitions coming from traits", ce->name);
                }
-               ce->constructor = fe; fe->common.fn_flags |= ZEND_ACC_CTOR; 
+               ce->constructor = fe; fe->common.fn_flags |= ZEND_ACC_CTOR;
        } else if (!strncmp(mname, ZEND_DESTRUCTOR_FUNC_NAME,  mname_len)) {
                ce->destructor = fe; fe->common.fn_flags |= ZEND_ACC_DTOR;
        } else if (!strncmp(mname, ZEND_GET_FUNC_NAME, mname_len)) {
@@ -3974,7 +3974,7 @@ static int zend_traits_copy_functions(zend_function *fn 
TSRMLS_DC, int num_args,
        ce            = va_arg(args, zend_class_entry*);
        overriden     = va_arg(args, HashTable**);
        exclude_table = va_arg(args, HashTable*);
-       
+
        fnname_len = strlen(fn->common.function_name);
 
        /* apply aliases which are qualified with a class name, there should 
not be any ambiguity */
@@ -3988,9 +3988,9 @@ static int zend_traits_copy_functions(zend_function *fn 
TSRMLS_DC, int num_args,
                                && alias->trait_method->mname_len == fnname_len
                                && 
(zend_binary_strcasecmp(alias->trait_method->method_name, 
alias->trait_method->mname_len, fn->common.function_name, fnname_len) == 0)) {
                                fn_copy = *fn;
-                                       
+
                                /* if it is 0, no modifieres has been changed */
-                               if (alias->modifiers) { 
+                               if (alias->modifiers) {
                                        fn_copy.common.fn_flags = 
alias->modifiers | (fn->common.fn_flags ^ (fn->common.fn_flags & 
ZEND_ACC_PPP_MASK));
                                }
 
@@ -4093,7 +4093,7 @@ static void 
zend_traits_init_trait_structures(zend_class_entry *ce TSRMLS_DC) /*
                                                           
cur_method_ref->ce->name,
                                                           
cur_method_ref->method_name);
                                }
-                       
+
                                /** With the other traits, we are more 
permissive.
                                        We do not give errors for those. This 
allows to be more
                                        defensive in such definitions.
@@ -4107,20 +4107,20 @@ static void 
zend_traits_init_trait_structures(zend_class_entry *ce TSRMLS_DC) /*
 
                                        if 
(!(cur_precedence->exclude_from_classes[j] = zend_fetch_class(class_name, 
name_length, ZEND_FETCH_CLASS_TRAIT |ZEND_FETCH_CLASS_NO_AUTOLOAD TSRMLS_CC))) {
                                                zend_error(E_COMPILE_ERROR, 
"Could not find trait %s", class_name);
-                                       }                                       
+                                       }
                                        zend_check_trait_usage(ce, 
cur_precedence->exclude_from_classes[j] TSRMLS_CC);
 
                                        /* make sure that the trait method is 
not from a class mentioned in
                                         exclude_from_classes, for consistency 
*/
                                        if (cur_precedence->trait_method->ce == 
cur_precedence->exclude_from_classes[i]) {
                                                zend_error(E_COMPILE_ERROR,
-                                                                  
"Inconsistent insteadof definition. " 
+                                                                  
"Inconsistent insteadof definition. "
                                                                   "The method 
%s is to be used from %s, but %s is also on the exclude list",
                                                                   
cur_method_ref->method_name,
                                                                   
cur_precedence->trait_method->ce->name,
                                                                   
cur_precedence->trait_method->ce->name);
                                        }
-                                       
+
                                        efree(class_name);
                                        j++;
                                }
@@ -4160,7 +4160,7 @@ static void 
zend_traits_init_trait_structures(zend_class_entry *ce TSRMLS_DC) /*
 static void zend_traits_compile_exclude_table(HashTable* exclude_table, 
zend_trait_precedence **precedences, zend_class_entry *trait) /* {{{ */
 {
        size_t i = 0, j;
-       
+
        if (!precedences) {
                return;
        }
@@ -4171,7 +4171,7 @@ static void zend_traits_compile_exclude_table(HashTable* 
exclude_table, zend_tra
                                if (precedences[i]->exclude_from_classes[j] == 
trait) {
                                        zend_uint lcname_len = 
precedences[i]->trait_method->mname_len;
                                        char *lcname = 
zend_str_tolower_dup(precedences[i]->trait_method->method_name, lcname_len);
-                                       
+
                                        if (zend_hash_add(exclude_table, 
lcname, lcname_len, NULL, 0, NULL) == FAILURE) {
                                                efree(lcname);
                                                zend_error(E_COMPILE_ERROR, 
"Failed to evaluate a trait precedence (%s). Method of trait %s was defined to 
be excluded multiple times", precedences[i]->trait_method->method_name, 
trait->name);
@@ -4208,7 +4208,7 @@ static void 
zend_do_traits_method_binding(zend_class_entry *ce TSRMLS_DC) /* {{{
                        
zend_hash_apply_with_arguments(&ce->traits[i]->function_table TSRMLS_CC, 
(apply_func_args_t)zend_traits_copy_functions, 3, ce, &overriden, NULL);
                }
        }
-  
+
     zend_hash_apply_with_argument(&ce->function_table, 
(apply_func_arg_t)zend_fixup_trait_method, ce TSRMLS_CC);
 
        if (overriden) {
@@ -4246,7 +4246,7 @@ static void 
zend_do_traits_property_binding(zend_class_entry *ce TSRMLS_DC) /* {
        const char* class_name_unused;
        zend_bool not_compatible;
        zval* prop_value;
-       char* doc_comment;  
+       char* doc_comment;
        zend_uint flags;
 
        /* In the following steps the properties are inserted into the property 
table
@@ -4275,10 +4275,10 @@ static void 
zend_do_traits_property_binding(zend_class_entry *ce TSRMLS_DC) /* {
 
                        /* next: check for conflicts with current class */
                        if (zend_hash_quick_find(&ce->properties_info, 
prop_name, prop_name_length+1, prop_hash, (void **) &coliding_prop) == SUCCESS) 
{
-                               if (coliding_prop->flags & ZEND_ACC_SHADOW) {   
                                
+                               if (coliding_prop->flags & ZEND_ACC_SHADOW) {
                                        
zend_hash_quick_del(&ce->properties_info, prop_name, prop_name_length+1, 
prop_hash);
                                        flags |= ZEND_ACC_CHANGED;
-                               } else {                                
+                               } else {
                                        if ((coliding_prop->flags & 
(ZEND_ACC_PPP_MASK | ZEND_ACC_STATIC))
                                                == (flags & (ZEND_ACC_PPP_MASK 
| ZEND_ACC_STATIC))) {
                                                /* flags are identical, now the 
value needs to be checked */
@@ -4299,14 +4299,14 @@ static void 
zend_do_traits_property_binding(zend_class_entry *ce TSRMLS_DC) /* {
                                        }
 
                                        if (not_compatible) {
-                                               zend_error(E_COMPILE_ERROR, 
+                                               zend_error(E_COMPILE_ERROR,
                                                           "%s and %s define 
the same property ($%s) in the composition of %s. However, the definition 
differs and is considered incompatible. Class was composed",
                                                                
find_first_definition(ce, i, prop_name, prop_name_length, prop_hash, 
coliding_prop->ce)->name,
                                                                
property_info->ce->name,
                                                                prop_name,
                                                                ce->name);
                                        } else {
-                                               zend_error(E_STRICT, 
+                                               zend_error(E_STRICT,
                                                           "%s and %s define 
the same property ($%s) in the composition of %s. This might be incompatible, 
to improve maintainability consider using accessor methods in traits instead. 
Class was composed",
                                                                
find_first_definition(ce, i, prop_name, prop_name_length, prop_hash, 
coliding_prop->ce)->name,
                                                                
property_info->ce->name,
@@ -4326,8 +4326,8 @@ static void 
zend_do_traits_property_binding(zend_class_entry *ce TSRMLS_DC) /* {
                        Z_ADDREF_P(prop_value);
 
                        doc_comment = property_info->doc_comment ? 
estrndup(property_info->doc_comment, property_info->doc_comment_len) : NULL;
-                       zend_declare_property_ex(ce, prop_name, 
prop_name_length, 
-                                                                        
prop_value, flags, 
+                       zend_declare_property_ex(ce, prop_name, 
prop_name_length,
+                                                                        
prop_value, flags,
                                                                     
doc_comment, property_info->doc_comment_len TSRMLS_CC);
                }
        }
@@ -4339,7 +4339,7 @@ static void 
zend_do_check_for_inconsistent_traits_aliasing(zend_class_entry *ce
        int i = 0;
        zend_trait_alias* cur_alias;
        char* lc_method_name;
-       
+
        if (ce->trait_aliases) {
                while (ce->trait_aliases[i]) {
                        cur_alias = ce->trait_aliases[i];
@@ -4360,7 +4360,7 @@ static void 
zend_do_check_for_inconsistent_traits_aliasing(zend_class_entry *ce
                                                   we check against it and 
abort.
                                                2) it is just a plain old 
inconsitency/typo/bug
                                                   as in the case where alias 
is set. */
-                                       
+
                                        lc_method_name = 
zend_str_tolower_dup(cur_alias->trait_method->method_name,
                                                                                
                                  cur_alias->trait_method->mname_len);
                                        if 
(zend_hash_exists(&ce->function_table,
@@ -4397,7 +4397,7 @@ ZEND_API void zend_do_bind_traits(zend_class_entry *ce 
TSRMLS_DC) /* {{{ */
 
        /* first care about all methods to be flattened into the class */
        zend_do_traits_method_binding(ce TSRMLS_CC);
-  
+
        /* Aliases which have not been applied indicate typos/bugs. */
        zend_do_check_for_inconsistent_traits_aliasing(ce TSRMLS_CC);
 
@@ -4406,7 +4406,7 @@ ZEND_API void zend_do_bind_traits(zend_class_entry *ce 
TSRMLS_DC) /* {{{ */
 
        /* verify that all abstract methods from traits have been implemented */
        zend_verify_abstract_class(ce TSRMLS_CC);
-  
+
        /* now everything should be fine and an added 
ZEND_ACC_IMPLICIT_ABSTRACT_CLASS should be removed */
        if (ce->ce_flags & ZEND_ACC_IMPLICIT_ABSTRACT_CLASS) {
                ce->ce_flags -= ZEND_ACC_IMPLICIT_ABSTRACT_CLASS;
@@ -4456,7 +4456,7 @@ void zend_prepare_reference(znode *result, znode 
*class_name, znode *method_name
        zend_trait_method_reference *method_ref = 
emalloc(sizeof(zend_trait_method_reference));
        method_ref->ce = NULL;
 
-       /* REM: There should not be a need for copying, 
+       /* REM: There should not be a need for copying,
           zend_do_begin_class_declaration is also just using that string */
        if (class_name) {
                zend_resolve_class_name(class_name, ZEND_FETCH_CLASS_GLOBAL, 1 
TSRMLS_CC);
@@ -5030,7 +5030,7 @@ void zend_do_begin_class_declaration(const znode 
*class_token, znode *class_name
        build_runtime_defined_function_key(&key, lcname, 
new_class_entry->name_length TSRMLS_CC);
        opline->op1.constant = zend_add_literal(CG(active_op_array), &key 
TSRMLS_CC);
        Z_HASH_P(&CONSTANT(opline->op1.constant)) = 
zend_hash_func(Z_STRVAL(CONSTANT(opline->op1.constant)), 
Z_STRLEN(CONSTANT(opline->op1.constant)));
-       
+
        opline->op2_type = IS_CONST;
 
        if (doing_inheritance) {
@@ -5047,7 +5047,7 @@ void zend_do_begin_class_declaration(const znode 
*class_token, znode *class_name
 
        LITERAL_STRINGL(opline->op2, lcname, new_class_entry->name_length, 0);
        CALCULATE_LITERAL_HASH(opline->op2.constant);
-       
+
        zend_hash_quick_update(CG(class_table), Z_STRVAL(key), Z_STRLEN(key), 
Z_HASH_P(&CONSTANT(opline->op1.constant)), &new_class_entry, 
sizeof(zend_class_entry *), NULL);
        CG(active_class_entry) = new_class_entry;
 
@@ -5098,7 +5098,7 @@ void zend_do_end_class_declaration(const znode 
*class_token, const znode *parent
        }
 
        ce->info.user.line_end = zend_get_compiled_lineno(TSRMLS_C);
-       
+
        /* Check for traits and proceed like with interfaces.
         * The only difference will be a combined handling of them in the end.
         * Thus, we need another opcode here. */
@@ -5123,7 +5123,7 @@ void zend_do_end_class_declaration(const znode 
*class_token, const znode *parent
                }
        }
        /* Inherit interfaces; reset number to zero, we need it for above check 
and
-        * will restore it during actual implementation. 
+        * will restore it during actual implementation.
         * The ZEND_ACC_IMPLEMENT_INTERFACES flag disables double call to
         * zend_verify_abstract_class() */
        if (ce->num_interfaces > 0) {
@@ -5325,7 +5325,7 @@ void zend_do_declare_class_constant(znode *var_name, 
const znode *value TSRMLS_D
 
        ALLOC_ZVAL(property);
        *property = value->u.constant;
-       
+
        cname = zend_new_interned_string(var_name->u.constant.value.str.val, 
var_name->u.constant.value.str.len+1, 0 TSRMLS_CC);
 
        if (IS_INTERNED(cname)) {
@@ -5338,7 +5338,7 @@ void zend_do_declare_class_constant(znode *var_name, 
const znode *value TSRMLS_D
                zend_error(E_COMPILE_ERROR, "Cannot redefine class constant 
%s::%s", CG(active_class_entry)->name, var_name->u.constant.value.str.val);
        }
        FREE_PNODE(var_name);
-       
+
        if (CG(doc_comment)) {
                efree(CG(doc_comment));
                CG(doc_comment) = NULL;
@@ -5427,17 +5427,17 @@ void zend_do_halt_compiler_register(TSRMLS_D) /* {{{ */
        char *name, *cfilename;
        char haltoff[] = "__COMPILER_HALT_OFFSET__";
        int len, clen;
-       
+
        if (CG(has_bracketed_namespaces) && CG(in_namespace)) {
                zend_error(E_COMPILE_ERROR, "__HALT_COMPILER() can only be used 
from the outermost scope");
        }
-       
+
        cfilename = zend_get_compiled_filename(TSRMLS_C);
        clen = strlen(cfilename);
        zend_mangle_property_name(&name, &len, haltoff, sizeof(haltoff) - 1, 
cfilename, clen, 0);
        zend_register_long_constant(name, len+1, 
zend_get_scanned_file_offset(TSRMLS_C), CONST_CS, 0 TSRMLS_CC);
        pefree(name, 0);
-       
+
        if (CG(in_namespace)) {
                zend_do_end_namespace(TSRMLS_C);
        }
@@ -5514,7 +5514,7 @@ static zend_constant* zend_get_ct_const(const zval 
*const_name, int all_internal
                }
        } else if (zend_hash_find(EG(zend_constants), Z_STRVAL_P(const_name), 
Z_STRLEN_P(const_name)+1, (void **) &c) == FAILURE) {
                char *lookup_name = 
zend_str_tolower_dup(Z_STRVAL_P(const_name), Z_STRLEN_P(const_name));
-                
+
                if (zend_hash_find(EG(zend_constants), lookup_name, 
Z_STRLEN_P(const_name)+1, (void **) &c)==SUCCESS) {
                        if ((c->flags & CONST_CT_SUBST) && !(c->flags & 
CONST_CS)) {
                                efree(lookup_name);
@@ -5567,7 +5567,7 @@ void zend_do_fetch_constant(znode *result, znode 
*constant_container, znode *con
                        case ZEND_CT:
                                /* this is a class constant */
                                type = 
zend_get_class_fetch_type(Z_STRVAL(constant_container->u.constant), 
Z_STRLEN(constant_container->u.constant));
-       
+
                                if (ZEND_FETCH_CLASS_STATIC == type) {
                                        zend_error(E_ERROR, "\"static::\" is 
not allowed in compile-time constants");
                                } else if (ZEND_FETCH_CLASS_DEFAULT == type) {
@@ -5631,7 +5631,7 @@ void zend_do_fetch_constant(znode *result, znode 
*constant_container, znode *con
                        compound = memchr(Z_STRVAL(constant_name->u.constant), 
'\\', Z_STRLEN(constant_name->u.constant));
 
                        zend_resolve_non_class_name(constant_name, 
check_namespace TSRMLS_CC);
-                       
+
                        if(zend_constant_ct_subst(result, 
&constant_name->u.constant, 1 TSRMLS_CC)) {
                                break;
                        }
@@ -5647,7 +5647,7 @@ void zend_do_fetch_constant(znode *result, znode 
*constant_container, znode *con
                                /* the name is unambiguous */
                                opline->extended_value = 0;
                                opline->op2.constant = 
zend_add_const_name_literal(CG(active_op_array), &constant_name->u.constant, 0 
TSRMLS_CC);
-                       } else {                                
+                       } else {
                                opline->extended_value = 
IS_CONSTANT_UNQUALIFIED;
                                if (CG(current_namespace)) {
                                        opline->extended_value |= 
IS_CONSTANT_IN_NAMESPACE;
@@ -5721,7 +5721,7 @@ void zend_do_init_array(znode *result, const znode *expr, 
const znode *offset, z
                                
ZEND_HANDLE_NUMERIC_EX(Z_STRVAL(CONSTANT(opline->op2.constant)), 
Z_STRLEN(CONSTANT(opline->op2.constant))+1, index, numeric = 1);
                                if (numeric) {
                                        
zval_dtor(&CONSTANT(opline->op2.constant));
-                                       
ZVAL_LONG(&CONSTANT(opline->op2.constant), index); 
+                                       
ZVAL_LONG(&CONSTANT(opline->op2.constant), index);
                                } else {
                                        
CALCULATE_LITERAL_HASH(opline->op2.constant);
                                }
@@ -5753,7 +5753,7 @@ void zend_do_add_array_element(znode *result, const znode 
*expr, const znode *of
                        
ZEND_HANDLE_NUMERIC_EX(Z_STRVAL(CONSTANT(opline->op2.constant)), 
Z_STRLEN(CONSTANT(opline->op2.constant))+1, index, numeric = 1);
                        if (numeric) {
                                zval_dtor(&CONSTANT(opline->op2.constant));
-                               ZVAL_LONG(&CONSTANT(opline->op2.constant), 
index); 
+                               ZVAL_LONG(&CONSTANT(opline->op2.constant), 
index);
                        } else {
                                CALCULATE_LITERAL_HASH(opline->op2.constant);
                        }
@@ -6013,7 +6013,7 @@ void zend_do_fetch_lexical_variable(znode *varname, 
zend_bool is_ref TSRMLS_DC)
        Z_TYPE(value.u.constant) |= is_ref ? IS_LEXICAL_REF : IS_LEXICAL_VAR;
        Z_SET_REFCOUNT_P(&value.u.constant, 1);
        Z_UNSET_ISREF_P(&value.u.constant);
-       
+
        zend_do_fetch_static_variable(varname, &value, is_ref ? 
ZEND_FETCH_STATIC : ZEND_FETCH_LEXICAL TSRMLS_CC);
 }
 /* }}} */
@@ -6529,7 +6529,7 @@ void zend_do_jmp_set(const znode *value, znode 
*jmp_token, znode *colon_token TS
        opline->result.var = get_temporary_variable(CG(active_op_array));
        SET_NODE(opline->op1, value);
        SET_UNUSED(opline->op2);
-       
+
        GET_NODE(colon_token, opline->result);
 
        jmp_token->u.op.opline_num = op_number;
@@ -6558,11 +6558,11 @@ void zend_do_jmp_set_else(znode *result, const znode 
*false_value, const znode *
        opline->extended_value = 0;
        SET_NODE(opline->op1, false_value);
        SET_UNUSED(opline->op2);
-       
+
        GET_NODE(result, opline->result);
 
        CG(active_op_array)->opcodes[jmp_token->u.op.opline_num].op2.opline_num 
= get_next_op_number(CG(active_op_array));
-       
+
        DEC_BPC(CG(active_op_array));
 }
 /* }}} */
@@ -6775,7 +6775,7 @@ again:
                                CG(increment_lineno) = 1;
                        }
                        if (CG(has_bracketed_namespaces) && !CG(in_namespace)) {
-                               goto again;                             
+                               goto again;
                        }
                        retval = ';'; /* implicit ; */
                        break;
@@ -6865,13 +6865,13 @@ ZEND_API void 
zend_initialize_class_data(zend_class_entry *ce, zend_bool nullify
 int zend_get_class_fetch_type(const char *class_name, uint class_name_len) /* 
{{{ */
 {
        if ((class_name_len == sizeof("self")-1) &&
-               !memcmp(class_name, "self", sizeof("self")-1)) {
-               return ZEND_FETCH_CLASS_SELF;           
+               !strncasecmp(class_name, "self", sizeof("self")-1)) {
+               return ZEND_FETCH_CLASS_SELF;
        } else if ((class_name_len == sizeof("parent")-1) &&
-               !memcmp(class_name, "parent", sizeof("parent")-1)) {
+               !strncasecmp(class_name, "parent", sizeof("parent")-1)) {
                return ZEND_FETCH_CLASS_PARENT;
        } else if ((class_name_len == sizeof("static")-1) &&
-               !memcmp(class_name, "static", sizeof("static")-1)) {
+               !strncasecmp(class_name, "static", sizeof("static")-1)) {
                return ZEND_FETCH_CLASS_STATIC;
        } else {
                return ZEND_FETCH_CLASS_DEFAULT;
@@ -6984,7 +6984,7 @@ void zend_do_begin_namespace(const znode *name, zend_bool 
with_bracket TSRMLS_DC
                efree(CG(current_import));
                CG(current_import) = NULL;
        }
-       
+
        if (CG(doc_comment)) {
                efree(CG(doc_comment));
                CG(doc_comment) = NULL;
@@ -7156,7 +7156,7 @@ ZEND_API size_t zend_dirname(char *path, size_t len)
                len_adjust += 2;
                if (2 == len) {
                        /* Return "c:" on Win32 for dirname("c:").
-                        * It would be more consistent to return "c:." 
+                        * It would be more consistent to return "c:."
                         * but that would require making the string *longer*.
                         */
                        return len;
@@ -7164,7 +7164,7 @@ ZEND_API size_t zend_dirname(char *path, size_t len)
        }
 #elif defined(NETWARE)
        /*
-        * Find the first occurence of : from the left 
+        * Find the first occurence of : from the left
         * move the path pointer to the position just after :
         * increment the len_adjust to the length of path till colon 
character(inclusive)
         * If there is no character beyond : simple return len
-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to