felipe Thu, 15 Jul 2010 14:21:25 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=301287
Log:
- Minor compiler optimizations
Changed paths:
U php/php-src/branches/LEMON/Zend/zend_compile.c
U php/php-src/branches/LEMON/Zend/zend_language_parser.y
Modified: php/php-src/branches/LEMON/Zend/zend_compile.c
===================================================================
--- php/php-src/branches/LEMON/Zend/zend_compile.c 2010-07-15 14:12:53 UTC
(rev 301286)
+++ php/php-src/branches/LEMON/Zend/zend_compile.c 2010-07-15 14:21:25 UTC
(rev 301287)
@@ -661,12 +661,14 @@
zend_op opline;
zend_op *opline_ptr;
zend_llist *fetch_list_ptr;
+ zend_bool is_auto_global = 0;
if (varname->op_type == IS_CONST) {
if (Z_TYPE(varname->u.constant) != IS_STRING) {
convert_to_string(&varname->u.constant);
}
- if (!zend_is_auto_global(varname->u.constant.value.str.val,
varname->u.constant.value.str.len TSRMLS_CC) &&
+ is_auto_global =
zend_is_auto_global(varname->u.constant.value.str.val,
varname->u.constant.value.str.len TSRMLS_CC);
+ if (!is_auto_global &&
!(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 ||
@@ -696,7 +698,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 (is_auto_global) {
opline_ptr->extended_value = ZEND_FETCH_GLOBAL;
}
}
@@ -798,7 +800,7 @@
void fetch_array_begin(znode *result, znode *varname, znode *first_dim
TSRMLS_DC) /* {{{ */
{
- fetch_simple_variable(result, varname, 1 TSRMLS_CC);
+ fetch_simple_variable_ex(result, varname, 1, ZEND_FETCH_W TSRMLS_CC);
fetch_array_dim(result, result, first_dim TSRMLS_CC);
}
@@ -5418,7 +5420,7 @@
if (varname->op_type == IS_CONST) {
zval_copy_ctor(&varname->u.constant);
}
- fetch_simple_variable(&lval, varname, 0 TSRMLS_CC); /* Relies on the
fact that the default fetch is BP_VAR_W */
+ fetch_simple_variable_ex(&lval, varname, 0, ZEND_FETCH_W TSRMLS_CC); /*
Relies on the fact that the default fetch is BP_VAR_W */
if (fetch_type == ZEND_FETCH_LEXICAL) {
znode dummy;
@@ -5480,7 +5482,7 @@
if (varname->op_type == IS_CONST) {
zval_copy_ctor(&varname->u.constant);
}
- fetch_simple_variable(&lval, varname, 0 TSRMLS_CC); /* Relies on the
fact that the default fetch is BP_VAR_W */
+ fetch_simple_variable_ex(&lval, varname, 0, ZEND_FETCH_W TSRMLS_CC); /*
Relies on the fact that the default fetch is BP_VAR_W */
zend_do_assign_ref(NULL, &lval, &result TSRMLS_CC);
CG(active_op_array)->opcodes[CG(active_op_array)->last-1].result_type
|= EXT_TYPE_UNUSED;
@@ -5529,7 +5531,7 @@
*variable = *result;
}
zend_do_begin_variable_parse(TSRMLS_C);
- fetch_simple_variable(result, variable, 1 TSRMLS_CC);
+ fetch_simple_variable_ex(result, variable, 1, ZEND_FETCH_W TSRMLS_CC);
}
/* }}} */
Modified: php/php-src/branches/LEMON/Zend/zend_language_parser.y
===================================================================
--- php/php-src/branches/LEMON/Zend/zend_language_parser.y 2010-07-15
14:12:53 UTC (rev 301286)
+++ php/php-src/branches/LEMON/Zend/zend_language_parser.y 2010-07-15
14:21:25 UTC (rev 301287)
@@ -32,6 +32,11 @@
#define YYNOERRORRECOVERY
#define NDEBUG
+
+#define ZEND_DO_TICKS() \
+ if (Z_LVAL(CG(declarables).ticks)) { \
+ void zend_do_ticks(TSRMLS_D); \
+ }
}
%name zend_lang_parse
@@ -141,7 +146,7 @@
namespace_start2 ::= NAMESPACE namespace_name(B). {
zend_do_begin_namespace(&B, 1 TSRMLS_CC); }
-top_statement ::= SEMICOLON. {
zend_do_ticks(TSRMLS_C); }
+top_statement ::= SEMICOLON. {
ZEND_DO_TICKS(); }
top_statement ::= statement. {
zend_verify_namespace(TSRMLS_C); }
top_statement ::= function_declaration_statement. {
zend_verify_namespace(TSRMLS_C); zend_do_early_binding(TSRMLS_C); }
top_statement ::= class_declaration_statement. {
zend_verify_namespace(TSRMLS_C); zend_do_early_binding(TSRMLS_C); }
@@ -176,7 +181,7 @@
inner_statement ::= class_declaration_statement.
inner_statement ::= HALT_COMPILER LPAREN RPAREN SEMICOLON. {
zend_error(E_COMPILE_ERROR, "__HALT_COMPILER() can only be used from the
outermost scope"); }
-statement ::= unticked_statement. { zend_do_ticks(TSRMLS_C); }
+statement ::= unticked_statement. { ZEND_DO_TICKS(); }
statement ::= STRING(B) COLON. { zend_do_label(&B TSRMLS_CC); }
@@ -331,9 +336,9 @@
unset_variable(A) ::= variable(B). { zend_do_end_variable_parse(&B,
BP_VAR_UNSET, 0 TSRMLS_CC); zend_do_unset(&B TSRMLS_CC); A = B; }
-function_declaration_statement ::= unticked_function_declaration_statement. {
zend_do_ticks(TSRMLS_C); }
+function_declaration_statement ::= unticked_function_declaration_statement. {
ZEND_DO_TICKS(); }
-class_declaration_statement ::= unticked_class_declaration_statement. {
zend_do_ticks(TSRMLS_C); }
+class_declaration_statement ::= unticked_class_declaration_statement. {
ZEND_DO_TICKS(); }
is_reference(A) ::= . { A.op_type = ZEND_RETURN_VAL; }
is_reference(A) ::= BW_AND. { A.op_type = ZEND_RETURN_REF; }
@@ -891,7 +896,7 @@
reference_variable(A) ::= reference_variable(B) LBRACKET dim_offset(C)
RBRACKET. { fetch_array_dim(&A, &B, &C TSRMLS_CC); }
reference_variable(A) ::= reference_variable(B) LBRACE expr(C) RBRACE.
{ fetch_string_offset(&A, &B, &C TSRMLS_CC); }
-reference_variable(A) ::= compound_variable(B).
{ zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&A, &B, 1
TSRMLS_CC); }
+reference_variable(A) ::= compound_variable(B).
{ zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable_ex(&A, &B, 1,
ZEND_FETCH_W TSRMLS_CC); }
compound_variable(A) ::= VARIABLE(B). { A = B; }
compound_variable(A) ::= DOLLAR LBRACE expr(B) RBRACE. { A = B; }
@@ -947,16 +952,16 @@
encaps_var_i(A) ::= VARIABLE(B) LBRACKET. {
zend_do_begin_variable_parse(TSRMLS_C); A = B; }
-encaps_var(A) ::= VARIABLE(B). {
zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&A, &B, 1
TSRMLS_CC); }
+encaps_var(A) ::= VARIABLE(B). {
zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable_ex(&A, &B, 1,
ZEND_FETCH_W TSRMLS_CC); }
encaps_var(A) ::= encaps_var_i(B) encaps_var_offset(C) RBRACKET. {
fetch_array_begin(&A, &B, &C TSRMLS_CC); }
-encaps_var(A) ::= VARIABLE(B) OBJECT_OPERATOR(C) STRING(D). {
zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&C, &B, 1
TSRMLS_CC); zend_do_fetch_property(&A, &C, &D TSRMLS_CC); }
-encaps_var(A) ::= DOLLAR_OPEN_CURLY_BRACES expr(B) RBRACE. {
zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&A, &B, 1
TSRMLS_CC); }
+encaps_var(A) ::= VARIABLE(B) OBJECT_OPERATOR(C) STRING(D). {
zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable_ex(&C, &B, 1,
ZEND_FETCH_W TSRMLS_CC); zend_do_fetch_property(&A, &C, &D TSRMLS_CC); }
+encaps_var(A) ::= DOLLAR_OPEN_CURLY_BRACES expr(B) RBRACE. {
zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable_ex(&A, &B, 1,
ZEND_FETCH_W TSRMLS_CC); }
encaps_var(A) ::= DOLLAR_OPEN_CURLY_BRACES STRING_VARNAME(B) LBRACKET expr(C)
RBRACKET RBRACE. { zend_do_begin_variable_parse(TSRMLS_C);
fetch_array_begin(&A, &B, &C TSRMLS_CC); }
encaps_var(A) ::= CURLY_OPEN variable(B) RBRACE. { A = B; }
encaps_var_offset(A) ::= STRING(B). { A = B; }
encaps_var_offset(A) ::= NUM_STRING(B). { A = B; }
-encaps_var_offset(A) ::= VARIABLE(B). { fetch_simple_variable(&A, &B, 1
TSRMLS_CC); }
+encaps_var_offset(A) ::= VARIABLE(B). { fetch_simple_variable_ex(&A, &B, 1,
ZEND_FETCH_W TSRMLS_CC); }
internal_functions_in_yacc(A) ::= ISSET LPAREN isset_variables(B) RPAREN. { A
= B; }
internal_functions_in_yacc(A) ::= EMPTY LPAREN variable(B) RPAREN. {
zend_do_isset_or_isempty(ZEND_ISEMPTY, &A, &B TSRMLS_CC); }
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php