[PHP-CVS] svn: /php/php-src/ branches/PHP_5_4/Zend/zend_compile.c branches/PHP_5_4/Zend/zend_compile.h trunk/Zend/zend_compile.c trunk/Zend/zend_compile.h

2011-07-10 Thread Felipe Pena
felipe   Sun, 10 Jul 2011 15:03:38 +

Revision: http://svn.php.net/viewvc?view=revision&revision=313114

Log:
- Added zend_is_auto_global_quick function

Changed paths:
U   php/php-src/branches/PHP_5_4/Zend/zend_compile.c
U   php/php-src/branches/PHP_5_4/Zend/zend_compile.h
U   php/php-src/trunk/Zend/zend_compile.c
U   php/php-src/trunk/Zend/zend_compile.h

Modified: php/php-src/branches/PHP_5_4/Zend/zend_compile.c
===
--- php/php-src/branches/PHP_5_4/Zend/zend_compile.c2011-07-10 15:00:49 UTC 
(rev 313113)
+++ php/php-src/branches/PHP_5_4/Zend/zend_compile.c2011-07-10 15:03:38 UTC 
(rev 313114)
@@ -640,7 +640,7 @@
} else if (IS_INTERNED(Z_STRVAL(varname->u.constant))) {
hash = INTERNED_HASH(Z_STRVAL(varname->u.constant));
}
-   if (!zend_is_auto_global(varname->u.constant.value.str.val, 
varname->u.constant.value.str.len TSRMLS_CC) &&
+   if 
(!zend_is_auto_global_quick(varname->u.constant.value.str.val, 
varname->u.constant.value.str.len, hash TSRMLS_CC) &&
!(varname->u.constant.value.str.len == (sizeof("this")-1) &&
  !memcmp(varname->u.constant.value.str.val, "this", 
sizeof("this"))) &&
(CG(active_op_array)->last == 0 ||
@@ -670,7 +670,7 @@

if (varname->op_type == IS_CONST) {
CALCULATE_LITERAL_HASH(opline_ptr->op1.constant);
-   if (zend_is_auto_global(varname->u.constant.value.str.val, 
varname->u.constant.value.str.len TSRMLS_CC)) {
+   if 
(zend_is_auto_global_quick(varname->u.constant.value.str.val, 
varname->u.constant.value.str.len, 
Z_HASH_P(&CONSTANT(opline_ptr->op1.constant)) TSRMLS_CC)) {
opline_ptr->extended_value = ZEND_FETCH_GLOBAL;
}
}
@@ -1816,7 +1816,7 @@
return;
}

-   if (zend_is_auto_global(Z_STRVAL(varname->u.constant), 
Z_STRLEN(varname->u.constant) TSRMLS_CC)) {
+   if (zend_is_auto_global_quick(Z_STRVAL(varname->u.constant), 
Z_STRLEN(varname->u.constant), 0 TSRMLS_CC)) {
zend_error(E_COMPILE_ERROR, "Cannot re-assign auto-global 
variable %s", Z_STRVAL(varname->u.constant));
} else {
var.op_type = IS_CV;
@@ -6182,11 +6182,12 @@
 }
 /* }}} */

-zend_bool zend_is_auto_global(const char *name, uint name_len TSRMLS_DC) /* 
{{{ */
+zend_bool zend_is_auto_global_quick(const char *name, uint name_len, ulong 
hashval TSRMLS_DC) /* {{{ */
 {
zend_auto_global *auto_global;
+   ulong hash = hashval ? hashval : zend_hash_func(name, name_len+1);

-   if (zend_hash_find(CG(auto_globals), name, name_len+1, (void **) 
&auto_global)==SUCCESS) {
+   if (zend_hash_quick_find(CG(auto_globals), name, name_len+1, hash, 
(void **) &auto_global)==SUCCESS) {
if (auto_global->armed) {
auto_global->armed = 
auto_global->auto_global_callback(auto_global->name, auto_global->name_len 
TSRMLS_CC);
}
@@ -6196,6 +6197,12 @@
 }
 /* }}} */

+zend_bool zend_is_auto_global(const char *name, uint name_len TSRMLS_DC) /* 
{{{ */
+{
+   return zend_is_auto_global_quick(name, name_len, 0 TSRMLS_CC);
+}
+/* }}} */
+
 int zend_register_auto_global(const char *name, uint name_len, zend_bool jit, 
zend_auto_global_callback auto_global_callback TSRMLS_DC) /* {{{ */
 {
zend_auto_global auto_global;

Modified: php/php-src/branches/PHP_5_4/Zend/zend_compile.h
===
--- php/php-src/branches/PHP_5_4/Zend/zend_compile.h2011-07-10 15:00:49 UTC 
(rev 313113)
+++ php/php-src/branches/PHP_5_4/Zend/zend_compile.h2011-07-10 15:03:38 UTC 
(rev 313114)
@@ -682,6 +682,7 @@
 ZEND_API int zend_register_auto_global(const char *name, uint name_len, 
zend_bool jit, zend_auto_global_callback auto_global_callback TSRMLS_DC);
 ZEND_API void zend_activate_auto_globals(TSRMLS_D);
 ZEND_API zend_bool zend_is_auto_global(const char *name, uint name_len 
TSRMLS_DC);
+ZEND_API zend_bool zend_is_auto_global_quick(const char *name, uint name_len, 
ulong hashval TSRMLS_DC);
 ZEND_API size_t zend_dirname(char *path, size_t len);

 int zendlex(znode *zendlval TSRMLS_DC);

Modified: php/php-src/trunk/Zend/zend_compile.c
===
--- php/php-src/trunk/Zend/zend_compile.c   2011-07-10 15:00:49 UTC (rev 
313113)
+++ php/php-src/trunk/Zend/zend_compile.c   2011-07-10 15:03:38 UTC (rev 
313114)
@@ -640,7 +640,7 @@
} else if (IS_INTERNED(Z_STRVAL(varname->u.constant))) {
hash = INTERNED_HASH(Z_STRVAL(varname->u.constant));
}
-   if (!zend_is_auto_global(varname->u.constant.value.str.val, 
varname->u.constant.value.str.len TSRMLS_CC) &&
+   i

[PHP-CVS] svn: /php/php-src/ branches/PHP_5_4/Zend/zend_compile.c branches/PHP_5_4/Zend/zend_compile.h trunk/Zend/zend_compile.c trunk/Zend/zend_compile.h

2011-06-19 Thread Felipe Pena
felipe   Sun, 19 Jun 2011 21:56:09 +

Revision: http://svn.php.net/viewvc?view=revision&revision=312306

Log:
- Minor optimization (avoid to re-hash already computed var name hash)

Changed paths:
U   php/php-src/branches/PHP_5_4/Zend/zend_compile.c
U   php/php-src/branches/PHP_5_4/Zend/zend_compile.h
U   php/php-src/trunk/Zend/zend_compile.c
U   php/php-src/trunk/Zend/zend_compile.h

Modified: php/php-src/branches/PHP_5_4/Zend/zend_compile.c
===
--- php/php-src/branches/PHP_5_4/Zend/zend_compile.c	2011-06-19 21:47:58 UTC (rev 312305)
+++ php/php-src/branches/PHP_5_4/Zend/zend_compile.c	2011-06-19 21:56:09 UTC (rev 312306)
@@ -291,10 +291,10 @@
 }
 /* }}} */

-static int lookup_cv(zend_op_array *op_array, char* name, int name_len TSRMLS_DC) /* {{{ */
+static int lookup_cv(zend_op_array *op_array, char* name, int name_len, ulong hash TSRMLS_DC) /* {{{ */
 {
 	int i = 0;
-	ulong hash_value = zend_inline_hash_func(name, name_len+1);
+	ulong hash_value = hash ? hash : zend_inline_hash_func(name, name_len+1);

 	while (i < op_array->last_var) {
 		if (op_array->vars[i].name == name ||
@@ -642,7 +642,7 @@
 		(CG(active_op_array)->last == 0 ||
 		 CG(active_op_array)->opcodes[CG(active_op_array)->last-1].opcode != ZEND_BEGIN_SILENCE)) {
 			result->op_type = IS_CV;
-			result->u.op.var = lookup_cv(CG(active_op_array), varname->u.constant.value.str.val, varname->u.constant.value.str.len TSRMLS_CC);
+			result->u.op.var = lookup_cv(CG(active_op_array), varname->u.constant.value.str.val, varname->u.constant.value.str.len, 0 TSRMLS_CC);
 			varname->u.constant.value.str.val = CG(active_op_array)->vars[result->u.op.var].name;
 			result->EA = 0;
 			return;
@@ -882,6 +882,7 @@
 {
 	if ((opline->opcode == ZEND_FETCH_W) && (opline->op1_type == IS_CONST)
 		&& (Z_TYPE(CONSTANT(opline->op1.constant)) == IS_STRING)
+		&& (Z_HASH_P(&CONSTANT(opline->op1.constant)) == THIS_HASHVAL)
 		&& (Z_STRLEN(CONSTANT(opline->op1.constant)) == (sizeof("this")-1))
 		&& !memcmp(Z_STRVAL(CONSTANT(opline->op1.constant)), "this", sizeof("this"))) {
 		return 1;
@@ -1290,7 +1291,7 @@

 this_var = opline_ptr->result.var;
 if (CG(active_op_array)->this_var == -1) {
-	CG(active_op_array)->this_var = lookup_cv(CG(active_op_array), Z_STRVAL(CONSTANT(opline_ptr->op1.constant)), Z_STRLEN(CONSTANT(opline_ptr->op1.constant)) TSRMLS_CC);
+	CG(active_op_array)->this_var = lookup_cv(CG(active_op_array), Z_STRVAL(CONSTANT(opline_ptr->op1.constant)), Z_STRLEN(CONSTANT(opline_ptr->op1.constant)), Z_HASH_P(&CONSTANT(opline_ptr->op1.constant)) TSRMLS_CC);
 	Z_TYPE(CONSTANT(opline_ptr->op1.constant)) = IS_NULL;
 } else {
 	zend_del_literal(CG(active_op_array), opline_ptr->op1.constant);
@@ -1302,7 +1303,7 @@
 	variable->u.op.var = CG(active_op_array)->this_var;
 }
 			} else if (CG(active_op_array)->this_var == -1) {
-CG(active_op_array)->this_var = lookup_cv(CG(active_op_array), estrndup("this", sizeof("this")-1), sizeof("this")-1 TSRMLS_CC);
+CG(active_op_array)->this_var = lookup_cv(CG(active_op_array), estrndup("this", sizeof("this")-1), sizeof("this")-1, THIS_HASHVAL TSRMLS_CC);
 			}
 		}

@@ -1810,10 +1811,11 @@
 		zend_error(E_COMPILE_ERROR, "Cannot re-assign auto-global variable %s", Z_STRVAL(varname->u.constant));
 	} else {
 		var.op_type = IS_CV;
-		var.u.op.var = lookup_cv(CG(active_op_array), varname->u.constant.value.str.val, varname->u.constant.value.str.len TSRMLS_CC);
+		var.u.op.var = lookup_cv(CG(active_op_array), varname->u.constant.value.str.val, varname->u.constant.value.str.len, 0 TSRMLS_CC);
 		varname->u.constant.value.str.val = CG(active_op_array)->vars[var.u.op.var].name;
 		var.EA = 0;
-		if (Z_STRLEN(varname->u.constant) == sizeof("this")-1 &&
+		if (CG(active_op_array)->vars[var.u.op.var].hash_value == THIS_HASHVAL &&
+			Z_STRLEN(varname->u.constant) == sizeof("this")-1 &&
 		!memcmp(Z_STRVAL(varname->u.constant), "this", sizeof("this")-1)) {
 			if (CG(active_op_array)->scope &&
 			(CG(active_op_array)->fn_flags & ZEND_ACC_STATIC) == 0) {
@@ -2699,7 +2701,7 @@
 	opline->op1_type = IS_CONST;
 	opline->op1.constant = zend_add_class_name_literal(CG(active_op_array), &catch_class.u.constant TSRMLS_CC);
 	opline->op2_type = IS_CV;
-	opline->op2.var = lookup_cv(CG(active_op_array), catch_var->u.constant.value.str.val, catch_var->u.constant.value.str.len TSRMLS_CC);
+	opline->op2.var = lookup_cv(CG(active_op_array), catch_var->u.constant.value.str.val, catch_var->u.constant.value.str.len, 0 TSRMLS_CC);
 	catch_var->u.constant.value.str.val = CG(active_op_array)->vars[opline->op2.var].name;
 	opline->result.num = 0; /* 1 means it's the last catch in the block */

@@ -5642,7 +5644,7 @@
 	fetch_simple_variable(result, variable, 1 TSRMLS_CC);
 	/* there is a chance someone is accessing $this */
 	if (CG(active_op_array)->scope && CG(active_op_array)->this_var == -