Commit:    625000ab442dd4c1bfc6975a4a979f2c5f60a78d
Author:    Dmitry Stogov <dmi...@zend.com>         Wed, 9 Jan 2013 17:36:44 
+0400
Parents:   f9e8678dd3a41ed8a100d8201153a41d6fd25f2e 
d4650c5d69ffb49d476a2969c6200879bd424caf
Branches:  PHP-5.4 PHP-5.5 master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=625000ab442dd4c1bfc6975a4a979f2c5f60a78d

Log:
Merge branch 'PHP-5.3' into PHP-5.4

* PHP-5.3:
  Fixed compilator bug that might cause jump depended on unitialized value

Changed paths:
  MM  Zend/zend_compile.c
  MM  Zend/zend_language_parser.y


Diff:
diff --cc Zend/zend_compile.c
index 9acdc5b,8382b48..8f4f9c4
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@@ -4912,28 -3527,12 +4913,28 @@@ void zend_do_end_class_declaration(cons
                }
        }
  
 -      ce->line_end = zend_get_compiled_lineno(TSRMLS_C);
 +      ce->info.user.line_end = zend_get_compiled_lineno(TSRMLS_C);
 +      
 +      /* Check for traits and proceed like with interfaces.
 +       * The only difference will be a combined handling of them in the end.
 +       * Thus, we need another opcode here. */
 +      if (ce->num_traits > 0) {
 +              zend_op *opline;
 +
 +              ce->traits = NULL;
 +              ce->num_traits = 0;
 +              ce->ce_flags |= ZEND_ACC_IMPLEMENT_TRAITS;
 +
 +              /* opcode generation: */
 +              opline = get_next_op(CG(active_op_array) TSRMLS_CC);
 +              opline->opcode = ZEND_BIND_TRAITS;
 +              SET_NODE(opline->op1, &CG(implementing_class));
 +      }
  
        if (!(ce->ce_flags & 
(ZEND_ACC_INTERFACE|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS))
-               && ((parent_token->op_type != IS_UNUSED) || (ce->num_interfaces 
> 0))) {
+               && (parent_token || (ce->num_interfaces > 0))) {
                zend_verify_abstract_class(ce TSRMLS_CC);
 -              if (ce->num_interfaces) {
 +              if (ce->num_interfaces && !(ce->ce_flags & 
ZEND_ACC_IMPLEMENT_TRAITS)) {
                        do_verify_abstract_class(TSRMLS_C);
                }
        }


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to