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