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

Reply via email to