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) {
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