Emit EXT_STMT for each statement
authorNikita Popov <nikic@php.net>
Wed, 22 Jul 2015 11:12:54 +0000 (13:12 +0200)
committerNikita Popov <nikic@php.net>
Wed, 22 Jul 2015 11:38:42 +0000 (13:38 +0200)
I'm excluding unticked statements for this (in 5.x they were included)
as this would just result in two consecutive EXT_STMTs.

Also add all class statements to unticked statements, these would
generate superfluous EXT_STMT/TICKS in the parent op_array.

Zend/zend_compile.c

index ce4365896cca1bd4227569cd3d2d0ae194594d31..64ad77d4a74b0ca4900f04c936eeb9f6686b1837 100644 (file)
@@ -2047,7 +2047,9 @@ static inline zend_bool zend_is_call(zend_ast *ast) /* {{{ */
 
 static inline zend_bool zend_is_unticked_stmt(zend_ast *ast) /* {{{ */
 {
-       return ast->kind == ZEND_AST_STMT_LIST || ast->kind == ZEND_AST_LABEL;
+       return ast->kind == ZEND_AST_STMT_LIST || ast->kind == ZEND_AST_LABEL
+               || ast->kind == ZEND_AST_PROP_DECL || ast->kind == ZEND_AST_CLASS_CONST_DECL
+               || ast->kind == ZEND_AST_USE_TRAIT || ast->kind == ZEND_AST_METHOD;
 }
 /* }}} */
 
@@ -6969,6 +6971,10 @@ void zend_compile_stmt(zend_ast *ast) /* {{{ */
 
        CG(zend_lineno) = ast->lineno;
 
+       if ((CG(compiler_options) & ZEND_COMPILE_EXTENDED_INFO) && !zend_is_unticked_stmt(ast)) {
+               zend_do_extended_info();
+       }
+
        switch (ast->kind) {
                case ZEND_AST_STMT_LIST:
                        zend_compile_stmt_list(ast);