Since it's very easy to make the patch, I made it.

This patch make ZE1 case sensitive except
constant. Just for playing with case sensitivity.

While you are in php source root.
patch -p0 < case_insensitive_zend.diff

I also attached Andrei's conversion tool.

 > I wrote something like this a couple of months ago. The extension
 > tarball is attached (it has a sample script that converts studlyCaps
 > function names to normal_ones). Usage:
 >
 > php -q tokenizer.php < input.php > output.php
 >
 > -Andrei
 >

PS: I didn't test this patch. It's just
for playing with case insensitive Zend.
Have fun ;)

-- 
Yasuo Ohgaki
Index: Zend/zend_API.c
===================================================================
RCS file: /repository/Zend/zend_API.c,v
retrieving revision 1.107
diff -u -r1.107 zend_API.c
--- Zend/zend_API.c     2002/01/06 15:21:08     1.107
+++ Zend/zend_API.c     2002/02/08 09:46:17
@@ -1209,7 +1209,7 @@
        zend_class_entry *register_class;
        char *lowercase_name = zend_strndup(class_entry->name, 
class_entry->name_length);
 
-       zend_str_tolower(lowercase_name, class_entry->name_length);
+/*     zend_str_tolower(lowercase_name, class_entry->name_length); */
 
        class_entry->type = ZEND_INTERNAL_CLASS;
        class_entry->parent = NULL;
@@ -1302,7 +1302,7 @@
                                return 1;
 
                        lcname = estrndup(Z_STRVAL_P(callable), Z_STRLEN_P(callable));
-                       zend_str_tolower(lcname, Z_STRLEN_P(callable));
+/*                     zend_str_tolower(lcname, Z_STRLEN_P(callable)); */
                        if (zend_hash_exists(EG(function_table), lcname, 
Z_STRLEN_P(callable)+1)) 
                                retval = 1;
                        efree(lcname);
@@ -1338,7 +1338,7 @@
                                                        return 1;
 
                                                lcname = estrndup(Z_STRVAL_PP(obj), 
Z_STRLEN_PP(obj));
-                                               zend_str_tolower(lcname, 
Z_STRLEN_PP(obj));
+/*                                             zend_str_tolower(lcname, 
+Z_STRLEN_PP(obj)); */
                                                zend_hash_find(EG(class_table), 
lcname, Z_STRLEN_PP(obj) + 1, (void**)&ce);
                                                efree(lcname);
                                        } else {
@@ -1362,7 +1362,7 @@
 
                                        if (ce) {
                                                lcname = estrndup(Z_STRVAL_PP(method), 
Z_STRLEN_PP(method));
-                                               zend_str_tolower(lcname, 
Z_STRLEN_PP(method));
+/*                                             zend_str_tolower(lcname, 
+Z_STRLEN_PP(method)); */
                                                if 
(zend_hash_exists(&ce->function_table, lcname, Z_STRLEN_PP(method)+1))
                                                        retval = 1;
                                                efree(lcname);
Index: Zend/zend_builtin_functions.c
===================================================================
RCS file: /repository/Zend/zend_builtin_functions.c,v
retrieving revision 1.112
diff -u -r1.112 zend_builtin_functions.c
--- Zend/zend_builtin_functions.c       2002/02/02 19:46:48     1.112
+++ Zend/zend_builtin_functions.c       2002/02/08 09:46:18
@@ -521,7 +521,7 @@
           ce = Z_OBJCE_PP(arg);
        else if (Z_TYPE_PP(arg) == IS_STRING) {
                SEPARATE_ZVAL(arg);
-               zend_str_tolower(Z_STRVAL_PP(arg), Z_STRLEN_PP(arg));
+/*             zend_str_tolower(Z_STRVAL_PP(arg), Z_STRLEN_PP(arg)); */
                zend_hash_find(EG(class_table), Z_STRVAL_PP(arg), Z_STRLEN_PP(arg)+1, 
(void **)&ce);
        }
 
@@ -549,7 +549,7 @@
 
        convert_to_string_ex(class_name);
        lcname = estrndup(Z_STRVAL_PP(class_name), Z_STRLEN_PP(class_name));
-       zend_str_tolower(lcname, Z_STRLEN_PP(class_name));
+/*     zend_str_tolower(lcname, Z_STRLEN_PP(class_name)); */
 
        if (only_subclass)
                ce = Z_OBJCE_PP(obj)->parent;
@@ -598,7 +598,7 @@
 
        convert_to_string_ex(class_name);
        lcname = estrndup((*class_name)->value.str.val, (*class_name)->value.str.len);
-       zend_str_tolower(lcname, (*class_name)->value.str.len);
+/*     zend_str_tolower(lcname, (*class_name)->value.str.len); */
 
        if (zend_hash_find(EG(class_table), lcname, (*class_name)->value.str.len+1, 
(void **)&ce)==FAILURE) {
                efree(lcname);
@@ -657,7 +657,7 @@
                ce = Z_OBJCE_PP(class);
        else if (Z_TYPE_PP(class) == IS_STRING) {
                SEPARATE_ZVAL(class);
-               zend_str_tolower(Z_STRVAL_PP(class), Z_STRLEN_PP(class));
+/*             zend_str_tolower(Z_STRVAL_PP(class), Z_STRLEN_PP(class)); */
                zend_hash_find(EG(class_table), Z_STRVAL_PP(class), 
Z_STRLEN_PP(class)+1, (void **)&ce);
        }
 
@@ -694,7 +694,7 @@
        }
        convert_to_string_ex(method_name);
        lcname = estrndup((*method_name)->value.str.val, 
(*method_name)->value.str.len);
-       zend_str_tolower(lcname, (*method_name)->value.str.len);
+/*     zend_str_tolower(lcname, (*method_name)->value.str.len); */
        if (zend_hash_exists(&Z_OBJCE_PP(klass)->function_table, lcname, 
(*method_name)->value.str.len+1)) {
                efree(lcname);
                RETURN_TRUE;
@@ -718,7 +718,7 @@
        }
        convert_to_string_ex(class_name);
        lcname = estrndup((*class_name)->value.str.val, (*class_name)->value.str.len);
-       zend_str_tolower(lcname, (*class_name)->value.str.len);
+/*     zend_str_tolower(lcname, (*class_name)->value.str.len); */
        if (zend_hash_exists(EG(class_table), lcname, (*class_name)->value.str.len+1)) 
{
                efree(lcname);
                RETURN_TRUE;
@@ -743,7 +743,7 @@
        }
        convert_to_string_ex(function_name);
        lcname = estrndup((*function_name)->value.str.val, 
(*function_name)->value.str.len);
-       zend_str_tolower(lcname, (*function_name)->value.str.len);
+/*     zend_str_tolower(lcname, (*function_name)->value.str.len); */
 
        retval = zend_hash_exists(EG(function_table), lcname, 
(*function_name)->value.str.len+1);
        efree(lcname);
Index: Zend/zend_compile.c
===================================================================
RCS file: /repository/Zend/zend_compile.c,v
retrieving revision 1.224
diff -u -r1.224 zend_compile.c
--- Zend/zend_compile.c 2002/01/06 15:21:09     1.224
+++ Zend/zend_compile.c 2002/02/08 09:46:19
@@ -723,7 +723,7 @@
        int function_begin_line = function_token->u.opline_num;
 
        function_token->u.op_array = CG(active_op_array);
-       zend_str_tolower(name, name_len);
+/*     zend_str_tolower(name, name_len); */
 
        init_op_array(&op_array, ZEND_USER_FUNCTION, INITIAL_OP_ARRAY_SIZE TSRMLS_CC);
 
@@ -820,7 +820,7 @@
 {
        zend_function *function;
        
-       zend_str_tolower(function_name->u.constant.value.str.val, 
function_name->u.constant.value.str.len);
+/*     zend_str_tolower(function_name->u.constant.value.str.val, 
+function_name->u.constant.value.str.len); */
        if (zend_hash_find(CG(function_table), 
function_name->u.constant.value.str.val, function_name->u.constant.value.str.len+1, 
(void **) &function)==FAILURE) {
                znode tmp = *function_name;
 
@@ -884,7 +884,7 @@
        zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
 
        opline->opcode = ZEND_INIT_FCALL_BY_NAME;
-       zend_str_tolower(class_name->u.constant.value.str.val, 
class_name->u.constant.value.str.len);
+/*     zend_str_tolower(class_name->u.constant.value.str.val, 
+class_name->u.constant.value.str.len); */
        if ((class_name->u.constant.value.str.len == sizeof("parent")-1)
                && !memcmp(class_name->u.constant.value.str.val, "parent", 
sizeof("parent")-1)) {
                if (!CG(active_ce_parent_class_name).value.str.val) {
@@ -1556,7 +1556,7 @@
        *CG(class_entry).refcount = 1;
        CG(class_entry).constants_updated = 0;
        
-       zend_str_tolower(CG(class_entry).name, CG(class_entry).name_length);
+/*     zend_str_tolower(CG(class_entry).name, CG(class_entry).name_length); */
 
        zend_hash_init(&CG(class_entry).function_table, 10, NULL, ZEND_FUNCTION_DTOR, 
0);
        zend_hash_init(&CG(class_entry).default_properties, 10, NULL, ZVAL_PTR_DTOR, 
0);
@@ -1571,7 +1571,7 @@
                zend_function tmp_zend_function;
                zval *tmp;
 
-               zend_str_tolower(parent_class_name->u.constant.value.str.val, 
parent_class_name->u.constant.value.str.len);
+/*             zend_str_tolower(parent_class_name->u.constant.value.str.val, 
+parent_class_name->u.constant.value.str.len); */
                CG(active_ce_parent_class_name).value.str.val = 
estrndup(parent_class_name->u.constant.value.str.val, 
parent_class_name->u.constant.value.str.len);
                CG(active_ce_parent_class_name).value.str.len = 
parent_class_name->u.constant.value.str.len;
 
Index: Zend/zend_constants.c
===================================================================
RCS file: /repository/Zend/zend_constants.c,v
retrieving revision 1.38
diff -u -r1.38 zend_constants.c
--- Zend/zend_constants.c       2002/01/06 15:21:09     1.38
+++ Zend/zend_constants.c       2002/02/08 09:46:19
@@ -226,6 +226,7 @@
        lookup_name = do_alloca(name_len+1);
        memcpy(lookup_name, name, name_len+1);
 
+       /* NOTE: Constant is not case sensitive for now */
        zend_str_tolower(lookup_name, name_len);
 
        if (zend_hash_find(EG(zend_constants), lookup_name, name_len+1, (void **) 
&c)==SUCCESS) {
@@ -255,6 +256,7 @@
        printf("Registering constant for module %d\n", c->module_number);
 #endif
 
+       /* NOTE: constant is not case sensitive for now */
        zend_str_tolower(lowercase_name, c->name_len);
        if (zend_hash_add(EG(zend_constants), lowercase_name, c->name_len, (void *) c, 
sizeof(zend_constant), NULL)==FAILURE) {
                free(c->name);
Index: Zend/zend_execute.c
===================================================================
RCS file: /repository/Zend/zend_execute.c,v
retrieving revision 1.293
diff -u -r1.293 zend_execute.c
--- Zend/zend_execute.c 2002/01/06 15:21:09     1.293
+++ Zend/zend_execute.c 2002/02/08 09:46:20
@@ -1503,7 +1503,7 @@
                                        zval_copy_ctor(&tmp);
                                        convert_to_string(&tmp);
                                        function_name = &tmp;
-                                       zend_str_tolower(tmp.value.str.val, 
tmp.value.str.len);
+/*                                     zend_str_tolower(tmp.value.str.val, 
+tmp.value.str.len); */
                                                
                                        if (EX(opline)->op1.op_type != IS_UNUSED) {
                                                if (EX(opline)->op1.op_type==IS_CONST) 
{ /* used for class_name::function() */
@@ -1939,7 +1939,7 @@
                                        class_name = *tmp;
                                        zval_copy_ctor(&class_name);
                                        convert_to_string(&class_name);
-                                       zend_str_tolower(class_name.value.str.val, 
class_name.value.str.len);
+/*                                     zend_str_tolower(class_name.value.str.val, 
+class_name.value.str.len); */
 
                                        if (zend_hash_find(EG(class_table), 
class_name.value.str.val, class_name.value.str.len+1, (void **) &ce)==FAILURE) {
                                                zend_error(E_ERROR, "Cannot 
instantiate non-existent class:  %s", class_name.value.str.val);
Index: Zend/zend_execute_API.c
===================================================================
RCS file: /repository/Zend/zend_execute_API.c,v
retrieving revision 1.140
diff -u -r1.140 zend_execute_API.c
--- Zend/zend_execute_API.c     2002/01/06 15:21:09     1.140
+++ Zend/zend_execute_API.c     2002/02/08 09:46:21
@@ -424,7 +424,7 @@
                        int found;
 
                        lc_class = estrndup(Z_STRVAL_PP(object_pp), 
Z_STRLEN_PP(object_pp));
-                       zend_str_tolower(lc_class, Z_STRLEN_PP(object_pp));
+/*                     zend_str_tolower(lc_class, Z_STRLEN_PP(object_pp)); */
                        found = zend_hash_find(EG(class_table), lc_class, 
Z_STRLEN_PP(object_pp) + 1, (void **) &ce);
                        efree(lc_class);
                        if (found == FAILURE)
@@ -442,7 +442,7 @@
 
        function_name_copy = *function_name;
        zval_copy_ctor(&function_name_copy);
-       zend_str_tolower(function_name_copy.value.str.val, 
function_name_copy.value.str.len);
+/*     zend_str_tolower(function_name_copy.value.str.val, 
+function_name_copy.value.str.len); */
 
        original_function_state_ptr = EG(function_state_ptr);
        if (zend_hash_find(function_table, function_name_copy.value.str.val, 
function_name_copy.value.str.len+1, (void **) &function_state.function)==FAILURE) {
Index: Zend/zend_language_scanner.l
===================================================================
RCS file: /repository/Zend/zend_language_scanner.l,v
retrieving revision 1.43
diff -u -r1.43 zend_language_scanner.l
--- Zend/zend_language_scanner.l        2002/01/06 15:21:09     1.43
+++ Zend/zend_language_scanner.l        2002/02/08 09:46:21
@@ -1256,9 +1256,11 @@
 }
 
 
-<ST_HEREDOC>^{LABEL}(";")?{NEWLINE} {
+<ST_HEREDOC>^{TABS_AND_SPACES}{LABEL}(";")?{NEWLINE} {
        int label_len;
        unsigned char unput_semicolon;
+       int tabs_and_spaces = 0;
+       void *tmp;
 
        CG(zend_lineno)++;
        if (yytext[yyleng-2]=='\r') {
@@ -1273,8 +1275,12 @@
        } else{
                unput_semicolon=0;
        }
+       
+       if (yytext[tabs_and_spaces] == ' ' || yytext[tabs_and_spaces] == '\t')
+          for (; yytext[tabs_and_spaces] == ' ' || yytext[tabs_and_spaces] == '\t'; 
+tabs_and_spaces++);
 
-       if (label_len==CG(heredoc_len) && !memcmp(yytext, CG(heredoc), label_len)) {
+       tmp =(char *)yytext+tabs_and_spaces;
+       if (label_len - tabs_and_spaces ==CG(heredoc_len) && !memcmp(tmp, CG(heredoc), 
+label_len - tabs_and_spaces)) {
                zendlval->value.str.val = estrndup(yytext, yyleng); /* unput destroys 
yytext */
                zendlval->value.str.len = yyleng;
                if (unput_semicolon) {

Attachment: tokenizer.tar.gz
Description: GNU Zip compressed data

-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to